summaryrefslogtreecommitdiff
path: root/sys/i4b
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i4b')
-rw-r--r--sys/i4b/driver/i4b_ctl.c303
-rw-r--r--sys/i4b/driver/i4b_ipr.c1115
-rw-r--r--sys/i4b/driver/i4b_isppp.c710
-rw-r--r--sys/i4b/driver/i4b_rbch.c820
-rw-r--r--sys/i4b/driver/i4b_tel.c713
-rw-r--r--sys/i4b/driver/i4b_trace.c508
-rw-r--r--sys/i4b/include/i4b_global.h95
-rw-r--r--sys/i4b/include/i4b_isdnq931.h166
-rw-r--r--sys/i4b/include/i4b_l1l2.h99
-rw-r--r--sys/i4b/include/i4b_l2l3.h116
-rw-r--r--sys/i4b/include/i4b_l3l4.h260
-rw-r--r--sys/i4b/include/i4b_mbuf.h51
-rw-r--r--sys/i4b/layer1/i4b_avm_a1.c508
-rw-r--r--sys/i4b/layer1/i4b_avm_fritz_pcmcia.c504
-rw-r--r--sys/i4b/layer1/i4b_bchan.c484
-rw-r--r--sys/i4b/layer1/i4b_ctx_s0P.c366
-rw-r--r--sys/i4b/layer1/i4b_drn_ngo.c542
-rw-r--r--sys/i4b/layer1/i4b_dynalink.c438
-rw-r--r--sys/i4b/layer1/i4b_elsa_isdnmc.c305
-rw-r--r--sys/i4b/layer1/i4b_elsa_mcall.c251
-rw-r--r--sys/i4b/layer1/i4b_elsa_qs1i.c512
-rw-r--r--sys/i4b/layer1/i4b_elsa_qs1p.c458
-rw-r--r--sys/i4b/layer1/i4b_hscx.c672
-rw-r--r--sys/i4b/layer1/i4b_hscx.h301
-rw-r--r--sys/i4b/layer1/i4b_ipac.h199
-rw-r--r--sys/i4b/layer1/i4b_isac.c679
-rw-r--r--sys/i4b/layer1/i4b_isac.h391
-rw-r--r--sys/i4b/layer1/i4b_isic.c345
-rw-r--r--sys/i4b/layer1/i4b_isic_isa.c591
-rw-r--r--sys/i4b/layer1/i4b_isic_pci.c424
-rw-r--r--sys/i4b/layer1/i4b_isic_pcmcia.c158
-rw-r--r--sys/i4b/layer1/i4b_isic_pnp.c296
-rw-r--r--sys/i4b/layer1/i4b_itk_ix1.c431
-rw-r--r--sys/i4b/layer1/i4b_l1.c315
-rw-r--r--sys/i4b/layer1/i4b_l1.h438
-rw-r--r--sys/i4b/layer1/i4b_l1fsm.c546
-rw-r--r--sys/i4b/layer1/i4b_sws.c392
-rw-r--r--sys/i4b/layer1/i4b_tel_s016.c455
-rw-r--r--sys/i4b/layer1/i4b_tel_s0163.c432
-rw-r--r--sys/i4b/layer1/i4b_tel_s08.c389
-rw-r--r--sys/i4b/layer1/i4b_tel_s0P.c378
-rw-r--r--sys/i4b/layer1/i4b_usr_sti.c440
-rw-r--r--sys/i4b/layer1/isa_isic.c828
-rw-r--r--sys/i4b/layer1/isapnp_isic.c386
-rw-r--r--sys/i4b/layer1/isic_supio.c374
-rw-r--r--sys/i4b/layer1/pci_isic.c327
-rw-r--r--sys/i4b/layer1/pcmcia_isic.c358
-rw-r--r--sys/i4b/layer1/pcmcia_isic.h60
-rw-r--r--sys/i4b/layer2/i4b_iframe.c275
-rw-r--r--sys/i4b/layer2/i4b_l2.c390
-rw-r--r--sys/i4b/layer2/i4b_l2.h339
-rw-r--r--sys/i4b/layer2/i4b_l2fsm.c1593
-rw-r--r--sys/i4b/layer2/i4b_l2fsm.h82
-rw-r--r--sys/i4b/layer2/i4b_l2timer.c263
-rw-r--r--sys/i4b/layer2/i4b_lme.c160
-rw-r--r--sys/i4b/layer2/i4b_mbuf.c245
-rw-r--r--sys/i4b/layer2/i4b_sframe.c215
-rw-r--r--sys/i4b/layer2/i4b_tei.c322
-rw-r--r--sys/i4b/layer2/i4b_uframe.c308
-rw-r--r--sys/i4b/layer2/i4b_util.c312
-rw-r--r--sys/i4b/layer3/i4b_l2if.c642
-rw-r--r--sys/i4b/layer3/i4b_l3.h80
-rw-r--r--sys/i4b/layer3/i4b_l3fsm.c1034
-rw-r--r--sys/i4b/layer3/i4b_l3fsm.h105
-rw-r--r--sys/i4b/layer3/i4b_l3timer.c347
-rw-r--r--sys/i4b/layer3/i4b_l4if.c339
-rw-r--r--sys/i4b/layer3/i4b_q931.c624
-rw-r--r--sys/i4b/layer3/i4b_q931.h116
-rw-r--r--sys/i4b/layer3/i4b_q932fac.c569
-rw-r--r--sys/i4b/layer3/i4b_q932fac.h167
-rw-r--r--sys/i4b/layer4/i4b_i4bdrv.c832
-rw-r--r--sys/i4b/layer4/i4b_l4.c897
-rw-r--r--sys/i4b/layer4/i4b_l4.h69
-rw-r--r--sys/i4b/layer4/i4b_l4mgmt.c467
-rw-r--r--sys/i4b/layer4/i4b_l4timer.c110
-rw-r--r--sys/i4b/tina-dd/README20
-rw-r--r--sys/i4b/tina-dd/i4b_tina_dd.c328
-rw-r--r--sys/i4b/tina-dd/i4b_tina_ioctl.h138
78 files changed, 0 insertions, 31317 deletions
diff --git a/sys/i4b/driver/i4b_ctl.c b/sys/i4b/driver/i4b_ctl.c
deleted file mode 100644
index 04c63c1f6e6a6..0000000000000
--- a/sys/i4b/driver/i4b_ctl.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_ctl.c - i4b system control port driver
- * ------------------------------------------
- *
- * $Id: i4b_ctl.c,v 1.1 1998/12/27 21:46:42 phk Exp $
- *
- * last edit-date: [Sat Dec 5 17:59:15 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4bctl.h"
-
-#if NI4BCTL > 1
-#error "only 1 (one) i4bctl device allowed!"
-#endif
-
-#if NI4BCTL > 0
-
-#include <sys/param.h>
-
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <sys/ioctl.h>
-#endif
-
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/mbuf.h>
-#include <sys/proc.h>
-#include <sys/fcntl.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include "opt_devfs.h"
-#endif
-
-#ifdef DEVFS
-#include <sys/devfsext.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/layer1/i4b_l1.h>
-
-static int openflag = 0;
-
-#if BSD > 199306 && defined(__FreeBSD__)
-static d_open_t i4bctlopen;
-static d_close_t i4bctlclose;
-static d_ioctl_t i4bctlioctl;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-static d_poll_t i4bctlpoll;
-#endif
-
-#define CDEV_MAJOR 55
-static struct cdevsw i4bctl_cdevsw =
- { i4bctlopen, i4bctlclose, noread, nowrite,
- i4bctlioctl, nostop, nullreset, nodevtotty,
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- i4bctlpoll, nommap, NULL, "i4bctl", NULL, -1 };
-#else
- noselect, nommap, NULL, "i4bctl", NULL, -1 };
-#endif
-
-static void i4bctlattach(void *);
-PSEUDO_SET(i4bctlattach, i4b_i4bctldrv);
-
-#define PDEVSTATIC static
-#endif /* __FreeBSD__ */
-
-#ifdef DEVFS
-static void *devfs_token;
-#endif
-
-#ifndef __FreeBSD__
-#define PDEVSTATIC /* */
-void i4bctlattach __P((void));
-int i4bctlopen __P((dev_t dev, int flag, int fmt, struct proc *p));
-int i4bctlclose __P((dev_t dev, int flag, int fmt, struct proc *p));
-int i4bctlioctl __P((dev_t dev, int cmd, caddr_t data, int flag, struct proc *p));
-#endif /* !FreeBSD */
-
-#if BSD > 199306 && defined(__FreeBSD__)
-/*---------------------------------------------------------------------------*
- * initialization at kernel load time
- *---------------------------------------------------------------------------*/
-static void
-i4bctlinit(void *unused)
-{
- dev_t dev;
-
- dev = makedev(CDEV_MAJOR, 0);
-
- cdevsw_add(&dev, &i4bctl_cdevsw, NULL);
-}
-
-SYSINIT(i4bctldev, SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR, &i4bctlinit, NULL);
-
-#endif /* BSD > 199306 && defined(__FreeBSD__) */
-
-/*---------------------------------------------------------------------------*
- * interface attach routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-#ifdef __FreeBSD__
-i4bctlattach(void *dummy)
-#else
-i4bctlattach()
-#endif
-{
-#ifndef HACK_NO_PSEUDO_ATTACH_MSG
- printf("i4bctl: ISDN system control port attached\n");
-#endif
-#ifdef DEVFS
- devfs_token = devfs_add_devswf(&i4bctl_cdevsw, 0, DV_CHR,
- UID_ROOT, GID_WHEEL, 0600,
- "i4bctl");
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * i4bctlopen - device driver open routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4bctlopen(dev_t dev, int flag, int fmt, struct proc *p)
-{
- if(minor(dev))
- return (ENXIO);
-
- if(openflag)
- return (EBUSY);
-
- openflag = 1;
-
- return (0);
-}
-
-/*---------------------------------------------------------------------------*
- * i4bctlclose - device driver close routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4bctlclose(dev_t dev, int flag, int fmt, struct proc *p)
-{
- openflag = 0;
- return (0);
-}
-
-/*---------------------------------------------------------------------------*
- * i4bctlioctl - device driver ioctl routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-#if defined (__FreeBSD_version) && __FreeBSD_version >= 300003
-i4bctlioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
-#else
-i4bctlioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
-#endif
-{
- ctl_debug_t *cdbg;
- int error = 0;
-
-#ifndef DO_I4B_DEBUG
- return(ENODEV);
-#else
- if(minor(dev))
- return(ENODEV);
-
- switch(cmd)
- {
- case I4B_CTL_GET_DEBUG:
- cdbg = (ctl_debug_t *)data;
- cdbg->l1 = i4b_l1_debug;
- cdbg->l2 = i4b_l2_debug;
- cdbg->l3 = i4b_l3_debug;
- cdbg->l4 = i4b_l4_debug;
- break;
-
- case I4B_CTL_SET_DEBUG:
- cdbg = (ctl_debug_t *)data;
- i4b_l1_debug = cdbg->l1;
- i4b_l2_debug = cdbg->l2;
- i4b_l3_debug = cdbg->l3;
- i4b_l4_debug = cdbg->l4;
- break;
-
- case I4B_CTL_GET_HSCXSTAT:
- {
- hscxstat_t *hst;
- struct isic_softc *sc;
- hst = (hscxstat_t *)data;
-
- if( hst->unit < 0 ||
- hst->unit > ISIC_MAXUNIT ||
- hst->chan < 0 ||
- hst->chan > 1 )
- {
- error = EINVAL;
- break;
- }
-
-#ifndef __FreeBSD__
- sc = isic_find_sc(hst->unit);
-#else
- sc = &isic_sc[hst->unit];
-#endif
- hst->vfr = sc->sc_chan[hst->chan].stat_VFR;
- hst->rdo = sc->sc_chan[hst->chan].stat_RDO;
- hst->crc = sc->sc_chan[hst->chan].stat_CRC;
- hst->rab = sc->sc_chan[hst->chan].stat_RAB;
- hst->xdu = sc->sc_chan[hst->chan].stat_XDU;
- hst->rfo = sc->sc_chan[hst->chan].stat_RFO;
- break;
- }
-
- case I4B_CTL_CLR_HSCXSTAT:
- {
- hscxstat_t *hst;
- struct isic_softc *sc;
- hst = (hscxstat_t *)data;
-
- if( hst->unit < 0 ||
- hst->unit > ISIC_MAXUNIT ||
- hst->chan < 0 ||
- hst->chan > 1 )
- {
- error = EINVAL;
- break;
- }
-
-#ifndef __FreeBSD__
- sc = isic_find_sc(hst->unit);
-#else
- sc = &isic_sc[hst->unit];
-#endif
-
- sc->sc_chan[hst->chan].stat_VFR = 0;
- sc->sc_chan[hst->chan].stat_RDO = 0;
- sc->sc_chan[hst->chan].stat_CRC = 0;
- sc->sc_chan[hst->chan].stat_RAB = 0;
- sc->sc_chan[hst->chan].stat_XDU = 0;
- sc->sc_chan[hst->chan].stat_RFO = 0;
-
- break;
- }
-
- default:
- error = ENOTTY;
- break;
- }
- return(error);
-#endif DO_I4B_DEBUG
-}
-
-/*---------------------------------------------------------------------------*
- * i4bctlpoll - device driver poll routine
- *---------------------------------------------------------------------------*/
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-static int
-i4bctlpoll (dev_t dev, int events, struct proc *p)
-{
- return (ENODEV);
-}
-#endif
-
-#endif /* NI4BCTL > 0 */
diff --git a/sys/i4b/driver/i4b_ipr.c b/sys/i4b/driver/i4b_ipr.c
deleted file mode 100644
index df3977cb72af3..0000000000000
--- a/sys/i4b/driver/i4b_ipr.c
+++ /dev/null
@@ -1,1115 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_ipr.c - isdn4bsd IP over raw HDLC ISDN network driver
- * ---------------------------------------------------------
- *
- * $Id: i4b_ipr.c,v 1.42 1998/12/18 14:20:44 hm Exp $
- *
- * last edit-date: [Fri Dec 18 11:50:47 1998]
- *
- *---------------------------------------------------------------------------*
- *
- * statistics counter usage (interface lifetime):
- * ----------------------------------------------
- * sc->sc_if.if_ipackets # of received packets
- * sc->sc_if.if_ierrors # of error packets not going to upper layers
- * sc->sc_if.if_opackets # of transmitted packets
- * sc->sc_if.if_oerrors # of error packets not being transmitted
- * sc->sc_if.if_collisions # of invalid ip packets after VJ decompression
- * sc->sc_if.if_ibytes # of bytes coming in from the line (before VJ)
- * sc->sc_if.if_obytes # of bytes going out to the line (after VJ)
- * sc->sc_if.if_imcasts (currently unused)
- * sc->sc_if.if_omcasts # of frames sent out of the fastqueue
- * sc->sc_if.if_iqdrops # of frames dropped on input because queue full
- * sc->sc_if.if_noproto # of frames dropped on output because !AF_INET
- *
- * statistics counter usage (connection lifetime):
- * -----------------------------------------------
- * sc->sc_iinb # of ISDN incoming bytes from HSCX
- * sc->sc_ioutb # of ISDN outgoing bytes from HSCX
- * sc->sc_inb # of incoming bytes after decompression
- * sc->sc_outb # of outgoing bytes before compression
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4bipr.h"
-
-#if NI4BIPR > 0
-
-#ifdef __FreeBSD__
-#include "opt_i4b.h"
-#endif
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <sys/errno.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#include <sys/sockio.h>
-#ifdef IPR_VJ
-#include <sys/malloc.h>
-#endif
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/protosw.h>
-
-#include <net/if.h>
-#include <net/if_types.h>
-#include <net/netisr.h>
-#include <net/route.h>
-
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/in_var.h>
-#include <netinet/ip.h>
-
-#ifdef IPR_VJ
-#include <net/slcompress.h>
-#define IPR_COMPRESS IFF_LINK0 /* compress TCP traffic */
-#define IPR_AUTOCOMP IFF_LINK1 /* auto-enable TCP compression */
-
-/*---------------------------------------------------------------------------
- * NOTICE: using NO separate buffer relies on the assumption, that the HSCX
- * IRQ handler _always_ allocates a single, continuous mbuf cluster large
- * enough to hold the maximum MTU size if the ipr interface !
- *
- * CAUTION: i have re-defined IPR_VJ_USEBUFFER because it makes problems
- * with 2 i4b's back to back running cvs over ssh, cvs simply
- * aborts because it gets bad data. Everything else (telnet/ftp?etc)
- * functions fine.
- *---------------------------------------------------------------------------*/
-#define IPR_VJ_USEBUFFER /* define to use an allocated separate buffer*/
- /* undef to uncompress in the mbuf itself */
-#endif /* IPR_VJ */
-
-#include "bpfilter.h"
-#if NBPFILTER > 0
-#include <sys/time.h>
-#include <net/bpf.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_debug.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_l3l4.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-#ifndef __FreeBSD__
-#include <machine/cpu.h> /* For softnet */
-#endif
-
-#ifdef __FreeBSD__
-#define IPR_FMT "ipr%d: "
-#define IPR_ARG(sc) ((sc)->sc_if.if_unit)
-#define PDEVSTATIC static
-#else
-#define IPR_FMT "%s: "
-#define IPR_ARG(sc) ((sc)->sc_if.if_xname)
-#define PDEVSTATIC /* not static */
-#endif
-
-#define I4BIPRMTU 1500 /* regular MTU */
-#define I4BIPRMAXMTU 2000 /* max MTU */
-#define I4BIPRMINMTU 500 /* min MTU */
-
-#define I4BIPRMAXQLEN 50 /* max queue length */
-
-#define I4BIPRACCT 1 /* enable accounting messages */
-#define I4BIPRACCTINTVL 2 /* accounting msg interval in secs */
-#define I4BIPRADJFRXP 1 /* adjust 1st rxd packet */
-
-/* initialized by L4 */
-
-static drvr_link_t ipr_drvr_linktab[NI4BIPR];
-static isdn_link_t *isdn_linktab[NI4BIPR];
-
-struct ipr_softc {
- struct ifnet sc_if; /* network-visible interface */
- int sc_state; /* state of the interface */
-
-#ifndef __FreeBSD__
- int sc_unit; /* unit number for Net/OpenBSD */
-#endif
-
- call_desc_t *sc_cdp; /* ptr to call descriptor */
- int sc_updown; /* soft state of interface */
- struct ifqueue sc_fastq; /* interactive traffic */
- int sc_dialresp; /* dialresponse */
- int sc_lastdialresp;/* last dialresponse */
-
-#if I4BIPRACCT
- int sc_iinb; /* isdn driver # of inbytes */
- int sc_ioutb; /* isdn driver # of outbytes */
- int sc_inb; /* # of bytes rx'd */
- int sc_outb; /* # of bytes tx'd */
- int sc_linb; /* last # of bytes rx'd */
- int sc_loutb; /* last # of bytes tx'd */
- int sc_fn; /* flag, first null acct */
-#endif
-
-#ifdef I4BIPRADJFRXP
- int sc_first_pkt; /* flag, first rxd packet */
-#endif
-
-#ifdef IPR_VJ
- struct slcompress sc_compr; /* tcp compression data */
-#ifdef IPR_VJ_USEBUFFER
- u_char *sc_cbuf; /* tcp decompression buffer */
-#endif
-#endif
-
-} ipr_softc[NI4BIPR];
-
-enum ipr_states {
- ST_IDLE, /* initialized, ready, idle */
- ST_DIALING, /* dialling out to remote */
- ST_CONNECTED_W, /* connected to remote */
- ST_CONNECTED_A, /* connected to remote */
-};
-
-#ifdef __FreeBSD__
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-# define IOCTL_CMD_T u_long
-#else
-# define IOCTL_CMD_T int
-#endif
-PDEVSTATIC void i4biprattach(void *);
-PSEUDO_SET(i4biprattach, i4b_ipr);
-static int i4biprioctl(struct ifnet *ifp, IOCTL_CMD_T cmd, caddr_t data);
-#else
-PDEVSTATIC void i4biprattach __P((void));
-static int i4biprioctl(struct ifnet *ifp, u_long cmd, caddr_t data);
-#endif
-
-static void iprwatchdog(struct ifnet *ifp);
-static void ipr_init_linktab(int unit);
-static void ipr_tx_queue_empty(int unit);
-static int i4biproutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct rtentry *rtp);
-static void iprclearqueues(struct ipr_softc *sc);
-
-/*===========================================================================*
- * DEVICE DRIVER ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * interface attach routine at kernel boot time
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-#ifdef __FreeBSD__
-i4biprattach(void *dummy)
-#else
-i4biprattach()
-#endif
-{
- struct ipr_softc *sc = ipr_softc;
- int i;
-
-#ifndef HACK_NO_PSEUDO_ATTACH_MSG
-#ifdef IPR_VJ
- printf("i4bipr: %d IP over raw HDLC ISDN device(s) attached (VJ header compression)\n", NI4BIPR);
-#else
- printf("i4bipr: %d IP over raw HDLC ISDN device(s) attached\n", NI4BIPR);
-#endif
-#endif
-
- for(i=0; i < NI4BIPR; sc++, i++)
- {
- ipr_init_linktab(i);
-
- DBGL4(L4_DIALST, "i4biprattach", ("setting dial state to ST_IDLE\n"));
-
- sc->sc_state = ST_IDLE;
-
-#ifdef __FreeBSD__
- sc->sc_if.if_name = "ipr";
-#if __FreeBSD__ < 3
- sc->sc_if.if_next = NULL;
-#endif
- sc->sc_if.if_unit = i;
-#else
- sprintf(sc->sc_if.if_xname, "ipr%d", i);
- sc->sc_if.if_softc = sc;
- sc->sc_unit = i;
-#endif
-
-#ifdef IPR_VJ
- sc->sc_if.if_flags = IFF_POINTOPOINT | IFF_SIMPLEX | IPR_AUTOCOMP;
-#else
- sc->sc_if.if_flags = IFF_POINTOPOINT | IFF_SIMPLEX;
-#endif
-
- sc->sc_if.if_mtu = I4BIPRMTU;
- sc->sc_if.if_type = IFT_ISDNBASIC;
- sc->sc_if.if_ioctl = i4biprioctl;
- sc->sc_if.if_output = i4biproutput;
-
- sc->sc_if.if_snd.ifq_maxlen = I4BIPRMAXQLEN;
- sc->sc_fastq.ifq_maxlen = I4BIPRMAXQLEN;
-
- sc->sc_if.if_ipackets = 0;
- sc->sc_if.if_ierrors = 0;
- sc->sc_if.if_opackets = 0;
- sc->sc_if.if_oerrors = 0;
- sc->sc_if.if_collisions = 0;
- sc->sc_if.if_ibytes = 0;
- sc->sc_if.if_obytes = 0;
- sc->sc_if.if_imcasts = 0;
- sc->sc_if.if_omcasts = 0;
- sc->sc_if.if_iqdrops = 0;
- sc->sc_if.if_noproto = 0;
-
-#if I4BIPRACCT
- sc->sc_if.if_timer = 0;
- sc->sc_if.if_watchdog = iprwatchdog;
- sc->sc_iinb = 0;
- sc->sc_ioutb = 0;
- sc->sc_inb = 0;
- sc->sc_outb = 0;
- sc->sc_linb = 0;
- sc->sc_loutb = 0;
- sc->sc_fn = 1;
-#endif
-
-#ifdef IPR_VJ
-#ifdef __FreeBSD__
- sl_compress_init(&sc->sc_compr, -1);
-#else
- sl_compress_init(&sc->sc_compr);
-#endif
-
-#ifdef IPR_VJ_USEBUFFER
- if(!((sc->sc_cbuf =
- (u_char *)malloc(I4BIPRMAXMTU+128, M_DEVBUF, M_WAITOK))))
- {
- panic("if_ipr.c, ipr_attach: VJ malloc failed");
- }
-#endif
-#endif
-
- sc->sc_updown = SOFT_ENA; /* soft enabled */
-
- sc->sc_dialresp = DSTAT_NONE; /* no response */
- sc->sc_lastdialresp = DSTAT_NONE;
-
- if_attach(&sc->sc_if);
-
-#if NBPFILTER > 0
-#ifdef __FreeBSD__
- bpfattach(&sc->sc_if, DLT_NULL, sizeof(u_int));
-#else
- bpfattach(&sc->sc_if.if_bpf, &sc->sc_if, DLT_NULL, sizeof(u_int));
-#endif
-#endif
- }
-}
-
-/*---------------------------------------------------------------------------*
- * output a packet to the ISDN B-channel
- *---------------------------------------------------------------------------*/
-static int
-i4biproutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
- struct rtentry *rtp)
-{
- struct ipr_softc *sc;
- int unit;
- int s;
- struct ifqueue *ifq;
- struct ip *ip;
-
- s = SPLI4B();
-
-#ifdef __FreeBSD__
- unit = ifp->if_unit;
- sc = &ipr_softc[unit];
-#else
- sc = ifp->if_softc;
- unit = sc->sc_unit;
-#endif
-
- /* check for IP */
-
- if(dst->sa_family != AF_INET)
- {
- printf(IPR_FMT "af%d not supported\n", IPR_ARG(sc), dst->sa_family);
- m_freem(m);
- splx(s);
- sc->sc_if.if_noproto++;
- sc->sc_if.if_oerrors++;
- return(EAFNOSUPPORT);
- }
-
- /* check interface state = UP */
-
- if(!(ifp->if_flags & IFF_UP))
- {
- DBGL4(L4_IPRDBG, "i4biproutput", ("ipr%d: interface is DOWN!\n", unit));
- m_freem(m);
- splx(s);
- sc->sc_if.if_oerrors++;
- return(ENETDOWN);
- }
-
- /* dial if necessary */
-
- if(sc->sc_state == ST_IDLE || sc->sc_state == ST_DIALING)
- {
-
-#ifdef NOTDEF
- switch(sc->sc_dialresp)
- {
- case DSTAT_TFAIL: /* transient failure */
- DBGL4(L4_IPRDBG, "i4biproutput", ("ipr%d: transient dial failure!\n", unit));
- m_freem(m);
- iprclearqueues(sc);
- sc->sc_dialresp = DSTAT_NONE;
- splx(s);
- sc->sc_if.if_oerrors++;
- return(ENETUNREACH);
- break;
-
- case DSTAT_PFAIL: /* permanent failure */
- DBGL4(L4_IPRDBG, "i4biproutput", ("ipr%d: permanent dial failure!\n", unit));
- m_freem(m);
- iprclearqueues(sc);
- sc->sc_dialresp = DSTAT_NONE;
- splx(s);
- sc->sc_if.if_oerrors++;
- return(EHOSTUNREACH);
- break;
-
- case DSTAT_INONLY: /* no dialout allowed*/
- DBGL4(L4_IPRDBG, "i4biproutput", ("ipr%d: dialout not allowed failure!\n", unit));
- m_freem(m);
- iprclearqueues(sc);
- sc->sc_dialresp = DSTAT_NONE;
- splx(s);
- sc->sc_if.if_oerrors++;
- return(EHOSTUNREACH);
- break;
- }
-#endif
-
- DBGL4(L4_IPRDBG, "i4biproutput", ("ipr%d: send dial request message!\n", unit));
- DBGL4(L4_DIALST, "i4biproutput", ("ipr%d: setting dial state to ST_DIALING\n", unit));
- i4b_l4_dialout(BDRV_IPR, unit);
- sc->sc_state = ST_DIALING;
- }
-
- /* update access time */
-
- microtime(&sc->sc_if.if_lastchange);
-
- /*
- * check, if type of service indicates interactive, i.e. telnet,
- * traffic. in case it is interactive, put it into the fast queue,
- * else (i.e. ftp traffic) put it into the "normal" queue
- */
-
- ip = mtod(m, struct ip *); /* get ptr to ip header */
-
- if(ip->ip_tos & IPTOS_LOWDELAY)
- ifq = &sc->sc_fastq;
- else
- ifq = &sc->sc_if.if_snd;
-
- /* check for space in choosen send queue */
-
- if(IF_QFULL(ifq))
- {
- DBGL4(L4_IPRDBG, "i4biproutput", ("ipr%d: send queue full!\n", unit));
- IF_DROP(ifq);
- m_freem(m);
- splx(s);
- sc->sc_if.if_oerrors++;
- return(ENOBUFS);
- }
-
- DBGL4(L4_IPRDBG, "i4biproutput", ("ipr%d: add packet to send queue!\n", unit));
-
- IF_ENQUEUE(ifq, m);
-
- ipr_tx_queue_empty(unit);
-
- splx(s);
-
- return (0);
-}
-
-/*---------------------------------------------------------------------------*
- * process ioctl
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static int
-i4biprioctl(struct ifnet *ifp, IOCTL_CMD_T cmd, caddr_t data)
-#else
-static int
-i4biprioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
-#endif
-{
-#ifdef __FreeBSD__
- struct ipr_softc *sc = &ipr_softc[ifp->if_unit];
-#else
- struct ipr_softc *sc = ifp->if_softc;
-#endif
-
- struct ifreq *ifr = (struct ifreq *)data;
- struct ifaddr *ifa = (struct ifaddr *)data;
- int s;
- int error = 0;
-
- s = SPLI4B();
-
- switch (cmd)
- {
- case SIOCAIFADDR: /* add interface address */
- case SIOCSIFADDR: /* set interface address */
- case SIOCSIFDSTADDR: /* set interface destination address */
- if(ifa->ifa_addr->sa_family != AF_INET)
- error = EAFNOSUPPORT;
- else
- sc->sc_if.if_flags |= IFF_UP;
- microtime(&sc->sc_if.if_lastchange);
- break;
-
- case SIOCSIFFLAGS: /* set interface flags */
- if(!(ifr->ifr_flags & IFF_UP))
- {
- if(sc->sc_if.if_flags & IFF_RUNNING)
- {
- /* disconnect ISDN line */
-#ifdef __FreeBSD__
- i4b_l4_drvrdisc(BDRV_IPR, ifp->if_unit);
-#else
- i4b_l4_drvrdisc(BDRV_IPR, sc->sc_unit);
-#endif
- sc->sc_if.if_flags &= ~IFF_RUNNING;
- }
-
- sc->sc_state = ST_IDLE;
-
- /* empty queues */
-
- iprclearqueues(sc);
- }
-
- if(ifr->ifr_flags & IFF_DEBUG)
- {
- /* enable debug messages */
- }
-
- microtime(&sc->sc_if.if_lastchange);
- break;
-
-#if !defined(__OpenBSD__)
- case SIOCSIFMTU: /* set interface MTU */
- if(ifr->ifr_mtu > I4BIPRMAXMTU)
- error = EINVAL;
- else if(ifr->ifr_mtu < I4BIPRMINMTU)
- error = EINVAL;
- else
- {
- ifp->if_mtu = ifr->ifr_mtu;
- microtime(&sc->sc_if.if_lastchange);
- }
- break;
-#endif /* __OPENBSD__ */
-
-#if 0
- /* not needed for FreeBSD, done in sl_compress_init() (-hm) */
-
- /* need to add an ioctl: set VJ max slot ID
- * #define IPRIOCSMAXCID _IOW('I', XXX, int)
- */
-#ifdef IPR_VJ
- case IPRIOCSMAXCID:
- {
- struct proc *p = curproc; /* XXX */
- if((error = suser(p->p_ucred, &p->p_acflag)) != 0)
- return (error);
- sl_compress_setup(sc->sc_compr, *(int *)data);
- }
- break;
-#endif
-#endif
- default:
- error = EINVAL;
- break;
- }
-
- splx(s);
-
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * clear the interface's send queues
- *---------------------------------------------------------------------------*/
-static void
-iprclearqueues(struct ipr_softc *sc)
-{
- int x;
- struct mbuf *m;
-
- for(;;)
- {
- x = splimp();
- IF_DEQUEUE(&sc->sc_fastq, m);
- splx(x);
-
- if(m)
- m_freem(m);
- else
- break;
- }
-
- for(;;)
- {
- x = splimp();
- IF_DEQUEUE(&sc->sc_if.if_snd, m);
- splx(x);
-
- if(m)
- m_freem(m);
- else
- break;
- }
-}
-
-#if I4BIPRACCT
-/*---------------------------------------------------------------------------*
- * watchdog routine
- *---------------------------------------------------------------------------*/
-static void
-iprwatchdog(struct ifnet *ifp)
-{
-#ifdef __FreeBSD__
- int unit = ifp->if_unit;
- struct ipr_softc *sc = &ipr_softc[unit];
-#else
- struct ipr_softc *sc = ifp->if_softc;
- int unit = sc->sc_unit;
-#endif
- bchan_statistics_t bs;
-
- /* get # of bytes in and out from the HSCX driver */
-
- (*isdn_linktab[unit]->bch_stat)
- (isdn_linktab[unit]->unit, isdn_linktab[unit]->channel, &bs);
-
- sc->sc_ioutb += bs.outbytes;
- sc->sc_iinb += bs.inbytes;
-
- if((sc->sc_iinb != sc->sc_linb) || (sc->sc_ioutb != sc->sc_loutb) || sc->sc_fn)
- {
- int ri = (sc->sc_iinb - sc->sc_linb)/I4BIPRACCTINTVL;
- int ro = (sc->sc_ioutb - sc->sc_loutb)/I4BIPRACCTINTVL;
-
- if((sc->sc_iinb == sc->sc_linb) && (sc->sc_ioutb == sc->sc_loutb))
- sc->sc_fn = 0;
- else
- sc->sc_fn = 1;
-
- sc->sc_linb = sc->sc_iinb;
- sc->sc_loutb = sc->sc_ioutb;
-
- i4b_l4_accounting(BDRV_IPR, unit, ACCT_DURING,
- sc->sc_ioutb, sc->sc_iinb, ro, ri, sc->sc_outb, sc->sc_inb);
- }
- sc->sc_if.if_timer = I4BIPRACCTINTVL;
-}
-#endif /* I4BIPRACCT */
-
-/*===========================================================================*
- * ISDN INTERFACE ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * start transmitting after connect
- *---------------------------------------------------------------------------*/
-static void
-i4bipr_connect_startio(int unit)
-{
- struct ipr_softc *sc = &ipr_softc[unit];
- int s = SPLI4B();
-
- if(sc->sc_state == ST_CONNECTED_W)
- {
- sc->sc_state = ST_CONNECTED_A;
- ipr_tx_queue_empty(unit);
- }
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at connect time
- *---------------------------------------------------------------------------*/
-static void
-ipr_connect(int unit, void *cdp)
-{
- struct ipr_softc *sc = &ipr_softc[unit];
- int s;
-
- sc->sc_cdp = (call_desc_t *)cdp;
-
- s = SPLI4B();
-
- DBGL4(L4_DIALST, "ipr_connect", ("ipr%d: setting dial state to ST_CONNECTED\n", unit));
-
- sc->sc_if.if_flags |= IFF_RUNNING;
- sc->sc_state = ST_CONNECTED_W;
-
- sc->sc_dialresp = DSTAT_NONE;
- sc->sc_lastdialresp = DSTAT_NONE;
-
-#if I4BIPRACCT
- sc->sc_iinb = 0;
- sc->sc_ioutb = 0;
- sc->sc_inb = 0;
- sc->sc_outb = 0;
- sc->sc_linb = 0;
- sc->sc_loutb = 0;
- sc->sc_if.if_timer = I4BIPRACCTINTVL;
-#endif
-
-#ifdef I4BIPRADJFRXP
- sc->sc_first_pkt = 1;
-#endif
-
- /*
- * Sometimes ISDN B-channels are switched thru asymmetic. This
- * means that under such circumstances B-channel data (the first
- * three packets of a TCP connection in my case) may get lost,
- * causing a large delay until the connection is started.
- * When the sending of the very first packet of a TCP connection
- * is delayed for a to be empirically determined delay (close
- * to a second in my case) those packets go thru and the TCP
- * connection comes up "almost" immediately (-hm).
- */
-
- if(sc->sc_cdp->isdntxdelay > 0)
- {
- timeout((TIMEOUT_FUNC_T)i4bipr_connect_startio, (void *)unit, sc->sc_cdp->isdntxdelay /* hz*1 */);
- }
- else
- {
- sc->sc_state = ST_CONNECTED_A;
- ipr_tx_queue_empty(unit);
- }
-
- splx(s);
-
- /* we don't need any negotiation - pass event back right now */
- i4b_l4_negcomplete(sc->sc_cdp);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at disconnect time
- *---------------------------------------------------------------------------*/
-static void
-ipr_disconnect(int unit, void *cdp)
-{
- call_desc_t *cd = (call_desc_t *)cdp;
- struct ipr_softc *sc = &ipr_softc[unit];
-
- /* new stuff to check that the active channel is being closed */
-
- if (cd != sc->sc_cdp)
- {
- DBGL4(L4_IPRDBG, "ipr_disconnect", ("ipr%d: channel %d not active\n",
- cd->driver_unit, cd->channelid));
- return;
- }
-
-#if I4BIPRACCT
- sc->sc_if.if_timer = 0;
-#endif
-
- i4b_l4_accounting(BDRV_IPR, cd->driver_unit, ACCT_FINAL,
- sc->sc_ioutb, sc->sc_iinb, 0, 0, sc->sc_outb, sc->sc_inb);
-
- sc->sc_cdp = (call_desc_t *)0;
-
- DBGL4(L4_DIALST, "ipr_disconnect", ("setting dial state to ST_IDLE\n"));
-
- sc->sc_dialresp = DSTAT_NONE;
- sc->sc_lastdialresp = DSTAT_NONE;
-
- sc->sc_if.if_flags &= ~IFF_RUNNING;
- sc->sc_state = ST_IDLE;
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is used to give a feedback from userland daemon
- * in case of dial problems
- *---------------------------------------------------------------------------*/
-static void
-ipr_dialresponse(int unit, int status)
-{
- struct ipr_softc *sc = &ipr_softc[unit];
- sc->sc_dialresp = status;
-
- DBGL4(L4_IPRDBG, "ipr_dialresponse", ("ipr%d: last=%d, this=%d\n",
- unit, sc->sc_lastdialresp, sc->sc_dialresp));
-}
-
-/*---------------------------------------------------------------------------*
- * interface soft up/down
- *---------------------------------------------------------------------------*/
-static void
-ipr_updown(int unit, int updown)
-{
- struct ipr_softc *sc = &ipr_softc[unit];
- sc->sc_updown = updown;
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when a new frame (mbuf) has been received and was put on
- * the rx queue. It is assumed that this routines runs at
- * pri level splimp() ! Keep it short !
- *---------------------------------------------------------------------------*/
-static void
-ipr_rx_data_rdy(int unit)
-{
- register struct ipr_softc *sc = &ipr_softc[unit];
- register struct mbuf *m;
-#ifdef IPR_VJ
-#ifdef IPR_VJ_USEBUFFER
- u_char *cp = sc->sc_cbuf;
-#endif
- int len, c;
-#endif
-
- if((m = *isdn_linktab[unit]->rx_mbuf) == NULL)
- return;
-
- m->m_pkthdr.rcvif = &sc->sc_if;
-
- m->m_pkthdr.len = m->m_len;
-
- microtime(&sc->sc_if.if_lastchange);
-
-#ifdef I4BIPRADJFRXP
-
- /*
- * The very first packet after the B channel is switched thru
- * has very often several bytes of random data prepended. This
- * routine looks where the IP header starts and removes the
- * the bad data.
- */
-
- if(sc->sc_first_pkt)
- {
- unsigned char *mp = m->m_data;
- int i;
-
- sc->sc_first_pkt = 0;
-
- for(i = 0; i < m->m_len; i++, mp++)
- {
- if( ((*mp & 0xf0) == 0x40) &&
- ((*mp & 0x0f) >= 0x05) )
- {
- m->m_data = mp;
- m->m_pkthdr.len -= i;
- break;
- }
- }
- }
-#endif
-
- sc->sc_if.if_ipackets++;
- sc->sc_if.if_ibytes += m->m_pkthdr.len;
-
-#ifdef IPR_VJ
- if((c = (*(mtod(m, u_char *)) & 0xf0)) != (IPVERSION << 4))
- {
- /* copy data to buffer */
-
- len = m->m_len;
-
-#ifdef IPR_VJ_USEBUFFER
-/* XXX */ m_copydata(m, 0, len, cp);
-#endif
-
- if(c & 0x80)
- {
- c = TYPE_COMPRESSED_TCP;
- }
- else if(c == TYPE_UNCOMPRESSED_TCP)
- {
-#ifdef IPR_VJ_USEBUFFER
- *cp &= 0x4f; /* XXX */
-#else
- *(mtod(m, u_char *)) &= 0x4f;
-#endif
- }
-
- /*
- * We've got something that's not an IP packet.
- * If compression is enabled, try to decompress it.
- * Otherwise, if `auto-enable' compression is on and
- * it's a reasonable packet, decompress it and then
- * enable compression. Otherwise, drop it.
- */
- if(sc->sc_if.if_flags & IPR_COMPRESS)
- {
-#ifdef IPR_VJ_USEBUFFER
- len = sl_uncompress_tcp(&cp,len,(u_int)c,&sc->sc_compr);
-#else
- len = sl_uncompress_tcp((u_char **)&m->m_data, len,
- (u_int)c, &sc->sc_compr);
-#endif
-
- if(len <= 0)
- {
-#ifdef DEBUG_IPR_VJ
- printf("i4b_ipr, ipr_rx_data_rdy: len <= 0 IPR_COMPRESS!\n");
-#endif
- goto error;
- }
- }
- else if((sc->sc_if.if_flags & IPR_AUTOCOMP) &&
- (c == TYPE_UNCOMPRESSED_TCP) && (len >= 40))
- {
-#ifdef IPR_VJ_USEBUFFER
- len = sl_uncompress_tcp(&cp,len,(u_int)c,&sc->sc_compr);
-#else
- len = sl_uncompress_tcp((u_char **)&m->m_data, len,
- (u_int)c, &sc->sc_compr);
-#endif
-
- if(len <= 0)
- {
-#ifdef DEBUG_IPR_VJ
- printf("i4b_ipr, ipr_rx_data_rdy: len <= 0 IPR_AUTOCOMP!\n");
-#endif
- goto error;
- }
-
- sc->sc_if.if_flags |= IPR_COMPRESS;
- }
- else
- {
-#ifdef DEBUG_IPR_VJ
- printf("i4b_ipr, ipr_input: invalid ip packet!\n");
-#endif
-
-error:
- sc->sc_if.if_ierrors++;
- sc->sc_if.if_collisions++;
- m_freem(m);
- return;
- }
-#ifdef IPR_VJ_USEBUFFER
-/* XXX */ m_copyback(m, 0, len, cp);
-#else
- m->m_len = m->m_pkthdr.len = len;
-#endif
- }
-#endif
-
-#if I4BIPRACCT
- /* NB. do the accounting after decompression! */
- sc->sc_inb += m->m_pkthdr.len;
-#endif
-
-#if NBPFILTER > 0
- if(sc->sc_if.if_bpf)
- {
- /* prepend the address family as a four byte field */
- struct mbuf mm;
- u_int af = AF_INET;
- mm.m_next = m;
- mm.m_len = 4;
- mm.m_data = (char *)&af;
-
-#ifdef __FreeBSD__
- bpf_mtap(&sc->sc_if, &mm);
-#else
- bpf_mtap(sc->sc_if.if_bpf, &mm);
-#endif
- }
-#endif /* NBPFILTER > 0 */
-
- if(IF_QFULL(&ipintrq))
- {
- DBGL4(L4_IPRDBG, "ipr_rx_data_rdy", ("ipr%d: ipintrq full!\n", unit));
-
- IF_DROP(&ipintrq);
- sc->sc_if.if_ierrors++;
- sc->sc_if.if_iqdrops++;
- m_freem(m);
- }
- else
- {
- IF_ENQUEUE(&ipintrq, m);
- schednetisr(NETISR_IP);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when the last frame has been sent out and there is no
- * further frame (mbuf) in the tx queue.
- *---------------------------------------------------------------------------*/
-static void
-ipr_tx_queue_empty(int unit)
-{
- register struct ipr_softc *sc = &ipr_softc[unit];
- register struct mbuf *m;
-#ifdef IPR_VJ
- struct ip *ip;
-#endif
- int x = 0;
-
- if(sc->sc_state != ST_CONNECTED_A)
- return;
-
- for(;;)
- {
- IF_DEQUEUE(&sc->sc_fastq, m);
- if(m)
- {
- sc->sc_if.if_omcasts++;
- }
- else
- {
- IF_DEQUEUE(&sc->sc_if.if_snd, m);
- if(m == NULL)
- break;
- }
-
- microtime(&sc->sc_if.if_lastchange);
-
-#if NBPFILTER > 0
- if(sc->sc_if.if_bpf)
- {
- /* prepend the address family as a four byte field */
-
- struct mbuf mm;
- u_int af = AF_INET;
- mm.m_next = m;
- mm.m_len = 4;
- mm.m_data = (char *)&af;
-
-#ifdef __FreeBSD__
- bpf_mtap(&sc->sc_if, &mm);
-#else
- bpf_mtap(sc->sc_if.if_bpf, &mm);
-#endif
- }
-#endif /* NBPFILTER */
-
-#if I4BIPRACCT
- sc->sc_outb += m->m_pkthdr.len; /* size before compression */
-#endif
-
-#ifdef IPR_VJ
- if((ip = mtod(m, struct ip *))->ip_p == IPPROTO_TCP)
- {
- if(sc->sc_if.if_flags & IPR_COMPRESS)
- {
- *mtod(m, u_char *) |= sl_compress_tcp(m, ip,
- &sc->sc_compr, 1);
- }
- }
-#endif
- x = 1;
-
- IF_ENQUEUE(isdn_linktab[unit]->tx_queue, m);
-
- sc->sc_if.if_obytes += m->m_pkthdr.len;
-
- sc->sc_if.if_opackets++;
- }
-
- if(x)
- (*isdn_linktab[unit]->bch_tx_start)(isdn_linktab[unit]->unit, isdn_linktab[unit]->channel);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * each time a packet is received or transmitted. It should
- * be used to implement an activity timeout mechanism.
- *---------------------------------------------------------------------------*/
-static void
-ipr_activity(int unit, int rxtx)
-{
- ipr_softc[unit].sc_cdp->last_active_time = SECOND;
-}
-
-/*---------------------------------------------------------------------------*
- * return this drivers linktab address
- *---------------------------------------------------------------------------*/
-drvr_link_t *
-ipr_ret_linktab(int unit)
-{
- return(&ipr_drvr_linktab[unit]);
-}
-
-/*---------------------------------------------------------------------------*
- * setup the isdn_linktab for this driver
- *---------------------------------------------------------------------------*/
-void
-ipr_set_linktab(int unit, isdn_link_t *ilt)
-{
- isdn_linktab[unit] = ilt;
-}
-
-/*---------------------------------------------------------------------------*
- * initialize this drivers linktab
- *---------------------------------------------------------------------------*/
-static void
-ipr_init_linktab(int unit)
-{
- ipr_drvr_linktab[unit].unit = unit;
- ipr_drvr_linktab[unit].bch_rx_data_ready = ipr_rx_data_rdy;
- ipr_drvr_linktab[unit].bch_tx_queue_empty = ipr_tx_queue_empty;
- ipr_drvr_linktab[unit].bch_activity = ipr_activity;
- ipr_drvr_linktab[unit].line_connected = ipr_connect;
- ipr_drvr_linktab[unit].line_disconnected = ipr_disconnect;
- ipr_drvr_linktab[unit].dial_response = ipr_dialresponse;
- ipr_drvr_linktab[unit].updown_ind = ipr_updown;
-}
-
-/*===========================================================================*/
-
-#endif /* NI4BIPR > 0 */
diff --git a/sys/i4b/driver/i4b_isppp.c b/sys/i4b/driver/i4b_isppp.c
deleted file mode 100644
index b1cb2cf9df5b9..0000000000000
--- a/sys/i4b/driver/i4b_isppp.c
+++ /dev/null
@@ -1,710 +0,0 @@
-/*
- * Copyright (c) 1997 Joerg Wunsch. All rights reserved.
- *
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isppp.c - isdn4bsd kernel SyncPPP driver
- * --------------------------------------------
- *
- * Uses Serge Vakulenko's sppp backend (originally contributed with
- * the "cx" driver for Cronyx's HDLC-in-hardware device). This driver
- * is only the glue between sppp and i4b.
- *
- * $Id: i4b_isppp.c,v 1.20 1998/12/18 14:20:44 hm Exp $
- *
- * last edit-date: [Fri Dec 18 11:47:58 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4bisppp.h"
-#ifdef __FreeBSD__
-#include "sppp.h"
-#endif
-
-#if NI4BISPPP == 0
-# error "You need to define `pseudo-device sppp <N>' with options ISPPP"
-#endif
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <sys/errno.h>
-#include <sys/ioccom.h>
-#include <sys/sockio.h>
-#include <sys/kernel.h>
-#include <sys/protosw.h>
-
-#include <net/if.h>
-#include <net/if_types.h>
-#include <net/netisr.h>
-#include <net/route.h>
-#ifdef __FreeBSD__
-#include <net/if_sppp.h>
-#else
-#include <i4b/sppp/if_sppp.h>
-#endif
-
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/in_var.h>
-#include <netinet/ip.h>
-
-#include "bpfilter.h"
-#if NBPFILTER > 0
-#include <sys/time.h>
-#include <net/bpf.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_cause.h>
-#else
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_cause.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_l3l4.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-#ifdef __FreeBSD__
-#define ISPPP_FMT "isp%d: "
-#define ISPPP_ARG(sc) ((sc)->sc_if.if_unit)
-#define PDEVSTATIC static
-#define IFP2UNIT(ifp) (ifp)->if_unit
-
-# if __FreeBSD_version >= 300001
-# define CALLOUT_INIT(chan) callout_handle_init(chan)
-# define TIMEOUT(fun, arg, chan, tick) chan = timeout(fun, arg, tick)
-# define UNTIMEOUT(fun, arg, chan) untimeout(fun, arg, chan)
-# define IOCTL_CMD_T u_long
-# else
-# define CALLOUT_INIT(chan) do {} while(0)
-# define TIMEOUT(fun, arg, chan, tick) timeout(fun, arg, tick)
-# define UNTIMEOUT(fun, arg, chan) untimeout(fun, arg)
-# define IOCTL_CMD_T int
-# endif
-
-#elif defined __NetBSD__ || defined __OpenBSD__
-#define ISPPP_FMT "%s: "
-#define ISPPP_ARG(sc) ((sc)->sc_if.if_xname)
-#define PDEVSTATIC /* not static */
-#define IOCTL_CMD_T u_long
-#define IFP2UNIT(ifp) ((struct i4bisppp_softc *)ifp->if_softc)->sc_unit
-#else
-# error "What system are you using?"
-#endif
-
-#ifdef __FreeBSD__
-PDEVSTATIC void i4bispppattach(void *);
-PSEUDO_SET(i4bispppattach, i4b_isppp);
-#else
-PDEVSTATIC void i4bispppattach __P((void));
-#endif
-
-#define I4BISPPPACCT 1 /* enable accounting messages */
-#define I4BISPPPACCTINTVL 2 /* accounting msg interval in secs */
-#define I4BISPPPDISCDEBUG 1
-
-#define PPP_HDRLEN 4 /* 4 octetts PPP header length */
-
-struct i4bisppp_softc {
- /*
- * struct sppp starts with a struct ifnet, but we gotta allocate
- * more space for it. NB: do not relocate this union, it must
- * be first in isppp_softc. The tls and tlf hooks below want to
- * convert a ``struct sppp *'' into a ``struct isppp_softc *''.
- */
- union {
- struct ifnet scu_if;
- struct sppp scu_sp;
- } sc_if_un;
-#define sc_if sc_if_un.scu_if
-
- int sc_state; /* state of the interface */
-
-#ifndef __FreeBSD__
- int sc_unit; /* unit number for Net/OpenBSD */
-#endif
-
- call_desc_t *sc_cdp; /* ptr to call descriptor */
-
-#ifdef I4BISPPPACCT
- int sc_iinb; /* isdn driver # of inbytes */
- int sc_ioutb; /* isdn driver # of outbytes */
- int sc_inb; /* # of bytes rx'd */
- int sc_outb; /* # of bytes tx'd */
- int sc_linb; /* last # of bytes rx'd */
- int sc_loutb; /* last # of bytes tx'd */
- int sc_fn; /* flag, first null acct */
-#endif
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- struct callout_handle sc_ch;
-#endif
-
-} i4bisppp_softc[NI4BISPPP];
-
-static void i4bisppp_init_linktab(int unit);
-static int i4bisppp_ioctl(struct ifnet *ifp, IOCTL_CMD_T cmd, caddr_t data);
-
-#if 0
-static void i4bisppp_send(struct ifnet *ifp);
-#endif
-
-static void i4bisppp_start(struct ifnet *ifp);
-
-#if 0 /* never used ??? */
-static void i4bisppp_timeout(void *cookie);
-#endif
-
-static void i4bisppp_tls(struct sppp *sp);
-static void i4bisppp_tlf(struct sppp *sp);
-static void i4bisppp_state_changed(struct sppp *sp, int new_state);
-static void i4bisppp_negotiation_complete(struct sppp *sp);
-static void i4bisppp_watchdog(struct ifnet *ifp);
-
-/* initialized by L4 */
-
-static drvr_link_t i4bisppp_drvr_linktab[NI4BISPPP];
-static isdn_link_t *isdn_linktab[NI4BISPPP];
-
-enum i4bisppp_states {
- ST_IDLE, /* initialized, ready, idle */
- ST_DIALING, /* dialling out to remote */
- ST_CONNECTED, /* connected to remote */
-};
-
-/*===========================================================================*
- * DEVICE DRIVER ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * interface attach routine at kernel boot time
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-#ifdef __FreeBSD__
-i4bispppattach(void *dummy)
-#else
-i4bispppattach(void)
-#endif
-{
- struct i4bisppp_softc *sc = i4bisppp_softc;
- int i;
-
-#ifndef HACK_NO_PSEUDO_ATTACH_MSG
- printf("i4bisppp: %d ISDN SyncPPP device(s) attached\n",
- NI4BISPPP);
-#endif
-
- for(i = 0; i < NI4BISPPP; sc++, i++) {
- i4bisppp_init_linktab(i);
-
- sc->sc_if.if_softc = sc;
-
-#ifdef __FreeBSD__
- sc->sc_if.if_name = "isp";
-#if defined(__FreeBSD_version) && __FreeBSD_version < 300001
- sc->sc_if.if_next = NULL;
-#endif
- sc->sc_if.if_unit = i;
-#else
- sprintf(sc->sc_if.if_xname, "isp%d", i);
- sc->sc_unit = i;
-#endif
-
- sc->sc_if.if_mtu = PP_MTU;
- sc->sc_if.if_flags = IFF_SIMPLEX | IFF_POINTOPOINT;
- sc->sc_if.if_type = IFT_ISDNBASIC;
- sc->sc_state = ST_IDLE;
-
- sc->sc_if.if_ioctl = i4bisppp_ioctl;
-
- /* actually initialized by sppp_attach() */
- /* sc->sc_if.if_output = sppp_output; */
-
- sc->sc_if.if_start = i4bisppp_start;
-
- sc->sc_if.if_hdrlen = 0;
- sc->sc_if.if_addrlen = 0;
- sc->sc_if.if_snd.ifq_maxlen = IFQ_MAXLEN;
-
- sc->sc_if.if_ipackets = 0;
- sc->sc_if.if_ierrors = 0;
- sc->sc_if.if_opackets = 0;
- sc->sc_if.if_oerrors = 0;
- sc->sc_if.if_collisions = 0;
- sc->sc_if.if_ibytes = 0;
- sc->sc_if.if_obytes = 0;
- sc->sc_if.if_imcasts = 0;
- sc->sc_if.if_omcasts = 0;
- sc->sc_if.if_iqdrops = 0;
- sc->sc_if.if_noproto = 0;
-
-#if I4BISPPPACCT
- sc->sc_if.if_timer = 0;
- sc->sc_if.if_watchdog = i4bisppp_watchdog;
- sc->sc_iinb = 0;
- sc->sc_ioutb = 0;
- sc->sc_inb = 0;
- sc->sc_outb = 0;
- sc->sc_linb = 0;
- sc->sc_loutb = 0;
- sc->sc_fn = 1;
-#endif
-
- sc->sc_if_un.scu_sp.pp_tls = i4bisppp_tls;
- sc->sc_if_un.scu_sp.pp_tlf = i4bisppp_tlf;
- sc->sc_if_un.scu_sp.pp_con = i4bisppp_negotiation_complete;
- sc->sc_if_un.scu_sp.pp_chg = i4bisppp_state_changed;
-
- sppp_attach(&sc->sc_if);
- if_attach(&sc->sc_if);
-
-#if NBPFILTER > 0
-#ifdef __FreeBSD__
- bpfattach(&sc->sc_if, DLT_PPP, PPP_HDRLEN);
- CALLOUT_INIT(&sc->sc_ch);
-#endif /* __FreeBSD__ */
-#ifdef __NetBSD__
- bpfattach(&sc->sc_if.if_bpf, &sc->sc_if, DLT_PPP, sizeof(u_int));
-#endif
-#endif
- }
-}
-
-/*---------------------------------------------------------------------------*
- * process ioctl
- *---------------------------------------------------------------------------*/
-static int
-i4bisppp_ioctl(struct ifnet *ifp, IOCTL_CMD_T cmd, caddr_t data)
-{
- struct i4bisppp_softc *sc = ifp->if_softc;
-#if 0
- struct sppp *sp = (struct sppp *)sc;
- struct ifaddr *ifa = (struct ifaddr *) data;
- struct ifreq *ifr = (struct ifreq *) data;
-#endif
-
- int error;
-
- error = sppp_ioctl(&sc->sc_if, cmd, data);
- if (error)
- return error;
-
- switch(cmd) {
- case SIOCSIFFLAGS:
-#if 0 /* never used ??? */
- x = splimp();
- if ((ifp->if_flags & IFF_UP) == 0)
- UNTIMEOUT(i4bisppp_timeout, (void *)sp, sc->sc_ch);
- splx(x);
-#endif
- break;
- }
-
- return 0;
-}
-
-/*---------------------------------------------------------------------------*
- * start output to ISDN B-channel
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_start(struct ifnet *ifp)
-{
- struct i4bisppp_softc *sc = ifp->if_softc;
- struct mbuf *m;
- int s;
- int unit = IFP2UNIT(ifp);
-
- if (sppp_isempty(ifp))
- return;
-
- if(sc->sc_state != ST_CONNECTED)
- return;
-
- s = splimp();
- /*ifp->if_flags |= IFF_OACTIVE; - need to clear this somewhere */
- splx(s);
-
- while ((m = sppp_dequeue(&sc->sc_if)) != NULL)
- {
-
-#if NBPFILTER > 0
-#ifdef __FreeBSD__
- if (ifp->if_bpf)
- bpf_mtap(ifp, m);
-#endif /* __FreeBSD__ */
-
-#ifdef __NetBSD__
- if (ifp->if_bpf)
- bpf_mtap(ifp->if_bpf, m);
-#endif
-#endif /* NBPFILTER > 0 */
-
- microtime(&ifp->if_lastchange);
-
- IF_ENQUEUE(isdn_linktab[unit]->tx_queue, m);
-
- sc->sc_if.if_obytes += m->m_pkthdr.len;
- sc->sc_outb += m->m_pkthdr.len;
- sc->sc_if.if_opackets++;
- }
- isdn_linktab[unit]->bch_tx_start(isdn_linktab[unit]->unit,
- isdn_linktab[unit]->channel);
-}
-
-#ifdef I4BISPPPACCT
-/*---------------------------------------------------------------------------*
- * watchdog routine
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_watchdog(struct ifnet *ifp)
-{
- struct i4bisppp_softc *sc = ifp->if_softc;
- int unit = IFP2UNIT(ifp);
- bchan_statistics_t bs;
-
- (*isdn_linktab[unit]->bch_stat)
- (isdn_linktab[unit]->unit, isdn_linktab[unit]->channel, &bs);
-
- sc->sc_ioutb += bs.outbytes;
- sc->sc_iinb += bs.inbytes;
-
- if((sc->sc_iinb != sc->sc_linb) || (sc->sc_ioutb != sc->sc_loutb) || sc->sc_fn)
- {
- int ri = (sc->sc_iinb - sc->sc_linb)/I4BISPPPACCTINTVL;
- int ro = (sc->sc_ioutb - sc->sc_loutb)/I4BISPPPACCTINTVL;
-
- if((sc->sc_iinb == sc->sc_linb) && (sc->sc_ioutb == sc->sc_loutb))
- sc->sc_fn = 0;
- else
- sc->sc_fn = 1;
-
- sc->sc_linb = sc->sc_iinb;
- sc->sc_loutb = sc->sc_ioutb;
-
- i4b_l4_accounting(BDRV_ISPPP, unit, ACCT_DURING,
- sc->sc_ioutb, sc->sc_iinb, ro, ri, sc->sc_outb, sc->sc_inb);
- }
- sc->sc_if.if_timer = I4BISPPPACCTINTVL;
-
-#if 0 /* old stuff, keep it around */
- printf(ISPPP_FMT "transmit timeout\n", ISPPP_ARG(sc));
- i4bisppp_start(ifp);
-#endif
-}
-#endif /* I4BISPPPACCT */
-
-/*
- *===========================================================================*
- * SyncPPP layer interface routines
- *===========================================================================*
- */
-
-#if 0 /* never used ??? */
-/*---------------------------------------------------------------------------*
- * just an alias for i4bisppp_tls, but of type timeout_t
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_timeout(void *cookie)
-{
- i4bisppp_tls((struct sppp *)cookie);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * PPP this-layer-started action
- *---------------------------------------------------------------------------*
- */
-static void
-i4bisppp_tls(struct sppp *sp)
-{
- struct i4bisppp_softc *sc = (struct i4bisppp_softc *)sp;
- struct ifnet *ifp = (struct ifnet *)sp;
-
- if(sc->sc_state == ST_CONNECTED)
- return;
-
- i4b_l4_dialout(BDRV_ISPPP, IFP2UNIT(ifp));
-}
-
-/*---------------------------------------------------------------------------*
- * PPP this-layer-finished action
- *---------------------------------------------------------------------------*
- */
-static void
-i4bisppp_tlf(struct sppp *sp)
-{
- struct i4bisppp_softc *sc = (struct i4bisppp_softc *)sp;
-/* call_desc_t *cd = sc->sc_cdp; */
- struct ifnet *ifp = (struct ifnet *)sp;
-
- if(sc->sc_state != ST_CONNECTED)
- return;
-
-#if 0 /* never used ??? */
- UNTIMEOUT(i4bisppp_timeout, (void *)sp, sc->sc_ch);
-#endif
-
- i4b_l4_drvrdisc(BDRV_ISPPP, IFP2UNIT(ifp));
-}
-/*---------------------------------------------------------------------------*
- * PPP interface phase change
- *---------------------------------------------------------------------------*
- */
-static void
-i4bisppp_state_changed(struct sppp *sp, int new_state)
-{
- struct i4bisppp_softc *sc = (struct i4bisppp_softc *)sp;
-
- i4b_l4_ifstate_changed(sc->sc_cdp, new_state);
-}
-
-/*---------------------------------------------------------------------------*
- * PPP control protocol negotiation complete (run ip-up script now)
- *---------------------------------------------------------------------------*
- */
-static void
-i4bisppp_negotiation_complete(struct sppp *sp)
-{
- struct i4bisppp_softc *sc = (struct i4bisppp_softc *)sp;
-
- i4b_l4_negcomplete(sc->sc_cdp);
-}
-
-/*===========================================================================*
- * ISDN INTERFACE ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at connect time
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_connect(int unit, void *cdp)
-{
- struct i4bisppp_softc *sc = &i4bisppp_softc[unit];
- struct sppp *sp = &sc->sc_if_un.scu_sp;
- int s = splimp();
-
- sc->sc_cdp = (call_desc_t *)cdp;
- sc->sc_state = ST_CONNECTED;
-
-#if I4BISPPPACCT
- sc->sc_iinb = 0;
- sc->sc_ioutb = 0;
- sc->sc_inb = 0;
- sc->sc_outb = 0;
- sc->sc_linb = 0;
- sc->sc_loutb = 0;
- sc->sc_if.if_timer = I4BISPPPACCTINTVL;
-#endif
-
-#if 0 /* never used ??? */
- UNTIMEOUT(i4bisppp_timeout, (void *)sp, sc->sc_ch);
-#endif
-
- sp->pp_up(sp); /* tell PPP we are ready */
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at disconnect time
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_disconnect(int unit, void *cdp)
-{
- call_desc_t *cd = (call_desc_t *)cdp;
- struct i4bisppp_softc *sc = &i4bisppp_softc[unit];
- struct sppp *sp = &sc->sc_if_un.scu_sp;
-
- int s = splimp();
-
- /* new stuff to check that the active channel is being closed */
- if (cd != sc->sc_cdp)
- {
-#ifdef I4BISPPPDISCDEBUG
- printf("i4bisppp_disconnect: isppp%d channel%d not active\n",
- cd->driver_unit, cd->channelid);
-#endif
- splx(s);
- return;
- }
-
-#if I4BISPPPACCT
- sc->sc_if.if_timer = 0;
-#endif
-
- i4b_l4_accounting(BDRV_ISPPP, unit, ACCT_FINAL,
- sc->sc_ioutb, sc->sc_iinb, 0, 0, sc->sc_outb, sc->sc_inb);
-
- if (sc->sc_state == ST_CONNECTED)
- {
-#if 0 /* never used ??? */
- UNTIMEOUT(i4bisppp_timeout, (void *)sp, sc->sc_ch);
-#endif
- sc->sc_cdp = (call_desc_t *)0;
- /* do thhis here because pp_down calls i4bisppp_tlf */
- sc->sc_state = ST_IDLE;
- sp->pp_down(sp); /* tell PPP we have hung up */
- }
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is used to give a feedback from userland demon
- * in case of dial problems
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_dialresponse(int unit, int status)
-{
-/* struct i4bisppp_softc *sc = &i4bisppp_softc[unit]; */
-}
-
-/*---------------------------------------------------------------------------*
- * interface up/down
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_updown(int unit, int updown)
-{
- /* could probably do something useful here */
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when a new frame (mbuf) has been received and was put on
- * the rx queue.
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_rx_data_rdy(int unit)
-{
- struct i4bisppp_softc *sc = &i4bisppp_softc[unit];
- struct mbuf *m;
- int s;
-
- if((m = *isdn_linktab[unit]->rx_mbuf) == NULL)
- return;
-
- m->m_pkthdr.rcvif = &sc->sc_if;
- m->m_pkthdr.len = m->m_len;
-
- microtime(&sc->sc_if.if_lastchange);
-
- sc->sc_if.if_ipackets++;
- sc->sc_if.if_ibytes += m->m_pkthdr.len;
-
-#if I4BISPPPACCT
- sc->sc_inb += m->m_pkthdr.len;
-#endif
-
-#ifdef I4BISPPPDEBUG
- printf("i4bisppp_rx_data_ready: received packet!\n");
-#endif
-
-#if NBPFILTER > 0
-
-#ifdef __FreeBSD__
- if(sc->sc_if.if_bpf)
- bpf_mtap(&sc->sc_if, m);
-#endif /* __FreeBSD__ */
-
-#ifdef __NetBSD__
- if(sc->sc_if.if_bpf)
- bpf_mtap(sc->sc_if.if_bpf, m);
-#endif
-
-#endif /* NBPFILTER > 0 */
-
- s = splimp();
-
- sppp_input(&sc->sc_if, m);
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when the last frame has been sent out and there is no
- * further frame (mbuf) in the tx queue.
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_tx_queue_empty(int unit)
-{
- i4bisppp_start(&i4bisppp_softc[unit].sc_if);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * each time a packet is received or transmitted. It should
- * be used to implement an activity timeout mechanism.
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_activity(int unit, int rxtx)
-{
- i4bisppp_softc[unit].sc_cdp->last_active_time = SECOND;
-}
-
-/*---------------------------------------------------------------------------*
- * return this drivers linktab address
- *---------------------------------------------------------------------------*/
-drvr_link_t *
-i4bisppp_ret_linktab(int unit)
-{
- return(&i4bisppp_drvr_linktab[unit]);
-}
-
-/*---------------------------------------------------------------------------*
- * setup the isdn_linktab for this driver
- *---------------------------------------------------------------------------*/
-void
-i4bisppp_set_linktab(int unit, isdn_link_t *ilt)
-{
- isdn_linktab[unit] = ilt;
-}
-
-/*---------------------------------------------------------------------------*
- * initialize this drivers linktab
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_init_linktab(int unit)
-{
- i4bisppp_drvr_linktab[unit].unit = unit;
- i4bisppp_drvr_linktab[unit].bch_rx_data_ready = i4bisppp_rx_data_rdy;
- i4bisppp_drvr_linktab[unit].bch_tx_queue_empty = i4bisppp_tx_queue_empty;
- i4bisppp_drvr_linktab[unit].bch_activity = i4bisppp_activity;
- i4bisppp_drvr_linktab[unit].line_connected = i4bisppp_connect;
- i4bisppp_drvr_linktab[unit].line_disconnected = i4bisppp_disconnect;
- i4bisppp_drvr_linktab[unit].dial_response = i4bisppp_dialresponse;
- i4bisppp_drvr_linktab[unit].updown_ind = i4bisppp_updown;
-}
-
-/*===========================================================================*/
diff --git a/sys/i4b/driver/i4b_rbch.c b/sys/i4b/driver/i4b_rbch.c
deleted file mode 100644
index 9cf432c98f296..0000000000000
--- a/sys/i4b/driver/i4b_rbch.c
+++ /dev/null
@@ -1,820 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_rbch.c - device driver for raw B channel data
- * ---------------------------------------------------
- *
- * $Id: i4b_rbch.c,v 1.23 1998/12/14 09:39:10 hm Exp $
- *
- * last edit-date: [Sun Dec 13 10:19:08 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4brbch.h"
-
-#if NI4BRBCH > 0
-
-#include <sys/param.h>
-#include <sys/systm.h>
-
-#if (defined(__FreeBSD_version) && __FreeBSD_version >= 300001) || !defined(__FreeBSD__)
-#include <sys/ioccom.h>
-#include <sys/poll.h>
-#else
-#include <sys/fcntl.h>
-#include <sys/ioctl.h>
-#endif
-
-#if (defined(__FreeBSD_version) && __FreeBSD_version >= 300001)
-#include <sys/filio.h>
-#endif
-
-#include <sys/conf.h>
-#include <sys/uio.h>
-#include <sys/kernel.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <sys/proc.h>
-#include <sys/tty.h>
-
-#ifdef __NetBSD__
-extern cc_t ttydefchars;
-#define termioschars(t) memcpy((t)->c_cc, &ttydefchars, sizeof((t)->c_cc))
-#endif
-
-#ifdef __FreeBSD__
-#include "opt_devfs.h"
-#endif
-
-#ifdef DEVFS
-#include <sys/devfsext.h>
-#endif
-
-#ifdef __NetBSD__
-#include <sys/filio.h>
-#define bootverbose 0
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_debug.h>
-#else
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_debug.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_l3l4.h>
-
-#include <i4b/layer4/i4b_l4.h>
-/* initialized by L4 */
-
-static drvr_link_t rbch_drvr_linktab[NI4BRBCH];
-static isdn_link_t *isdn_linktab[NI4BRBCH];
-
-static struct rbch_softc {
- int sc_devstate; /* state of driver */
-#define ST_IDLE 0x00
-#define ST_CONNECTED 0x01
-#define ST_ISOPEN 0x02
-#define ST_RDWAITDATA 0x04
-#define ST_WRWAITEMPTY 0x08
-#define ST_NOBLOCK 0x10
-
- int sc_bprot; /* B-ch protocol used */
-
- call_desc_t *cd; /* Call Descriptor */
- struct termios it_in;
-
- struct ifqueue sc_hdlcq; /* hdlc read queue */
-#define I4BRBCHMAXQLEN 10
-
- struct selinfo selp; /* select / poll */
-
-#ifdef DEVFS
- void *devfs_token; /* device filesystem */
-#endif
-} rbch_softc[NI4BRBCH];
-
-static void rbch_rx_data_rdy(int unit);
-static void rbch_tx_queue_empty(int unit);
-static void rbch_connect(int unit, void *cdp);
-static void rbch_disconnect(int unit, void *cdp);
-static void rbch_init_linktab(int unit);
-static void rbch_clrq(int unit);
-
-#ifndef __FreeBSD__
-#define PDEVSTATIC /* - not static - */
-#define IOCTL_CMD_T u_long
-void i4brbchattach __P((void));
-int i4brbchopen __P((dev_t dev, int flag, int fmt, struct proc *p));
-int i4brbchclose __P((dev_t dev, int flag, int fmt, struct proc *p));
-int i4brbchread __P((dev_t dev, struct uio *uio, int ioflag));
-int i4brbchwrite __P((dev_t dev, struct uio *uio, int ioflag));
-int i4brbchioctl __P((dev_t dev, IOCTL_CMD_T cmd, caddr_t arg, int flag, struct proc* pr));
-int i4brbchpoll __P((dev_t dev, int events, struct proc *p));
-#endif
-
-#if BSD > 199306 && defined(__FreeBSD__)
-#define PDEVSTATIC static
-#if !defined(__FreeBSD_version) || __FreeBSD_version < 300003
-#define IOCTL_CMD_T int
-#else
-#define IOCTL_CMD_T u_long
-#endif
-
-PDEVSTATIC d_open_t i4brbchopen;
-PDEVSTATIC d_close_t i4brbchclose;
-PDEVSTATIC d_read_t i4brbchread;
-PDEVSTATIC d_read_t i4brbchwrite;
-PDEVSTATIC d_ioctl_t i4brbchioctl;
-
-#if (defined(__FreeBSD_version) && __FreeBSD_version >= 300001) || !defined(__FreeBSD__)
-PDEVSTATIC d_poll_t i4brbchpoll;
-#else
-PDEVSTATIC d_select_t i4brbchselect;
-#endif
-
-#define CDEV_MAJOR 57
-static struct cdevsw i4brbch_cdevsw = {
- i4brbchopen, i4brbchclose, i4brbchread, i4brbchwrite,
- i4brbchioctl, nostop, noreset, nodevtotty,
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- i4brbchpoll, nommap, NULL, "i4brbch", NULL, -1
-#else
- i4brbchselect, nommap, NULL, "i4brbch", NULL, -1
-#endif
-};
-
-static void i4brbchattach(void *);
-PSEUDO_SET(i4brbchattach, i4b_rbch);
-
-/*===========================================================================*
- * DEVICE DRIVER ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * initialization at kernel load time
- *---------------------------------------------------------------------------*/
-static void
-i4brbchinit(void *unused)
-{
- dev_t dev;
-
- dev = makedev(CDEV_MAJOR, 0);
-
- cdevsw_add(&dev, &i4brbch_cdevsw, NULL);
-}
-
-SYSINIT(i4brbchdev, SI_SUB_DRIVERS,
- SI_ORDER_MIDDLE+CDEV_MAJOR, &i4brbchinit, NULL);
-
-#endif /* BSD > 199306 && defined(__FreeBSD__) */
-
-/*---------------------------------------------------------------------------*
- * interface attach routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-#ifdef __FreeBSD__
-i4brbchattach(void *dummy)
-#else
-i4brbchattach()
-#endif
-{
- int i;
-
-#ifndef HACK_NO_PSEUDO_ATTACH_MSG
- printf("i4brbch: %d raw B channel access device(s) attached\n", NI4BRBCH);
-#endif
-
- for(i=0; i < NI4BRBCH; i++)
- {
-#ifdef DEVFS
- rbch_softc[i].devfs_token =
- devfs_add_devswf(&i4brbch_cdevsw, i, DV_CHR,
- UID_ROOT, GID_WHEEL, 0600,
- "i4brbch%d", i);
-#endif
- rbch_softc[i].sc_devstate = ST_IDLE;
- rbch_softc[i].sc_hdlcq.ifq_maxlen = I4BRBCHMAXQLEN;
- rbch_softc[i].it_in.c_ispeed = rbch_softc[i].it_in.c_ospeed = 64000;
- termioschars(&rbch_softc[i].it_in);
- rbch_init_linktab(i);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * open rbch device
- *---------------------------------------------------------------------------*/
-int
-i4brbchopen(dev_t dev, int flag, int fmt, struct proc *p)
-{
- int unit = minor(dev);
-
- if(unit > NI4BRBCH)
- return(ENXIO);
-
- if(rbch_softc[unit].sc_devstate & ST_ISOPEN)
- return(EBUSY);
-
- rbch_clrq(unit);
-
- rbch_softc[unit].sc_devstate |= ST_ISOPEN;
-
- DBGL4(L4_RBCHDBG, "i4brbchopen", ("unit %d, open\n", unit));
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * close rbch device
- *---------------------------------------------------------------------------*/
-int
-i4brbchclose(dev_t dev, int flag, int fmt, struct proc *p)
-{
- int unit = minor(dev);
-
- if (rbch_softc[unit].cd) {
- i4b_l4_disconnect_ind(rbch_softc[unit].cd);
- rbch_softc[unit].cd = NULL;
- }
- rbch_softc[unit].sc_devstate &= ~ST_ISOPEN;
-
- rbch_clrq(unit);
-
- DBGL4(L4_RBCHDBG, "i4brbclose", ("unit %d, close\n", unit));
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * read from rbch device
- *---------------------------------------------------------------------------*/
-int
-i4brbchread(dev_t dev, struct uio *uio, int ioflag)
-{
- struct mbuf *m;
- int s;
- int error = 0;
- int unit = minor(dev);
- struct ifqueue *iqp;
-
- DBGL4(L4_RBCHDBG, "i4brbchread", ("unit %d, enter read\n", unit));
-
- if(!(rbch_softc[unit].sc_devstate & ST_ISOPEN))
- {
- DBGL4(L4_RBCHDBG, "i4brbchread", ("unit %d, read while not open\n", unit));
- return(EIO);
- }
-
- if((rbch_softc[unit].sc_devstate & ST_NOBLOCK)) {
- if(!(rbch_softc[unit].sc_devstate & ST_CONNECTED))
- return(EWOULDBLOCK);
-
- if(rbch_softc[unit].sc_bprot == BPROT_RHDLC)
- iqp = &rbch_softc[unit].sc_hdlcq;
- else
- iqp = isdn_linktab[unit]->rx_queue;
-
- if(IF_QEMPTY(iqp) && (rbch_softc[unit].sc_devstate & ST_ISOPEN))
- return(EWOULDBLOCK);
- } else {
- while(!(rbch_softc[unit].sc_devstate & ST_CONNECTED))
- {
- DBGL4(L4_RBCHDBG, "i4brbchread", ("unit %d, wait read init\n", unit));
-
- if((error = tsleep((caddr_t) &rbch_softc[unit],
- TTIPRI | PCATCH,
- "rrrbch", 0 )) != 0)
- {
- DBGL4(L4_RBCHDBG, "i4brbchread", ("unit %d, error %d tsleep\n", unit, error));
- return(error);
- }
- }
-
- if(rbch_softc[unit].sc_bprot == BPROT_RHDLC)
- iqp = &rbch_softc[unit].sc_hdlcq;
- else
- iqp = isdn_linktab[unit]->rx_queue;
-
- while(IF_QEMPTY(iqp) && (rbch_softc[unit].sc_devstate & ST_ISOPEN))
- {
- s = splimp();
- rbch_softc[unit].sc_devstate |= ST_RDWAITDATA;
- splx(s);
-
- DBGL4(L4_RBCHDBG, "i4brbchread", ("unit %d, wait read data\n", unit));
-
- if((error = tsleep((caddr_t) &isdn_linktab[unit]->rx_queue,
- TTIPRI | PCATCH,
- "rrbch", 0 )) != 0)
- {
- DBGL4(L4_RBCHDBG, "i4brbchread", ("unit %d, error %d tsleep read\n", unit, error));
- rbch_softc[unit].sc_devstate &= ~ST_RDWAITDATA;
- return(error);
- }
- }
- }
-
- s = splimp();
-
- IF_DEQUEUE(iqp, m);
-
- DBGL4(L4_RBCHDBG, "i4brbchread", ("unit %d, read %d bytes\n", unit, m->m_len));
-
- if(m && m->m_len)
- {
- error = uiomove(m->m_data, m->m_len, uio);
- }
- else
- {
- DBGL4(L4_RBCHDBG, "i4brbchread", ("unit %d, error %d uiomove\n", unit, error));
- error = EIO;
- }
-
- if(m)
- i4b_Bfreembuf(m);
-
- splx(s);
-
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * write to rbch device
- *---------------------------------------------------------------------------*/
-int
-i4brbchwrite(dev_t dev, struct uio * uio, int ioflag)
-{
- struct mbuf *m;
- int s;
- int error = 0;
- int unit = minor(dev);
-
- DBGL4(L4_RBCHDBG, "i4brbchwrite", ("unit %d, write\n", unit));
-
- if(!(rbch_softc[unit].sc_devstate & ST_ISOPEN))
- {
- DBGL4(L4_RBCHDBG, "i4brbchwrite", ("unit %d, write while not open\n", unit));
- return(EIO);
- }
-
- if((rbch_softc[unit].sc_devstate & ST_NOBLOCK)) {
- if(!(rbch_softc[unit].sc_devstate & ST_CONNECTED))
- return(EWOULDBLOCK);
- if(IF_QFULL(isdn_linktab[unit]->tx_queue) && (rbch_softc[unit].sc_devstate & ST_ISOPEN))
- return(EWOULDBLOCK);
- } else {
- while(!(rbch_softc[unit].sc_devstate & ST_CONNECTED))
- {
- DBGL4(L4_RBCHDBG, "i4brbchwrite", ("unit %d, write wait init\n", unit));
-
- error = tsleep((caddr_t) &rbch_softc[unit],
- TTIPRI | PCATCH,
- "wrrbch", 0 );
- if(error == ERESTART)
- return (ERESTART);
- else if(error == EINTR) {
- printf("\n ========= i4brbchwrite, EINTR during wait init ======== \n");
- return(EINTR);
- } else if(error) {
- DBGL4(L4_RBCHDBG, "i4brbchwrite", ("unit %d, error %d tsleep init\n", unit, error));
- return(error);
- }
-/*XXX*/ tsleep((caddr_t) &rbch_softc[unit], TTIPRI | PCATCH, "xrbch", (hz*1));
- }
-
- while(IF_QFULL(isdn_linktab[unit]->tx_queue) && (rbch_softc[unit].sc_devstate & ST_ISOPEN))
- {
- s = splimp();
- rbch_softc[unit].sc_devstate |= ST_WRWAITEMPTY;
- splx(s);
-
- DBGL4(L4_RBCHDBG, "i4brbchwrite", ("unit %d, write queue full\n", unit));
-
- if ((error = tsleep((caddr_t) &isdn_linktab[unit]->tx_queue,
- TTIPRI | PCATCH,
- "wrbch", 0)) != 0) {
- rbch_softc[unit].sc_devstate &= ~ST_WRWAITEMPTY;
- if(error == ERESTART) {
- return(ERESTART);
- } else if(error == EINTR) {
- printf("\n ========= i4brbchwrite, EINTR during wait write ======== \n");
- return(error);
- } else if(error) {
- DBGL4(L4_RBCHDBG, "i4brbchwrite",
- ("unit %d, error %d tsleep write\n", unit, error));
- return(error);
- }
- }
- }
- }
-
- s = splimp();
-
- if(!(rbch_softc[unit].sc_devstate & ST_ISOPEN))
- {
- DBGL4(L4_RBCHDBG, "i4brbchwrite", ("unit %d, not open anymore\n", unit));
- splx(s);
- return(EIO);
- }
-
- if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
- {
- m->m_len = min(BCH_MAX_DATALEN, uio->uio_resid);
-
- DBGL4(L4_RBCHDBG, "i4brbchwrite", ("unit %d, write %d bytes\n", unit, m->m_len));
-
- error = uiomove(m->m_data, m->m_len, uio);
-
- IF_ENQUEUE(isdn_linktab[unit]->tx_queue, m);
-
- (*isdn_linktab[unit]->bch_tx_start)(isdn_linktab[unit]->unit, isdn_linktab[unit]->channel);
- }
-
- splx(s);
-
- return(error);
-}
-
-PDEVSTATIC int
-i4brbchioctl(dev_t dev, IOCTL_CMD_T cmd, caddr_t data, int flag, struct proc* p) {
- int error = 0;
- int unit = minor(dev);
-
- switch(cmd)
- {
-#if 0
- case I4B_RBCH_DIALOUT:
-if(bootverbose)printf("EE-rbch%d: attempting dialout (ioctl)\n", unit);
- i4b_l4_dialout(BDRV_RBCH, unit);
- break;
-#endif
-
- case FIOASYNC: /* Set async mode */
- if (*(int *)data) {
-if(bootverbose)printf("EE-rbch%d: setting async mode\n", unit);
- } else {
-if(bootverbose)printf("EE-rbch%d: clearing async mode\n", unit);
- }
- break;
- case FIONBIO:
- if (*(int *)data) {
-if(bootverbose)printf("EE-rbch%d: setting non-blocking mode\n", unit);
- rbch_softc[unit].sc_devstate |= ST_NOBLOCK;
- } else {
-if(bootverbose)printf("EE-rbch%d: clearing non-blocking mode\n", unit);
- rbch_softc[unit].sc_devstate &= ~ST_NOBLOCK;
- }
- break;
- case TIOCCDTR: /* Clear DTR */
- if(rbch_softc[unit].sc_devstate & ST_CONNECTED) {
-if(bootverbose)printf("EE-rbch%d: disconnecting for DTR down\n", unit);
- i4b_l4_disconnect_ind(rbch_softc[unit].cd);
- }
- break;
- case TIOCSDTR: /* Set DTR */
-if(bootverbose)printf("EE-rbch%d: attempting dialout (DTR)\n", unit);
- i4b_l4_dialout(BDRV_RBCH, unit);
- break;
- case TIOCSETA: /* Set termios struct */
- break;
- case TIOCGETA: /* Get termios struct */
- *(struct termios *)data = rbch_softc[unit].it_in;
- break;
- case TIOCMGET:
- *(int *)data = TIOCM_LE|TIOCM_DTR|TIOCM_RTS|TIOCM_CTS|TIOCM_DSR;
- if (rbch_softc[unit].sc_devstate & ST_CONNECTED)
- *(int *)data |= TIOCM_CD;
- break;
- default: /* Unknown stuff */
- printf("\n ========= i4brbch%d - ioctl, unknown cmd %lx ==================== \n",
- unit,
- (u_long)cmd);
- error = EINVAL;
- break;
- }
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * device driver poll
- *---------------------------------------------------------------------------*/
-#if (defined(__FreeBSD_version) && __FreeBSD_version >= 300001) || !defined(__FreeBSD__)
-
-PDEVSTATIC int
-i4brbchpoll(dev_t dev, int events, struct proc *p)
-{
- int revents = 0; /* Events we found */
- int s;
- int unit = minor(dev);
-
- /* We can't check for anything but IN or OUT */
-
- if((events & (POLLIN|POLLOUT)) == 0)
- return(POLLNVAL);
-
- s = splhigh();
-
- if(!(rbch_softc[unit].sc_devstate & ST_ISOPEN))
- {
- splx(s);
- return(POLLNVAL);
- }
-
- /*
- * Writes are OK if we are connected and the
- * transmit queue can take them
- */
-
- if((events & POLLOUT) &&
- (rbch_softc[unit].sc_devstate & ST_CONNECTED) &&
- !IF_QFULL(isdn_linktab[unit]->tx_queue))
- {
- revents |= POLLOUT;
- }
-
- /* ... while reads are OK if we have any data */
-
- if((events & POLLIN) &&
- (rbch_softc[unit].sc_devstate & ST_CONNECTED))
- {
- struct ifqueue *iqp;
-
- if(rbch_softc[unit].sc_bprot == BPROT_RHDLC)
- iqp = &rbch_softc[unit].sc_hdlcq;
- else
- iqp = isdn_linktab[unit]->rx_queue;
-
- if(!IF_QEMPTY(iqp))
- revents |= POLLIN;
- }
-
- if(revents == 0)
- selrecord(p, &rbch_softc[unit].selp);
-
- splx(s);
- return(revents);
-}
-
-#else
-
-/*---------------------------------------------------------------------------*
- * device driver select
- *---------------------------------------------------------------------------*/
-static int
-i4brbchselect(dev_t dev, int rw, struct proc *p)
-{
- int unit = minor(dev);
- int s;
-
- s = splhigh();
-
- if(!(rbch_softc[unit].sc_devstate & ST_ISOPEN))
- {
- splx(s);
- DBGL4(L4_RBCHDBG, "i4brbchselect", ("unit %d, not open anymore\n", unit));
- return(1);
- }
-
- if(rbch_softc[unit].sc_devstate & ST_CONNECTED)
- {
- struct ifqueue *iqp;
-
- switch(rw)
- {
- case FREAD:
- if(rbch_softc[unit].sc_bprot == BPROT_RHDLC)
- iqp = &rbch_softc[unit].sc_hdlcq;
- else
- iqp = isdn_linktab[unit]->rx_queue;
-
- if(!IF_QEMPTY(iqp))
- return(1);
- break;
-
- case FWRITE:
- if(!IF_QFULL(isdn_linktab[unit]->rx_queue))
- return(1);
- break;
-
- default:
- return 0;
- }
- }
- selrecord(p, &rbch_softc[unit].selp);
- return(0);
-}
-
-#endif /* defined(__FreeBSD_version) && __FreeBSD_version >= 300001 */
-
-/*===========================================================================*
- * ISDN INTERFACE ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at connect time
- *---------------------------------------------------------------------------*/
-static void
-rbch_connect(int unit, void *cdp)
-{
- call_desc_t *cd = (call_desc_t *)cdp;
-
- rbch_softc[unit].sc_bprot = cd->bprot;
-
- if(!(rbch_softc[unit].sc_devstate & ST_CONNECTED))
- {
- DBGL4(L4_RBCHDBG, "rbch_connect", ("unit %d, wakeup\n", unit));
- rbch_softc[unit].sc_devstate |= ST_CONNECTED;
- rbch_softc[unit].cd = cdp;
- wakeup((caddr_t) &rbch_softc[unit]);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at disconnect time
- *---------------------------------------------------------------------------*/
-static void
-rbch_disconnect(int unit, void *cdp)
-{
- /* call_desc_t *cd = (call_desc_t *)cdp; */
-
- DBGL4(L4_RBCHDBG, "rbch_disconnect", ("unit %d, deinit\n", unit));
- rbch_softc[unit].sc_devstate &= ~ST_CONNECTED;
- rbch_softc[unit].cd = NULL;
-}
-
-/*---------------------------------------------------------------------------*
- * feedback from daemon in case of dial problems
- *---------------------------------------------------------------------------*/
-static void
-rbch_dialresponse(int unit, int status)
-{
-}
-
-/*---------------------------------------------------------------------------*
- * interface up/down
- *---------------------------------------------------------------------------*/
-static void
-rbch_updown(int unit, int updown)
-{
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when a new frame (mbuf) has been received and is to be put on
- * the rx queue.
- *---------------------------------------------------------------------------*/
-static void
-rbch_rx_data_rdy(int unit)
-{
- if(rbch_softc[unit].sc_bprot == BPROT_RHDLC)
- {
- register struct mbuf *m;
-
- if((m = *isdn_linktab[unit]->rx_mbuf) == NULL)
- return;
-
- m->m_pkthdr.len = m->m_len;
-
- if(IF_QFULL(&(rbch_softc[unit].sc_hdlcq)))
- {
- DBGL4(L4_RBCHDBG, "rbch_rx_data_rdy", ("unit %d: hdlc rx queue full!\n", unit));
- m_freem(m);
- }
- else
- {
- IF_ENQUEUE(&(rbch_softc[unit].sc_hdlcq), m);
- }
- }
-
- if(rbch_softc[unit].sc_devstate & ST_RDWAITDATA)
- {
- DBGL4(L4_RBCHDBG, "rbch_rx_data_rdy", ("unit %d, wakeup\n", unit));
- rbch_softc[unit].sc_devstate &= ~ST_RDWAITDATA;
- wakeup((caddr_t) &isdn_linktab[unit]->rx_queue);
- }
- else
- {
- DBGL4(L4_RBCHDBG, "rbch_rx_data_rdy", ("unit %d, NO wakeup\n", unit));
- }
- selwakeup(&rbch_softc[unit].selp);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when the last frame has been sent out and there is no
- * further frame (mbuf) in the tx queue.
- *---------------------------------------------------------------------------*/
-static void
-rbch_tx_queue_empty(int unit)
-{
- if(rbch_softc[unit].sc_devstate & ST_WRWAITEMPTY)
- {
- DBGL4(L4_RBCHDBG, "rbch_tx_queue_empty", ("unit %d, wakeup\n", unit));
- rbch_softc[unit].sc_devstate &= ~ST_WRWAITEMPTY;
- wakeup((caddr_t) &isdn_linktab[unit]->tx_queue);
- }
- else
- {
- DBGL4(L4_RBCHDBG, "rbch_tx_queue_empty", ("unit %d, NO wakeup\n", unit));
- }
- selwakeup(&rbch_softc[unit].selp);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * each time a packet is received or transmitted
- *---------------------------------------------------------------------------*/
-static void
-rbch_activity(int unit, int rxtx)
-{
- if (rbch_softc[unit].cd)
- rbch_softc[unit].cd->last_active_time = SECOND;
- selwakeup(&rbch_softc[unit].selp);
-}
-
-/*---------------------------------------------------------------------------*
- * clear an hdlc rx queue for a rbch unit
- *---------------------------------------------------------------------------*/
-static void
-rbch_clrq(int unit)
-{
- int x;
- struct mbuf *m;
-
- for(;;)
- {
- x = splimp();
- IF_DEQUEUE(&rbch_softc[unit].sc_hdlcq, m);
- splx(x);
- if(m)
- m_freem(m);
- else
- break;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * return this drivers linktab address
- *---------------------------------------------------------------------------*/
-drvr_link_t *
-rbch_ret_linktab(int unit)
-{
- rbch_init_linktab(unit);
- return(&rbch_drvr_linktab[unit]);
-}
-
-/*---------------------------------------------------------------------------*
- * setup the isdn_linktab for this driver
- *---------------------------------------------------------------------------*/
-void
-rbch_set_linktab(int unit, isdn_link_t *ilt)
-{
- isdn_linktab[unit] = ilt;
-}
-
-/*---------------------------------------------------------------------------*
- * initialize this drivers linktab
- *---------------------------------------------------------------------------*/
-static void
-rbch_init_linktab(int unit)
-{
- rbch_drvr_linktab[unit].unit = unit;
- rbch_drvr_linktab[unit].bch_rx_data_ready = rbch_rx_data_rdy;
- rbch_drvr_linktab[unit].bch_tx_queue_empty = rbch_tx_queue_empty;
- rbch_drvr_linktab[unit].bch_activity = rbch_activity;
- rbch_drvr_linktab[unit].line_connected = rbch_connect;
- rbch_drvr_linktab[unit].line_disconnected = rbch_disconnect;
- rbch_drvr_linktab[unit].dial_response = rbch_dialresponse;
- rbch_drvr_linktab[unit].updown_ind = rbch_updown;
-}
-
-/*===========================================================================*/
-
-#endif /* NI4BRBCH > 0 */
diff --git a/sys/i4b/driver/i4b_tel.c b/sys/i4b/driver/i4b_tel.c
deleted file mode 100644
index 81b38a614b061..0000000000000
--- a/sys/i4b/driver/i4b_tel.c
+++ /dev/null
@@ -1,713 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_tel.c - device driver for ISDN telephony
- * --------------------------------------------
- *
- * $Id: i4b_tel.c,v 1.18 1998/12/14 10:31:53 hm Exp $
- *
- * last edit-date: [Mon Dec 14 11:32:06 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4btel.h"
-
-#if NI4BTEL > 0
-
-#undef I4BTELDEBUG
-
-#include <sys/param.h>
-#include <sys/systm.h>
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-
-#include <sys/conf.h>
-#include <sys/uio.h>
-#include <sys/kernel.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <sys/proc.h>
-#include <sys/tty.h>
-
-#ifdef __FreeBSD__
-#include "opt_devfs.h"
-#endif
-
-#ifdef DEVFS
-#include <sys/devfsext.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_tel_ioctl.h>
-#else
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_tel_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_l3l4.h>
-
-typedef struct {
- drvr_link_t drvr_linktab; /* driver linktab */
- isdn_link_t *isdn_linktab; /* isdn linktab */
- int devstate; /* state of this unit */
-#define ST_IDLE 0x00 /* idle */
-#define ST_CONNECTED 0x01 /* isdn connected state */
-#define ST_ISOPEN 0x02 /* userland opened */
-#define ST_RDWAITDATA 0x04 /* userland read waiting */
-#define ST_WRWAITEMPTY 0x08 /* userland write waiting */
- int audiofmt; /* audio format conversion */
- call_desc_t *cdp; /* call descriptor pointer */
-#ifdef DEVFS
- void *devfs_token; /* token for DEVFS */
-#endif
-} tel_sc_t;
-
-static tel_sc_t tel_sc[NI4BTEL];
-
-/* forward decl */
-
-static void tel_rx_data_rdy(int unit);
-static void tel_tx_queue_empty(int unit);
-static void tel_init_linktab(int unit);
-static void tel_connect(int unit, void *cdp);
-static void tel_disconnect(int unit, void *cdp);
-
-static unsigned char alaw_ulaw[];
-static unsigned char ulaw_alaw[];
-
-#ifndef __FreeBSD__
-#define PDEVSTATIC /* - not static - */
-PDEVSTATIC void i4btelattach __P((void));
-PDEVSTATIC int i4btelioctl __P((dev_t dev, int cmd, caddr_t data, int flag, struct proc *p));
-int i4btelopen __P((dev_t dev, int flag, int fmt, struct proc *p));
-int i4btelclose __P((dev_t dev, int flag, int fmt, struct proc *p));
-int i4btelread __P((dev_t dev, struct uio *uio, int ioflag));
-int i4btelwrite __P((dev_t dev, struct uio * uio, int ioflag));
-#endif
-#if BSD > 199306 && defined(__FreeBSD__)
-#define PDEVSTATIC static
-PDEVSTATIC d_open_t i4btelopen;
-PDEVSTATIC d_close_t i4btelclose;
-PDEVSTATIC d_read_t i4btelread;
-PDEVSTATIC d_read_t i4btelwrite;
-PDEVSTATIC d_ioctl_t i4btelioctl;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-PDEVSTATIC d_poll_t i4btelpoll;
-#endif
-
-#define CDEV_MAJOR 56
-static struct cdevsw i4btel_cdevsw = {
- i4btelopen, i4btelclose, i4btelread, i4btelwrite,
- i4btelioctl, nostop, noreset, nodevtotty,
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- i4btelpoll, nommap, NULL, "i4btel", NULL, -1
-#else
- noselect, nommap, NULL, "i4btel", NULL, -1
-#endif
-};
-
-PDEVSTATIC void i4btelinit(void *unused);
-
-PDEVSTATIC void i4btelattach(void *);
-PSEUDO_SET(i4btelattach, i4b_tel);
-
-/*===========================================================================*
- * DEVICE DRIVER ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * initialization at kernel load time
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-i4btelinit(void *unused)
-{
- dev_t dev;
-
- dev = makedev(CDEV_MAJOR, 0);
-
- cdevsw_add(&dev, &i4btel_cdevsw, NULL);
-}
-
-SYSINIT(i4bteldev, SI_SUB_DRIVERS,
- SI_ORDER_MIDDLE+CDEV_MAJOR, &i4btelinit, NULL);
-
-#endif /* BSD > 199306 && defined(__FreeBSD__) */
-
-/*---------------------------------------------------------------------------*
- * interface attach routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-#ifdef __FreeBSD__
-i4btelattach(void *dummy)
-#else
-i4btelattach()
-#endif
-{
- int i;
-
-#ifndef HACK_NO_PSEUDO_ATTACH_MSG
- printf("i4btel: %d ISDN telephony interface device(s) attached\n", NI4BTEL);
-#endif
-
- for(i=0; i < NI4BTEL; i++)
- {
- tel_sc[i].devstate = ST_IDLE;
- tel_sc[i].audiofmt = CVT_NONE;
- tel_init_linktab(i);
-#ifdef DEVFS
- tel_sc[i].devfs_token
- = devfs_add_devswf(&i4btel_cdevsw, i, DV_CHR,
- UID_ROOT, GID_WHEEL, 0600,
- "i4btel%d", i);
-#endif
- }
-}
-
-/*---------------------------------------------------------------------------*
- * open tel device
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4btelopen(dev_t dev, int flag, int fmt, struct proc *p)
-{
- int unit = minor(dev);
- tel_sc_t *sc;
-
- if(unit > NI4BTEL)
- return(ENXIO);
-
- sc = &tel_sc[unit];
-
- if(!(sc->devstate & ST_CONNECTED))
- return(EIO);
-
- if(sc->devstate & ST_ISOPEN)
- return(EBUSY);
-
- sc->devstate |= ST_ISOPEN;
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * close tel device
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4btelclose(dev_t dev, int flag, int fmt, struct proc *p)
-{
- int unit = minor(dev);
- tel_sc_t *sc;
- int error = 0;
-
- if(unit > NI4BTEL)
- return(ENXIO);
-
- sc = &tel_sc[unit];
-
- if(sc->isdn_linktab != NULL && sc->isdn_linktab->tx_queue != NULL)
- {
- while(!(IF_QEMPTY(sc->isdn_linktab->tx_queue)))
- {
- sc->devstate |= ST_WRWAITEMPTY;
-
- if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
- TTIPRI | PCATCH, "wtcl", 0)) != 0)
- {
- break;
- }
- }
- sc->devstate &= ~ST_WRWAITEMPTY;
- }
- sc->devstate &= ~ST_ISOPEN;
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * i4btelioctl - device driver ioctl routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300003
-i4btelioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
-#else
-i4btelioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
-#endif
-{
- int error = 0;
- struct mbuf *m;
- int s;
- tel_sc_t *sc = &tel_sc[minor(dev)];
-
- switch(cmd)
- {
- case I4B_TEL_GETAUDIOFMT:
- *(int *)data = sc->audiofmt;
- break;
-
- case I4B_TEL_SETAUDIOFMT:
- sc->audiofmt = *(int *)data;
- break;
-
- case I4B_TEL_EMPTYINPUTQUEUE:
- s = splimp();
- while((sc->devstate & ST_CONNECTED) &&
- (sc->devstate & ST_ISOPEN) &&
- !IF_QEMPTY(sc->isdn_linktab->rx_queue))
- {
- IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
- if(m)
- i4b_Bfreembuf(m);
- }
- splx(s);
- break;
-
- default:
- error = ENOTTY;
- break;
- }
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * read from tel device
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4btelread(dev_t dev, struct uio *uio, int ioflag)
-{
- struct mbuf *m;
- int s;
- int error = 0;
- tel_sc_t *sc = &tel_sc[minor(dev)];
-
- if(!(sc->devstate & ST_CONNECTED))
- return(EIO);
-
- if(!(sc->devstate & ST_ISOPEN))
- return(EIO);
-
-#ifdef NOTDEF
- while(!(sc->devstate & ST_CONNECTED))
- {
- if((error = tsleep((caddr_t) &sc->devstate,
- TTIPRI | PCATCH,
- "rrtel", 0 )) != 0)
- {
- return(error);
- }
- }
-#endif
-
- while(IF_QEMPTY(sc->isdn_linktab->rx_queue) &&
- (sc->devstate & ST_ISOPEN) &&
- (sc->devstate & ST_CONNECTED))
- {
- sc->devstate |= ST_RDWAITDATA;
-
- if((error = tsleep((caddr_t) &sc->isdn_linktab->rx_queue,
- TTIPRI | PCATCH,
- "rtel", 0 )) != 0)
- {
- sc->devstate &= ~ST_RDWAITDATA;
- return(error);
- }
- }
-
- if(!(sc->devstate & ST_ISOPEN))
- {
- return(EIO);
- }
-
- if(!(sc->devstate & ST_CONNECTED))
- {
- return(EIO);
- }
-
- s = splimp();
-
- IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
-
- if(m && m->m_len)
- {
- if(sc->audiofmt == CVT_ALAW2ULAW)
- {
- int i;
- for(i = 0; i < m->m_len; i++)
- m->m_data[i] = alaw_ulaw[(int)m->m_data[i]];
- }
- error = uiomove(m->m_data, m->m_len, uio);
- }
- else
- {
- error = EIO;
- }
-
- if(m)
- i4b_Bfreembuf(m);
-
- splx(s);
-
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * write to tel device
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4btelwrite(dev_t dev, struct uio * uio, int ioflag)
-{
- struct mbuf *m;
- int s;
- int error = 0;
- tel_sc_t *sc = &tel_sc[minor(dev)];
-
- if(!(sc->devstate & ST_CONNECTED))
- return(EIO);
-
- if(!(sc->devstate & ST_ISOPEN))
- {
- return(EIO);
- }
-
-#ifdef NOTDEF
- while(!(sc->devstate & ST_CONNECTED))
- {
- if((error = tsleep((caddr_t) &sc->devstate,
- TTIPRI | PCATCH,
- "wrtel", 0 )) != 0)
- {
- return(error);
- }
-
- /*
- * XXX the originations B channel gets much earlier
- * switched thru than the destinations B channel, so
- * if the origination starts to send at once, some
- * 200 bytes (at my site) or so get lost, so i delay
- * a bit before sending. (-hm)
- */
-
- tsleep((caddr_t) &sc->devstate, TTIPRI | PCATCH, "xtel", (hz*1));
- }
-#endif
-
- while((IF_QFULL(sc->isdn_linktab->tx_queue)) &&
- (sc->devstate & ST_ISOPEN))
- {
- sc->devstate |= ST_WRWAITEMPTY;
-
- if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
- TTIPRI | PCATCH, "wtel", 0)) != 0)
- {
- sc->devstate &= ~ST_WRWAITEMPTY;
- return(error);
- }
- }
-
- if(!(sc->devstate & ST_ISOPEN))
- {
- return(EIO);
- }
-
- if(!(sc->devstate & ST_CONNECTED))
- {
- return(EIO);
- }
-
- s = splimp();
-
- if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
- {
- m->m_len = min(BCH_MAX_DATALEN, uio->uio_resid);
-
- error = uiomove(m->m_data, m->m_len, uio);
-
- if(sc->audiofmt == CVT_ALAW2ULAW)
- {
- int i;
- for(i = 0; i < m->m_len; i++)
- m->m_data[i] = ulaw_alaw[(int)m->m_data[i]];
- }
-
- IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
-
- (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
- }
-
- splx(s);
-
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * poll
- *---------------------------------------------------------------------------*/
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-PDEVSTATIC int
-i4btelpoll (dev_t dev, int events, struct proc *p)
-{
- return (ENODEV);
-}
-#endif
-
-/*===========================================================================*
- * ISDN INTERFACE ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
-* this routine is called from L4 handler at connect time
- *---------------------------------------------------------------------------*/
-static void
-tel_connect(int unit, void *cdp)
-{
- tel_sc_t *sc = &tel_sc[unit];
-
- sc->cdp = (call_desc_t *)cdp;
-
-#ifdef NOTDEF
- if(!(sc->devstate & ST_CONNECTED))
- {
- sc->devstate |= ST_CONNECTED;
- wakeup((caddr_t) &sc->devstate);
- }
-#else
- sc->devstate |= ST_CONNECTED;
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at disconnect time
- *---------------------------------------------------------------------------*/
-static void
-tel_disconnect(int unit, void *cdp)
-{
-/* call_desc_t *cd = (call_desc_t *)cdp; */
-
- tel_sc_t *sc = &tel_sc[unit];
-
- sc->devstate &= ~ST_CONNECTED;
-
- if(sc->devstate & ST_RDWAITDATA)
- {
- sc->devstate &= ~ST_RDWAITDATA;
- wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
- }
-
- if(sc->devstate & ST_WRWAITEMPTY)
- {
- sc->devstate &= ~ST_WRWAITEMPTY;
- wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * feedback from daemon in case of dial problems
- *---------------------------------------------------------------------------*/
-static void
-tel_dialresponse(int unit, int status)
-{
-}
-
-/*---------------------------------------------------------------------------*
- * interface up/down
- *---------------------------------------------------------------------------*/
-static void
-tel_updown(int unit, int updown)
-{
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when a new frame (mbuf) has been received and was put on
- * the rx queue.
- *---------------------------------------------------------------------------*/
-static void
-tel_rx_data_rdy(int unit)
-{
- tel_sc_t *sc = &tel_sc[unit];
-
- if(sc->devstate & ST_RDWAITDATA)
- {
- sc->devstate &= ~ST_RDWAITDATA;
- wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when the last frame has been sent out and there is no
- * further frame (mbuf) in the tx queue.
- *---------------------------------------------------------------------------*/
-static void
-tel_tx_queue_empty(int unit)
-{
- tel_sc_t *sc = &tel_sc[unit];
-
- if(sc->devstate & ST_WRWAITEMPTY)
- {
- sc->devstate &= ~ST_WRWAITEMPTY;
- wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * each time a packet is received or transmitted.
- *---------------------------------------------------------------------------*/
-static void
-tel_activity(int unit, int rxtx)
-{
- tel_sc[unit].cdp->last_active_time = SECOND;
-}
-
-/*---------------------------------------------------------------------------*
- * return this drivers linktab address
- *---------------------------------------------------------------------------*/
-drvr_link_t *
-tel_ret_linktab(int unit)
-{
- tel_sc_t *sc = &tel_sc[unit];
-
- tel_init_linktab(unit);
- return(&sc->drvr_linktab);
-}
-
-/*---------------------------------------------------------------------------*
- * setup the isdn_linktab for this driver
- *---------------------------------------------------------------------------*/
-void
-tel_set_linktab(int unit, isdn_link_t *ilt)
-{
- tel_sc_t *sc = &tel_sc[unit];
- sc->isdn_linktab = ilt;
-}
-
-/*---------------------------------------------------------------------------*
- * initialize this drivers linktab
- *---------------------------------------------------------------------------*/
-static void
-tel_init_linktab(int unit)
-{
- tel_sc_t *sc = &tel_sc[unit];
-
- sc->drvr_linktab.unit = unit;
- sc->drvr_linktab.bch_rx_data_ready = tel_rx_data_rdy;
- sc->drvr_linktab.bch_tx_queue_empty = tel_tx_queue_empty;
- sc->drvr_linktab.bch_activity = tel_activity;
- sc->drvr_linktab.line_connected = tel_connect;
- sc->drvr_linktab.line_disconnected = tel_disconnect;
- sc->drvr_linktab.dial_response = tel_dialresponse;
- sc->drvr_linktab.updown_ind = tel_updown;
-}
-
-/*===========================================================================*
- * AUDIO FORMAT CONVERSION
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * A-law to mu-law conversion
- *---------------------------------------------------------------------------*/
-static unsigned char alaw_ulaw[] = {
- 0x002a, 0x00a9, 0x005f, 0x00e3, 0x001f, 0x009f, 0x0048, 0x00c8,
- 0x0039, 0x00b9, 0x006f, 0x00f7, 0x001f, 0x009f, 0x0055, 0x00d7,
- 0x0022, 0x00a1, 0x005b, 0x00dd, 0x001f, 0x009f, 0x0040, 0x00c0,
- 0x0031, 0x00b1, 0x0067, 0x00eb, 0x001f, 0x009f, 0x004e, 0x00cf,
- 0x002e, 0x00ad, 0x0063, 0x00e7, 0x001f, 0x009f, 0x004c, 0x00cc,
- 0x003d, 0x00bd, 0x0077, 0x00ff, 0x001f, 0x009f, 0x0059, 0x00db,
- 0x0026, 0x00a5, 0x005d, 0x00df, 0x001f, 0x009f, 0x0044, 0x00c4,
- 0x0035, 0x00b5, 0x006b, 0x00ef, 0x001f, 0x009f, 0x0051, 0x00d3,
- 0x0028, 0x00a7, 0x005f, 0x00e3, 0x001f, 0x009f, 0x0046, 0x00c6,
- 0x0037, 0x00b7, 0x006f, 0x00f7, 0x001f, 0x009f, 0x0053, 0x00d5,
- 0x0020, 0x009f, 0x005b, 0x00dd, 0x001f, 0x009f, 0x003f, 0x00bf,
- 0x002f, 0x00af, 0x0067, 0x00eb, 0x001f, 0x009f, 0x004d, 0x00ce,
- 0x002c, 0x00ab, 0x0063, 0x00e7, 0x001f, 0x009f, 0x004a, 0x00ca,
- 0x003b, 0x00bb, 0x0077, 0x00ff, 0x001f, 0x009f, 0x0057, 0x00d9,
- 0x0024, 0x00a3, 0x005d, 0x00df, 0x001f, 0x009f, 0x0042, 0x00c2,
- 0x0033, 0x00b3, 0x006b, 0x00ef, 0x001f, 0x009f, 0x004f, 0x00d1,
- 0x002b, 0x00aa, 0x0063, 0x00e3, 0x001f, 0x009f, 0x0049, 0x00c9,
- 0x003a, 0x00ba, 0x0077, 0x00f7, 0x001f, 0x009f, 0x0057, 0x00d7,
- 0x0023, 0x00a2, 0x005d, 0x00dd, 0x001f, 0x009f, 0x0041, 0x00c1,
- 0x0032, 0x00b2, 0x006b, 0x00eb, 0x001f, 0x009f, 0x004f, 0x00cf,
- 0x002f, 0x00ae, 0x0067, 0x00e7, 0x001f, 0x009f, 0x004d, 0x00cd,
- 0x003e, 0x00be, 0x00ff, 0x00ff, 0x001f, 0x009f, 0x005b, 0x00db,
- 0x0027, 0x00a6, 0x005f, 0x00df, 0x001f, 0x009f, 0x0045, 0x00c5,
- 0x0036, 0x00b6, 0x006f, 0x00ef, 0x001f, 0x009f, 0x0053, 0x00d3,
- 0x0029, 0x00a8, 0x005f, 0x00e3, 0x001f, 0x009f, 0x0047, 0x00c7,
- 0x0038, 0x00b8, 0x006f, 0x00f7, 0x001f, 0x009f, 0x0055, 0x00d5,
- 0x0021, 0x00a0, 0x005b, 0x00dd, 0x001f, 0x009f, 0x003f, 0x00bf,
- 0x0030, 0x00b0, 0x0067, 0x00eb, 0x001f, 0x009f, 0x004e, 0x00ce,
- 0x002d, 0x00ac, 0x0063, 0x00e7, 0x001f, 0x009f, 0x004b, 0x00cb,
- 0x003c, 0x00bc, 0x0077, 0x00ff, 0x001f, 0x009f, 0x0059, 0x00d9,
- 0x0025, 0x00a4, 0x005d, 0x00df, 0x001f, 0x009f, 0x0043, 0x00c3,
- 0x0034, 0x00b4, 0x006b, 0x00ef, 0x001f, 0x009f, 0x0051, 0x00d1
-};
-
-/*---------------------------------------------------------------------------*
- * mu-law to A-law conversion
- *---------------------------------------------------------------------------*/
-static unsigned char ulaw_alaw[] = {
- 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc,
- 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc,
- 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc,
- 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00fc, 0x00ac,
- 0x0050, 0x00d0, 0x0010, 0x0090, 0x0070, 0x00f0, 0x0030, 0x00b0,
- 0x0040, 0x00c0, 0x0000, 0x0080, 0x0060, 0x00e0, 0x0020, 0x00a0,
- 0x00d8, 0x0018, 0x0098, 0x0078, 0x00f8, 0x0038, 0x00b8, 0x0048,
- 0x00c8, 0x0008, 0x0088, 0x0068, 0x00e8, 0x0028, 0x00a8, 0x00d6,
- 0x0096, 0x0076, 0x00f6, 0x0036, 0x00b6, 0x0046, 0x00c6, 0x0006,
- 0x0086, 0x0066, 0x00e6, 0x0026, 0x00a6, 0x00de, 0x009e, 0x00fe,
- 0x00fe, 0x00be, 0x00be, 0x00ce, 0x00ce, 0x008e, 0x008e, 0x00ee,
- 0x00ee, 0x00d2, 0x00d2, 0x00f2, 0x00f2, 0x00c2, 0x00c2, 0x00e2,
- 0x00e2, 0x00e2, 0x00da, 0x00da, 0x00da, 0x00da, 0x00fa, 0x00fa,
- 0x00fa, 0x00fa, 0x00ca, 0x00ca, 0x00ca, 0x00ca, 0x00ea, 0x00ea,
- 0x00ea, 0x00ea, 0x00ea, 0x00ea, 0x00eb, 0x00eb, 0x00eb, 0x00eb,
- 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb, 0x00eb,
- 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd,
- 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd,
- 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd,
- 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd, 0x00fd,
- 0x00d1, 0x0011, 0x0091, 0x0071, 0x00f1, 0x0031, 0x00b1, 0x0041,
- 0x00c1, 0x0001, 0x0081, 0x0061, 0x00e1, 0x0021, 0x00a1, 0x0059,
- 0x00d9, 0x0019, 0x0099, 0x0079, 0x00f9, 0x0039, 0x00b9, 0x0049,
- 0x00c9, 0x0009, 0x0089, 0x0069, 0x00e9, 0x0029, 0x00a9, 0x0057,
- 0x0017, 0x0097, 0x0077, 0x00f7, 0x0037, 0x00b7, 0x0047, 0x00c7,
- 0x0007, 0x0087, 0x0067, 0x00e7, 0x0027, 0x00a7, 0x00df, 0x009f,
- 0x009f, 0x00ff, 0x00ff, 0x00bf, 0x00bf, 0x00cf, 0x00cf, 0x008f,
- 0x008f, 0x00ef, 0x00ef, 0x00af, 0x00af, 0x00d3, 0x00d3, 0x00f3,
- 0x00f3, 0x00f3, 0x00c3, 0x00c3, 0x00c3, 0x00c3, 0x00e3, 0x00e3,
- 0x00e3, 0x00e3, 0x00db, 0x00db, 0x00db, 0x00db, 0x00fb, 0x00fb,
- 0x00fb, 0x00fb, 0x00fb, 0x00fb, 0x00cb, 0x00cb, 0x00cb, 0x00cb,
- 0x00cb, 0x00cb, 0x00cb, 0x00cb, 0x00eb, 0x00eb, 0x00eb, 0x00eb
-};
-
-/*===========================================================================*/
-
-#endif /* NI4BTEL > 0 */
diff --git a/sys/i4b/driver/i4b_trace.c b/sys/i4b/driver/i4b_trace.c
deleted file mode 100644
index f64e35d622fdb..0000000000000
--- a/sys/i4b/driver/i4b_trace.c
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4btrc - device driver for trace data read device
- * ---------------------------------------------------
- *
- * $Id: i4b_trace.c,v 1.14 1998/12/05 18:02:51 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:01:53 1998]
- *
- * NOTE: the code assumes that SPLI4B >= splimp !
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4btrc.h"
-
-#if NI4BTRC > 0
-
-#ifdef __FreeBSD__
-#include "isic.h" /* 'isic' is no pseudo-device on non FreeBSD -
- * so we just can't count it at compile time,
- * we're doing an attach-time check instead. */
-
-#if NI4BTRC < NISIC
-#error "number of trace devices != number of passive ISDN controllers !"
-#error "change number of i4btrc to be equal to number of isic devices !"
-#endif
-#endif /* __FreeBSD__ */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-
-#include <sys/conf.h>
-#include <sys/uio.h>
-#include <sys/kernel.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <sys/proc.h>
-#include <sys/tty.h>
-
-#ifdef __FreeBSD__
-#include "opt_devfs.h"
-#endif
-
-#ifdef DEVFS
-#include <sys/devfsext.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_trace.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_trace.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#ifndef __FreeBSD__
-#define memcpy(d,s,l) bcopy(s,d,l)
-#endif
-
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l3l4.h>
-
-static struct ifqueue trace_queue[NI4BTRC];
-static int device_state[NI4BTRC];
-#define ST_IDLE 0x00
-#define ST_ISOPEN 0x01
-#define ST_WAITDATA 0x02
-#ifdef DEVFS
-static void *devfs_token[NI4BTRC];
-#endif
-
-static int analyzemode = 0;
-static int rxunit = -1;
-static int txunit = -1;
-static int outunit = -1;
-
-#ifndef __FreeBSD__
-#define PDEVSTATIC /* - not static - */
-void i4btrcattach __P((void));
-int i4btrcopen __P((dev_t dev, int flag, int fmt, struct proc *p));
-int i4btrcclose __P((dev_t dev, int flag, int fmt, struct proc *p));
-int i4btrcread __P((dev_t dev, struct uio * uio, int ioflag));
-int i4btrcioctl __P((dev_t dev, int cmd, caddr_t data, int flag, struct proc *p));
-#endif
-
-#if BSD > 199306 && defined(__FreeBSD__)
-#define PDEVSTATIC static
-static d_open_t i4btrcopen;
-static d_close_t i4btrcclose;
-static d_read_t i4btrcread;
-static d_ioctl_t i4btrcioctl;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-static d_poll_t i4btrcpoll;
-#endif
-
-#define CDEV_MAJOR 59
-static struct cdevsw i4btrc_cdevsw = {
- i4btrcopen, i4btrcclose, i4btrcread, nowrite,
- i4btrcioctl, nostop, noreset, nodevtotty,
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- i4btrcpoll, nommap, NULL, "i4btrc", NULL, -1
-#else
- noselect, nommap, NULL, "i4btrc", NULL, -1
-#endif
-};
-
-/*---------------------------------------------------------------------------*
- * interface init routine
- *---------------------------------------------------------------------------*/
-static
-void i4btrcinit(void *unused)
-{
- dev_t dev;
-
- dev = makedev(CDEV_MAJOR, 0);
-
- cdevsw_add(&dev, &i4btrc_cdevsw, NULL);
-}
-
-SYSINIT(i4btrcdev, SI_SUB_DRIVERS,
- SI_ORDER_MIDDLE+CDEV_MAJOR, &i4btrcinit, NULL);
-
-static void i4btrcattach(void *);
-PSEUDO_SET(i4btrcattach, i4b_trace);
-
-#endif /* BSD > 199306 && defined(__FreeBSD__) */
-
-int get_trace_data_from_l1(i4b_trace_hdr_t *hdr, int len, char *buf);
-
-/*---------------------------------------------------------------------------*
- * interface attach routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-#ifdef __FreeBSD__
-i4btrcattach(void *dummy)
-#else
-i4btrcattach()
-#endif
-{
- int i;
-
-#ifndef HACK_NO_PSEUDO_ATTACH_MSG
- printf("i4btrc: %d ISDN trace device(s) attached\n", NI4BTRC);
-#endif
-
- for(i=0; i < NI4BTRC; i++)
- {
-#ifdef DEVFS
- devfs_token[i]
- = devfs_add_devswf(&i4btrc_cdevsw, i, DV_CHR,
- UID_ROOT, GID_WHEEL, 0600,
- "i4btrc%d", i);
-#endif
- trace_queue[i].ifq_maxlen = IFQ_MAXLEN;
- device_state[i] = ST_IDLE;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * get_trace_data_from_l1()
- * ------------------------
- * is called from layer 1, adds timestamp to trace data and puts
- * it into a queue, from which it can be read from the i4btrc
- * device. The unit number in the trace header selects the minor
- * device's queue the data is put into.
- *---------------------------------------------------------------------------*/
-int
-get_trace_data_from_l1(i4b_trace_hdr_t *hdr, int len, char *buf)
-{
- struct mbuf *m;
- int x;
- int unit;
- int trunc = 0;
- int totlen = len + sizeof(i4b_trace_hdr_t);
-
- /*
- * for telephony (or better non-HDLC HSCX mode) we get
- * (MCLBYTE + sizeof(i4b_trace_hdr_t)) length packets
- * to put into the queue to userland. because of this
- * we detect this situation, strip the length to MCLBYTES
- * max size, and infor the userland program of this fact
- * by putting the no of truncated bytes into hdr->trunc.
- */
-
- if(totlen > MCLBYTES)
- {
- trunc = 1;
- hdr->trunc = totlen - MCLBYTES;
- totlen = MCLBYTES;
- }
- else
- {
- hdr->trunc = 0;
- }
-
- /* set length of trace record */
-
- hdr->length = totlen;
-
- /* check valid unit no */
-
- if((unit = hdr->unit) > NI4BTRC)
- {
- printf("i4b_trace: get_trace_data_from_l1 - unit > NI4BTRC!\n");
- return(0);
- }
-
- /* get mbuf */
-
- if(!(m = i4b_Bgetmbuf(totlen)))
- {
- printf("i4b_trace: get_trace_data_from_l1 - i4b_getmbuf() failed!\n");
- return(0);
- }
-
- /* check if we are in analyzemode */
-
- if(analyzemode && (unit == rxunit || unit == txunit))
- {
- if(unit == rxunit)
- hdr->dir = FROM_NT;
- else
- hdr->dir = FROM_TE;
- unit = outunit;
- }
-
- if(IF_QFULL(&trace_queue[unit]))
- {
- struct mbuf *m1;
-
- x = SPLI4B();
- IF_DEQUEUE(&trace_queue[unit], m1);
- splx(x);
-
- i4b_Bfreembuf(m1);
- }
-
- /* copy trace header */
- memcpy(m->m_data, hdr, sizeof(i4b_trace_hdr_t));
-
- /* copy trace data */
- if(trunc)
- memcpy(&m->m_data[sizeof(i4b_trace_hdr_t)], buf, totlen-sizeof(i4b_trace_hdr_t));
- else
- memcpy(&m->m_data[sizeof(i4b_trace_hdr_t)], buf, len);
-
- x = SPLI4B();
-
- IF_ENQUEUE(&trace_queue[unit], m);
-
- if(device_state[unit] & ST_WAITDATA)
- {
- device_state[unit] &= ~ST_WAITDATA;
- wakeup((caddr_t) &trace_queue[unit]);
- }
-
- splx(x);
-
- return(1);
-}
-
-/*---------------------------------------------------------------------------*
- * open trace device
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4btrcopen(dev_t dev, int flag, int fmt, struct proc *p)
-{
- int x;
- int unit = minor(dev);
-
- if(unit > NI4BTRC)
- return(ENXIO);
-
- if(device_state[unit] & ST_ISOPEN)
- return(EBUSY);
-
- if(analyzemode && (unit == outunit || unit == rxunit || unit == txunit))
- return(EBUSY);
-
- x = SPLI4B();
-
- device_state[unit] = ST_ISOPEN;
-
- splx(x);
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * close trace device
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4btrcclose(dev_t dev, int flag, int fmt, struct proc *p)
-{
- int unit = minor(dev);
- int i, x, cno = -1;
-
- for(i = 0; i < nctrl; i++)
- {
- if(ctrl_desc[i].N_SET_TRACE)
- {
- cno = i;
- break;
- }
- }
-
- if(analyzemode && (unit == outunit))
- {
- analyzemode = 0;
- outunit = -1;
-
- if(cno >= 0)
- {
- ctrl_desc[cno].N_SET_TRACE(rxunit, TRACE_OFF);
- ctrl_desc[cno].N_SET_TRACE(txunit, TRACE_OFF);
- }
- rxunit = -1;
- txunit = -1;
- }
-
- if(cno >= 0)
- {
- ctrl_desc[cno].N_SET_TRACE(unit, TRACE_OFF);
- }
-
- x = SPLI4B();
- device_state[unit] = ST_IDLE;
- splx(x);
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * read from trace device
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4btrcread(dev_t dev, struct uio * uio, int ioflag)
-{
- struct mbuf *m;
- int x;
- int error = 0;
- int unit = minor(dev);
-
- if(!(device_state[unit] & ST_ISOPEN))
- return(EIO);
-
- x = SPLI4B();
-
- while(IF_QEMPTY(&trace_queue[unit]) && (device_state[unit] & ST_ISOPEN))
- {
- device_state[unit] |= ST_WAITDATA;
-
- if((error = tsleep((caddr_t) &trace_queue[unit],
- TTIPRI | PCATCH,
- "bitrc", 0 )) != 0)
- {
- device_state[unit] &= ~ST_WAITDATA;
- splx(x);
- return(error);
- }
- }
-
- IF_DEQUEUE(&trace_queue[unit], m);
-
- if(m && m->m_len)
- error = uiomove(m->m_data, m->m_len, uio);
- else
- error = EIO;
-
- if(m)
- i4b_Bfreembuf(m);
-
- splx(x);
-
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * poll device
- *---------------------------------------------------------------------------*/
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-PDEVSTATIC int
-i4btrcpoll(dev_t dev, int events, struct proc *p)
-{
- return(ENODEV);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * device driver ioctl routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-#if defined (__FreeBSD_version) && __FreeBSD_version >= 300003
-i4btrcioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
-#else
-i4btrcioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
-#endif
-{
- int error = 0;
- int unit = minor(dev);
- i4b_trace_setupa_t *tsa;
- int i, cno = -1;
-
- /* find the first passive controller to get at the set/get function
- pointers. Would be better if we had the controller class virtual
- function table separate from the port registry... */
-
- for(i=0; i < nctrl; i++)
- {
- if(ctrl_desc[i].N_SET_TRACE)
- {
- cno = i; /* one suitable controller, might not */
- break; /* be related to the trace unit at all, but */
- } /* has the right function pointers */
- }
-
- switch(cmd)
- {
- case I4B_TRC_GET:
- if(cno < 0)
- return ENOTTY;
- *(int *)data = ctrl_desc[cno].N_GET_TRACE(unit);
- break;
-
- case I4B_TRC_SET:
- if(cno < 0)
- return ENOTTY;
- ctrl_desc[cno].N_SET_TRACE(unit, *(int *)data);
- break;
-
- case I4B_TRC_SETA:
- tsa = (i4b_trace_setupa_t *)data;
-
- if(tsa->rxunit >= 0 && tsa->rxunit < NI4BTRC)
- rxunit = tsa->rxunit;
- else
- error = EINVAL;
-
- if(tsa->txunit >= 0 && tsa->txunit < NI4BTRC)
- txunit = tsa->txunit;
- else
- error = EINVAL;
-
- if(error)
- {
- outunit = -1;
- rxunit = -1;
- txunit = -1;
- }
- else
- {
- if(cno < 0)
- return ENOTTY;
-
- outunit = unit;
- analyzemode = 1;
- ctrl_desc[cno].N_SET_TRACE(rxunit, tsa->rxflags & (TRACE_I | TRACE_D_RX | TRACE_B_RX));
- ctrl_desc[cno].N_SET_TRACE(txunit, tsa->txflags & (TRACE_I | TRACE_D_RX | TRACE_B_RX));
- }
- break;
-
- case I4B_TRC_RESETA:
- analyzemode = 0;
- outunit = -1;
- rxunit = -1;
- txunit = -1;
- break;
-
- default:
- error = ENOTTY;
- break;
- }
- return(error);
-}
-
-#endif /* NI4BTRC > 0 */
diff --git a/sys/i4b/include/i4b_global.h b/sys/i4b/include/i4b_global.h
deleted file mode 100644
index 739d78d6b3ed9..0000000000000
--- a/sys/i4b/include/i4b_global.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_global.h - i4b global include file
- * --------------------------------------
- *
- * $Id: i4b_global.h,v 1.17 1998/12/05 18:02:53 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:03:41 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_GLOBAL_H_
-#define _I4B_GLOBAL_H_
-
-#define SPLI4B() splimp() /* spl for i4b */
-
-#define TIMER_IDLE 1 /* a timer is running */
-#define TIMER_ACTIVE 2 /* a timer is idle */
-
-#ifdef __FreeBSD__
-#include <sys/param.h>
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-
-#define TIMEOUT_FUNC_T timeout_t *
-#define SECOND time_second
-#define MICROTIME(x) getmicrotime(&(x))
-
-#else /* FreeBSD < 3 */
-
-#define TIMEOUT_FUNC_T timeout_func_t
-#define SECOND time.tv_sec
-#define MICROTIME(x) microtime(&(x))
-
-#endif /* >= 3 */
-#endif /* __FreeBSD__ */
-
-#if defined(__NetBSD__) || defined (__OpenBSD__)
-
-#define TIMEOUT_FUNC_T void *
-#define SECOND time.tv_sec
-#define MICROTIME(x) (x) = time
-
-#endif /* __NetBSD__ */
-
-/* definitions for the STATUS indications L1 -> L2 -> L3 */
-
-#define STI_ATTACH 0 /* attach at boot time */
-#define STI_L1STAT 1 /* layer 1 status */
-#define STI_L2STAT 2 /* layer 2 status */
-#define STI_TEIASG 3 /* TEI assignments */
-#define STI_PDEACT 4 /* Layer 1 T4 expired = persistent deactivation */
-#define STI_NOL1ACC 5 /* no outgoing L1 access possible */
-
-/* definitions for the COMMAND requests L3 -> L2 -> L1 */
-
-#define CMR_DOPEN 0 /* daemon opened /dev/i4b */
-#define CMR_DCLOSE 1 /* daemon closed /dev/i4b */
-
-/*---------------------------------------------------------------------------
- *
- * Number of max supported passive card units
- *
- * Teles/Creatix/Neuhaus cards have a hardware limitation
- * as one is able to set 3 (sometimes 4) different configurations by
- * jumpers so a maximum of 3 (4) cards per ISA bus is possible.
- * (Note: there are multiple ISA buses on some architectures)
- *
- *---------------------------------------------------------------------------*/
-#define ISIC_MAXUNIT 3 /* max no of supported units 0..3 */
-
-#endif /* _I4B_GLOBAL_H_ */
diff --git a/sys/i4b/include/i4b_isdnq931.h b/sys/i4b/include/i4b_isdnq931.h
deleted file mode 100644
index bdc77f08c660f..0000000000000
--- a/sys/i4b/include/i4b_isdnq931.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isdnq931.h - DSS1 layer 3 message types
- * -------------------------------------------
- *
- * $Id: i4b_isdnq931.h,v 1.4 1998/12/05 18:02:54 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:04:01 1998]
- *
- *---------------------------------------------------------------------------*/
-
-/* protocol discriminators */
-
-#define PD_Q931 0x08 /* Q.931/I.451 */
-
-/* Q.931 single octett information element identifiers */
-
-#define IEI_SENDCOMPL 0xa1 /* sending complete */
-
-/* Q.931 variable length information element identifiers */
-
-#define IEI_SEGMMSG 0x00 /* segmented message */
-#define IEI_BEARERCAP 0x04 /* bearer capabilities */
-#define IEI_CAUSE 0x08 /* cause */
-#define IEI_CALLID 0x10 /* call identity */
-#define IEI_CALLSTATE 0x14 /* call state */
-#define IEI_CHANNELID 0x18 /* channel identification */
-#define IEI_PROGRESSI 0x1e /* progress indicator */
-#define IEI_NETSPCFAC 0x20 /* network specific facilities */
-#define IEI_NOTIFIND 0x27 /* notification indicator */
-#define IEI_DISPLAY 0x28 /* display */
-#define IEI_DATETIME 0x29 /* date/time */
-#define IEI_KEYPAD 0x2c /* keypad facility */
-#define IEI_SIGNAL 0x34 /* signal */
-#define IEI_INFRATE 0x40 /* information rate */
-#define IEI_ETETDEL 0x42 /* end to end transit delay */
-#define IEI_TDELSELIND 0x43 /* transit delay selection and indication */
-#define IEI_PLBPARMS 0x44 /* packet layer binary parameters */
-#define IEI_PLWSIZE 0x45 /* packet layer window size */
-#define IEI_PSIZE 0x46 /* packet size */
-#define IEI_CUG 0x47 /* closed user group */
-#define IEI_REVCHRGI 0x4a /* reverse charge indication */
-#define IEI_CALLINGPN 0x6c /* calling party number */
-#define IEI_CALLINGPS 0x6d /* calling party subaddress */
-#define IEI_CALLEDPN 0x70 /* called party number */
-#define IEI_CALLEDPS 0x71 /* called party subaddress */
-#define IEI_REDIRNO 0x74 /* redirecting number */
-#define IEI_TRNSEL 0x78 /* transit network selection */
-#define IEI_RESTARTI 0x79 /* restart indicator */
-#define IEI_LLCOMPAT 0x7c /* low layer compatibility */
-#define IEI_HLCOMPAT 0x7d /* high layer compatibility */
-#define IEI_USERUSER 0x7e /* user-user */
-#define IEI_ESACPE 0x7f /* escape for extension */
-
-/* Q.932 variable length information element identifiers */
-
-#define IEI_EXTFAC 0x0d /* extended facility */
-#define IEI_FACILITY 0x1c /* facility */
-#define IEI_INFOREQ 0x32 /* information request */
-#define IEI_FEATACT 0x38 /* feature activation */
-#define IEI_FEATIND 0x39 /* feature indication */
-#define IEI_SERVPID 0x3a /* service profile identification */
-#define IEI_ENDPTID 0x3b /* endpoint identifier */
-
-/* Q.933 variable length information element identifiers */
-
-#define IEI_DATALCID 0x19 /* data link connection identifier */
-#define IEI_LLCOREP 0x48 /* link layer core parameters */
-#define IEI_LLPROTP 0x49 /* link layer protocol parameters */
-#define IEI_X213PRI 0x50 /* X.213 priority */
-#define IEI_REPORTT 0x51 /* report type */
-#define IEI_LNKITYVERF 0x53 /* link integrity verification */
-#define IEI_PVCSTAT 0x57 /* PVC status */
-
-/* Q.95x variable length information element identifiers */
-
-#define IEI_PRECLEV 0x41 /* precedence level */
-#define IEI_CONCTDNO 0x4c /* connected number */
-#define IEI_CONCTDSA 0x4d /* connected subaddress */
-#define IEI_REDICNNO 0x76 /* redirection number */
-
-/* single octett information elements */
-
-#define SOIE_SHIFT 0x90 /* shift codeset */
-#define SHIFT_LOCK 0x08 /* shift codeset, locking shift bit */
-#define SOIE_MDSC 0xa0 /* more data AND/OR sending complete */
-#define SOIE_SENDC 0xa1 /* sending complete */
-#define SOIE_CONGL 0xb0 /* congestion level */
-#define SOIE_REPTI 0xd0 /* repeat indicator */
-
-/* codesets */
-
-#define CODESET_0 0 /* codeset 0, normal DSS1 codeset */
-
-/* Q.931/Q.932 message types (see Q.931 03/93 p10 and p311) */
-
-/* call establishment messages */
-
-#define ALERT 0x01
-#define CALL_PROCEEDING 0x02
-#define PROGRESS 0x03
-#define SETUP 0x05
-#define CONNECT 0x07
-#define SETUP_ACKNOWLEDGE 0x0d
-#define CONNECT_ACKNOWLEDGE 0x0f
-
-/* call information phase messages */
-
-#define USER_INFORMATION 0x20
-#define SUSPEND_REJECT 0x21
-#define RESUME_REJECT 0x22
-#define HOLD 0x24
-#define SUSPEND 0x25
-#define RESUME 0x26
-#define HOLD_ACKNOWLEDGE 0x28
-#define SUSPEND_ACKNOWLEDGE 0x2d
-#define RESUME_ACKNOWLEDGE 0x2e
-#define HOLD_REJECT 0x30
-#define RETRIEVE 0x31
-#define RETRIEVE_ACKNOWLEDGE 0x32
-#define RETRIEVE_REJECT 0x37
-
-/* call clearing */
-
-#define DISCONNECT 0x45
-#define RESTART 0x46
-#define RELEASE 0x4d
-#define RESTART_ACKNOWLEDGE 0x4e
-#define RELEASE_COMPLETE 0x5a
-
-/* misc messages */
-
-#define SEGMENT 0x60
-#define FACILITY 0x62
-#define REGISTER 0x64
-#define NOTIFY 0x6e
-#define STATUS_ENQUIRY 0x75
-#define CONGESTION_CONTROL 0x79
-#define INFORMATION 0x7b
-#define STATUS 0x7d
-
-/* EOF */
diff --git a/sys/i4b/include/i4b_l1l2.h b/sys/i4b/include/i4b_l1l2.h
deleted file mode 100644
index 782ca68a97a39..0000000000000
--- a/sys/i4b/include/i4b_l1l2.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l1l2.h - i4b layer 1 / layer 2 interactions
- * ---------------------------------------------------
- *
- * $Id: i4b_l1l2.h,v 1.7 1998/12/05 18:02:56 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:04:25 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_L1L2_H_
-#define _I4B_L1L2_H_
-
-#ifdef __FreeBSD__
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_trace.h>
-#endif
-
-extern struct i4b_l1l2_func i4b_l1l2_func;
-
-struct i4b_l1l2_func
-{
- /* Layer 1 --> Layer 2 */
- /* =================== */
-
- int (*PH_DATA_IND) (int, struct mbuf *);
- int (*PH_ACTIVATE_IND) (int);
- int (*PH_DEACTIVATE_IND) (int);
-
-#define PH_Data_Ind(unit, data) \
- ((*i4b_l1l2_func.PH_DATA_IND)(unit, data))
-#define PH_Act_Ind(unit) \
- ((*i4b_l1l2_func.PH_ACTIVATE_IND)(unit))
-#define PH_Deact_Ind(unit) \
- ((*i4b_l1l2_func.PH_DEACTIVATE_IND)(unit))
-
-
- /* Layer 2 --> Layer 1 */
- /* =================== */
-
- int (*PH_DATA_REQ) (int, struct mbuf *, int);
-
- /* 3rd ph_data_req parameter */
-#define MBUF_DONTFREE 0
-#define MBUF_FREE 1
-
- int (*PH_ACTIVATE_REQ) (int);
-
-#define PH_Data_Req(unit, data, freeflag) \
- ((*i4b_l1l2_func.PH_DATA_REQ)(unit, data, freeflag))
-#define PH_Act_Req(unit) \
- ((*i4b_l1l2_func.PH_ACTIVATE_REQ)(unit))
-
- /* Layer 1 --> upstream, ISDN trace data */
- /* ===================================== */
- int (*MPH_TRACE_IND) (i4b_trace_hdr_t *, int, unsigned char *);
-
-#define MPH_Trace_Ind(header, length, pointer) \
- ((*i4b_l1l2_func.MPH_TRACE_IND)(header, length, pointer))
-
- /* L1/L2 management command and status information */
- /* =============================================== */
- int (*MPH_STATUS_IND) (int, int, int);
- int (*MPH_COMMAND_REQ) (int, int, int);
-
-#define MPH_Status_Ind(unit, status, parm) \
- ((*i4b_l1l2_func.MPH_STATUS_IND)(unit, status, parm))
-#define MPH_Command_Req(unit, command, parm) \
- ((*i4b_l1l2_func.MPH_COMMAND_REQ)(unit, command, parm))
-};
-
-#endif /* _I4B_L1L2_H_ */
-
diff --git a/sys/i4b/include/i4b_l2l3.h b/sys/i4b/include/i4b_l2l3.h
deleted file mode 100644
index 81ab1829ebc92..0000000000000
--- a/sys/i4b/include/i4b_l2l3.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l2l3.h - i4b layer 2 / layer 3 interactions
- * -----------------------------------------------
- *
- * $Id: i4b_l2l3.h,v 1.5 1998/12/05 18:02:57 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:04:44 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_L2L3_H_
-#define _I4B_L2L3_H_
-
-extern struct i4b_l2l3_func i4b_l2l3_func;
-
-struct i4b_l2l3_func
-{
- /* Layer 2 --> Layer 3 */
- /* =================== */
-
- int (*DL_ESTABLISH_IND) (int);
- int (*DL_ESTABLISH_CNF) (int);
-
- int (*DL_RELEASE_IND) (int);
- int (*DL_RELEASE_CNF) (int);
-
- int (*DL_DATA_IND) (int, struct mbuf *);
-
- int (*DL_UNIT_DATA_IND) (int, struct mbuf *);
-
-#define DL_Est_Ind(unit) \
- ((*i4b_l2l3_func.DL_ESTABLISH_IND)(unit))
-#define DL_Est_Cnf(unit) \
- ((*i4b_l2l3_func.DL_ESTABLISH_CNF)(unit))
-#define DL_Rel_Ind(unit) \
- ((*i4b_l2l3_func.DL_RELEASE_IND)(unit))
-#define DL_Rel_Cnf(unit) \
- ((*i4b_l2l3_func.DL_RELEASE_CNF)(unit))
-#define DL_Data_Ind(unit, data) \
- ((*i4b_l2l3_func.DL_DATA_IND)(unit, data))
-#define DL_Unit_Data_Ind(unit, data) \
- ((*i4b_l2l3_func.DL_UNIT_DATA_IND)(unit, data))
-
-#define DL_Est_Ind_A \
- (i4b_l2l3_func.DL_ESTABLISH_IND)
-#define DL_Est_Cnf_A \
- (i4b_l2l3_func.DL_ESTABLISH_CNF)
-#define DL_Rel_Ind_A \
- (i4b_l2l3_func.DL_RELEASE_IND)
-#define DL_Rel_Cnf_A \
- (i4b_l2l3_func.DL_RELEASE_CNF)
-
- /* Layer 3 --> Layer 2 */
- /* =================== */
-
- int (*DL_ESTABLISH_REQ) (int);
-
- int (*DL_RELEASE_REQ) (int);
-
- int (*DL_DATA_REQ) (int, struct mbuf *);
-
- int (*DL_UNIT_DATA_REQ) (int, struct mbuf *);
-
-#define DL_Est_Req(unit) \
- ((*i4b_l2l3_func.DL_ESTABLISH_REQ)(unit))
-#define DL_Rel_Req(unit) \
- ((*i4b_l2l3_func.DL_RELEASE_REQ)(unit))
-#define DL_Data_Req(unit, data) \
- ((*i4b_l2l3_func.DL_DATA_REQ)(unit, data))
-#define DL_Unit_Data_Req(unit, data) \
- ((*i4b_l2l3_func.DL_UNIT_DATA_REQ)(unit, data))
-
- /* Layer 2 --> Layer 3 management */
- /* ============================== */
-
- int (*MDL_STATUS_IND) (int, int, int); /* L2 --> L3 status */
-
-#define MDL_Status_Ind(unit, status, parm) \
- ((*i4b_l2l3_func.MDL_STATUS_IND)(unit, status, parm))
-
- /* Layer 3 --> Layer 2 management */
- /* ============================== */
-
- int (*MDL_COMMAND_REQ) (int, int, int); /* L3 --> L2 command */
-
-#define MDL_Command_Req(unit, command, parm) \
- ((*i4b_l2l3_func.MDL_COMMAND_REQ)(unit, command, parm))
-};
-
-#endif /* _I4B_L2L3_H_ */
-
diff --git a/sys/i4b/include/i4b_l3l4.h b/sys/i4b/include/i4b_l3l4.h
deleted file mode 100644
index 642777c04d67b..0000000000000
--- a/sys/i4b/include/i4b_l3l4.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l3l4.h - layer 3 / layer 4 interface
- * ------------------------------------------
- *
- * $Id: i4b_l3l4.h,v 1.21 1998/12/05 18:02:59 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:04:58 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_L3L4_H_
-#define _I4B_L3L4_H_
-
-#define T303VAL (hz*4) /* 4 seconds timeout */
-#define T305VAL (hz*30) /* 30 seconds timeout */
-#define T308VAL (hz*4) /* 4 seconds timeout */
-#define T309VAL (hz*90) /* 90 seconds timeout */
-#define T310VAL (hz*60) /* 30-120 seconds timeout */
-#define T313VAL (hz*4) /* 4 seconds timeout */
-#define T400DEF (hz*10) /* 10 seconds timeout */
-
-#define N_CALL_DESC (MAX_CONTROLLERS*2) /* no of call descriptors */
-
-extern int nctrl; /* number of controllers detected in system */
-
-typedef struct bchan_statistics {
- int outbytes;
- int inbytes;
-} bchan_statistics_t;
-
-/*---------------------------------------------------------------------------*
- * table of things the driver needs to know about the b channel
- * it is connected to for data transfer
- *---------------------------------------------------------------------------*/
-typedef struct i4l_isdn_bchan_linktab {
- int unit;
- int channel;
- void (*bch_config)(int unit, int channel, int bprot, int updown);
- void (*bch_tx_start)(int unit, int channel);
- void (*bch_stat)(int unit, int channel, bchan_statistics_t *bsp);
- struct ifqueue *tx_queue;
- struct ifqueue *rx_queue; /* data xfer for NON-HDLC traffic */
- struct mbuf **rx_mbuf; /* data xfer for HDLC based traffic */
-} isdn_link_t;
-
-/*---------------------------------------------------------------------------*
- * table of things the b channel handler needs to know about
- * the driver it is connected to for data transfer
- *---------------------------------------------------------------------------*/
-typedef struct i4l_driver_bchan_linktab {
- int unit;
- void (*bch_rx_data_ready)(int unit);
- void (*bch_tx_queue_empty)(int unit);
- void (*bch_activity)(int unit, int rxtx);
-#define ACT_RX 0
-#define ACT_TX 1
- void (*line_connected)(int unit, void *cde);
- void (*line_disconnected)(int unit, void *cde);
- void (*dial_response)(int unit, int stat);
- void (*updown_ind)(int unit, int updown);
-} drvr_link_t;
-
-/* global linktab functions for controller types (aka hardware drivers) */
-struct ctrl_type_desc {
- isdn_link_t* (*get_linktab)(int unit, int channel);
- void (*set_linktab)(int unit, int channel, drvr_link_t *dlt);
-};
-extern struct ctrl_type_desc ctrl_types[];
-
-/* global linktab functions for RBCH userland driver */
-
-drvr_link_t *rbch_ret_linktab(int unit);
-void rbch_set_linktab(int unit, isdn_link_t *ilt);
-
-/* global linktab functions for IPR network driver */
-
-drvr_link_t *ipr_ret_linktab(int unit);
-void ipr_set_linktab(int unit, isdn_link_t *ilt);
-
-/* global linktab functions for TEL userland driver */
-
-drvr_link_t *tel_ret_linktab(int unit);
-void tel_set_linktab(int unit, isdn_link_t *ilt);
-
-/* global linktab functions for ISPPP userland driver */
-
-drvr_link_t *i4bisppp_ret_linktab(int unit);
-void i4bisppp_set_linktab(int unit, isdn_link_t *ilt);
-
-/*---------------------------------------------------------------------------*
- * this structure describes one call/connection on one B-channel
- * and all its parameters
- *---------------------------------------------------------------------------*/
-typedef struct
-{
- u_int cdid; /* call descriptor id */
- int controller; /* isdn controller number */
- int cr; /* call reference value */
-
- int crflag; /* call reference flag */
-#define CRF_ORIG 0 /* originating side */
-#define CRF_DEST 1 /* destinating side */
-
- int channelid; /* channel id value */
- int channelexcl; /* channel exclusive */
-
- int bprot; /* B channel protocol BPROT_XXX */
-
- int driver; /* driver to use for B channel */
- int driver_unit; /* unit for above driver number */
-
- cause_t cause_in; /* cause value from NT */
- cause_t cause_out; /* cause value to NT */
-
- int call_state; /* from incoming SETUP */
-
- u_char dst_telno[TELNO_MAX]; /* destination number */
- u_char src_telno[TELNO_MAX]; /* source number */
- int scr_ind; /* screening ind for incoming call */
-
- int Q931state; /* Q.931 state for call */
- int event; /* event to be processed */
-
- int response; /* setup response type */
-
- int T303; /* SETUP sent response timeout */
- int T303_first_to; /* first timeout flag */
-
- int T305; /* DISC without PROG IND */
-
- int T308; /* RELEASE sent response timeout*/
- int T308_first_to; /* first timeout flag */
-
- int T309; /* data link disconnect timeout */
-
- int T310; /* CALL PROC received */
-
- int T313; /* CONNECT sent timeout */
-
- int T400; /* L4 timeout */
-
- isdn_link_t *ilt; /* isdn B channel linktab */
- drvr_link_t *dlt; /* driver linktab */
-
- int dir; /* outgoing or incoming call */
-#define DIR_OUTGOING 0
-#define DIR_INCOMING 1
-
- int timeout_active; /* idle timeout() active flag */
-
-#if (defined(__FreeBSD_version) && __FreeBSD_version >= 300001) || \
- (!defined(__FreeBSD_version) && defined(__FreeBSD__) && __FreeBSD__ >= 3)
- struct callout_handle idle_timeout_handle;
- struct callout_handle T303_callout;
- struct callout_handle T305_callout;
- struct callout_handle T308_callout;
- struct callout_handle T309_callout;
- struct callout_handle T310_callout;
- struct callout_handle T313_callout;
- struct callout_handle T400_callout;
- int callouts_inited; /* must init before use */
-#endif
-
- int idletime_state; /* wait for idle_time begin */
-#define IST_IDLE 0 /* shorthold mode disabled */
-#define IST_NONCHK 1 /* in non-checked window */
-#define IST_CHECK 2 /* in idle check window */
-#define IST_SAFE 3 /* in safety zone */
-
- time_t idletimechk_start; /* check idletime window start */
- time_t connect_time; /* time connect was made */
- time_t last_active_time; /* last time with activity */
-
- /* for incoming connections: */
- time_t max_idle_time; /* max time without activity */
-
- /* for outgoing connections: */
- time_t unitlen_time; /* length of a charging unit */
- time_t idle_time; /* idle time before end of unit */
- time_t earlyhup_time; /* safety time zone at end of unit */
-
- int aocd_flag; /* AOCD used for unitlength calc*/
- time_t last_aocd_time; /* last time AOCD received */
- int units; /* number of AOCD charging units*/
- int units_type; /* units type: AOCD, AOCE */
- int cunits; /* calculated units */
-
- int isdntxdelay; /* isdn tx delay after connect */
-
- u_char display[DISPLAY_MAX]; /* display information element */
- char datetime[DATETIME_MAX]; /* date/time information element*/
-} call_desc_t;
-
-extern call_desc_t call_desc[N_CALL_DESC];
-
-/* forward decl. */
-struct isdn_diagnostic_request;
-struct isdn_dr_prot;
-
-/*---------------------------------------------------------------------------*
- * this structure "describes" one controller
- *---------------------------------------------------------------------------*/
-typedef struct
-{
- int unit; /* unit number of this contr. */
- int ctrl_type; /* controller type (CTRL_XXX) */
- int card_type; /* card manufacturer (CARD_XXX) */
-
- int dl_est; /* layer 2 established */
-#define DL_DOWN 0
-#define DL_UP 1
-
- int bch_state[2]; /* states of the b channels */
-#define BCH_ST_FREE 0 /* free to be used, idle */
-#define BCH_ST_RSVD 1 /* reserved, may become free or used */
-#define BCH_ST_USED 2 /* in use for data transfer */
-
- int tei; /* current tei or -1 if invalid */
-
- /* pointers to functions to be called from L4 */
-
- void (*N_CONNECT_REQUEST) (unsigned int);
- void (*N_CONNECT_RESPONSE) (unsigned int, int, int);
- void (*N_DISCONNECT_REQUEST) (unsigned int, int);
- void (*N_ALERT_REQUEST) (unsigned int);
- void (*N_SET_TRACE) (int unit, int val);
- int (*N_GET_TRACE) (int unit);
- int (*N_DOWNLOAD) (int unit, int numprotos, struct isdn_dr_prot *protocols);
- int (*N_DIAGNOSTICS) (int unit, struct isdn_diagnostic_request*);
- void (*N_MGMT_COMMAND) (int unit, int cmd, int parm);
-} ctrl_desc_t;
-
-extern ctrl_desc_t ctrl_desc[MAX_CONTROLLERS];
-
-#endif /* _I4B_Q931_H_ */
diff --git a/sys/i4b/include/i4b_mbuf.h b/sys/i4b/include/i4b_mbuf.h
deleted file mode 100644
index 49ee26d6162d7..0000000000000
--- a/sys/i4b/include/i4b_mbuf.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b - mbuf handling support routines
- * --------------------------------------
- *
- * $Id: i4b_mbuf.h,v 1.6 1998/12/05 18:03:00 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:05:12 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_MBUF_H_
-#define _I4B_MBUF_H_
-
-#define IF_QEMPTY(ifq) ((ifq)->ifq_len == 0)
-
-struct mbuf *i4b_Dgetmbuf( int );
-void i4b_Dfreembuf( struct mbuf *m );
-void i4b_Dcleanifq( struct ifqueue * );
-
-struct mbuf *i4b_Bgetmbuf( int );
-void i4b_Bfreembuf( struct mbuf *m );
-void i4b_Bcleanifq( struct ifqueue * );
-
-#endif /* _I4B_MBUF_H_ */
-
-/* EOF */
diff --git a/sys/i4b/layer1/i4b_avm_a1.c b/sys/i4b/layer1/i4b_avm_a1.c
deleted file mode 100644
index bb55979e3638b..0000000000000
--- a/sys/i4b/layer1/i4b_avm_a1.c
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * Copyright (c) 1996 Andrew Gordon. All rights reserved.
- *
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_avm_a1.c - AVM A1/Fritz passive card driver for isdn4bsd
- * ------------------------------------------------------------
- *
- * $Id: i4b_avm_a1.c,v 1.20 1998/12/16 13:57:21 hm Exp $
- *
- * last edit-date: [Wed Dec 16 14:59:59 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0 && defined(AVM_A1)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#ifndef __FreeBSD__
-static u_int8_t avma1_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void avma1_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void avma1_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void avma1_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-#endif
-
-/*---------------------------------------------------------------------------*
- * AVM A1 and AVM Fritz! Card special registers
- *---------------------------------------------------------------------------*/
-
-#define AVM_CONF_REG 0x1800 /* base offset for config register */
-#define AVM_CONF_IRQ 0x1801 /* base offset for IRQ register */
- /* config register write */
-#define AVM_CONF_WR_RESET 0x01 /* 1 = RESET ISAC and HSCX */
-#define AVM_CONF_WR_CCL 0x02 /* 1 = clear counter low nibble */
-#define AVM_CONF_WR_CCH 0x04 /* 1 = clear counter high nibble */
-#define AVM_CONF_WR_IRQEN 0x08 /* 1 = enable IRQ */
-#define AVM_CONF_WR_TEST 0x10 /* test bit */
- /* config register read */
-#define AVM_CONF_RD_IIRQ 0x01 /* 0 = ISAC IRQ active */
-#define AVM_CONF_RD_HIRQ 0x02 /* 0 = HSCX IRQ active */
-#define AVM_CONF_RD_CIRQ 0x04 /* 0 = counter IRQ active */
-#define AVM_CONF_RD_ZER1 0x08 /* unused, always read 0 */
-#define AVM_CONF_RD_TEST 0x10 /* test bit read back */
-#define AVM_CONF_RD_ZER2 0x20 /* unused, always read 0 */
-
-/*---------------------------------------------------------------------------*
- * AVM read fifo routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-avma1_read_fifo(void *buf, const void *base, size_t len)
-{
- insb((int)base - 0x3e0, (u_char *)buf, (u_int)len);
-}
-#else
-static void
-avma1_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what+4].t;
- bus_space_handle_t h = sc->sc_maps[what+4].h;
- bus_space_read_multi_1(t, h, 0, buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * AVM write fifo routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-avma1_write_fifo(void *base, const void *buf, size_t len)
-{
- outsb((int)base - 0x3e0, (u_char *)buf, (u_int)len);
-}
-#else
-static void
-avma1_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what+4].t;
- bus_space_handle_t h = sc->sc_maps[what+4].h;
- bus_space_write_multi_1(t, h, 0, (u_int8_t*)buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * AVM write register routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-avma1_write_reg(u_char *base, u_int offset, u_int v)
-{
- outb((int)base + offset, (u_char)v);
-}
-#else
-static void
-avma1_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_space_write_1(t, h, offs, data);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * AVM read register routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static u_char
-avma1_read_reg(u_char *base, u_int offset)
-{
- return (inb((int)base + offset));
-}
-#else
-static u_int8_t
-avma1_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- return bus_space_read_1(t, h, offs);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_probe_avma1 - probe for AVM A1 and compatibles
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_probe_avma1(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
- u_char savebyte;
- u_char byte;
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for AVM A1/Fritz!\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- switch(ffs(dev->id_irq)-1)
- {
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 8:
- case 10:
- case 11:
- case 12:
- case 13:
- case 14:
- case 15:
- break;
-
- default:
- printf("isic%d: Error, invalid IRQ [%d] specified for AVM A1/Fritz!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- break;
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if memory addr specified */
-
- if(dev->id_maddr)
- {
- printf("isic%d: Error, mem addr 0x%lx specified for AVM A1/Fritz!\n",
- dev->id_unit, (u_long)dev->id_maddr);
- return(0);
- }
-
- dev->id_msize = 0;
-
- /* check if we got an iobase */
-
- switch(dev->id_iobase)
- {
- case 0x200:
- case 0x240:
- case 0x300:
- case 0x340:
- break;
-
- default:
- printf("isic%d: Error, invalid iobase 0x%x specified for AVM A1/Fritz!\n",
- dev->id_unit, dev->id_iobase);
- return(0);
- break;
- }
- sc->sc_port = dev->id_iobase;
-
- sc->clearirq = NULL;
- sc->readreg = avma1_read_reg;
- sc->writereg = avma1_write_reg;
-
- sc->readfifo = avma1_read_fifo;
- sc->writefifo = avma1_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_AVMA1;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
-
- ISAC_BASE = (caddr_t)dev->id_iobase + 0x1400 - 0x20;
-
- HSCX_A_BASE = (caddr_t)dev->id_iobase + 0x400 - 0x20;
- HSCX_B_BASE = (caddr_t)dev->id_iobase + 0xc00 - 0x20;
-
- /*
- * Read HSCX A/B VSTR.
- * Expected value for AVM A1 is 0x04 or 0x05 and for the
- * AVM Fritz!Card is 0x05 in the least significant bits.
- */
-
- if( (((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) &&
- ((HSCX_READ(0, H_VSTR) & 0xf) != 0x4)) ||
- (((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) &&
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x4)) )
- {
- printf("isic%d: HSCX VSTR test failed for AVM A1/Fritz\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- /* AVM A1 or Fritz! control register bits: */
- /* read write */
- /* 0x01 hscx irq* RESET */
- /* 0x02 isac irq* clear counter1 */
- /* 0x04 counter irq* clear counter2 */
- /* 0x08 always 0 irq enable */
- /* 0x10 read test bit set test bit */
- /* 0x20 always 0 unused */
-
- /*
- * XXX the following test may be destructive, to prevent the
- * worst case, we save the byte first, and in case the test
- * fails, we write back the saved byte .....
- */
-
- savebyte = inb(dev->id_iobase + AVM_CONF_REG);
-
- /* write low to test bit */
-
- outb(dev->id_iobase + AVM_CONF_REG, 0x00);
-
- /* test bit and next higher and lower bit must be 0 */
-
- if((byte = inb(dev->id_iobase + AVM_CONF_REG) & 0x38) != 0x00)
- {
- printf("isic%d: Error, probe-1 failed, 0x%02x should be 0x00 for AVM A1/Fritz!\n",
- dev->id_unit, byte);
- outb(dev->id_iobase + AVM_CONF_REG, savebyte);
- return (0);
- }
-
- /* write high to test bit */
-
- outb(dev->id_iobase + AVM_CONF_REG, 0x10);
-
- /* test bit must be high, next higher and lower bit must be 0 */
-
- if((byte = inb(dev->id_iobase + AVM_CONF_REG) & 0x38) != 0x10)
- {
- printf("isic%d: Error, probe-2 failed, 0x%02x should be 0x10 for AVM A1/Fritz!\n",
- dev->id_unit, byte);
- outb(dev->id_iobase + AVM_CONF_REG, savebyte);
- return (0);
- }
-
- return (1);
-}
-
-#else
-
-int
-isic_probe_avma1(struct isic_attach_args *ia)
-{
- u_int8_t savebyte, v1, v2;
-
- /*
- * Read HSCX A/B VSTR.
- * Expected value for AVM A1 is 0x04 or 0x05 and for the
- * AVM Fritz!Card is 0x05 in the least significant bits.
- */
-
- v1 = bus_space_read_1(ia->ia_maps[ISIC_WHAT_HSCXA+1].t, ia->ia_maps[ISIC_WHAT_HSCXA+1].h, H_VSTR) & 0x0f;
- v2 = bus_space_read_1(ia->ia_maps[ISIC_WHAT_HSCXB+1].t, ia->ia_maps[ISIC_WHAT_HSCXB+1].h, H_VSTR) & 0x0f;
- if (v1 != v2 || (v1 != 0x05 && v1 != 0x04))
- return 0;
-
- /* AVM A1 or Fritz! control register bits: */
- /* read write */
- /* 0x01 hscx irq* RESET */
- /* 0x02 isac irq* clear counter1 */
- /* 0x04 counter irq* clear counter2 */
- /* 0x08 always 0 irq enable */
- /* 0x10 read test bit set test bit */
- /* 0x20 always 0 unused */
-
- /*
- * XXX the following test may be destructive, to prevent the
- * worst case, we save the byte first, and in case the test
- * fails, we write back the saved byte .....
- */
-
- savebyte = bus_space_read_1(ia->ia_maps[0].t, ia->ia_maps[0].h, 0);
-
- /* write low to test bit */
-
- bus_space_write_1(ia->ia_maps[0].t, ia->ia_maps[0].h, 0, 0);
-
- /* test bit and next higher and lower bit must be 0 */
-
- if((bus_space_read_1(ia->ia_maps[0].t, ia->ia_maps[0].h, 0) & 0x38) != 0x00)
- {
- bus_space_write_1(ia->ia_maps[0].t, ia->ia_maps[0].h, 0, savebyte);
- return 0;
- }
-
- /* write high to test bit */
-
- bus_space_write_1(ia->ia_maps[0].t, ia->ia_maps[0].h, 0, 0x10);
-
- /* test bit must be high, next higher and lower bit must be 0 */
-
- if((bus_space_read_1(ia->ia_maps[0].t, ia->ia_maps[0].h, 0) & 0x38) != 0x10)
- {
- bus_space_write_1(ia->ia_maps[0].t, ia->ia_maps[0].h, 0, savebyte);
- return 0;
- }
-
- return (1);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_attach_avma1 - attach AVM A1 and compatibles
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_attach_avma1(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* reset the HSCX and ISAC chips */
-
- outb(dev->id_iobase + AVM_CONF_REG, 0x00);
- DELAY(SEC_DELAY / 10);
-
- outb(dev->id_iobase + AVM_CONF_REG, AVM_CONF_WR_RESET);
- DELAY(SEC_DELAY / 10);
-
- outb(dev->id_iobase + AVM_CONF_REG, 0x00);
- DELAY(SEC_DELAY / 10);
-
- /* setup IRQ */
-
- outb(dev->id_iobase + AVM_CONF_IRQ, (ffs(sc->sc_irq)) - 1);
- DELAY(SEC_DELAY / 10);
-
- /* enable IRQ, disable counter IRQ */
-
- outb(dev->id_iobase + AVM_CONF_REG, AVM_CONF_WR_IRQEN |
- AVM_CONF_WR_CCH | AVM_CONF_WR_CCL);
- DELAY(SEC_DELAY / 10);
-
- return (1);
-}
-
-#else
-
-int
-isic_attach_avma1(struct isic_softc *sc)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
-
- sc->clearirq = NULL;
- sc->readreg = avma1_read_reg;
- sc->writereg = avma1_write_reg;
-
- sc->readfifo = avma1_read_fifo;
- sc->writefifo = avma1_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_AVMA1;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* reset the HSCX and ISAC chips */
-
- bus_space_write_1(t, h, 0, 0x00);
- DELAY(SEC_DELAY / 10);
-
- bus_space_write_1(t, h, 0, AVM_CONF_WR_RESET);
- DELAY(SEC_DELAY / 10);
-
- bus_space_write_1(t, h, 0, 0x00);
- DELAY(SEC_DELAY / 10);
-
- /* setup IRQ */
-
- bus_space_write_1(t, h, 1, sc->sc_irq);
- DELAY(SEC_DELAY / 10);
-
- /* enable IRQ, disable counter IRQ */
-
- bus_space_write_1(t, h, 0, AVM_CONF_WR_IRQEN |
- AVM_CONF_WR_CCH | AVM_CONF_WR_CCL);
- DELAY(SEC_DELAY / 10);
-
- return (1);
-}
-#endif
-
-#endif /* ISIC > 0 */
diff --git a/sys/i4b/layer1/i4b_avm_fritz_pcmcia.c b/sys/i4b/layer1/i4b_avm_fritz_pcmcia.c
deleted file mode 100644
index 483eb660a8286..0000000000000
--- a/sys/i4b/layer1/i4b_avm_fritz_pcmcia.c
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * Copyright (c) 1998 Matthias Apitz. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * Fritz!Card pcmcia specific routines for isic driver
- * ---------------------------------------------------
- *
- * $Id: i4b_avm_fritz_pcmcia.c,v 1.7 1998/12/01 21:25:53 hm Exp $
- *
- * last edit-date: [Tue Dec 1 22:03:51 1998]
- *
- * -ap added support for AVM PCMCIA Fritz!Card
- * -mh split into separate file
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-
-#if NISIC > 0 && defined(AVM_PCMCIA)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-
-#include <dev/pcmcia/pcmciareg.h>
-#include <dev/pcmcia/pcmciavar.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/layer1/pcmcia_isic.h>
-
-#ifndef __FreeBSD__
-/* PCMCIA support routines */
-static u_int8_t avma1_pcmcia_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void avma1_pcmcia_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void avma1_pcmcia_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void avma1_pcmcia_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-#endif
-
-/*---------------------------------------------------------------------------*
- * AVM PCMCIA Fritz!Card special registers
- *---------------------------------------------------------------------------*/
-
-/*
- * register offsets from i/o base 0x140 or 0x300
- */
-#define ADDR_REG_OFFSET 0x02
-#define DATA_REG_OFFSET 0x03
-#define STAT0_OFFSET 0x04
-#define STAT1_OFFSET 0x05
-#define MODREG_OFFSET 0x06
-#define VERREG_OFFSET 0x07
-/*
- * AVM PCMCIA Status Latch 0 read only bits
- */
-#define ASL_IRQ_TIMER 0x10 /* Timer interrupt, active low */
-#define ASL_IRQ_ISAC 0x20 /* ISAC interrupt, active low */
-#define ASL_IRQ_HSCX 0x40 /* HSX interrupt, active low */
-#define ASL_IRQ_BCHAN ASL_IRQ_HSCX
-#define ASL_IRQ_Pending (ASL_IRQ_ISAC | ASL_IRQ_HSCX | ASL_IRQ_TIMER)
-/*
- * AVM Status Latch 0 write only bits
- */
-#define ASL_RESET_ALL 0x01 /* reset siemens IC's, active 1 */
-#define ASL_TIMERDISABLE 0x02 /* active high */
-#define ASL_TIMERRESET 0x04 /* active high */
-#define ASL_ENABLE_INT 0x08 /* active high */
-/*
- * AVM Status Latch 1 write only bits
- */
-#define ASL1_LED0 0x10 /* active high */
-#define ASL1_LED1 0x20 /* active high */
-
-#define ASL1_ENABLE_S0 0xc0 /* enable active S0 I/F */
-
-/*----- EEpromless controller -----*/
-/*
- * AVM Status Latch read/write bit
- */
-
-#define ASL_TESTBIT 0x80
-
-
-/*---------------------------------------------------------------------------*
- * AVM read fifo routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static int PCMCIA_IO_BASE = 0; /* ap: XXX hack */
-static void
-avma1_pcmcia_read_fifo(void *buf, const void *base, size_t len)
-{
- outb(PCMCIA_IO_BASE + ADDR_REG_OFFSET, (int)base - 0x20);
- insb(PCMCIA_IO_BASE + DATA_REG_OFFSET, (u_char *)buf, (u_int)len);
-}
-#else
-/* offsets of the different 'what' arguments */
-static u_int8_t what_map[] = {
- 0x20-0x20, /* ISIC_WHAT_ISAC */
- 0xA0-0x20, /* ISIC_WHAT_HSCXA */
- 0xE0-0x20 /* ISIC_WHAT_HSCXB */
-};
-static void
-avma1_pcmcia_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_1(t, h, ADDR_REG_OFFSET, what_map[what]);
- bus_space_read_multi_1(t, h, DATA_REG_OFFSET, buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * AVM write fifo routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-avma1_pcmcia_write_fifo(void *base, const void *buf, size_t len)
-{
- outb(PCMCIA_IO_BASE + ADDR_REG_OFFSET, (int)base - 0x20);
- outsb(PCMCIA_IO_BASE + DATA_REG_OFFSET, (u_char *)buf, (u_int)len);
-}
-#else
-static void
-avma1_pcmcia_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_1(t, h, ADDR_REG_OFFSET, what_map[what]);
- bus_space_write_multi_1(t, h, DATA_REG_OFFSET, (u_int8_t*)buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * AVM write register routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-avma1_pcmcia_write_reg(u_char *base, u_int offset, u_int v)
-{
- /* offset includes 0x20 FIFO ! */
- outb(PCMCIA_IO_BASE + ADDR_REG_OFFSET, (int)base+offset-0x20);
- outb(PCMCIA_IO_BASE + DATA_REG_OFFSET, (u_char)v);
-}
-#else
-static void
-avma1_pcmcia_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_1(t, h, ADDR_REG_OFFSET, what_map[what]+offs);
- bus_space_write_1(t, h, DATA_REG_OFFSET, data);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * AVM read register routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static u_char
-avma1_pcmcia_read_reg(u_char *base, u_int offset)
-{
- /* offset includes 0x20 FIFO ! */
- outb(PCMCIA_IO_BASE + ADDR_REG_OFFSET, (int)base+offset-0x20);
- return (inb(PCMCIA_IO_BASE + DATA_REG_OFFSET));
-}
-#else
-static u_int8_t
-avma1_pcmcia_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_1(t, h, ADDR_REG_OFFSET, what_map[what]+offs);
- return bus_space_read_1(t, h, DATA_REG_OFFSET);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_probe_avma1_pcmcia - probe for AVM PCMCIA Fritz!Card
- * This is in the bus attachemnt part on NetBSD (pcmcia_isic.c), no
- * card specicfic probe is needed on direct config buses like pcmcia.
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_probe_avma1_pcmcia(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
- u_char byte;
- int i;
- u_int cardinfo;
-
- /* check max unit range */
-
- if(dev->id_unit > 1)
- {
- printf("isic%d: Error, unit %d > MAXUNIT for AVM PCMCIA Fritz!Card\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /*
- * we trust the IRQ we got from PCCARD service
- */
- sc->sc_irq = dev->id_irq;
-
- /* check if we got an iobase */
-
- switch(dev->id_iobase)
- {
- case 0x140:
- case 0x300:
- break;
- default:
- printf("isic%d: Error, invalid iobase 0x%x specified for AVM PCMCIA Fritz!Card.\n",
- dev->id_unit, dev->id_iobase);
- return(0);
- break;
- }
- sc->sc_port = dev->id_iobase;
-
- /* ResetController */
-
- outb(dev->id_iobase + STAT0_OFFSET, 0x00);
- DELAY(SEC_DELAY / 20);
- outb(dev->id_iobase + STAT0_OFFSET, 0x01);
- DELAY(SEC_DELAY / 20);
- outb(dev->id_iobase + STAT0_OFFSET, 0x00);
-
- /*
- * CheckController
- * The logic to check for the PCMCIA was adapted as
- * described by AVM.
- */
-
- outb(dev->id_iobase + ADDR_REG_OFFSET, 0x21); /* ISAC STAR */
- if ( (byte=inb(dev->id_iobase + DATA_REG_OFFSET) & 0xfd) != 0x48 )
- {
- printf("isic%d: Error, ISAC STAR for AVM PCMCIA is 0x%0x (should be 0x48)\n",
- dev->id_unit, byte);
- return(0);
- }
-
- outb(dev->id_iobase + ADDR_REG_OFFSET, 0xa1); /* HSCX STAR */
- if ( (byte=inb(dev->id_iobase + DATA_REG_OFFSET) & 0xfd) != 0x48 )
- {
- printf("isic%d: Error, HSCX STAR for AVM PCMCIA is 0x%0x (should be 0x48)\n",
- dev->id_unit, byte);
- return(0);
- }
-
- byte = ASL_TESTBIT;
- for (i=0; i<256; i++) {
- byte = byte ? 0 : ASL_TESTBIT;
- outb(dev->id_iobase + STAT0_OFFSET, byte);
- if ((inb(dev->id_iobase+STAT0_OFFSET)&ASL_TESTBIT)!=byte) {
- printf("isic%d: Error during toggle of AVM PCMCIA Status Latch0\n",
- dev->id_unit);
- return(0);
- }
- }
-
- sc->clearirq = NULL;
- sc->readreg = avma1_pcmcia_read_reg;
- sc->writereg = avma1_pcmcia_write_reg;
-
- sc->readfifo = avma1_pcmcia_read_fifo;
- sc->writefifo = avma1_pcmcia_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_PCFRITZ;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2; /* ap: XXX ??? */
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
- /*
- * NOTE: for PCMCIA these are no real addrs; they are
- * offsets to be written into the base+ADDR_REG_OFFSET register
- * to pick up the values of the bytes fro base+DATA_REG_OFFSET
- *
- * see also the logic in the avma1_pcmcia_* routines;
- * therefore we also must have the base addr in some static
- * space or struct; XXX better solution?
- */
-
- PCMCIA_IO_BASE = dev->id_iobase;
- ISAC_BASE = (caddr_t)0x20;
-
- HSCX_A_BASE = (caddr_t)0xA0;
- HSCX_B_BASE = (caddr_t)0xE0;
-
- /*
- * Read HSCX A/B VSTR.
- * Expected value for AVM A1 is 0x04 or 0x05 and for the
- * AVM Fritz!Card is 0x05 in the least significant bits.
- */
-
- if( (((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) &&
- ((HSCX_READ(0, H_VSTR) & 0xf) != 0x4)) ||
- (((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) &&
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x4)) )
- {
- printf("isic%d: HSCX VSTR test failed for AVM PCMCIA Fritz!Card\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: 0x%0x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: 0x%0x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- /*
- * seems we really have an AVM PCMCIA Fritz!Card controller
- */
- cardinfo = inb(dev->id_iobase + VERREG_OFFSET)<<8 | inb(dev->id_iobase + MODREG_OFFSET);
- printf("isic%d: successfully detect AVM PCMCIA cardinfo = 0x%0x\n",
- dev->id_unit, cardinfo);
- dev->id_flags = FLAG_AVM_A1_PCMCIA;
- return (1);
-}
-#endif /* __FreeBSD__ */
-
-
-
-/*---------------------------------------------------------------------------*
- * isic_attach_fritzpcmcia - attach Fritz!Card
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_attach_fritzpcmica(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* ResetController again just to make sure... */
-
- outb(dev->id_iobase + STAT0_OFFSET, 0x00);
- DELAY(SEC_DELAY / 10);
- outb(dev->id_iobase + STAT0_OFFSET, 0x01);
- DELAY(SEC_DELAY / 10);
- outb(dev->id_iobase + STAT0_OFFSET, 0x00);
- DELAY(SEC_DELAY / 10);
-
- /* enable IRQ, disable counter IRQ */
-
- outb(dev->id_iobase + STAT0_OFFSET, ASL_TIMERDISABLE |
- ASL_TIMERRESET | ASL_ENABLE_INT);
- /* DELAY(SEC_DELAY / 10); */
-
- return(1);
-}
-
-#else
-
-/*
- * XXX - one time only! Some of this has to go into an enable
- * function, with apropriate counterpart in disable, so a card
- * could be removed an inserted again. But never mind for now,
- * this won't work anyway for several reasons (both in NetBSD
- * and in I4B).
- */
-int
-isic_attach_fritzpcmcia(struct pcmcia_isic_softc *psc, struct pcmcia_config_entry *cfe, struct pcmcia_attach_args *pa)
-{
- struct isic_softc *sc = &psc->sc_isic;
- bus_space_tag_t t;
- bus_space_handle_t h;
-
- /* Validate config info */
- if (cfe->num_memspace != 0)
- printf(": unexpected number of memory spaces %d should be 0\n",
- cfe->num_memspace);
- if (cfe->num_iospace != 1)
- printf(": unexpected number of memory spaces %d should be 1\n",
- cfe->num_iospace);
-
- /* Allocate pcmcia space - exactly as dictated by the card */
- if (pcmcia_io_alloc(pa->pf, cfe->iospace[0].start, cfe->iospace[0].length,
- 0, &psc->sc_pcioh))
- printf(": can't allocate i/o space\n");
-
- /* map them */
- if (pcmcia_io_map(pa->pf, ((cfe->flags & PCMCIA_CFE_IO16) ?
- PCMCIA_WIDTH_IO16 : PCMCIA_WIDTH_IO8), 0,
- cfe->iospace[0].length, &psc->sc_pcioh, &psc->sc_io_window)) {
- printf(": can't map i/o space\n");
- return 0;
- }
-
- /* Setup bus space maps */
- sc->sc_num_mappings = 1;
- sc->sc_cardtyp = CARD_TYPEP_PCFRITZ;
- MALLOC_MAPS(sc);
-
- /* Copy our handles/tags to the MI maps */
- sc->sc_maps[0].t = psc->sc_pcioh.iot;
- sc->sc_maps[0].h = psc->sc_pcioh.ioh;
- sc->sc_maps[0].offset = 0;
- sc->sc_maps[0].size = 0; /* not our mapping */
-
- t = sc->sc_maps[0].t;
- h = sc->sc_maps[0].h;
-
- sc->clearirq = NULL;
- sc->readreg = avma1_pcmcia_read_reg;
- sc->writereg = avma1_pcmcia_write_reg;
-
- sc->readfifo = avma1_pcmcia_read_fifo;
- sc->writefifo = avma1_pcmcia_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_PCFRITZ;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* Reset controller again just to make sure... */
-
- bus_space_write_1(t, h, STAT0_OFFSET, 0x00);
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(t, h, STAT0_OFFSET, 0x01);
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(t, h, STAT0_OFFSET, 0x00);
- DELAY(SEC_DELAY / 10);
-
- /* enable IRQ, disable counter IRQ */
-
- bus_space_write_1(t, h, STAT0_OFFSET, ASL_TIMERDISABLE |
- ASL_TIMERRESET | ASL_ENABLE_INT);
-
- return 1;
-}
-#endif
-
-#endif /* NISIC > 0 && defined(AVM_PCMCIA) */
diff --git a/sys/i4b/layer1/i4b_bchan.c b/sys/i4b/layer1/i4b_bchan.c
deleted file mode 100644
index 17ee273647777..0000000000000
--- a/sys/i4b/layer1/i4b_bchan.c
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_bchan.c - B channel handling L1 procedures
- * ----------------------------------------------
- *
- * $Id: i4b_bchan.c,v 1.28 1998/12/05 18:04:28 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:21:57 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#else
-#define NISIC 1
-#endif
-
-#if NISIC > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <machine/stdarg.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-#ifdef __FreeBSD__
-static void isic_bchannel_start(int unit, int h_chan);
-static void isic_bchannel_stat(int unit, int h_chan, bchan_statistics_t *bsp);
-#else
-static void isic_bchannel_start __P((int unit, int h_chan));
-static void isic_bchannel_stat __P((int unit, int h_chan, bchan_statistics_t *bsp));
-#endif
-
-static void isic_set_linktab(int unit, int channel, drvr_link_t *dlt);
-static isdn_link_t *isic_ret_linktab(int unit, int channel);
-
-/*---------------------------------------------------------------------------*
- * initialize one B channels rx/tx data structures and init/deinit HSCX
- *---------------------------------------------------------------------------*/
-void
-isic_bchannel_setup(int unit, int h_chan, int bprot, int activate)
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
- isic_Bchan_t *chan = &sc->sc_chan[h_chan];
-
- int s = SPLI4B();
-
- if(activate == 0)
- {
- /* deactivation */
- isic_hscx_init(sc, h_chan, activate);
- }
-
- DBGL1(L1_BCHAN, "isic_bchannel_setup", ("unit=%d, channel=%d, %s\n",
- sc->sc_unit, h_chan, activate ? "activate" : "deactivate"));
-
- /* general part */
-
- chan->unit = sc->sc_unit; /* unit number */
- chan->channel = h_chan; /* B channel */
- chan->bprot = bprot; /* B channel protocol */
- chan->state = HSCX_IDLE; /* B channel state */
-
- /* receiver part */
-
- i4b_Bcleanifq(&chan->rx_queue); /* clean rx queue */
-
- chan->rx_queue.ifq_maxlen = IFQ_MAXLEN;
-
- chan->rxcount = 0; /* reset rx counter */
-
- i4b_Bfreembuf(chan->in_mbuf); /* clean rx mbuf */
-
- chan->in_mbuf = NULL; /* reset mbuf ptr */
- chan->in_cbptr = NULL; /* reset mbuf curr ptr */
- chan->in_len = 0; /* reset mbuf data len */
-
- /* transmitter part */
-
- i4b_Bcleanifq(&chan->tx_queue); /* clean tx queue */
-
- chan->tx_queue.ifq_maxlen = IFQ_MAXLEN;
-
- chan->txcount = 0; /* reset tx counter */
-
- i4b_Bfreembuf(chan->out_mbuf_head); /* clean tx mbuf */
-
- chan->out_mbuf_head = NULL; /* reset head mbuf ptr */
- chan->out_mbuf_cur = NULL; /* reset current mbuf ptr */
- chan->out_mbuf_cur_ptr = NULL; /* reset current mbuf data ptr */
- chan->out_mbuf_cur_len = 0; /* reset current mbuf data cnt */
-
- if(activate != 0)
- {
- /* activation */
- isic_hscx_init(sc, h_chan, activate);
- }
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * start transmission on a b channel
- *---------------------------------------------------------------------------*/
-static void
-isic_bchannel_start(int unit, int h_chan)
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
-
- register isic_Bchan_t *chan = &sc->sc_chan[h_chan];
- register int next_len;
- register int len;
-
- int s;
- int activity = -1;
- int cmd = 0;
-
- s = SPLI4B(); /* enter critical section */
- if(chan->state & HSCX_TX_ACTIVE) /* already running ? */
- {
- splx(s);
- return; /* yes, leave */
- }
-
- /* get next mbuf from queue */
-
- IF_DEQUEUE(&chan->tx_queue, chan->out_mbuf_head);
-
- if(chan->out_mbuf_head == NULL) /* queue empty ? */
- {
- splx(s); /* leave critical section */
- return; /* yes, exit */
- }
-
- /* init current mbuf values */
-
- chan->out_mbuf_cur = chan->out_mbuf_head;
- chan->out_mbuf_cur_len = chan->out_mbuf_cur->m_len;
- chan->out_mbuf_cur_ptr = chan->out_mbuf_cur->m_data;
-
- /* activity indicator for timeout handling */
-
- if(chan->bprot == BPROT_NONE)
- {
- if(!(isic_hscx_silence(chan->out_mbuf_cur->m_data, chan->out_mbuf_cur->m_len)))
- activity = ACT_TX;
- }
- else
- {
- activity = ACT_TX;
- }
-
- chan->state |= HSCX_TX_ACTIVE; /* we start transmitting */
-
- if(sc->sc_trace & TRACE_B_TX) /* if trace, send mbuf to trace dev */
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = unit;
- hdr.type = (h_chan == HSCX_CH_A ? TRC_CH_B1 : TRC_CH_B2);
- hdr.dir = FROM_TE;
- hdr.count = ++sc->sc_trace_bcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, chan->out_mbuf_cur->m_len, chan->out_mbuf_cur->m_data);
- }
-
- len = 0; /* # of chars put into HSCX tx fifo this time */
-
- /*
- * fill the HSCX tx fifo with data from the current mbuf. if
- * current mbuf holds less data than HSCX fifo length, try to
- * get the next mbuf from (a possible) mbuf chain. if there is
- * not enough data in a single mbuf or in a chain, then this
- * is the last mbuf and we tell the HSCX that it has to send
- * CRC and closing flag
- */
-
- while((len < sc->sc_bfifolen) && chan->out_mbuf_cur)
- {
- /*
- * put as much data into the HSCX fifo as is
- * available from the current mbuf
- */
-
- if((len + chan->out_mbuf_cur_len) >= sc->sc_bfifolen)
- next_len = sc->sc_bfifolen - len;
- else
- next_len = chan->out_mbuf_cur_len;
-
-#ifdef NOTDEF
- printf("b:mh=%x, mc=%x, mcp=%x, mcl=%d l=%d nl=%d # ",
- chan->out_mbuf_head,
- chan->out_mbuf_cur,
- chan->out_mbuf_cur_ptr,
- chan->out_mbuf_cur_len,
- len,
- next_len);
-#endif
-
- /* wait for tx fifo write enabled */
-
- isic_hscx_waitxfw(sc, h_chan);
-
- /* write what we have from current mbuf to HSCX fifo */
-
- HSCX_WRFIFO(h_chan, chan->out_mbuf_cur_ptr, next_len);
-
- len += next_len; /* update # of bytes written */
- chan->txcount += next_len; /* statistics */
- chan->out_mbuf_cur_ptr += next_len; /* data ptr */
- chan->out_mbuf_cur_len -= next_len; /* data len */
-
- /*
- * in case the current mbuf (of a possible chain) data
- * has been put into the fifo, check if there is a next
- * mbuf in the chain. If there is one, get ptr to it
- * and update the data ptr and the length
- */
-
- if((chan->out_mbuf_cur_len <= 0) &&
- ((chan->out_mbuf_cur = chan->out_mbuf_cur->m_next) != NULL))
- {
- chan->out_mbuf_cur_ptr = chan->out_mbuf_cur->m_data;
- chan->out_mbuf_cur_len = chan->out_mbuf_cur->m_len;
-
- if(sc->sc_trace & TRACE_B_TX)
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = unit;
- hdr.type = (h_chan == HSCX_CH_A ? TRC_CH_B1 : TRC_CH_B2);
- hdr.dir = FROM_TE;
- hdr.count = ++sc->sc_trace_bcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, chan->out_mbuf_cur->m_len, chan->out_mbuf_cur->m_data);
- }
- }
- }
-
- /*
- * if there is either still data in the current mbuf and/or
- * there is a successor on the chain available issue just
- * a XTF (transmit) command to HSCX. if ther is no more
- * data available from the current mbuf (-chain), issue
- * an XTF and an XME (message end) command which will then
- * send the CRC and the closing HDLC flag sequence
- */
-
- if(chan->out_mbuf_cur && (chan->out_mbuf_cur_len > 0))
- {
- /*
- * more data available, send current fifo out.
- * next xfer to HSCX tx fifo is done in the
- * HSCX interrupt routine.
- */
-
- cmd |= HSCX_CMDR_XTF;
- }
- else
- {
- /* end of mbuf chain */
-
- if(chan->bprot == BPROT_NONE)
- cmd |= HSCX_CMDR_XTF;
- else
- cmd |= HSCX_CMDR_XTF | HSCX_CMDR_XME;
-
- i4b_Bfreembuf(chan->out_mbuf_head); /* free mbuf chain */
-
- chan->out_mbuf_head = NULL;
- chan->out_mbuf_cur = NULL;
- chan->out_mbuf_cur_ptr = NULL;
- chan->out_mbuf_cur_len = 0;
- }
-
- /* call timeout handling routine */
-
- if(activity == ACT_RX || activity == ACT_TX)
- (*chan->drvr_linktab->bch_activity)(chan->drvr_linktab->unit, activity);
-
- if(cmd)
- isic_hscx_cmd(sc, h_chan, cmd);
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * fill statistics struct
- *---------------------------------------------------------------------------*/
-static void
-isic_bchannel_stat(int unit, int h_chan, bchan_statistics_t *bsp)
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
- isic_Bchan_t *chan = &sc->sc_chan[h_chan];
- int s;
-
- s = SPLI4B();
-
- bsp->outbytes = chan->txcount;
- bsp->inbytes = chan->rxcount;
-
- chan->txcount = 0;
- chan->rxcount = 0;
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * return the address of isic drivers linktab
- *---------------------------------------------------------------------------*/
-static isdn_link_t *
-isic_ret_linktab(int unit, int channel)
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
- isic_Bchan_t *chan = &sc->sc_chan[channel];
-
- return(&chan->isdn_linktab);
-}
-
-/*---------------------------------------------------------------------------*
- * set the driver linktab in the b channel softc
- *---------------------------------------------------------------------------*/
-static void
-isic_set_linktab(int unit, int channel, drvr_link_t *dlt)
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
- isic_Bchan_t *chan = &sc->sc_chan[channel];
-
- chan->drvr_linktab = dlt;
-}
-
-/*---------------------------------------------------------------------------*
- * initialize our local linktab
- *---------------------------------------------------------------------------*/
-void
-isic_init_linktab(struct isic_softc *sc)
-{
- isic_Bchan_t *chan = &sc->sc_chan[HSCX_CH_A];
- isdn_link_t *lt = &chan->isdn_linktab;
-
- /* make sure the hardware driver is known to layer 4 */
- ctrl_types[CTRL_PASSIVE].set_linktab = isic_set_linktab;
- ctrl_types[CTRL_PASSIVE].get_linktab = isic_ret_linktab;
-
- /* local setup */
- lt->unit = sc->sc_unit;
- lt->channel = HSCX_CH_A;
- lt->bch_config = isic_bchannel_setup;
- lt->bch_tx_start = isic_bchannel_start;
- lt->bch_stat = isic_bchannel_stat;
- lt->tx_queue = &chan->tx_queue;
-
- /* used by non-HDLC data transfers, i.e. telephony drivers */
- lt->rx_queue = &chan->rx_queue;
-
- /* used by HDLC data transfers, i.e. ipr and isp drivers */
- lt->rx_mbuf = &chan->in_mbuf;
-
- chan = &sc->sc_chan[HSCX_CH_B];
- lt = &chan->isdn_linktab;
-
- lt->unit = sc->sc_unit;
- lt->channel = HSCX_CH_B;
- lt->bch_config = isic_bchannel_setup;
- lt->bch_tx_start = isic_bchannel_start;
- lt->bch_stat = isic_bchannel_stat;
- lt->tx_queue = &chan->tx_queue;
-
- /* used by non-HDLC data transfers, i.e. telephony drivers */
- lt->rx_queue = &chan->rx_queue;
-
- /* used by HDLC data transfers, i.e. ipr and isp drivers */
- lt->rx_mbuf = &chan->in_mbuf;
-}
-
-/*---------------------------------------------------------------------------*
- * telephony silence detection
- *---------------------------------------------------------------------------*/
-
-#define TEL_IDLE_MIN (BCH_MAX_DATALEN/2)
-
-int
-isic_hscx_silence(unsigned char *data, int len)
-{
- register int i = 0;
- register int j = 0;
-
- /* count idle bytes */
-
- for(;i < len; i++)
- {
- if((*data >= 0xaa) && (*data <= 0xac))
- j++;
- data++;
- }
-
-#ifdef NOTDEF
- printf("isic_hscx_silence: got %d silence bytes in frame\n", j);
-#endif
-
- if(j < (TEL_IDLE_MIN))
- return(0);
- else
- return(1);
-
-}
-
-#endif /* NISIC > 0 */
diff --git a/sys/i4b/layer1/i4b_ctx_s0P.c b/sys/i4b/layer1/i4b_ctx_s0P.c
deleted file mode 100644
index f9e6b7f03eed6..0000000000000
--- a/sys/i4b/layer1/i4b_ctx_s0P.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isic - I4B Siemens ISDN Chipset Driver for Creatix PnP cards
- * ============================================================
- *
- * $Id: i4b_ctx_s0P.c,v 1.17 1998/12/16 09:32:50 hm Exp $
- *
- * last edit-date: [Mon Dec 14 17:26:30 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-
-#include "isic.h"
-#include "opt_i4b.h"
-#include "pnp.h"
-
-#else
-
-#define NISIC 1
-#define NPNP 1
-
-#endif
-
-#if (NISIC > 0) && (NPNP > 0) && defined(CRTX_S0_P)
-
-#include <sys/param.h>
-
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#ifndef __FreeBSD__
-static u_int8_t ctxs0P_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void ctxs0P_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void ctxs0P_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void ctxs0P_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-void isic_attach_Cs0P(struct isic_softc *sc);
-#endif
-
-#ifdef __FreeBSD__
-#include <i386/isa/pnp.h>
-extern void isicintr ( int unit );
-#endif
-
-/*---------------------------------------------------------------------------*
- * Creatix ISDN-S0 P&P ISAC get fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-ctxs0P_read_fifo(void *buf, const void *base, size_t len)
-{
- insb((int)base + 0x3e, (u_char *)buf, (u_int)len);
-}
-
-#else
-
-static void
-ctxs0P_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_read_multi_1(t, h, o + 0x3e, buf, size);
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * Creatix ISDN-S0 P&P ISAC put fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-ctxs0P_write_fifo(void *base, const void *buf, size_t len)
-{
- outsb((int)base + 0x3e, (u_char *)buf, (u_int)len);
-}
-
-#else
-
-static void
-ctxs0P_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_write_multi_1(t, h, o + 0x3e, (u_int8_t*)buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Creatix ISDN-S0 P&P ISAC put register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-ctxs0P_write_reg(u_char *base, u_int offset, u_int v)
-{
- outb((int)base + offset, (u_char)v);
-}
-
-#else
-
-static void
-ctxs0P_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_write_1(t, h, o + offs, data);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Creatix ISDN-S0 P&P ISAC get register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static u_char
-ctxs0P_read_reg(u_char *base, u_int offset)
-{
- return (inb((int)base + offset));
-}
-
-#else
-
-static u_int8_t
-ctxs0P_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- return bus_space_read_1(t, h, o + offs);
-}
-
-#endif
-
-#ifdef __FreeBSD__
-
-/*---------------------------------------------------------------------------*
- * isic_probe_Cs0P - probe for Creatix ISDN-S0 P&P and compatibles
- *---------------------------------------------------------------------------*/
-int
-isic_probe_Cs0P(struct isa_device *dev, unsigned int iobase2)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Creatix ISDN-S0 P&P!\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- switch(ffs(dev->id_irq) - 1)
- {
- case 3:
- case 5:
- case 7:
- case 10:
- case 11:
- case 12:
- break;
-
- default:
- printf("isic%d: Error, invalid IRQ [%d] specified for Creatix ISDN-S0 P&P!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- break;
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if memory addr specified */
-
- if(dev->id_maddr)
- {
- printf("isic%d: Error, mem addr 0x%lx specified for Creatix ISDN-S0 P&P!\n",
- dev->id_unit, (u_long)dev->id_maddr);
- return(0);
- }
- dev->id_msize = 0;
-
- if(iobase2 == 0)
- {
- printf("isic%d: Error, iobase2 is 0 for Creatix ISDN-S0 P&P!\n",
- dev->id_unit);
- return(0);
- }
-
- /* check if we got an iobase */
-
- switch(dev->id_iobase)
- {
- case 0x120:
- case 0x180:
-/*XXX*/ break;
-
- default:
- printf("isic%d: Error, invalid iobase 0x%x specified for Creatix ISDN-S0 P&P!\n",
- dev->id_unit, dev->id_iobase);
- return(0);
- break;
- }
- sc->sc_port = dev->id_iobase;
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = ctxs0P_read_reg;
- sc->writereg = ctxs0P_write_reg;
-
- sc->readfifo = ctxs0P_read_fifo;
- sc->writefifo = ctxs0P_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_CS0P;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
-
- ISAC_BASE = (caddr_t) dev->id_iobase - 0x20;
- HSCX_A_BASE = (caddr_t) iobase2 - 0x20;
- HSCX_B_BASE = (caddr_t) iobase2;
-
- /*
- * Read HSCX A/B VSTR. Expected value for the Creatix PnP card is
- * 0x05 ( = version 2.1 ) in the least significant bits.
- */
-
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("isic%d: HSCX VSTR test failed for Creatix PnP\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- return (1);
-}
-
-/*---------------------------------------------------------------------------*
- * isic_attach_s0163P - attach Creatix ISDN-S0 P&P
- *---------------------------------------------------------------------------*/
-int
-isic_attach_Cs0P(struct isa_device *dev, unsigned int iobase2)
-{
- outb((dev->id_iobase) + 0x1c, 0);
- DELAY(SEC_DELAY / 10);
- outb((dev->id_iobase) + 0x1c, 1);
- DELAY(SEC_DELAY / 10);
- return(1);
-}
-
-#else /* !__FreeBSD__ */
-
-void
-isic_attach_Cs0P(struct isic_softc *sc)
-{
- /* init card */
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_1(t, h, 0x1c, 0);
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(t, h, 0x1c, 1);
- DELAY(SEC_DELAY / 10);
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = ctxs0P_read_reg;
- sc->writereg = ctxs0P_write_reg;
-
- sc->readfifo = ctxs0P_read_fifo;
- sc->writefifo = ctxs0P_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_CS0P;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-}
-#endif
-
-#endif /* (NISIC > 0) && (NPNP > 0) && defined(CRTX_S0_P) */
-
diff --git a/sys/i4b/layer1/i4b_drn_ngo.c b/sys/i4b/layer1/i4b_drn_ngo.c
deleted file mode 100644
index a5f3d69419238..0000000000000
--- a/sys/i4b/layer1/i4b_drn_ngo.c
+++ /dev/null
@@ -1,542 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_drn_ngo.c - Dr. Neuhaus Niccy GO@ and SAGEM Cybermod
- * --------------------------------------------------------
- *
- * $Id: i4b_drn_ngo.c,v 1.19 1998/12/16 09:32:50 hm Exp $
- *
- * last edit-date: [Mon Dec 14 17:26:03 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-
-#include "isic.h"
-#include "opt_i4b.h"
-#include "pnp.h"
-
-#else
-
-#define NISIC 1
-#define NPNP 1
-
-#endif
-
-#if (NISIC > 0) && (NPNP > 0) && defined(DRN_NGO)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-/*---------------------------------------------------------------------------*
- * Niccy GO@ definitions
- *
- * the card uses 2 i/o addressranges each using 2 bytes
- *
- * addressrange 0:
- * offset 0 - ISAC dataregister
- * offset 1 - HSCX dataregister
- * addressrange 1:
- * offset 0 - ISAC addressregister
- * offset 1 - HSCX addressregister
- *
- * to access an ISAC/HSCX register, you have to write the register
- * number into the ISAC or HSCX addressregister and then read/write
- * data for the ISAC/HSCX register into/from the corresponding
- * dataregister.
- *
- * Thanks to Klaus Muehle of Dr. Neuhaus Telekommunikation for giving
- * out this information!
- *
- *---------------------------------------------------------------------------*/
-#define NICCY_PORT_MIN 0x200
-#define NICCY_PORT_MAX 0x3e0
-
-#define HSCX_ABIT 0x1000 /* flag, HSCX A is meant */
-#define HSCX_BBIT 0x2000 /* flag, HSCX B is meant */
-
-#define HSCX_BOFF 0x40
-
-#define ADDR_OFF 2 /* address register range offset XXX */
-
-#define ISAC_DATA 0
-#define HSCX_DATA 1
-
-#define ISAC_ADDR 0
-#define HSCX_ADDR 1
-
-#ifdef __FreeBSD__
-
-#if 0
-#define HSCXADEBUG
-#define HSCXBDEBUG
-#define ISACDEBUG
-#else
-#undef HSCXADEBUG
-#undef HSCXBDEBUG
-#undef ISACDEBUG
-#endif
-
-/*---------------------------------------------------------------------------*
- * Dr. Neuhaus Niccy GO@ read fifo routine
- *---------------------------------------------------------------------------*/
-static void
-drnngo_read_fifo(void *buf, const void *base, size_t len)
-{
- register int offset;
- register u_int data;
-
- int x = SPLI4B();
-
- if((u_int)base & HSCX_ABIT)
- {
- (u_int)base &= ~HSCX_ABIT;
- (u_int)data = ((u_int)base + HSCX_DATA);
- (u_int)base += (ADDR_OFF + HSCX_ADDR);
- offset = 0;
-#ifdef HSCXADEBUG
-printf("GO/A/frd: base=0x%x, data=0x%x, len=%d\n", base, data, len);
-#endif
- }
- else if((u_int)base & HSCX_BBIT)
- {
- (u_int)base &= ~HSCX_BBIT;
- (u_int)data = ((u_int)base + HSCX_DATA);
- (u_int)base += (ADDR_OFF + HSCX_ADDR);
- offset = HSCX_BOFF;
-#ifdef HSCXBDEBUG
-printf("GO/B/frd: base=0x%x, data=0x%x, len=%d\n", base, data, len);
-#endif
- }
- else
- {
- (u_int)data = ((u_int)base + ISAC_DATA);
- (u_int)base += (ADDR_OFF + ISAC_ADDR);
- offset = 0;
-#ifdef ISACDEBUG
-printf("GO/I/frd: base=0x%x, data=0x%x, len=%d\n", base, data, len);
-#endif
- }
-
- for(;len > 0; len--, offset++)
- {
- outb((int)base, (u_char)offset);
- *((u_char *)buf + offset) = inb((int)data);
- }
-
- splx(x);
-}
-
-/*---------------------------------------------------------------------------*
- * Dr. Neuhaus Niccy GO@ write fifo routine
- *---------------------------------------------------------------------------*/
-static void
-drnngo_write_fifo(void *base, const void *buf, size_t len)
-{
- register int offset;
- register u_int data;
-
- int x = SPLI4B();
-
- if((u_int)base & HSCX_ABIT)
- {
- (u_int)base &= ~HSCX_ABIT;
- (u_int)data = ((u_int)base + HSCX_DATA);
- (u_int)base += (ADDR_OFF + HSCX_ADDR);
- offset = 0;
-#ifdef HSCXADEBUG
-printf("GO/A/fwr: base=0x%x, data=0x%x, len=%d\n", base, data, len);
-#endif
- }
- else if((u_int)base & HSCX_BBIT)
- {
- (u_int)base &= ~HSCX_BBIT;
- (u_int)data = ((u_int)base + HSCX_DATA);
- (u_int)base += (ADDR_OFF + HSCX_ADDR);
- offset = HSCX_BOFF;
-#ifdef HSCXBDEBUG
-printf("GO/B/fwr: base=0x%x, data=0x%x, len=%d\n", base, data, len);
-#endif
- }
- else
- {
- (u_int)data = ((u_int)base + ISAC_DATA);
- (u_int)base += (ADDR_OFF + ISAC_ADDR);
- offset = 0;
-#ifdef ISACDEBUG
-printf("GO/I/fwr: base=0x%x, data=0x%x, len=%d\n", base, data, len);
-#endif
- }
-
- for(;len > 0; len--, offset++)
- {
- outb((int)base, (u_char)offset);
- outb((int)data, *((u_char *)buf + offset));
- }
-
- splx(x);
-}
-
-/*---------------------------------------------------------------------------*
- * Dr. Neuhaus Niccy GO@ write register routine
- *---------------------------------------------------------------------------*/
-static void
-drnngo_write_reg(u_char *base, u_int offset, u_int v)
-{
- int x = SPLI4B();
- if((u_int)base & HSCX_ABIT)
- {
- (u_int)base &= ~HSCX_ABIT;
- outb((int)base + ADDR_OFF + HSCX_ADDR, (u_char)offset);
- outb((int)base + HSCX_DATA, (u_char)v);
-#ifdef HSCXADEBUG
-printf("GO/A/rwr: base=0x%x, addr=0x%x, offset=0x%x, val=0x%x\n",
- (int)base + ADDR_OFF + HSCX_ADDR, (int)base + HSCX_DATA,
- (u_char)offset, (u_char)v);
-#endif
- }
- else if((u_int)base & HSCX_BBIT)
- {
- (u_int)base &= ~HSCX_BBIT;
- outb((int)base + ADDR_OFF + HSCX_ADDR, (u_char)(offset + HSCX_BOFF));
- outb((int)base + HSCX_DATA, (u_char)v);
-#ifdef HSCXBDEBUG
-printf("GO/B/rwr: base=0x%x, addr=0x%x, offset=0x%x, val=0x%x\n",
- (int)base + ADDR_OFF + HSCX_ADDR, (int)base + HSCX_DATA,
- (u_char)(offset + HSCX_BOFF), (u_char)v);
-#endif
- }
- else
- {
- outb((int)base + ADDR_OFF + ISAC_ADDR, (u_char)offset);
- outb((int)base + ISAC_DATA, (u_char)v);
-#ifdef ISACDEBUG
-printf("GO/I/rwr: base=0x%x, addr=0x%x, offset=0x%x, val=0x%x\n",
- (int)base + ADDR_OFF + ISAC_ADDR, (int)base + ISAC_DATA,
- (u_char)offset, (u_char)v);
-#endif
- }
- splx(x);
-}
-
-/*---------------------------------------------------------------------------*
- * Dr. Neuhaus Niccy GO@ read register routine
- *---------------------------------------------------------------------------*/
-static u_char
-drnngo_read_reg(u_char *base, u_int offset)
-{
- u_char val;
- int x = SPLI4B();
-
- if((u_int)base & HSCX_ABIT)
- {
- (u_int)base &= ~HSCX_ABIT;
- outb((int)base + ADDR_OFF + HSCX_ADDR, (u_char)offset);
- val = inb((int)base + HSCX_DATA);
-#ifdef HSCXADEBUG
-printf("GO/A/rrd: base=0x%x, addr=0x%x, offset=0x%x, val=0x%x\n",
- (int)base + ADDR_OFF + HSCX_ADDR, (int)base + HSCX_DATA,
- (u_char)offset, (u_char)val);
-#endif
- }
- else if((u_int)base & HSCX_BBIT)
- {
- (u_int)base &= ~HSCX_BBIT;
- outb((int)base + ADDR_OFF + HSCX_ADDR, (u_char)(offset + HSCX_BOFF));
- val = inb((int)base + HSCX_DATA);
-#ifdef HSCXBDEBUG
-printf("GO/B/rrd: base=0x%x, addr=0x%x, offset=0x%x, val=0x%x\n",
- (int)base + ADDR_OFF + HSCX_ADDR, (int)base + HSCX_DATA,
- (u_char)(offset + HSCX_BOFF), (u_char)val);
-#endif
- }
- else
- {
- outb((int)base + ADDR_OFF + ISAC_ADDR, (u_char)offset);
- val = inb((int)base + ISAC_DATA);
-#ifdef ISACDEBUG
-printf("GO/I/rrd: base=0x%x, addr=0x%x, offset=0x%x, val=0x%x\n",
- (int)base + ADDR_OFF + ISAC_ADDR, (int)base + ISAC_DATA,
- (u_char)offset, (u_char)val);
-#endif
- }
- splx(x);
- return(val);
-}
-
-/*---------------------------------------------------------------------------*
- * isic_probe_drnngo - probe for Dr. Neuhaus Niccy GO@
- *---------------------------------------------------------------------------*/
-int
-isic_probe_drnngo(struct isa_device *dev, unsigned int iobase2)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Dr. Neuhaus Niccy GO@!\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- switch(ffs(dev->id_irq)-1)
- {
- case 3:
- case 4:
- case 5:
- case 9:
- case 10:
- case 11:
- case 12:
- case 15:
- break;
-
- default:
- printf("isic%d: Error, invalid IRQ [%d] specified for Dr. Neuhaus Niccy GO@!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- break;
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if memory addr specified */
-
- if(dev->id_maddr)
- {
- printf("isic%d: Error, mem addr 0x%lx specified for Dr. Neuhaus Niccy GO@!\n",
- dev->id_unit, (u_long)dev->id_maddr);
- return(0);
- }
- dev->id_msize = 0;
-
- /* check if we got an iobase */
-
- if(dev->id_iobase < NICCY_PORT_MIN || dev->id_iobase > NICCY_PORT_MAX)
- {
- printf("isic%d: Error, invalid iobase 0x%x specified for Dr. Neuhaus Niccy GO@!\n",
- dev->id_unit, dev->id_iobase);
- return(0);
- }
- sc->sc_port = dev->id_iobase;
-
- if(iobase2 == 0)
- {
- printf("isic%d: Error, iobase2 is 0 for Dr. Neuhaus Niccy GO@!\n",
- dev->id_unit);
- return(0);
- }
-
- if(iobase2 < NICCY_PORT_MIN || iobase2 > NICCY_PORT_MAX)
- {
- printf("isic%d: Error, invalid port1 0x%x specified for Dr. Neuhaus Niccy GO@!\n",
- dev->id_unit, iobase2);
- return(0);
- }
-
-/*XXX*/ if((dev->id_iobase + 2) != iobase2)
- {
- printf("isic%d: Error, port1 must be (port0+2) for Dr.Neuhaus Niccy GO@!\n",
- dev->id_unit);
- return(0);
- }
-
- /* setup ISAC access routines */
-
- sc->clearirq = NULL;
- sc->readreg = drnngo_read_reg;
- sc->writereg = drnngo_write_reg;
-
- sc->readfifo = drnngo_read_fifo;
- sc->writefifo = drnngo_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_DRNNGO;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
-
- ISAC_BASE = (caddr_t)dev->id_iobase;
- HSCX_A_BASE = (caddr_t)(((u_int)dev->id_iobase) | HSCX_ABIT);
- HSCX_B_BASE = (caddr_t)(((u_int)dev->id_iobase) | HSCX_BBIT);
-
- /*
- * Read HSCX A/B VSTR. Expected value for Dr. Neuhaus Niccy GO@ based
- * boards is 0x05 in the least significant bits.
- */
-
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("isic%d: HSCX VSTR test failed for Dr. Neuhaus Niccy GO@\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- return (1);
-}
-
-/*---------------------------------------------------------------------------*
- * isic_attach_drnngo - attach Dr. Neuhaus Niccy GO@
- *---------------------------------------------------------------------------*/
-int
-isic_attach_drnngo(struct isa_device *dev, unsigned int iobase2)
-{
- return (1);
-}
-
-#else
-
-static u_int8_t drnngo_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void drnngo_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void drnngo_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void drnngo_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-void isic_attach_drnngo __P((struct isic_softc *sc));
-
-/*
- * Mapping from "what" parameter to offsets into the io map
- */
-static struct {
- bus_size_t oa, /* address register offset */
- od, /* data register offset */
- or; /* additional chip register offset */
-} offset[] =
-{
- { ISAC_ADDR, ISAC_DATA, 0 }, /* ISAC access */
- { HSCX_ADDR, HSCX_DATA, 0 }, /* HSCX A access */
- { HSCX_ADDR, HSCX_DATA, HSCX_BOFF } /* HSCX B access */
-};
-
-static void
-drnngo_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t hd = sc->sc_maps[0].h, ha = sc->sc_maps[1].h;
- bus_space_write_1(t, ha, offset[what].oa, offset[what].or);
- bus_space_read_multi_1(t, hd, offset[what].od, buf, size);
-}
-
-static void
-drnngo_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t hd = sc->sc_maps[0].h, ha = sc->sc_maps[1].h;
- bus_space_write_1(t, ha, offset[what].oa, offset[what].or);
- bus_space_write_multi_1(t, hd, offset[what].od, (u_int8_t*)buf, size);
-}
-
-static void
-drnngo_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t hd = sc->sc_maps[0].h, ha = sc->sc_maps[1].h;
- bus_space_write_1(t, ha, offset[what].oa, offs+offset[what].or);
- bus_space_write_1(t, hd, offset[what].od, data);
-}
-
-static u_int8_t
-drnngo_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t hd = sc->sc_maps[0].h, ha = sc->sc_maps[1].h;
- bus_space_write_1(t, ha, offset[what].oa, offs+offset[what].or);
- return bus_space_read_1(t, hd, offset[what].od);
-}
-
-void
-isic_attach_drnngo(struct isic_softc *sc)
-{
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = drnngo_read_reg;
- sc->writereg = drnngo_write_reg;
-
- sc->readfifo = drnngo_read_fifo;
- sc->writefifo = drnngo_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_DRNNGO;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-}
-
-#endif
-
-#endif /* (NISIC > 0) && (NPNP > 0) && defined(DRN_NGO) */
diff --git a/sys/i4b/layer1/i4b_dynalink.c b/sys/i4b/layer1/i4b_dynalink.c
deleted file mode 100644
index 846e79ae6da15..0000000000000
--- a/sys/i4b/layer1/i4b_dynalink.c
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Copyright (c) 1998 Martijn Plak. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isdn4bsd layer1 driver for Dynalink IS64PH isdn TA
- * ==================================================
- *
- * $Id: i4b_dynalink.c,v 1.8 1998/12/17 04:55:38 hm Exp $
- *
- * last edit-date: [Thu Dec 17 05:50:39 1998]
- *
- * written by Martijn Plak <tigrfhur@xs4all.nl>
- *
- * -mp 11 jun 1998 first try, code borrowed from Creatix driver
- * -mp 18 jun 1998 cleaned up code
- * -hm FreeBSD PnP
- * -mp 17 dec 1998 made it compile again
- *
- *---------------------------------------------------------------------------*/
-
-/* NOTES:
-
- This driver was written for the Dynalink IS64PH ISDN TA, based on two
- Siemens chips (HSCX 21525 and ISAC 2186). It is sold in the Netherlands.
-
- model numbers found on (my) card:
- IS64PH, TAS100H-N, P/N:89590555, TA200S100045521
-
- chips:
- Siemens PSB 21525N, HSCX TE V2.1
- Siemens PSB 2186N, ISAC-S TE V1.1
- 95MS14, PNP
-
- plug-and-play info:
- device id "ASU1688"
- vendor id 0x88167506
- serial 0x00000044
- i/o port 4 byte alignment, 4 bytes requested,
- 10 bit i/o decoding, 0x100-0x3f8 (?)
- irq 3,4,5,9,10,11,12,15, high true, edge sensitive
-
- At the moment I'm writing this Dynalink is replacing this card with
- one based on a single Siemens chip (IPAC). It will apparently be sold
- under the same model name.
-
- This driver might also work for Asuscom cards.
-*/
-
-#ifdef __FreeBSD__
-
-#include "isic.h"
-#include "opt_i4b.h"
-#include "pnp.h"
-
-#else
-
-#define NISIC 1
-#define NPNP 1
-
-#endif
-
-#if (NISIC > 0) && (NPNP > 0) && defined(DYNALINK)
-
-/* HEADERS
-*/
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#if __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#include <i386/isa/pnp.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#ifdef __FreeBSD__
-static void dynalink_read_fifo(void *buf, const void *base, size_t len);
-static void dynalink_write_fifo(void *base, const void *buf, size_t len);
-static void dynalink_write_reg(u_char *base, u_int offset, u_int v);
-static u_char dynalink_read_reg(u_char *base, u_int offset);
-
-extern struct isa_driver isicdriver;
-
-#else
-static void dynalink_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size);
-static void dynalink_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size);
-static void dynalink_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data);
-static u_int8_t dynalink_read_reg(struct isic_softc *sc, int what, bus_size_t offs);
-void isic_attach_Dyn(struct isic_softc *sc);
-#endif
-
-/* io address mapping */
-#define ISAC 0
-#define HSCX 1
-#define ADDR 2
-
-/* ADDR bits */
-#define ADDRMASK 0x7F
-#define RESET 0x80
-
-/* HSCX register offsets */
-#define HSCXA 0x00
-#define HSCXB 0x40
-
-#ifdef __FreeBSD__
-/* base address juggling */
-#define HSCXB_HACK 0x400
-#define IOBASE(addr) (((int)addr)&0x3FC)
-#define IOADDR(addr) (((int)addr)&0x3FF)
-#define IS_HSCXB_HACK(addr) ((((int)addr)&HSCXB_HACK)?HSCXB:HSCXA)
-
-/* ISIC probe and attach
-*/
-
-int
-isic_probe_Dyn(struct isa_device *dev, unsigned int iobase2)
-{
-
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Dynalink IS64PH.\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- switch(ffs(dev->id_irq) - 1)
- {
- case 3:
- case 4:
- case 5:
- case 9:
- case 10:
- case 11:
- case 12:
- case 15:
- break;
-
- default:
- printf("isic%d: Error, invalid IRQ [%d] specified for Dynalink IS64PH.\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- break;
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if memory addr specified */
-
- if(dev->id_maddr)
- {
- printf("isic%d: Error, mem addr 0x%lx specified for Dynalink IS64PH.\n",
- dev->id_unit, (u_long)dev->id_maddr);
- return (0);
- }
- dev->id_msize = 0;
-
- /* check if we got an iobase */
- if ( (dev->id_iobase < 0x100) ||
- (dev->id_iobase > 0x3f8) ||
- (dev->id_iobase & 3) )
- {
- printf("isic%d: Error, invalid iobase 0x%x specified for Dynalink!\n", dev->id_unit, dev->id_iobase);
- return(0);
- }
- sc->sc_port = dev->id_iobase;
-
- /* setup access routines */
- sc->clearirq = NULL;
- sc->readreg = dynalink_read_reg;
- sc->writereg = dynalink_write_reg;
- sc->readfifo = dynalink_read_fifo;
- sc->writefifo = dynalink_write_fifo;
-
- /* setup card type */
- sc->sc_cardtyp = CARD_TYPEP_DYNALINK;
-
- /* setup IOM bus type */
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
- ISAC_BASE = (caddr_t) sc->sc_port;
- HSCX_A_BASE = (caddr_t) sc->sc_port + 1;
- HSCX_B_BASE = (caddr_t) sc->sc_port + 1 + HSCXB_HACK;
-
- /* Read HSCX A/B VSTR. Expected value is 0x05 (V2.1). */
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("isic%d: HSCX VSTR test failed for Dynalink\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- return (1);
-}
-
-int
-isic_attach_Dyn(struct isa_device *dev, unsigned int iobase2)
-{
- outb((dev->id_iobase)+ADDR, RESET);
- DELAY(SEC_DELAY / 10);
- outb((dev->id_iobase)+ADDR, 0);
- DELAY(SEC_DELAY / 10);
- return(1);
-}
-
-#else
-
-void isic_attach_Dyn(struct isic_softc *sc)
-{
- /* setup access routines */
- sc->clearirq = NULL;
- sc->readreg = dynalink_read_reg;
- sc->writereg = dynalink_write_reg;
- sc->readfifo = dynalink_read_fifo;
- sc->writefifo = dynalink_write_fifo;
-
- /* setup card type */
- sc->sc_cardtyp = CARD_TYPEP_DYNALINK;
-
- /* setup IOM bus type */
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* Read HSCX A/B VSTR. Expected value is 0x05 (V2.1). */
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) || ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("%s: HSCX VSTR test failed for Dynalink PnP\n",
- sc->sc_dev.dv_xname);
- printf("%s: HSC0: VSTR: %#x\n",
- sc->sc_dev.dv_xname, HSCX_READ(0, H_VSTR));
- printf("%s: HSC1: VSTR: %#x\n",
- sc->sc_dev.dv_xname, HSCX_READ(1, H_VSTR));
- return;
- }
-
- bus_space_write_1(sc->sc_maps[0].t, sc->sc_maps[0].h, ADDR, RESET);
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(sc->sc_maps[0].t, sc->sc_maps[0].h, ADDR, 0);
- DELAY(SEC_DELAY / 10);
-}
-
-#endif /* ISIC>0 && NPNP>0 && defined(DYNALINK) */
-
-/* LOW-LEVEL DEVICE ACCESS
-
- NOTE: The isdn4bsd code expects the two HSCX channels at different
- base addresses. I'm faking this, and remap them to the same address
- in the low-level routines. Search for HSCXB_HACK and IS_HSCXB_HACK.
-
- REM: this is only true for the FreeBSD version of I4B!
-*/
-
-#ifdef __FreeBSD__
-static void
-dynalink_read_fifo(void *buf, const void *base, size_t len)
-{
- outb(IOBASE(base)+ADDR, 0+IS_HSCXB_HACK(base));
- insb(IOADDR(base), (u_char *)buf, (u_int)len);
-}
-#else
-static void
-dynalink_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ADDR, 0);
- bus_space_read_multi_1(t, h, ISAC, buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ADDR, HSCXA);
- bus_space_read_multi_1(t, h, HSCX, buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ADDR, HSCXB);
- bus_space_read_multi_1(t, h, HSCX, buf, size);
- break;
- }
-}
-#endif
-
-#ifdef __FreeBSD__
-static void
-dynalink_write_fifo(void *base, const void *buf, size_t len)
-{
- outb(IOBASE(base)+ADDR, 0+IS_HSCXB_HACK(base));
- outsb(IOADDR(base), (u_char *)buf, (u_int)len);
-}
-#else
-static void dynalink_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ADDR, 0);
- bus_space_write_multi_1(t, h, ISAC, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ADDR, HSCXA);
- bus_space_write_multi_1(t, h, HSCX, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ADDR, HSCXB);
- bus_space_write_multi_1(t, h, HSCX, (u_int8_t*)buf, size);
- break;
- }
-}
-#endif
-
-#ifdef __FreeBSD__
-static void
-dynalink_write_reg(u_char *base, u_int offset, u_int v)
-{
- outb(IOBASE(base)+ADDR, (offset+IS_HSCXB_HACK(base))&ADDRMASK);
- outb(IOADDR(base), (u_char)v);
-}
-#else
-static void dynalink_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ADDR, offs);
- bus_space_write_1(t, h, ISAC, data);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ADDR, HSCXA+offs);
- bus_space_write_1(t, h, HSCX, data);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ADDR, HSCXB+offs);
- bus_space_write_1(t, h, HSCX, data);
- break;
- }
-}
-#endif
-
-#ifdef __FreeBSD__
-static u_char
-dynalink_read_reg(u_char *base, u_int offset)
-{
- outb(IOBASE(base)+ADDR, (offset+IS_HSCXB_HACK(base))&ADDRMASK);
- return (inb(IOADDR(base)));
-}
-#else
-static u_int8_t dynalink_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ADDR, offs);
- return bus_space_read_1(t, h, ISAC);
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ADDR, HSCXA+offs);
- return bus_space_read_1(t, h, HSCX);
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ADDR, HSCXB+offs);
- return bus_space_read_1(t, h, HSCX);
- }
- return 0;
-}
-#endif
-
-#endif /* (NISIC > 0) && (NPNP > 0) && defined(DYNALINK) */
diff --git a/sys/i4b/layer1/i4b_elsa_isdnmc.c b/sys/i4b/layer1/i4b_elsa_isdnmc.c
deleted file mode 100644
index c6987f55adb26..0000000000000
--- a/sys/i4b/layer1/i4b_elsa_isdnmc.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (c) 1998 Martin Husemann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * ELSA MicroLink ISDN/MC card specific routines
- * ---------------------------------------------
- *
- * $Id: i4b_elsa_isdnmc.c,v 1.2 1998/12/05 18:04:33 hm Exp $
- *
- * last edit-date: [Tue Dec 1 07:45:53 1998]
- *
- * -mh added support for elsa ISDN/mc
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-
-#if NISIC > 0 && defined(ELSA_ISDNMC)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-
-#include <dev/pcmcia/pcmciareg.h>
-#include <dev/pcmcia/pcmciavar.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/layer1/pcmcia_isic.h>
-
-#ifndef __FreeBSD__
-/* PCMCIA support routines */
-static u_int8_t elsa_isdnmc_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void elsa_isdnmc_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void elsa_isdnmc_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void elsa_isdnmc_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-#endif
-
-/*
- * The ELSA MicroLink ISDN/MC uses one contigous IO region,
- * mapped by the pcmcia code.
- * The chip access is via three ports:
- */
-#define ISAC_DATA 1 /* ISAC dataport at offset 1 */
-#define HSCX_DATA 2 /* HSCX dataport at offset 2 */
-#define ADDR_LATCH 4 /* address latch at offset 4 */
-
-/* This is very similar to the ELSA QuickStep 1000 (ISA) card */
-
-/*---------------------------------------------------------------------------*
- * read fifo routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-elsa_isdnmc_read_fifo(void *buf, const void *base, size_t len)
-{
-}
-#else
-static void
-elsa_isdnmc_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ADDR_LATCH, 0);
- bus_space_read_multi_1(t, h, ISAC_DATA, buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ADDR_LATCH, 0);
- bus_space_read_multi_1(t, h, HSCX_DATA, buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ADDR_LATCH, 0x40);
- bus_space_read_multi_1(t, h, HSCX_DATA, buf, size);
- break;
- }
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * write fifo routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-elsa_isdnmc_write_fifo(void *base, const void *buf, size_t len)
-{
-}
-#else
-static void
-elsa_isdnmc_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ADDR_LATCH, 0);
- bus_space_write_multi_1(t, h, ISAC_DATA, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ADDR_LATCH, 0);
- bus_space_write_multi_1(t, h, HSCX_DATA, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ADDR_LATCH, 0x40);
- bus_space_write_multi_1(t, h, HSCX_DATA, (u_int8_t*)buf, size);
- break;
- }
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * write register routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-elsa_isdnmc_write_reg(u_char *base, u_int offset, u_int v)
-{
-}
-#else
-static void
-elsa_isdnmc_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ADDR_LATCH, offs);
- bus_space_write_1(t, h, ISAC_DATA, data);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ADDR_LATCH, offs);
- bus_space_write_1(t, h, HSCX_DATA, data);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ADDR_LATCH, 0x40+offs);
- bus_space_write_1(t, h, HSCX_DATA, data);
- break;
- }
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * read register routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static u_char
-elsa_isdnmc_read_reg(u_char *base, u_int offset)
-{
- return 0;
-}
-#else
-static u_int8_t
-elsa_isdnmc_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ADDR_LATCH, offs);
- return bus_space_read_1(t, h, ISAC_DATA);
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ADDR_LATCH, offs);
- return bus_space_read_1(t, h, HSCX_DATA);
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ADDR_LATCH, 0x40+offs);
- return bus_space_read_1(t, h, HSCX_DATA);
- }
- return 0;
-}
-#endif
-
-#ifdef __FreeBSD__
-#else
-
-/*
- * XXX - one time only! Some of this has to go into an enable
- * function, with apropriate counterpart in disable, so a card
- * could be removed an inserted again. But never mind for now,
- * this won't work anyway for several reasons (both in NetBSD
- * and in I4B).
- */
-int
-isic_attach_elsaisdnmc(struct pcmcia_isic_softc *psc, struct pcmcia_config_entry *cfe, struct pcmcia_attach_args *pa)
-{
- struct isic_softc *sc = &psc->sc_isic;
- bus_space_tag_t t;
- bus_space_handle_t h;
-
- /* Validate config info */
- if (cfe->num_memspace != 0)
- printf(": unexpected number of memory spaces %d should be 0\n",
- cfe->num_memspace);
- if (cfe->num_iospace != 1)
- printf(": unexpected number of memory spaces %d should be 1\n",
- cfe->num_iospace);
-
- /* Allocate pcmcia space */
- if (pcmcia_io_alloc(pa->pf, 0, cfe->iospace[0].length,
- cfe->iospace[0].length, &psc->sc_pcioh))
- printf(": can't allocate i/o space\n");
-
- /* map them */
- if (pcmcia_io_map(pa->pf, ((cfe->flags & PCMCIA_CFE_IO16) ?
- PCMCIA_WIDTH_IO16 : PCMCIA_WIDTH_IO8), 0,
- cfe->iospace[0].length, &psc->sc_pcioh, &psc->sc_io_window)) {
- printf(": can't map i/o space\n");
- return 0;
- }
-
- /* OK, this will work! */
- sc->sc_cardtyp = CARD_TYPEP_ELSAMLIMC;
-
- /* Setup bus space maps */
- sc->sc_num_mappings = 1;
- MALLOC_MAPS(sc);
-
- /* Copy our handles/tags to the MI maps */
- sc->sc_maps[0].t = psc->sc_pcioh.iot;
- sc->sc_maps[0].h = psc->sc_pcioh.ioh;
- sc->sc_maps[0].offset = 0;
- sc->sc_maps[0].size = 0; /* not our mapping */
-
- t = sc->sc_maps[0].t;
- h = sc->sc_maps[0].h;
-
- sc->clearirq = NULL;
- sc->readreg = elsa_isdnmc_read_reg;
- sc->writereg = elsa_isdnmc_write_reg;
-
- sc->readfifo = elsa_isdnmc_read_fifo;
- sc->writefifo = elsa_isdnmc_write_fifo;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- return 1;
-}
-#endif
-
-#endif /* ISIC > 0 */
diff --git a/sys/i4b/layer1/i4b_elsa_mcall.c b/sys/i4b/layer1/i4b_elsa_mcall.c
deleted file mode 100644
index 36882e912809e..0000000000000
--- a/sys/i4b/layer1/i4b_elsa_mcall.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (c) 1998 Martin Husemann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * ELSA MicroLink MC/all card specific routines
- * --------------------------------------------
- *
- * $Id: i4b_elsa_mcall.c,v 1.1 1998/12/02 06:44:27 hm Exp $
- *
- * last edit-date: [Tue Dec 1 07:45:53 1998]
- *
- * -mh started support for ELSA MC/all
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-
-#if NISIC > 0 && defined(ELSA_MCALL)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-
-#include <dev/pcmcia/pcmciareg.h>
-#include <dev/pcmcia/pcmciavar.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-#include <i4b/layer1/i4b_ipac.h>
-
-#include <i4b/layer1/pcmcia_isic.h>
-
-#ifndef __FreeBSD__
-/* PCMCIA support routines */
-static u_int8_t elsa_mcall_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void elsa_mcall_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void elsa_mcall_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void elsa_mcall_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-#endif
-
-/*---------------------------------------------------------------------------*
- * read fifo routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static int PCMCIA_IO_BASE = 0; /* ap: XXX hack */
-static void
-elsa_mcall_read_fifo(void *buf, const void *base, size_t len)
-{
-}
-#else
-static void
-elsa_mcall_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- /*
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- */
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * write fifo routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-elsa_mcall_write_fifo(void *base, const void *buf, size_t len)
-{
-}
-#else
-static void
-elsa_mcall_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- /*
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- */
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * write register routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static void
-elsa_mcall_write_reg(u_char *base, u_int offset, u_int v)
-{
-}
-#else
-static void
-elsa_mcall_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- /*
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- */
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * read register routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-static u_char
-elsa_mcall_read_reg(u_char *base, u_int offset)
-{
- return 0;
-}
-#else
-static u_int8_t
-elsa_mcall_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- /*
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- */
- return 0;
-}
-#endif
-
-#ifdef __FreeBSD__
-#else
-
-/*
- * XXX - one time only! Some of this has to go into an enable
- * function, with apropriate counterpart in disable, so a card
- * could be removed an inserted again. But never mind for now,
- * this won't work anyway for several reasons (both in NetBSD
- * and in I4B).
- */
-int
-isic_attach_elsamcall(struct pcmcia_isic_softc *psc, struct pcmcia_config_entry *cfe, struct pcmcia_attach_args *pa)
-{
- struct isic_softc *sc = &psc->sc_isic;
- bus_space_tag_t t;
- bus_space_handle_t h;
-
- /* Validate config info */
- if (cfe->num_memspace != 0)
- printf(": unexpected number of memory spaces %d should be 0\n",
- cfe->num_memspace);
- if (cfe->num_iospace != 1)
- printf(": unexpected number of memory spaces %d should be 1\n",
- cfe->num_iospace);
-
- /* Allocate pcmcia space */
- if (pcmcia_io_alloc(pa->pf, 0, cfe->iospace[0].length,
- cfe->iospace[0].length, &psc->sc_pcioh))
- printf(": can't allocate i/o space\n");
-
- /* map them */
- if (pcmcia_io_map(pa->pf, ((cfe->flags & PCMCIA_CFE_IO16) ?
- PCMCIA_WIDTH_IO16 : PCMCIA_WIDTH_IO8), 0,
- cfe->iospace[0].length, &psc->sc_pcioh, &psc->sc_io_window)) {
- printf(": can't map i/o space\n");
- return 0;
- }
-
- /* setup card type */
- sc->sc_cardtyp = CARD_TYPEP_ELSAMLMCALL;
-
- /* Setup bus space maps */
- sc->sc_num_mappings = 1;
- MALLOC_MAPS(sc);
-
- /* Copy our handles/tags to the MI maps */
- sc->sc_maps[0].t = psc->sc_pcioh.iot;
- sc->sc_maps[0].h = psc->sc_pcioh.ioh;
- sc->sc_maps[0].offset = 0;
- sc->sc_maps[0].size = 0; /* not our mapping */
-
- t = sc->sc_maps[0].t;
- h = sc->sc_maps[0].h;
-
- sc->clearirq = NULL;
- sc->readreg = elsa_mcall_read_reg;
- sc->writereg = elsa_mcall_write_reg;
-
- sc->readfifo = elsa_mcall_read_fifo;
- sc->writefifo = elsa_mcall_write_fifo;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 1;
- sc->sc_bfifolen = IPAC_BFIFO_LEN;
-
- return 1;
-}
-#endif
-
-#endif /* NISIC > 0 */
diff --git a/sys/i4b/layer1/i4b_elsa_qs1i.c b/sys/i4b/layer1/i4b_elsa_qs1i.c
deleted file mode 100644
index a6b5181c65d08..0000000000000
--- a/sys/i4b/layer1/i4b_elsa_qs1i.c
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isic - I4B Siemens ISDN Chipset Driver for ELSA Quickstep 1000pro ISA
- * =====================================================================
- *
- * $Id: i4b_elsa_qs1i.c,v 1.1 1998/12/27 21:46:45 phk Exp $
- *
- * last edit-date: [Mon Dec 14 17:27:08 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-
-#include "isic.h"
-#include "opt_i4b.h"
-#include "pnp.h"
-
-#else
-
-#define NISIC 1
-#define NPNP 1
-
-#endif
-
-#if (NISIC > 0) && (NPNP > 0) && defined(ELSA_QS1ISA)
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#if __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#include <i386/isa/pnp.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#ifdef __FreeBSD__
-/* static void i4b_eq1i_clrirq(void* base); */
-#else
-static void i4b_eq1i_clrirq(struct isic_softc *sc);
-void isic_attach_Eqs1pi __P((struct isic_softc *sc));
-#endif
-
-/* masks for register encoded in base addr */
-
-#define ELSA_BASE_MASK 0x0ffff
-#define ELSA_OFF_MASK 0xf0000
-
-/* register id's to be encoded in base addr */
-
-#define ELSA_IDISAC 0x00000
-#define ELSA_IDHSCXA 0x10000
-#define ELSA_IDHSCXB 0x20000
-
-/* offsets from base address */
-
-#define ELSA_OFF_ISAC 0x00
-#define ELSA_OFF_HSCX 0x02
-#define ELSA_OFF_OFF 0x03
-#define ELSA_OFF_CTRL 0x04
-#define ELSA_OFF_CFG 0x05
-#define ELSA_OFF_TIMR 0x06
-#define ELSA_OFF_IRQ 0x07
-
-/* control register (write access) */
-
-#define ELSA_CTRL_LED_YELLOW 0x02
-#define ELSA_CTRL_LED_GREEN 0x08
-#define ELSA_CTRL_RESET 0x20
-#define ELSA_CTRL_TIMEREN 0x80
-#define ELSA_CTRL_SECRET 0x50
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/ISA clear IRQ routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-#ifdef notdef
-static void
-i4b_eq1i_clrirq(void* base)
-{
- outb((u_int)base + ELSA_OFF_IRQ, 0);
-}
-#endif
-#else
-static void
-i4b_eq1i_clrirq(struct isic_softc *sc)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_1(t, h, ELSA_OFF_IRQ, 0);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/ISA ISAC get fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-eqs1pi_read_fifo(void *buf, const void *base, size_t len)
-{
- if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXB)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, 0x40);
- insb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_HSCX), (u_char *)buf, (u_int)len);
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXA)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, 0);
- insb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_HSCX), (u_char *)buf, (u_int)len);
- }
- else /* if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDISAC) */
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, 0);
- insb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ISAC), (u_char *)buf, (u_int)len);
- }
-}
-
-#else
-
-static void
-eqs1pi_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ELSA_OFF_OFF, 0);
- bus_space_read_multi_1(t, h, ELSA_OFF_ISAC, buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ELSA_OFF_OFF, 0);
- bus_space_read_multi_1(t, h, ELSA_OFF_HSCX, buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ELSA_OFF_OFF, 0x40);
- bus_space_read_multi_1(t, h, ELSA_OFF_HSCX, buf, size);
- break;
- }
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/ISA ISAC put fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-eqs1pi_write_fifo(void *base, const void *buf, size_t len)
-{
- if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXB)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, 0x40);
- outsb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_HSCX), (u_char *)buf, (u_int)len);
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXA)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, 0);
- outsb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_HSCX), (u_char *)buf, (u_int)len);
- }
- else /* if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDISAC) */
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, 0);
- outsb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ISAC), (u_char *)buf, (u_int)len);
- }
-}
-
-#else
-
-static void
-eqs1pi_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ELSA_OFF_OFF, 0);
- bus_space_write_multi_1(t, h, ELSA_OFF_ISAC, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ELSA_OFF_OFF, 0);
- bus_space_write_multi_1(t, h, ELSA_OFF_HSCX, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ELSA_OFF_OFF, 0x40);
- bus_space_write_multi_1(t, h, ELSA_OFF_HSCX, (u_int8_t*)buf, size);
- break;
- }
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/ISA ISAC put register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-eqs1pi_write_reg(u_char *base, u_int offset, u_int v)
-{
- if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXB)
- {
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, (u_char)(offset+0x40));
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_HSCX, (u_char)v);
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXA)
- {
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, (u_char)offset);
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_HSCX, (u_char)v);
- }
- else /* if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDISAC) */
- {
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, (u_char)offset);
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ISAC, (u_char)v);
- }
-}
-
-#else
-
-static void
-eqs1pi_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ELSA_OFF_OFF, offs);
- bus_space_write_1(t, h, ELSA_OFF_ISAC, data);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ELSA_OFF_OFF, offs);
- bus_space_write_1(t, h, ELSA_OFF_HSCX, data);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ELSA_OFF_OFF, 0x40+offs);
- bus_space_write_1(t, h, ELSA_OFF_HSCX, data);
- break;
- }
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/ISA ISAC get register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static u_char
-eqs1pi_read_reg(u_char *base, u_int offset)
-{
- if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXB)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, (u_char)(offset+0x40));
- return(inb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_HSCX));
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXA)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, (u_char)offset);
- return(inb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_HSCX));
- }
- else /* if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDISAC) */
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_OFF, (u_char)offset);
- return(inb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ISAC));
- }
-}
-
-#else
-
-static u_int8_t
-eqs1pi_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ELSA_OFF_OFF, offs);
- return bus_space_read_1(t, h, ELSA_OFF_ISAC);
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ELSA_OFF_OFF, offs);
- return bus_space_read_1(t, h, ELSA_OFF_HSCX);
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ELSA_OFF_OFF, 0x40+offs);
- return bus_space_read_1(t, h, ELSA_OFF_HSCX);
- }
- return 0;
-}
-
-#endif
-
-#ifdef __FreeBSD__
-
-/*---------------------------------------------------------------------------*
- * isic_probe_Eqs1pi - probe for ELSA QuickStep 1000pro/ISA and compatibles
- *---------------------------------------------------------------------------*/
-int
-isic_probe_Eqs1pi(struct isa_device *dev, unsigned int iobase2)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for ELSA QuickStep 1000pro/ISA!\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- switch(ffs(dev->id_irq) - 1)
- {
- case 3:
- case 4:
- case 5:
- case 7:
- case 10:
- case 11:
- case 12:
- case 15:
- break;
-
- default:
- printf("isic%d: Error, invalid IRQ [%d] specified for ELSA QuickStep 1000pro/ISA!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- break;
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if memory addr specified */
-
- if(dev->id_maddr)
- {
- printf("isic%d: Error, mem addr 0x%lx specified for ELSA QuickStep 1000pro/ISA!\n",
- dev->id_unit, (u_long)dev->id_maddr);
- return(0);
- }
- dev->id_msize = 0;
-
- /* check if we got an iobase */
-
- if(!((dev->id_iobase >= 0x160) && (dev->id_iobase <= 0x360)))
- {
- printf("isic%d: Error, invalid iobase 0x%x specified for ELSA QuickStep 1000pro/ISA!\n",
- dev->id_unit, dev->id_iobase);
- return(0);
- }
- sc->sc_port = dev->id_iobase;
-
- /* setup access routines */
-
-/* XXX no "sc_clearirq" in sight... /phk
- sc->sc_clearirq = i4b_eq1i_clrirq;
-*/
- sc->readreg = eqs1pi_read_reg;
- sc->writereg = eqs1pi_write_reg;
-
- sc->readfifo = eqs1pi_read_fifo;
- sc->writefifo = eqs1pi_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_ELSAQS1ISA;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
-
- ISAC_BASE = (caddr_t) ((u_int)dev->id_iobase | ELSA_IDISAC);
- HSCX_A_BASE = (caddr_t) ((u_int)dev->id_iobase | ELSA_IDHSCXA);
- HSCX_B_BASE = (caddr_t) ((u_int)dev->id_iobase | ELSA_IDHSCXB);
-
- /*
- * Read HSCX A/B VSTR. Expected value for the ELSA QuickStep 1000pro
- * ISA card is 0x05 ( = version 2.1 ) in the least significant bits.
- */
-
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("isic%d: HSCX VSTR test failed for ELSA QuickStep 1000pro/ISA\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- return (1);
-}
-
-/*---------------------------------------------------------------------------*
- * isic_attach_s0163P - attach ELSA QuickStep 1000pro/ISA
- *---------------------------------------------------------------------------*/
-int
-isic_attach_Eqs1pi(struct isa_device *dev, unsigned int iobase2)
-{
- u_char byte = ELSA_CTRL_SECRET;
-
- byte &= ~ELSA_CTRL_RESET;
- outb(dev->id_iobase + ELSA_OFF_CTRL, byte);
- DELAY(20);
- byte |= ELSA_CTRL_RESET;
- outb(dev->id_iobase + ELSA_OFF_CTRL, byte);
-
- DELAY(20);
- outb(dev->id_iobase + ELSA_OFF_IRQ, 0xff);
-
- return(1);
-}
-
-#else /* !__FreeBSD__ */
-
-void
-isic_attach_Eqs1pi(struct isic_softc *sc)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- u_char byte = ELSA_CTRL_SECRET;
-
- byte &= ~ELSA_CTRL_RESET;
- bus_space_write_1(t, h, ELSA_OFF_CTRL, byte);
- DELAY(20);
- byte |= ELSA_CTRL_RESET;
- bus_space_write_1(t, h, ELSA_OFF_CTRL, byte);
-
- DELAY(20);
- bus_space_write_1(t, h, ELSA_OFF_IRQ, 0xff);
-
- /* setup access routines */
-
- sc->clearirq = i4b_eq1i_clrirq;
- sc->readreg = eqs1pi_read_reg;
- sc->writereg = eqs1pi_write_reg;
-
- sc->readfifo = eqs1pi_read_fifo;
- sc->writefifo = eqs1pi_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_ELSAQS1ISA;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-}
-
-#endif
-
-#endif /* (NISIC > 0) && (NPNP > 0) && defined(ELSA_QS1ISA) */
diff --git a/sys/i4b/layer1/i4b_elsa_qs1p.c b/sys/i4b/layer1/i4b_elsa_qs1p.c
deleted file mode 100644
index b2b35d03fc342..0000000000000
--- a/sys/i4b/layer1/i4b_elsa_qs1p.c
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isic - I4B Siemens ISDN Chipset Driver for ELSA Quickstep 1000pro PCI
- * =====================================================================
- *
- * $Id: i4b_elsa_qs1p.c,v 1.4 1998/12/05 18:04:36 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:22:41 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#include "pci.h"
-#else
-#define NISIC 1
-#endif
-
-#if (NISIC > 0) && /* (NPCI > 0) && */ defined(ELSA_QS1PCI)
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#if __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-
-#include <dev/pci/pcireg.h>
-#include <dev/pci/pcivar.h>
-#include <dev/pci/pcidevs.h>
-
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-#include <i4b/layer1/i4b_ipac.h>
-
-#ifndef __FreeBSD__
-/* we don't have the function prototypes in the global i4b_l1.h any more */
-void isic_attach_Eqs1pp __P((struct isic_softc *sc, struct pci_attach_args *pa));
-#endif
-
-/* masks for register encoded in base addr */
-
-#define ELSA_BASE_MASK 0x0ffff
-#define ELSA_OFF_MASK 0xf0000
-
-/* register id's to be encoded in base addr */
-
-#define ELSA_IDISAC 0x00000
-#define ELSA_IDHSCXA 0x10000
-#define ELSA_IDHSCXB 0x20000
-#define ELSA_IDIPAC 0x40000
-
-/* offsets from base address */
-
-#define ELSA_OFF_ALE 0x00
-#define ELSA_OFF_RW 0x01
-
-#define ELSA_PORT0_MAPOFF PCI_MAPREG_START+4
-#define ELSA_PORT1_MAPOFF PCI_MAPREG_START+12
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/PCI ISAC get fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-eqs1pp_read_fifo(void *buf, const void *base, size_t len)
-{
- if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXB)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, IPAC_HSCXB_OFF);
- insb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW), (u_char *)buf, (u_int)len);
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXA)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, IPAC_HSCXA_OFF);
- insb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW), (u_char *)buf, (u_int)len);
- }
- else /* if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDISAC) */
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, IPAC_ISAC_OFF);
- insb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW), (u_char *)buf, (u_int)len);
- }
-}
-
-#else
-
-static void
-eqs1pp_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[1].t;
- bus_space_handle_t h = sc->sc_maps[1].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_ISAC_OFF);
- bus_space_read_multi_1(t, h, ELSA_OFF_RW, buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_HSCXA_OFF);
- bus_space_read_multi_1(t, h, ELSA_OFF_RW, buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_HSCXB_OFF);
- bus_space_read_multi_1(t, h, ELSA_OFF_RW, buf, size);
- break;
- }
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/PCI ISAC put fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-eqs1pp_write_fifo(void *base, const void *buf, size_t len)
-{
- if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXB)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, IPAC_HSCXB_OFF);
- outsb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW), (u_char *)buf, (u_int)len);
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXA)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, IPAC_HSCXA_OFF);
- outsb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW), (u_char *)buf, (u_int)len);
- }
- else /* if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDISAC) */
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, IPAC_ISAC_OFF);
- outsb((((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW), (u_char *)buf, (u_int)len);
- }
-}
-
-#else
-
-static void
-eqs1pp_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[1].t;
- bus_space_handle_t h = sc->sc_maps[1].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_ISAC_OFF);
- bus_space_write_multi_1(t, h, ELSA_OFF_RW, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_HSCXA_OFF);
- bus_space_write_multi_1(t, h, ELSA_OFF_RW, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_HSCXB_OFF);
- bus_space_write_multi_1(t, h, ELSA_OFF_RW, (u_int8_t*)buf, size);
- break;
- }
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/PCI ISAC put register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-eqs1pp_write_reg(u_char *base, u_int offset, u_int v)
-{
- if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXB)
- {
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, (u_char)(offset+IPAC_HSCXB_OFF));
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW, (u_char)v);
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXA)
- {
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, (u_char)(offset+IPAC_HSCXA_OFF));
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW, (u_char)v);
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDISAC)
- {
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, (u_char)(offset+IPAC_ISAC_OFF));
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW, (u_char)v);
- }
- else /* IPAC */
- {
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, (u_char)(offset+IPAC_IPAC_OFF));
- outb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW, (u_char)v);
- }
-}
-
-#else
-
-static void
-eqs1pp_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[1].t;
- bus_space_handle_t h = sc->sc_maps[1].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_ISAC_OFF+offs);
- bus_space_write_1(t, h, ELSA_OFF_RW, data);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_HSCXA_OFF+offs);
- bus_space_write_1(t, h, ELSA_OFF_RW, data);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_HSCXB_OFF+offs);
- bus_space_write_1(t, h, ELSA_OFF_RW, data);
- break;
- case ISIC_WHAT_IPAC:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_IPAC_OFF+offs);
- bus_space_write_1(t, h, ELSA_OFF_RW, data);
- break;
- }
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * ELSA QuickStep 1000pro/PCI ISAC get register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static u_char
-eqs1pp_read_reg(u_char *base, u_int offset)
-{
- if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXB)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, (u_char)(offset+IPAC_HSCXB_OFF));
- return(inb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW));
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDHSCXA)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, (u_char)(offset+IPAC_HSCXA_OFF));
- return(inb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW));
- }
- else if(((u_int)base & ELSA_OFF_MASK) == ELSA_IDISAC)
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, (u_char)(offset+IPAC_ISAC_OFF));
- return(inb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW));
- }
- else /* IPAC */
- {
- outb((u_int)((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_ALE, (u_char)(offset+IPAC_IPAC_OFF));
- return(inb(((u_int)base & ELSA_BASE_MASK) + ELSA_OFF_RW));
- }
-}
-
-#else
-
-static u_int8_t
-eqs1pp_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[1].t;
- bus_space_handle_t h = sc->sc_maps[1].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_ISAC_OFF+offs);
- return bus_space_read_1(t, h, ELSA_OFF_RW);
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_HSCXA_OFF+offs);
- return bus_space_read_1(t, h, ELSA_OFF_RW);
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_HSCXB_OFF+offs);
- return bus_space_read_1(t, h, ELSA_OFF_RW);
- case ISIC_WHAT_IPAC:
- {
- bus_space_write_1(t, h, ELSA_OFF_ALE, IPAC_IPAC_OFF+offs);
- return bus_space_read_1(t, h, ELSA_OFF_RW);
- }
- }
-
- return 0;
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_attach_Eqs1pp - attach for ELSA QuickStep 1000pro/PCI
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_attach_Eqs1pp(int unit, unsigned int iobase1, unsigned int iobase2)
-{
- struct isic_softc *sc = &isic_sc[unit];
-
- /* check max unit range */
-
- if(unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for ELSA QuickStep 1000pro/PCI!\n",
- unit, unit);
- return(0);
- }
- sc->sc_unit = unit;
-
- /* setup iobase */
-
- if((iobase2 <= 0) || (iobase2 > 0xffff))
- {
- printf("isic%d: Error, invalid iobase 0x%x specified for ELSA QuickStep 1000pro/PCI!\n",
- unit, iobase2);
- return(0);
- }
- sc->sc_port = iobase2;
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = eqs1pp_read_reg;
- sc->writereg = eqs1pp_write_reg;
-
- sc->readfifo = eqs1pp_read_fifo;
- sc->writefifo = eqs1pp_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_ELSAQS1PCI;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- /* setup chip type = IPAC ! */
-
- sc->sc_ipac = 1;
- sc->sc_bfifolen = IPAC_BFIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
-
- ISAC_BASE = (caddr_t) ((u_int)iobase2 | ELSA_IDISAC);
- HSCX_A_BASE = (caddr_t) ((u_int)iobase2 | ELSA_IDHSCXA);
- HSCX_B_BASE = (caddr_t) ((u_int)iobase2 | ELSA_IDHSCXB);
- IPAC_BASE = (caddr_t) ((u_int)iobase2 | ELSA_IDIPAC);
-
- /* enable hscx/isac irq's */
- IPAC_WRITE(IPAC_MASK, (IPAC_MASK_INT1 | IPAC_MASK_INT0));
-
- IPAC_WRITE(IPAC_ACFG, 0); /* outputs are open drain */
- IPAC_WRITE(IPAC_AOE, /* aux 5..2 are inputs, 7, 6 outputs */
- (IPAC_AOE_OE5 | IPAC_AOE_OE4 | IPAC_AOE_OE3 | IPAC_AOE_OE2));
- IPAC_WRITE(IPAC_ATX, 0xff); /* set all output lines high */
-
- outb(iobase1 + 0x4c, 0x41); /* enable card interrupt */
-
- return (1);
-}
-
-#else /* !FreeBSD */
-
-void
-isic_attach_Eqs1pp(sc, pa)
- struct isic_softc *sc;
- struct pci_attach_args *pa;
-{
- /* setup io mappings */
- sc->sc_num_mappings = 2;
- MALLOC_MAPS(sc);
- sc->sc_maps[0].size = 0;
- if (pci_mapreg_map(pa, ELSA_PORT0_MAPOFF, PCI_MAPREG_TYPE_IO, 0,
- &sc->sc_maps[0].t, &sc->sc_maps[0].h, NULL, NULL)) {
- printf("%s: can't map i/o space\n", sc->sc_dev.dv_xname);
- return;
- }
- sc->sc_maps[1].size = 0;
- if (pci_mapreg_map(pa, ELSA_PORT1_MAPOFF, PCI_MAPREG_TYPE_IO, 0,
- &sc->sc_maps[1].t, &sc->sc_maps[1].h, NULL, NULL)) {
- printf("%s: can't map i/o space\n", sc->sc_dev.dv_xname);
- return;
- }
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = eqs1pp_read_reg;
- sc->writereg = eqs1pp_write_reg;
-
- sc->readfifo = eqs1pp_read_fifo;
- sc->writefifo = eqs1pp_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_ELSAQS1PCI;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- /* setup chip type = IPAC ! */
-
- sc->sc_ipac = 1;
- sc->sc_bfifolen = IPAC_BFIFO_LEN;
-
- /* enable hscx/isac irq's */
- IPAC_WRITE(IPAC_MASK, (IPAC_MASK_INT1 | IPAC_MASK_INT0));
-
- IPAC_WRITE(IPAC_ACFG, 0); /* outputs are open drain */
- IPAC_WRITE(IPAC_AOE, /* aux 5..2 are inputs, 7, 6 outputs */
- (IPAC_AOE_OE5 | IPAC_AOE_OE4 | IPAC_AOE_OE3 | IPAC_AOE_OE2));
- IPAC_WRITE(IPAC_ATX, 0xff); /* set all output lines high */
-
- bus_space_write_1(sc->sc_maps[0].t, sc->sc_maps[0].h, 0x4c, 0x41); /* enable card interrupt */
-}
-
-#endif
-
-#endif /* (NISIC > 0) && defined(ELSA_QS1PCI) */
diff --git a/sys/i4b/layer1/i4b_hscx.c b/sys/i4b/layer1/i4b_hscx.c
deleted file mode 100644
index ed80a51c57317..0000000000000
--- a/sys/i4b/layer1/i4b_hscx.c
+++ /dev/null
@@ -1,672 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b - Siemens HSCX chip (B-channel) handling
- * --------------------------------------------
- *
- * $Id: i4b_hscx.c,v 1.37 1998/12/05 18:04:38 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:23:36 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "isic.h"
-#else
-#define NISIC 1 /* doesn't matter in non-FreeBSD, config(8) d.t.r.t. */
-#endif
-#if NISIC > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <machine/stdarg.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_mbuf.h>
-
-/*---------------------------------------------------------------------------*
- * HSCX IRQ Handler
- *---------------------------------------------------------------------------*/
-void
-isic_hscx_irq(register struct isic_softc *sc, u_char ista, int h_chan, u_char ex_irq)
-{
- register isic_Bchan_t *chan = &sc->sc_chan[h_chan];
- u_char exir = 0;
- int activity = -1;
- u_char cmd = 0;
-
- DBGL1(L1_H_IRQ, "isic_hscx_irq", ("%#x\n", ista));
-
- if(ex_irq)
- {
- /* get channel extended irq reg */
-
- exir = HSCX_READ(h_chan, H_EXIR);
-
- if(exir & HSCX_EXIR_RFO)
- {
- chan->stat_RFO++;
- DBGL1(L1_H_XFRERR, "isic_hscx_irq", ("ex_irq: receive data overflow\n"));
- }
-
- if((exir & HSCX_EXIR_XDU) && (chan->bprot != BPROT_NONE))/* xmit data underrun */
- {
- chan->stat_XDU++;
- DBGL1(L1_H_XFRERR, "isic_hscx_irq", ("ex_irq: xmit data underrun\n"));
- isic_hscx_cmd(sc, h_chan, HSCX_CMDR_XRES);
-
- if (chan->out_mbuf_head != NULL) /* don't continue to transmit this buffer */
- {
- i4b_Bfreembuf(chan->out_mbuf_head);
- chan->out_mbuf_cur = chan->out_mbuf_head = NULL;
- }
- }
-
- }
-
- /* rx message end, end of frame */
-
- if(ista & HSCX_ISTA_RME)
- {
- register int fifo_data_len;
- u_char rsta;
- int error = 0;
-
- rsta = HSCX_READ(h_chan, H_RSTA);
-
- if((rsta & 0xf0) != 0xa0)
- {
- if((rsta & HSCX_RSTA_VFR) == 0)
- {
- chan->stat_VFR++;
- cmd |= (HSCX_CMDR_RHR);
- DBGL1(L1_H_XFRERR, "isic_hscx_irq", ("received invalid Frame\n"));
- error++;
- }
-
- if(rsta & HSCX_RSTA_RDO)
- {
- chan->stat_RDO++;
- DBGL1(L1_H_XFRERR, "isic_hscx_irq", ("receive data overflow\n"));
- error++;
- }
-
- if((rsta & HSCX_RSTA_CRC) == 0)
- {
- chan->stat_CRC++;
- cmd |= (HSCX_CMDR_RHR);
- DBGL1(L1_H_XFRERR, "isic_hscx_irq", ("CRC check failed\n"));
- error++;
- }
-
- if(rsta & HSCX_RSTA_RAB)
- {
- chan->stat_RAB++;
- DBGL1(L1_H_XFRERR, "isic_hscx_irq", ("Receive message aborted\n"));
- error++;
- }
- }
-
- fifo_data_len = ((HSCX_READ(h_chan, H_RBCL)) &
- ((sc->sc_bfifolen)-1));
-
- if(fifo_data_len == 0)
- fifo_data_len = sc->sc_bfifolen;
-
- /* all error conditions checked, now decide and take action */
-
- if(error == 0)
- {
- if(chan->in_mbuf == NULL)
- {
- if((chan->in_mbuf = i4b_Bgetmbuf(BCH_MAX_DATALEN)) == NULL)
- panic("L1 isic_hscx_irq: RME, cannot allocate mbuf!\n");
- chan->in_cbptr = chan->in_mbuf->m_data;
- chan->in_len = 0;
- }
-
- fifo_data_len -= 1; /* last byte in fifo is RSTA ! */
-
- if((chan->in_len + fifo_data_len) <= BCH_MAX_DATALEN)
- {
- /* read data from HSCX fifo */
-
- HSCX_RDFIFO(h_chan, chan->in_cbptr, fifo_data_len);
-
- cmd |= (HSCX_CMDR_RMC);
- isic_hscx_cmd(sc, h_chan, cmd);
- cmd = 0;
-
- chan->in_len += fifo_data_len;
- chan->rxcount += fifo_data_len;
-
- /* setup mbuf data length */
-
- chan->in_mbuf->m_len = chan->in_len;
- chan->in_mbuf->m_pkthdr.len = chan->in_len;
-
- if(sc->sc_trace & TRACE_B_RX)
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = sc->sc_unit;
- hdr.type = (h_chan == HSCX_CH_A ? TRC_CH_B1 : TRC_CH_B2);
- hdr.dir = FROM_NT;
- hdr.count = ++sc->sc_trace_bcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, chan->in_mbuf->m_len, chan->in_mbuf->m_data);
- }
-
- (*chan->drvr_linktab->bch_rx_data_ready)(chan->drvr_linktab->unit);
-
- activity = ACT_RX;
-
- /* mark buffer ptr as unused */
-
- chan->in_mbuf = NULL;
- chan->in_cbptr = NULL;
- chan->in_len = 0;
- }
- else
- {
- DBGL1(L1_H_XFRERR, "isic_hscx_irq", ("RAWHDLC rx buffer overflow in RME, in_len=%d, fifolen=%d\n", chan->in_len, fifo_data_len));
- chan->in_cbptr = chan->in_mbuf->m_data;
- chan->in_len = 0;
- cmd |= (HSCX_CMDR_RHR | HSCX_CMDR_RMC);
- }
- }
- else
- {
- if (chan->in_mbuf != NULL)
- {
- i4b_Bfreembuf(chan->in_mbuf);
- chan->in_mbuf = NULL;
- chan->in_cbptr = NULL;
- chan->in_len = 0;
- }
- cmd |= (HSCX_CMDR_RMC);
- }
- }
-
- /* rx fifo full */
-
- if(ista & HSCX_ISTA_RPF)
- {
- if(chan->in_mbuf == NULL)
- {
- if((chan->in_mbuf = i4b_Bgetmbuf(BCH_MAX_DATALEN)) == NULL)
- panic("L1 isic_hscx_irq: RPF, cannot allocate mbuf!\n");
- chan->in_cbptr = chan->in_mbuf->m_data;
- chan->in_len = 0;
- }
-
- chan->rxcount += sc->sc_bfifolen;
-
- if((chan->in_len + sc->sc_bfifolen) <= BCH_MAX_DATALEN)
- {
- /* read data from HSCX fifo */
-
- HSCX_RDFIFO(h_chan, chan->in_cbptr, sc->sc_bfifolen);
-
- chan->in_cbptr += sc->sc_bfifolen;
- chan->in_len += sc->sc_bfifolen;
- }
- else
- {
- if(chan->bprot == BPROT_NONE)
- {
- /* setup mbuf data length */
-
- chan->in_mbuf->m_len = chan->in_len;
- chan->in_mbuf->m_pkthdr.len = chan->in_len;
-
- if(sc->sc_trace & TRACE_B_RX)
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = sc->sc_unit;
- hdr.type = (h_chan == HSCX_CH_A ? TRC_CH_B1 : TRC_CH_B2);
- hdr.dir = FROM_NT;
- hdr.count = ++sc->sc_trace_bcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, chan->in_mbuf->m_len, chan->in_mbuf->m_data);
- }
-
- /* move rx'd data to rx queue */
-
- IF_ENQUEUE(&chan->rx_queue, chan->in_mbuf);
-
- (*chan->drvr_linktab->bch_rx_data_ready)(chan->drvr_linktab->unit);
-
- if(!(isic_hscx_silence(chan->in_mbuf->m_data, chan->in_mbuf->m_len)))
- activity = ACT_RX;
-
- /* alloc new buffer */
-
- if((chan->in_mbuf = i4b_Bgetmbuf(BCH_MAX_DATALEN)) == NULL)
- panic("L1 isic_hscx_irq: RPF, cannot allocate new mbuf!\n");
-
- /* setup new data ptr */
-
- chan->in_cbptr = chan->in_mbuf->m_data;
-
- /* read data from HSCX fifo */
-
- HSCX_RDFIFO(h_chan, chan->in_cbptr, sc->sc_bfifolen);
-
- chan->in_cbptr += sc->sc_bfifolen;
- chan->in_len = sc->sc_bfifolen;
-
- chan->rxcount += sc->sc_bfifolen;
- }
- else
- {
- DBGL1(L1_H_XFRERR, "isic_hscx_irq", ("RAWHDLC rx buffer overflow in RPF, in_len=%d\n", chan->in_len));
- chan->in_cbptr = chan->in_mbuf->m_data;
- chan->in_len = 0;
- cmd |= (HSCX_CMDR_RHR);
- }
- }
-
- /* command to release fifo space */
-
- cmd |= HSCX_CMDR_RMC;
- }
-
- /* transmit fifo empty, new data can be written to fifo */
-
- if(ista & HSCX_ISTA_XPR)
- {
- /*
- * for a description what is going on here, please have
- * a look at isic_bchannel_start() in i4b_bchan.c !
- */
-
- int activity = -1;
- int len;
- int nextlen;
-
- DBGL1(L1_H_IRQ, "isic_hscx_irq", ("unit %d, chan %d - XPR, Tx Fifo Empty!\n", sc->sc_unit, h_chan));
-
- if(chan->out_mbuf_cur == NULL) /* last frame is transmitted */
- {
- IF_DEQUEUE(&chan->tx_queue, chan->out_mbuf_head);
-
- if(chan->out_mbuf_head == NULL)
- {
- chan->state &= ~HSCX_TX_ACTIVE;
- (*chan->drvr_linktab->bch_tx_queue_empty)(chan->drvr_linktab->unit);
- }
- else
- {
- chan->state |= HSCX_TX_ACTIVE;
- chan->out_mbuf_cur = chan->out_mbuf_head;
- chan->out_mbuf_cur_ptr = chan->out_mbuf_cur->m_data;
- chan->out_mbuf_cur_len = chan->out_mbuf_cur->m_len;
-
- if(sc->sc_trace & TRACE_B_TX)
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = sc->sc_unit;
- hdr.type = (h_chan == HSCX_CH_A ? TRC_CH_B1 : TRC_CH_B2);
- hdr.dir = FROM_TE;
- hdr.count = ++sc->sc_trace_bcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, chan->out_mbuf_cur->m_len, chan->out_mbuf_cur->m_data);
- }
-
- if(chan->bprot == BPROT_NONE)
- {
- if(!(isic_hscx_silence(chan->out_mbuf_cur->m_data, chan->out_mbuf_cur->m_len)))
- activity = ACT_TX;
- }
- else
- {
- activity = ACT_TX;
- }
- }
- }
-
- len = 0;
-
- while(chan->out_mbuf_cur && len != sc->sc_bfifolen)
- {
- nextlen = min(chan->out_mbuf_cur_len, sc->sc_bfifolen - len);
-
-#ifdef NOTDEF
- printf("i:mh=%x, mc=%x, mcp=%x, mcl=%d l=%d nl=%d # ",
- chan->out_mbuf_head,
- chan->out_mbuf_cur,
- chan->out_mbuf_cur_ptr,
- chan->out_mbuf_cur_len,
- len,
- next_len);
-#endif
-
- isic_hscx_waitxfw(sc, h_chan); /* necessary !!! */
-
- HSCX_WRFIFO(h_chan, chan->out_mbuf_cur_ptr, nextlen);
- cmd |= HSCX_CMDR_XTF;
-
- len += nextlen;
- chan->txcount += nextlen;
-
- chan->out_mbuf_cur_ptr += nextlen;
- chan->out_mbuf_cur_len -= nextlen;
-
- if(chan->out_mbuf_cur_len == 0)
- {
- if((chan->out_mbuf_cur = chan->out_mbuf_cur->m_next) != NULL)
- {
- chan->out_mbuf_cur_ptr = chan->out_mbuf_cur->m_data;
- chan->out_mbuf_cur_len = chan->out_mbuf_cur->m_len;
-
- if(sc->sc_trace & TRACE_B_TX)
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = sc->sc_unit;
- hdr.type = (h_chan == HSCX_CH_A ? TRC_CH_B1 : TRC_CH_B2);
- hdr.dir = FROM_TE;
- hdr.count = ++sc->sc_trace_bcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, chan->out_mbuf_cur->m_len, chan->out_mbuf_cur->m_data);
- }
- }
- else
- {
- if (chan->bprot != BPROT_NONE)
- cmd |= HSCX_CMDR_XME;
- i4b_Bfreembuf(chan->out_mbuf_head);
- chan->out_mbuf_head = NULL;
- }
-
- }
- }
- }
-
- if(cmd) /* is there a command for the HSCX ? */
- {
- isic_hscx_cmd(sc, h_chan, cmd); /* yes, to HSCX */
- }
-
- /* call timeout handling routine */
-
- if(activity == ACT_RX || activity == ACT_TX)
- (*chan->drvr_linktab->bch_activity)(chan->drvr_linktab->unit, activity);
-}
-
-/*---------------------------------------------------------------------------*
- * HSCX initialization
- *
- * for telephony: extended transparent mode 1
- * for raw hdlc: transparent mode 0
- *---------------------------------------------------------------------------*/
-void
-isic_hscx_init(struct isic_softc *sc, int h_chan, int activate)
-{
- isic_Bchan_t *chan = &sc->sc_chan[h_chan];
-
- HSCX_WRITE(h_chan, H_MASK, 0xff); /* mask irq's */
-
- if(sc->sc_ipac)
- {
- /* CCR1: Power Up, Clock Mode 5 */
- HSCX_WRITE(h_chan, H_CCR1, HSCX_CCR1_PU | /* power up */
- HSCX_CCR1_CM1); /* IPAC clock mode 5 */
- }
- else
- {
- /* CCR1: Power Up, Clock Mode 5 */
- HSCX_WRITE(h_chan, H_CCR1, HSCX_CCR1_PU | /* power up */
- HSCX_CCR1_CM2 | /* HSCX clock mode 5 */
- HSCX_CCR1_CM0);
- }
-
- /* XAD1: Transmit Address Byte 1 */
- HSCX_WRITE(h_chan, H_XAD1, 0xff);
-
- /* XAD2: Transmit Address Byte 2 */
- HSCX_WRITE(h_chan, H_XAD2, 0xff);
-
- /* RAH2: Receive Address Byte High Reg. 2 */
- HSCX_WRITE(h_chan, H_RAH2, 0xff);
-
- /* XBCH: reset Transmit Byte Count High */
- HSCX_WRITE(h_chan, H_XBCH, 0x00);
-
- /* RLCR: reset Receive Length Check Register */
- HSCX_WRITE(h_chan, H_RLCR, 0x00);
-
- /* CCR2: set tx/rx clock shift bit 0 */
- /* disable CTS irq, disable RIE irq*/
- HSCX_WRITE(h_chan, H_CCR2, HSCX_CCR2_XCS0|HSCX_CCR2_RCS0);
-
- /* XCCR: tx bit count per time slot */
- HSCX_WRITE(h_chan, H_XCCR, 0x07);
-
- /* RCCR: rx bit count per time slot */
- HSCX_WRITE(h_chan, H_RCCR, 0x07);
-
- if(sc->sc_bustyp == BUS_TYPE_IOM2)
- {
- switch(h_chan)
- {
- case HSCX_CH_A: /* Prepare HSCX channel A */
- /* TSAX: tx clock shift bits 1 & 2 */
- /* tx time slot number */
- HSCX_WRITE(h_chan, H_TSAX, 0x2f);
-
- /* TSAR: rx clock shift bits 1 & 2 */
- /* rx time slot number */
- HSCX_WRITE(h_chan, H_TSAR, 0x2f);
- break;
-
- case HSCX_CH_B: /* Prepare HSCX channel B */
- /* TSAX: tx clock shift bits 1 & 2 */
- /* tx time slot number */
- HSCX_WRITE(h_chan, H_TSAX, 0x03);
-
- /* TSAR: rx clock shift bits 1 & 2 */
- /* rx time slot number */
- HSCX_WRITE(h_chan, H_TSAR, 0x03);
- break;
- }
- }
- else /* IOM 1 setup */
- {
- /* TSAX: tx clock shift bits 1 & 2 */
- /* tx time slot number */
- HSCX_WRITE(h_chan, H_TSAX, 0x07);
-
- /* TSAR: rx clock shift bits 1 & 2 */
- /* rx time slot number */
- HSCX_WRITE(h_chan, H_TSAR, 0x07);
- }
-
- if(activate)
- {
- if(chan->bprot == BPROT_RHDLC)
- {
- /* HDLC Frames, transparent mode 0 */
- HSCX_WRITE(h_chan, H_MODE,
- HSCX_MODE_MDS1|HSCX_MODE_RAC|HSCX_MODE_RTS);
- }
- else
- {
- /* Raw Telephony, extended transparent mode 1 */
- HSCX_WRITE(h_chan, H_MODE,
- HSCX_MODE_MDS1|HSCX_MODE_MDS0|HSCX_MODE_ADM|HSCX_MODE_RTS);
- }
-
- isic_hscx_cmd(sc, h_chan, HSCX_CMDR_RHR|HSCX_CMDR_XRES);
- }
- else
- {
- /* TSAX: tx time slot */
- HSCX_WRITE(h_chan, H_TSAX, 0xff);
-
- /* TSAR: rx time slot */
- HSCX_WRITE(h_chan, H_TSAR, 0xff);
-
- /* Raw Telephony, extended transparent mode 1 */
- HSCX_WRITE(h_chan, H_MODE,
- HSCX_MODE_MDS1|HSCX_MODE_MDS0|HSCX_MODE_ADM|HSCX_MODE_RTS);
- }
-
- /* don't touch ICA, EXA and EXB bits, this could be HSCX_CH_B */
- /* always disable RSC and TIN */
-
- chan->hscx_mask |= HSCX_MASK_RSC | HSCX_MASK_TIN;
-
- if(activate)
- {
- /* enable */
- chan->hscx_mask &= ~(HSCX_MASK_RME | HSCX_MASK_RPF | HSCX_MASK_XPR);
- }
- else
- {
- /* disable */
- chan->hscx_mask |= HSCX_MASK_RME | HSCX_MASK_RPF | HSCX_MASK_XPR;
- }
-
- /* handle ICA, EXA, and EXB via interrupt mask of channel b */
-
- if (h_chan == HSCX_CH_A)
- {
- if (activate)
- HSCX_B_IMASK &= ~(HSCX_MASK_EXA | HSCX_MASK_ICA);
- else
- HSCX_B_IMASK |= HSCX_MASK_EXA | HSCX_MASK_ICA;
- HSCX_WRITE(HSCX_CH_A, H_MASK, HSCX_A_IMASK);
- HSCX_WRITE(HSCX_CH_B, H_MASK, HSCX_B_IMASK);
- }
- else
- {
- if (activate)
- HSCX_B_IMASK &= ~HSCX_MASK_EXB;
- else
- HSCX_B_IMASK |= HSCX_MASK_EXB;
- HSCX_WRITE(HSCX_CH_B, H_MASK, HSCX_B_IMASK);
- }
-
- /* clear spurious interrupts left over */
-
- if(h_chan == HSCX_CH_A)
- {
- HSCX_READ(h_chan, H_EXIR);
- HSCX_READ(h_chan, H_ISTA);
- }
- else /* mask ICA, because it must not be cleared by reading ISTA */
- {
- HSCX_WRITE(HSCX_CH_B, H_MASK, HSCX_B_IMASK | HSCX_MASK_ICA);
- HSCX_READ(h_chan, H_EXIR);
- HSCX_READ(h_chan, H_ISTA);
- HSCX_WRITE(HSCX_CH_B, H_MASK, HSCX_B_IMASK);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * write command to HSCX command register
- *---------------------------------------------------------------------------*/
-void
-isic_hscx_cmd(struct isic_softc *sc, int h_chan, unsigned char cmd)
-{
- int timeout = 20;
-
- while(((HSCX_READ(h_chan, H_STAR)) & HSCX_STAR_CEC) && timeout)
- {
- DELAY(10);
- timeout--;
- }
-
- if(timeout == 0)
- {
- DBGL1(L1_H_ERR, "isic_hscx_cmd", ("HSCX wait for CEC timeout!\n"));
- }
-
- HSCX_WRITE(h_chan, H_CMDR, cmd);
-}
-
-/*---------------------------------------------------------------------------*
- * wait for HSCX transmit FIFO write enable
- *---------------------------------------------------------------------------*/
-void
-isic_hscx_waitxfw(struct isic_softc *sc, int h_chan)
-{
-#define WAITVAL 50
-#define WAITTO 200
-
- int timeout = WAITTO;
-
- while((!(((HSCX_READ(h_chan, H_STAR)) &
- (HSCX_STAR_CEC | HSCX_STAR_XFW)) == HSCX_STAR_XFW)) && timeout)
- {
- DELAY(WAITVAL);
- timeout--;
- }
-
- if(timeout == 0)
- {
- DBGL1(L1_H_ERR, "isic_hscx_waitxfw", ("HSCX wait for XFW timeout!\n"));
- }
- else if (timeout != WAITTO)
- {
- DBGL1(L1_H_XFRERR, "isic_hscx_waitxfw", ("HSCX wait for XFW time: %d uS\n", (WAITTO-timeout)*50));
- }
-}
-
-#endif /* NISIC > 0 */
diff --git a/sys/i4b/layer1/i4b_hscx.h b/sys/i4b/layer1/i4b_hscx.h
deleted file mode 100644
index 1b1640de22823..0000000000000
--- a/sys/i4b/layer1/i4b_hscx.h
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright (c) 1996, 1998 Gary Jennejohn. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * $Id: i4b_hscx.h,v 1.3 1998/02/13 17:00:31 hm Exp $
- *
- * last edit-date: [Thu Feb 5 13:38:50 1998]
- *
- * -hm added AVM config register defs
- * -hm split up for rewrite of Siemens chipset driver
- *
- *---------------------------------------------------------------------------
- */
-
-#ifndef I4B_HSCX_H_
-#define I4B_HSCX_H_
-
-enum HSCX_VERSIONS {
- HSCX_VA1, /* 82525 A1 */
- HSCX_UNKN1, /* unknown 1 */
- HSCX_VA2, /* 82525 A2 */
- HSCX_UNKN3, /* unknown 3 */
- HSCX_VA3, /* 82525 A3 */
- HSCX_V21, /* 82525 2.1 */
- HSCX_UNKN /* unknown version */
-};
-
-#define HSCX_CH_A 0 /* channel A */
-#define HSCX_CH_B 1 /* channel B */
-
-#define HSCX_FIFO_LEN 32 /* 32 bytes FIFO on chip */
-
-/*
- * definitions of registers and bits for the HSCX ISDN chip.
- */
-
-typedef struct hscx_reg {
-
- /* 32 byte deep FIFO always first */
-
- unsigned char hscx_fifo [HSCX_FIFO_LEN];
-
- /* most registers can be read/written, but have different names */
- /* so define a union with read/write names to make that clear */
-
- union {
- struct {
- unsigned char hscx_ista;
- unsigned char hscx_star;
- unsigned char hscx_mode;
- unsigned char hscx_timr;
- unsigned char hscx_exir;
- unsigned char hscx_rbcl;
- unsigned char dummy_26;
- unsigned char hscx_rsta;
- unsigned char hscx_ral1;
- unsigned char hscx_rhcr;
- unsigned char dummy_2a;
- unsigned char dummy_2b;
- unsigned char hscx_ccr2;
- unsigned char hscx_rbch;
- unsigned char hscx_vstr;
- unsigned char hscx_ccr;
- unsigned char dummy_30;
- unsigned char dummy_31;
- unsigned char dummy_32;
- unsigned char dummy_33;
- } hscx_r;
- struct {
- unsigned char hscx_mask;
- unsigned char hscx_cmdr;
- unsigned char hscx_mode;
- unsigned char hscx_timr;
- unsigned char hscx_xad1;
- unsigned char hscx_xad2;
- unsigned char hscx_rah1;
- unsigned char hscx_rah2;
- unsigned char hscx_ral1;
- unsigned char hscx_ral2;
- unsigned char hscx_xbcl;
- unsigned char hscx_bgr;
- unsigned char hscx_ccr2;
- unsigned char hscx_xbch;
- unsigned char hscx_rlcr;
- unsigned char hscx_ccr1;
- unsigned char hscx_tsax;
- unsigned char hscx_tsar;
- unsigned char hscx_xccr;
- unsigned char hscx_rccr;
- } hscx_w;
- } hscx_rw;
-} hscx_reg_t;
-
-#define REG_OFFSET(type, field) (int)(&(((type *)0)->field))
-
-/* HSCX read registers */
-
-#define h_ista hscx_rw.hscx_r.hscx_ista
-#define H_ISTA REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_ista)
-#define h_star hscx_rw.hscx_r.hscx_star
-#define H_STAR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_star)
-#define h_mode hscx_rw.hscx_r.hscx_mode
-#define H_MODE REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_mode)
-#define h_timr hscx_rw.hscx_r.hscx_timr
-#define H_TIMR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_timr)
-#define h_exir hscx_rw.hscx_r.hscx_exir
-#define H_EXIR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_exir)
-#define h_rbcl hscx_rw.hscx_r.hscx_rbcl
-#define H_RBCL REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_rbcl)
-#define h_rsta hscx_rw.hscx_r.hscx_rsta
-#define H_RSTA REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_rsta)
-#define h_ral1 hscx_rw.hscx_r.hscx_ral1
-#define H_RAL1 REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_ral1)
-#define h_rhcr hscx_rw.hscx_r.hscx_rhcr
-#define H_RHCR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_rhcr)
-#define h_ccr2 hscx_rw.hscx_r.hscx_ccr2
-#define H_CCR2 REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_ccr2)
-#define h_rbch hscx_rw.hscx_r.hscx_rbch
-#define H_RBCH REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_rbch)
-#define h_vstr hscx_rw.hscx_r.hscx_vstr
-#define H_VSTR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_vstr)
-#define h_ccr hscx_rw.hscx_r.hscx_ccr
-#define H_CCR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_r.hscx_ccr)
-
-/* HSCX write registers - for hscx_mode, hscx_timr, hscx_ral1, hscx_ccr2 */
-/* see read registers */
-
-#define h_mask hscx_rw.hscx_w.hscx_mask
-#define H_MASK REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_mask)
-#define h_cmdr hscx_rw.hscx_w.hscx_cmdr
-#define H_CMDR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_cmdr)
-#define h_xad1 hscx_rw.hscx_w.hscx_xad1
-#define H_XAD1 REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_xad1)
-#define h_xad2 hscx_rw.hscx_w.hscx_xad2
-#define H_XAD2 REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_xad2)
-#define h_rah1 hscx_rw.hscx_w.hscx_rah1
-#define H_RAH1 REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_rah1)
-#define h_rah2 hscx_rw.hscx_w.hscx_rah2
-#define H_RAH2 REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_rah2)
-#define h_ral2 hscx_rw.hscx_w.hscx_ral2
-#define H_RAL2 REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_ral2)
-#define h_xbcl hscx_rw.hscx_w.hscx_xbcl
-#define H_XBCL REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_xbcl)
-#define h_bgr hscx_rw.hscx_w.hscx_bgr
-#define H_BGR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_bgr)
-#define h_xbch hscx_rw.hscx_w.hscx_xbch
-#define H_XBCH REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_xbch)
-#define h_rlcr hscx_rw.hscx_w.hscx_rlcr
-#define H_RLCR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_rlcr)
-#define h_ccr1 hscx_rw.hscx_w.hscx_ccr1
-#define H_CCR1 REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_ccr1)
-#define h_tsax hscx_rw.hscx_w.hscx_tsax
-#define H_TSAX REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_tsax)
-#define h_tsar hscx_rw.hscx_w.hscx_tsar
-#define H_TSAR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_tsar)
-#define h_xccr hscx_rw.hscx_w.hscx_xccr
-#define H_XCCR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_xccr)
-#define h_rccr hscx_rw.hscx_w.hscx_rccr
-#define H_RCCR REG_OFFSET(hscx_reg_t, hscx_rw.hscx_w.hscx_rccr)
-
-#define HSCX_ISTA_RME 0x80
-#define HSCX_ISTA_RPF 0x40
-#define HSCX_ISTA_RSC 0x20
-#define HSCX_ISTA_XPR 0x10
-#define HSCX_ISTA_TIN 0x08
-#define HSCX_ISTA_ICA 0x04
-#define HSCX_ISTA_EXA 0x02
-#define HSCX_ISTA_EXB 0x01
-
-#define HSCX_MASK_RME 0x80
-#define HSCX_MASK_RPF 0x40
-#define HSCX_MASK_RSC 0x20
-#define HSCX_MASK_XPR 0x10
-#define HSCX_MASK_TIN 0x08
-#define HSCX_MASK_ICA 0x04
-#define HSCX_MASK_EXA 0x02
-#define HSCX_MASK_EXB 0x01
-
-#define HSCX_EXIR_XMR 0x80
-#define HSCX_EXIR_XDU 0x40
-#define HSCX_EXIR_PCE 0x20
-#define HSCX_EXIR_RFO 0x10
-#define HSCX_EXIR_CSC 0x08
-#define HSCX_EXIR_RFS 0x04
-
-/* the other bits are always 0 */
-
-#define HSCX_STAR_XDOV 0x80
-#define HSCX_STAR_XFW 0x40
-#define HSCX_STAR_XRNR 0x20
-#define HSCX_STAR_RRNR 0x10
-#define HSCX_STAR_RLI 0x08
-#define HSCX_STAR_CEC 0x04
-#define HSCX_STAR_CTS 0x02
-#define HSCX_STAR_WFA 0x01
-
-#define HSCX_CMDR_RMC 0x80
-#define HSCX_CMDR_RHR 0x40
-/* also known as XREP in transparent mode */
-#define HSCX_CMDR_RNR 0x20
-#define HSCX_CMDR_STI 0x10
-#define HSCX_CMDR_XTF 0x08
-#define HSCX_CMDR_XIF 0x04
-#define HSCX_CMDR_XME 0x02
-#define HSCX_CMDR_XRES 0x01
-
-#define HSCX_MODE_MDS1 0x80
-#define HSCX_MODE_MDS0 0x40
-#define HSCX_MODE_ADM 0x20
-#define HSCX_MODE_TMD 0x10
-#define HSCX_MODE_RAC 0x08
-#define HSCX_MODE_RTS 0x04
-#define HSCX_MODE_TRS 0x02
-#define HSCX_MODE_TLP 0x01
-
-#define HSCX_RSTA_VFR 0x80
-#define HSCX_RSTA_RDO 0x40
-#define HSCX_RSTA_CRC 0x20
-#define HSCX_RSTA_RAB 0x10
-#define HSCX_RSTA_HA1 0x08
-#define HSCX_RSTA_HA0 0x04
-#define HSCX_RSTA_CR 0x02
-#define HSCX_RSTA_LA 0x01
-
-#define HSCX_RSTA_MASK 0xf0 /* the interesting ones */
-
-/* only used in DMA mode */
-#define HSCX_XBCH_DMA 0x80
-#define HSCX_XBCH_NRM 0x40
-#define HSCX_XBCH_CAS 0x20
-#define HSCX_XBCH_XC 0x10
-/* the rest are bits 11 thru 8 of the byte count */
-
-#define HSCX_RBCH_DMA 0x80
-#define HSCX_RBCH_NRM 0x40
-#define HSCX_RBCH_CAS 0x20
-#define HSCX_RBCH_OV 0x10
-/* the rest are bits 11 thru 8 of the byte count */
-
-#define HSCX_VSTR_CD 0x80
-/* bits 6 thru 4 are 0 */
-/* bits 3 thru 0 are the version number */
-
-#define HSCX_RLCR_RC 0x80
-/* the rest of the bits are used to set the received length */
-
-#define HSCX_CCR1_PU 0x80
-/* bits 6 and 5 are SC1 SC0 */
-#define HSCX_CCR1_ODS 0x10
-#define HSCX_CCR1_ITF 0x08
-#define HSCX_CCR1_CM2 0x04
-#define HSCX_CCR1_CM1 0x02
-#define HSCX_CCR1_CM0 0x01
-
-/* for clock mode 5 */
-#define HSCX_CCR2_SOC2 0x80
-#define HSCX_CCR2_SOC1 0x40
-#define HSCX_CCR2_XCS0 0x20
-#define HSCX_CCR2_RCS0 0x10
-#define HSCX_CCR2_TIO 0x08
-#define HSCX_CCR2_CIE 0x04
-#define HSCX_CCR2_RIE 0x02
-#define HSCX_CCR2_DIV 0x01
-
-/* bits 7 thru 2 are TSNX */
-#define HSCX_TSAX_XCS2 0x02
-#define HSCX_TSAX_XCS1 0x01
-
-/* bits 7 thru 2 are TSNR */
-#define HSCX_TSAR_RCS2 0x02
-#define HSCX_TSAR_RCS1 0x01
-
-#endif /* I4B_HSCX_H_ */
diff --git a/sys/i4b/layer1/i4b_ipac.h b/sys/i4b/layer1/i4b_ipac.h
deleted file mode 100644
index 79d8bc9656bd3..0000000000000
--- a/sys/i4b/layer1/i4b_ipac.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_ipac.h - definitions for the Siemens IPAC PSB2115 chip
- * ==========================================================
- *
- * $Id: i4b_ipac.h,v 1.4 1998/12/05 18:04:39 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:23:50 1998]
- *
- *---------------------------------------------------------------------------
- */
-
-#ifndef _I4B_IPAC_H_
-#define _I4B_IPAC_H_
-
-#define IPAC_BFIFO_LEN 64 /* 64 bytes B-channel FIFO on chip */
-
-#define IPAC_HSCXA_OFF 0x00
-#define IPAC_HSCXB_OFF 0x40
-#define IPAC_ISAC_OFF 0x80
-#define IPAC_IPAC_OFF 0xc0
-
-/*
- * definitions of registers and bits for the IPAC ISDN chip.
- */
-
-typedef struct ipac_reg {
-
- /* most registers can be read/written, but have different names */
- /* so define a union with read/write names to make that clear */
-
- union {
- struct {
- unsigned char ipac_conf;
- unsigned char ipac_ista;
- unsigned char ipac_id;
- unsigned char ipac_acfg;
- unsigned char ipac_aoe;
- unsigned char ipac_arx;
- unsigned char ipac_pita1;
- unsigned char ipac_pita2;
- unsigned char ipac_pota1;
- unsigned char ipac_pota2;
- unsigned char ipac_pcfg;
- unsigned char ipac_scfg;
- unsigned char ipac_timr2;
- } ipac_r;
- struct {
- unsigned char ipac_conf;
- unsigned char ipac_mask;
- unsigned char ipac_dummy;
- unsigned char ipac_acfg;
- unsigned char ipac_aoe;
- unsigned char ipac_atx;
- unsigned char ipac_pita1;
- unsigned char ipac_pita2;
- unsigned char ipac_pota1;
- unsigned char ipac_pota2;
- unsigned char ipac_pcfg;
- unsigned char ipac_scfg;
- unsigned char ipac_timr2;
- } ipac_w;
- } ipac_rw;
-} ipac_reg_t;
-
-#define REG_OFFSET(type, field) (int)(&(((type *)0)->field))
-
-/* IPAC read registers */
-
-#define IPAC_CONF REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_conf)
-#define IPAC_ISTA REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_ista)
-#define IPAC_ID REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_id)
-#define IPAC_ACFG REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_acfg)
-#define IPAC_AOE REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_aoe)
-#define IPAC_ARX REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_arx)
-#define IPAC_PITA1 REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_pita1)
-#define IPAC_PITA2 REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_pita2)
-#define IPAC_POTA1 REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_pota1)
-#define IPAC_POTA2 REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_pota2)
-#define IPAC_PCFG REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_pcfg)
-#define IPAC_SCFG REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_scfg)
-#define IPAC_TIMR2 REG_OFFSET(ipac_reg_t, ipac_rw.ipac_r.ipac_timr2)
-
-/* IPAC write registers */
-
-#define IPAC_MASK REG_OFFSET(ipac_reg_t, ipac_rw.ipac_w.ipac_mask)
-#define IPAC_ATX REG_OFFSET(ipac_reg_t, ipac_rw.ipac_w.ipac_atx)
-
-/* register bits */
-
-#define IPAC_CONF_AMP 0x80
-#define IPAC_CONF_CFS 0x40
-#define IPAC_CONF_TEM 0x20
-#define IPAC_CONF_PDS 0x10
-#define IPAC_CONF_IDH 0x08
-#define IPAC_CONF_SGO 0x04
-#define IPAC_CONF_ODS 0x02
-#define IPAC_CONF_IOF 0x01
-
-#define IPAC_ISTA_INT1 0x80
-#define IPAC_ISTA_INT0 0x40
-#define IPAC_ISTA_ICD 0x20
-#define IPAC_ISTA_EXD 0x10
-#define IPAC_ISTA_ICA 0x08
-#define IPAC_ISTA_EXA 0x04
-#define IPAC_ISTA_ICB 0x02
-#define IPAC_ISTA_EXB 0x01
-
-#define IPAC_MASK_INT1 0x80
-#define IPAC_MASK_INT0 0x40
-#define IPAC_MASK_ICD 0x20
-#define IPAC_MASK_EXD 0x10
-#define IPAC_MASK_ICA 0x08
-#define IPAC_MASK_EXA 0x04
-#define IPAC_MASK_ICB 0x02
-#define IPAC_MASK_EXB 0x01
-
-#define IPAC_ACFG_OD7 0x80
-#define IPAC_ACFG_OD6 0x40
-#define IPAC_ACFG_OD5 0x20
-#define IPAC_ACFG_OD4 0x10
-#define IPAC_ACFG_OD3 0x08
-#define IPAC_ACFG_OD2 0x04
-#define IPAC_ACFG_EL1 0x02
-#define IPAC_ACFG_EL2 0x01
-
-#define IPAC_AOE_OE7 0x80
-#define IPAC_AOE_OE6 0x40
-#define IPAC_AOE_OE5 0x20
-#define IPAC_AOE_OE4 0x10
-#define IPAC_AOE_OE3 0x08
-#define IPAC_AOE_OE2 0x04
-
-#define IPAC_ARX_AR7 0x80
-#define IPAC_ARX_AR6 0x40
-#define IPAC_ARX_AR5 0x20
-#define IPAC_ARX_AR4 0x10
-#define IPAC_ARX_AR3 0x08
-#define IPAC_ARX_AR2 0x04
-
-#define IPAC_ATX_AT7 0x80
-#define IPAC_ATX_AT6 0x40
-#define IPAC_ATX_AT5 0x20
-#define IPAC_ATX_AT4 0x10
-#define IPAC_ATX_AT3 0x08
-#define IPAC_ATX_AT2 0x04
-
-#define IPAC_PITA1_ENA 0x80
-#define IPAC_PITA1_DUDD 0x40
-
-#define IPAC_PITA2_ENA 0x80
-#define IPAC_PITA2_DUDD 0x40
-
-#define IPAC_POTA1_ENA 0x80
-#define IPAC_POTA1_DUDD 0x40
-
-#define IPAC_POTA2_ENA 0x80
-#define IPAC_POTA2_DUDD 0x40
-
-#define IPAC_PCFG_DPS 0x80
-#define IPAC_PCFG_ACL 0x40
-#define IPAC_PCFG_LED 0x20
-#define IPAC_PCFG_PLD 0x10
-#define IPAC_PCFG_FBS 0x08
-#define IPAC_PCFG_CSL2 0x04
-#define IPAC_PCFG_CSL1 0x02
-#define IPAC_PCFG_CSL0 0x01
-
-#define IPAC_SCFG_PRI 0x80
-#define IPAC_SCFG_TXD 0x40
-#define IPAC_SCFG_TLEN 0x20
-
-#define IPAC_TIMR2_TMD 0x80
-
-#endif /* _I4B_IPAC_H_ */
diff --git a/sys/i4b/layer1/i4b_isac.c b/sys/i4b/layer1/i4b_isac.c
deleted file mode 100644
index 4065c9a575b9a..0000000000000
--- a/sys/i4b/layer1/i4b_isac.c
+++ /dev/null
@@ -1,679 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isac.c - i4b siemens isdn chipset driver ISAC handler
- * ---------------------------------------------------------
- *
- * $Id: i4b_isac.c,v 1.28 1998/12/05 18:04:41 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:23:59 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "isic.h"
-#else
-#define NISIC 1 /* non-FreeBSD handles this via config(8) */
-#endif
-#if NISIC > 0
-
-#ifdef __FreeBSD__
-#include "opt_i4b.h"
-#endif
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <machine/stdarg.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-static u_char isic_isac_exir_hdlr(register struct isic_softc *sc, u_char exir);
-static void isic_isac_ind_hdlr(register struct isic_softc *sc, int ind);
-
-/*---------------------------------------------------------------------------*
- * ISAC interrupt service routine
- *---------------------------------------------------------------------------*/
-void
-isic_isac_irq(struct isic_softc *sc, int ista)
-{
- register u_char c = 0;
- DBGL1(L1_F_MSG, "isic_isac_irq", ("unit %d: ista = 0x%02x\n", sc->sc_unit, ista));
-
- if(ista & ISAC_ISTA_EXI) /* extended interrupt */
- {
- c |= isic_isac_exir_hdlr(sc, ISAC_READ(I_EXIR));
- }
-
- if(ista & ISAC_ISTA_RME) /* receive message end */
- {
- register int rest;
- u_char rsta;
-
- /* get rx status register */
-
- rsta = ISAC_READ(I_RSTA);
-
- if((rsta & ISAC_RSTA_MASK) != 0x20)
- {
- int error = 0;
-
- if(!(rsta & ISAC_RSTA_CRC)) /* CRC error */
- {
- error++;
- DBGL1(L1_I_ERR, "isic_isac_irq", ("unit %d: CRC error\n", sc->sc_unit));
- }
-
- if(rsta & ISAC_RSTA_RDO) /* ReceiveDataOverflow */
- {
- error++;
- DBGL1(L1_I_ERR, "isic_isac_irq", ("unit %d: Data Overrun error\n", sc->sc_unit));
- }
-
- if(rsta & ISAC_RSTA_RAB) /* ReceiveABorted */
- {
- error++;
- DBGL1(L1_I_ERR, "isic_isac_irq", ("unit %d: Receive Aborted error\n", sc->sc_unit));
- }
-
- if(error == 0)
- DBGL1(L1_I_ERR, "isic_isac_irq", ("unit %d: RME unknown error, RSTA = 0x%02x!\n", sc->sc_unit, rsta));
-
- i4b_Dfreembuf(sc->sc_ibuf);
-
- c |= ISAC_CMDR_RMC|ISAC_CMDR_RRES;
-
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
-
- ISAC_WRITE(I_CMDR, ISAC_CMDR_RMC|ISAC_CMDR_RRES);
- ISACCMDRWRDELAY();
-
- return;
- }
-
- rest = (ISAC_READ(I_RBCL) & (ISAC_FIFO_LEN-1));
-
- if(rest == 0)
- rest = ISAC_FIFO_LEN;
-
- if(sc->sc_ibuf == NULL)
- {
- if((sc->sc_ibuf = i4b_Dgetmbuf(rest)) != NULL)
- sc->sc_ib = sc->sc_ibuf->m_data;
- else
- panic("isic_isac_irq: RME, i4b_Dgetmbuf returns NULL!\n");
- sc->sc_ilen = 0;
- }
-
- if(sc->sc_ilen <= (MAX_DFRAME_LEN - rest))
- {
- ISAC_RDFIFO(sc->sc_ib, rest);
- sc->sc_ilen += rest;
-
- sc->sc_ibuf->m_pkthdr.len =
- sc->sc_ibuf->m_len = sc->sc_ilen;
-
- if(sc->sc_trace & TRACE_D_RX)
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = sc->sc_unit;
- hdr.type = TRC_CH_D;
- hdr.dir = FROM_NT;
- hdr.count = ++sc->sc_trace_dcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, sc->sc_ibuf->m_len, sc->sc_ibuf->m_data);
- }
-
- c |= ISAC_CMDR_RMC;
-
- if(sc->sc_enabled)
- PH_Data_Ind(sc->sc_unit, sc->sc_ibuf);
- else
- i4b_Dfreembuf(sc->sc_ibuf);
- }
- else
- {
- DBGL1(L1_I_ERR, "isic_isac_irq", ("RME, input buffer overflow!\n"));
- i4b_Dfreembuf(sc->sc_ibuf);
- c |= ISAC_CMDR_RMC|ISAC_CMDR_RRES;
- }
-
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
- }
-
- if(ista & ISAC_ISTA_RPF) /* receive fifo full */
- {
- if(sc->sc_ibuf == NULL)
- {
- if((sc->sc_ibuf = i4b_Dgetmbuf(MAX_DFRAME_LEN)) != NULL)
- sc->sc_ib= sc->sc_ibuf->m_data;
- else
- panic("isic_isac_irq: RPF, i4b_Dgetmbuf returns NULL!\n");
- sc->sc_ilen = 0;
- }
-
- if(sc->sc_ilen <= (MAX_DFRAME_LEN - ISAC_FIFO_LEN))
- {
- ISAC_RDFIFO(sc->sc_ib, ISAC_FIFO_LEN);
- sc->sc_ilen += ISAC_FIFO_LEN;
- sc->sc_ib += ISAC_FIFO_LEN;
- c |= ISAC_CMDR_RMC;
- }
- else
- {
- DBGL1(L1_I_ERR, "isic_isac_irq", ("RPF, input buffer overflow!\n"));
- i4b_Dfreembuf(sc->sc_ibuf);
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
- c |= ISAC_CMDR_RMC|ISAC_CMDR_RRES;
- }
- }
-
- if(ista & ISAC_ISTA_XPR) /* transmit fifo empty (XPR bit set) */
- {
- if((sc->sc_obuf2 != NULL) && (sc->sc_obuf == NULL))
- {
- sc->sc_freeflag = sc->sc_freeflag2;
- sc->sc_obuf = sc->sc_obuf2;
- sc->sc_op = sc->sc_obuf->m_data;
- sc->sc_ol = sc->sc_obuf->m_len;
- sc->sc_obuf2 = NULL;
-#ifdef NOTDEF
- printf("ob2=%x, op=%x, ol=%d, f=%d #",
- sc->sc_obuf,
- sc->sc_op,
- sc->sc_ol,
- sc->sc_state);
-#endif
- }
- else
- {
-#ifdef NOTDEF
- printf("ob=%x, op=%x, ol=%d, f=%d #",
- sc->sc_obuf,
- sc->sc_op,
- sc->sc_ol,
- sc->sc_state);
-#endif
- }
-
- if(sc->sc_obuf)
- {
- ISAC_WRFIFO(sc->sc_op, min(sc->sc_ol, ISAC_FIFO_LEN));
-
- if(sc->sc_ol > ISAC_FIFO_LEN) /* length > 32 ? */
- {
- sc->sc_op += ISAC_FIFO_LEN; /* bufferptr+32 */
- sc->sc_ol -= ISAC_FIFO_LEN; /* length - 32 */
- c |= ISAC_CMDR_XTF; /* set XTF bit */
- }
- else
- {
- if(sc->sc_freeflag)
- {
- i4b_Dfreembuf(sc->sc_obuf);
- sc->sc_freeflag = 0;
- }
- sc->sc_obuf = NULL;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
-
- c |= ISAC_CMDR_XTF | ISAC_CMDR_XME;
- }
- }
- else
- {
- sc->sc_state &= ~ISAC_TX_ACTIVE;
- }
- }
-
- if(ista & ISAC_ISTA_CISQ) /* channel status change CISQ */
- {
- register u_char ci;
-
- /* get command/indication rx register*/
-
- ci = ISAC_READ(I_CIRR);
-
- /* if S/Q IRQ, read SQC reg to clr SQC IRQ */
-
- if(ci & ISAC_CIRR_SQC)
- (void) ISAC_READ(I_SQRR);
-
- /* C/I code change IRQ (flag already cleared by CIRR read) */
-
- if(ci & ISAC_CIRR_CIC0)
- isic_isac_ind_hdlr(sc, (ci >> 2) & 0xf);
- }
-
- if(c)
- {
- ISAC_WRITE(I_CMDR, c);
- ISACCMDRWRDELAY();
- }
-}
-
-/*---------------------------------------------------------------------------*
- * ISAC L1 Extended IRQ handler
- *---------------------------------------------------------------------------*/
-static u_char
-isic_isac_exir_hdlr(register struct isic_softc *sc, u_char exir)
-{
- u_char c = 0;
-
- if(exir & ISAC_EXIR_XMR)
- {
- DBGL1(L1_I_ERR, "isic_isac_exir_hdlr", ("EXIRQ Tx Message Repeat\n"));
-
- c |= ISAC_CMDR_XRES;
- }
-
- if(exir & ISAC_EXIR_XDU)
- {
- DBGL1(L1_I_ERR, "isic_isac_exir_hdlr", ("EXIRQ Tx Data Underrun\n"));
-
- c |= ISAC_CMDR_XRES;
- }
-
- if(exir & ISAC_EXIR_PCE)
- {
- DBGL1(L1_I_ERR, "isic_isac_exir_hdlr", ("EXIRQ Protocol Error\n"));
- }
-
- if(exir & ISAC_EXIR_RFO)
- {
- DBGL1(L1_I_ERR, "isic_isac_exir_hdlr", ("EXIRQ Rx Frame Overflow\n"));
-
- c |= ISAC_CMDR_RMC|ISAC_CMDR_RRES;
- }
-
- if(exir & ISAC_EXIR_SOV)
- {
- DBGL1(L1_I_ERR, "isic_isac_exir_hdlr", ("EXIRQ Sync Xfer Overflow\n"));
- }
-
- if(exir & ISAC_EXIR_MOS)
- {
- DBGL1(L1_I_ERR, "L1 isic_isac_exir_hdlr", ("EXIRQ Monitor Status\n"));
- }
-
- if(exir & ISAC_EXIR_SAW)
- {
- /* cannot happen, STCR:TSF is set to 0 */
-
- DBGL1(L1_I_ERR, "isic_isac_exir_hdlr", ("EXIRQ Subscriber Awake\n"));
- }
-
- if(exir & ISAC_EXIR_WOV)
- {
- /* cannot happen, STCR:TSF is set to 0 */
-
- DBGL1(L1_I_ERR, "isic_isac_exir_hdlr", ("EXIRQ Watchdog Timer Overflow\n"));
- }
-
- return(c);
-}
-
-/*---------------------------------------------------------------------------*
- * ISAC L1 Indication handler
- *---------------------------------------------------------------------------*/
-static void
-isic_isac_ind_hdlr(register struct isic_softc *sc, int ind)
-{
- register int event;
-
- switch(ind)
- {
- case ISAC_CIRR_IAI8:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx AI8 in state %s\n", isic_printstate(sc)));
- if(sc->sc_bustyp == BUS_TYPE_IOM2)
- isic_isac_l1_cmd(sc, CMD_AR8);
- event = EV_INFO48;
- MPH_Status_Ind(sc->sc_unit, STI_L1STAT, LAYER_ACTIVE);
- break;
-
- case ISAC_CIRR_IAI10:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx AI10 in state %s\n", isic_printstate(sc)));
- if(sc->sc_bustyp == BUS_TYPE_IOM2)
- isic_isac_l1_cmd(sc, CMD_AR10);
- event = EV_INFO410;
- MPH_Status_Ind(sc->sc_unit, STI_L1STAT, LAYER_ACTIVE);
- break;
-
- case ISAC_CIRR_IRSY:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx RSY in state %s\n", isic_printstate(sc)));
- event = EV_RSY;
- break;
-
- case ISAC_CIRR_IPU:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx PU in state %s\n", isic_printstate(sc)));
- event = EV_PU;
- break;
-
- case ISAC_CIRR_IDR:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx DR in state %s\n", isic_printstate(sc)));
- isic_isac_l1_cmd(sc, CMD_DIU);
- event = EV_DR;
- break;
-
- case ISAC_CIRR_IDID:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx DID in state %s\n", isic_printstate(sc)));
- event = EV_INFO0;
- MPH_Status_Ind(sc->sc_unit, STI_L1STAT, LAYER_IDLE);
- break;
-
- case ISAC_CIRR_IDIS:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx DIS in state %s\n", isic_printstate(sc)));
- event = EV_DIS;
- break;
-
- case ISAC_CIRR_IEI:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx EI in state %s\n", isic_printstate(sc)));
- isic_isac_l1_cmd(sc, CMD_DIU);
- event = EV_EI;
- break;
-
- case ISAC_CIRR_IARD:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx ARD in state %s\n", isic_printstate(sc)));
- event = EV_INFO2;
- break;
-
- case ISAC_CIRR_ITI:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx TI in state %s\n", isic_printstate(sc)));
- event = EV_INFO0;
- break;
-
- case ISAC_CIRR_IATI:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx ATI in state %s\n", isic_printstate(sc)));
- event = EV_INFO0;
- break;
-
- case ISAC_CIRR_ISD:
- DBGL1(L1_I_CICO, "isic_isac_ind_hdlr", ("rx SD in state %s\n", isic_printstate(sc)));
- event = EV_INFO0;
- break;
-
- default:
- DBGL1(L1_I_ERR, "isic_isac_ind_hdlr", ("UNKNOWN Indication 0x%x in state %s\n", ind, isic_printstate(sc)));
- event = EV_INFO0;
- break;
- }
- isic_next_state(sc, event);
-}
-
-/*---------------------------------------------------------------------------*
- * execute a layer 1 command
- *---------------------------------------------------------------------------*/
-void
-isic_isac_l1_cmd(struct isic_softc *sc, int command)
-{
- u_char cmd;
-
-#ifdef I4B_SMP_WORKAROUND
-
- /* XXXXXXXXXXXXXXXXXXX */
-
- /*
- * patch from Wolfgang Helbig:
- *
- * Here is a patch that makes i4b work on an SMP:
- * The card (TELES 16.3) didn't interrupt on an SMP machine.
- * This is a gross workaround, but anyway it works *and* provides
- * some information as how to finally fix this problem.
- */
-
- HSCX_WRITE(0, H_MASK, 0xff);
- HSCX_WRITE(1, H_MASK, 0xff);
- ISAC_WRITE(I_MASK, 0xff);
- DELAY(100);
- HSCX_WRITE(0, H_MASK, HSCX_A_IMASK);
- HSCX_WRITE(1, H_MASK, HSCX_B_IMASK);
- ISAC_WRITE(I_MASK, ISAC_IMASK);
-
- /* XXXXXXXXXXXXXXXXXXX */
-
-#endif /* I4B_SMP_WORKAROUND */
-
- if(command < 0 || command > CMD_ILL)
- {
- DBGL1(L1_I_ERR, "isic_isac_l1_cmd", ("illegal cmd 0x%x in state %s\n", command, isic_printstate(sc)));
- return;
- }
-
- if(sc->sc_bustyp == BUS_TYPE_IOM2)
- cmd = ISAC_CIX0_LOW;
- else
- cmd = 0;
-
- switch(command)
- {
- case CMD_TIM:
- DBGL1(L1_I_CICO, "isic_isac_l1_cmd", ("tx TIM in state %s\n", isic_printstate(sc)));
- cmd |= (ISAC_CIXR_CTIM << 2);
- break;
-
- case CMD_RS:
- DBGL1(L1_I_CICO, "isic_isac_l1_cmd", ("tx RS in state %s\n", isic_printstate(sc)));
- cmd |= (ISAC_CIXR_CRS << 2);
- break;
-
- case CMD_AR8:
- DBGL1(L1_I_CICO, "isic_isac_l1_cmd", ("tx AR8 in state %s\n", isic_printstate(sc)));
- cmd |= (ISAC_CIXR_CAR8 << 2);
- break;
-
- case CMD_AR10:
- DBGL1(L1_I_CICO, "isic_isac_l1_cmd", ("tx AR10 in state %s\n", isic_printstate(sc)));
- cmd |= (ISAC_CIXR_CAR10 << 2);
- break;
-
- case CMD_DIU:
- DBGL1(L1_I_CICO, "isic_isac_l1_cmd", ("tx DIU in state %s\n", isic_printstate(sc)));
- cmd |= (ISAC_CIXR_CDIU << 2);
- break;
- }
- ISAC_WRITE(I_CIXR, cmd);
-}
-
-/*---------------------------------------------------------------------------*
- * L1 ISAC initialization
- *---------------------------------------------------------------------------*/
-int
-isic_isac_init(struct isic_softc *sc)
-{
- ISAC_IMASK = 0xff; /* disable all irqs */
-
- ISAC_WRITE(I_MASK, ISAC_IMASK);
-
- if(sc->sc_bustyp != BUS_TYPE_IOM2)
- {
- DBGL1(L1_I_SETUP, "isic_isac_setup", ("configuring for IOM-1 mode\n"));
-
- /* ADF2: Select mode IOM-1 */
- ISAC_WRITE(I_ADF2, 0x00);
-
- /* SPCR: serial port control register:
- * SPU - software power up = 0
- * SAC - SIP port high Z
- * SPM - timing mode 0
- * TLP - test loop = 0
- * C1C, C2C - B1 and B2 switched to/from SPa
- */
- ISAC_WRITE(I_SPCR, ISAC_SPCR_C1C1|ISAC_SPCR_C2C1);
-
- /* SQXR: S/Q channel xmit register:
- * SQIE - S/Q IRQ enable = 0
- * SQX1-4 - Fa bits = 1
- */
- ISAC_WRITE(I_SQXR, ISAC_SQXR_SQX1|ISAC_SQXR_SQX2|ISAC_SQXR_SQX3|ISAC_SQXR_SQX4);
-
- /* ADF1: additional feature reg 1:
- * WTC - watchdog = 0
- * TEM - test mode = 0
- * PFS - pre-filter = 0
- * CFS - IOM clock/frame always active
- * FSC1/2 - polarity of 8kHz strobe
- * ITF - interframe fill = idle
- */
- ISAC_WRITE(I_ADF1, ISAC_ADF1_FC2); /* ADF1 */
-
- /* STCR: sync transfer control reg:
- * TSF - terminal secific functions = 0
- * TBA - TIC bus address = 7
- * STx/SCx = 0
- */
- ISAC_WRITE(I_STCR, ISAC_STCR_TBA2|ISAC_STCR_TBA1|ISAC_STCR_TBA0);
-
- /* MODE: Mode Register:
- * MDSx - transparent mode 2
- * TMD - timer mode = external
- * RAC - Receiver enabled
- * DIMx - digital i/f mode
- */
- ISAC_WRITE(I_MODE, ISAC_MODE_MDS2|ISAC_MODE_MDS1|ISAC_MODE_RAC|ISAC_MODE_DIM0);
- }
- else
- {
- DBGL1(L1_I_SETUP, "isic_isac_setup", ("configuring for IOM-2 mode\n"));
-
- /* ADF2: Select mode IOM-2 */
- ISAC_WRITE(I_ADF2, ISAC_ADF2_IMS);
-
- /* SPCR: serial port control register:
- * SPU - software power up = 0
- * SPM - timing mode 0
- * TLP - test loop = 0
- * C1C, C2C - B1 + C1 and B2 + IC2 monitoring
- */
- ISAC_WRITE(I_SPCR, 0x00);
-
- /* SQXR: S/Q channel xmit register:
- * IDC - IOM direction = 0 (master)
- * CFS - Config Select = 0 (clock always active)
- * CI1E - C/I channel 1 IRQ enable = 0
- * SQIE - S/Q IRQ enable = 0
- * SQX1-4 - Fa bits = 1
- */
- ISAC_WRITE(I_SQXR, ISAC_SQXR_SQX1|ISAC_SQXR_SQX2|ISAC_SQXR_SQX3|ISAC_SQXR_SQX4);
-
- /* ADF1: additional feature reg 1:
- * WTC - watchdog = 0
- * TEM - test mode = 0
- * PFS - pre-filter = 0
- * IOF - IOM i/f off = 0
- * ITF - interframe fill = idle
- */
- ISAC_WRITE(I_ADF1, 0x00);
-
- /* STCR: sync transfer control reg:
- * TSF - terminal secific functions = 0
- * TBA - TIC bus address = 7
- * STx/SCx = 0
- */
- ISAC_WRITE(I_STCR, ISAC_STCR_TBA2|ISAC_STCR_TBA1|ISAC_STCR_TBA0);
-
- /* MODE: Mode Register:
- * MDSx - transparent mode 2
- * TMD - timer mode = external
- * RAC - Receiver enabled
- * DIMx - digital i/f mode
- */
- ISAC_WRITE(I_MODE, ISAC_MODE_MDS2|ISAC_MODE_MDS1|ISAC_MODE_RAC|ISAC_MODE_DIM0);
- }
-
-#ifdef NOTDEF
- /*
- * XXX a transmitter reset causes an ISAC tx IRQ which will not
- * be serviced at attach time under some circumstances leaving
- * the associated IRQ line on the ISA bus active. This prevents
- * any further interrupts to be serviced because no low -> high
- * transition can take place anymore. (-hm)
- */
-
- /* command register:
- * RRES - HDLC receiver reset
- * XRES - transmitter reset
- */
- ISAC_WRITE(I_CMDR, ISAC_CMDR_RRES|ISAC_CMDR_XRES);
- ISACCMDRWRDELAY();
-#endif
-
- /* enabled interrupts:
- * ===================
- * RME - receive message end
- * RPF - receive pool full
- * XPR - transmit pool ready
- * CISQ - CI or S/Q channel change
- * EXI - extended interrupt
- */
-
- ISAC_IMASK = ISAC_MASK_RSC | /* auto mode only */
- ISAC_MASK_TIN | /* timer irq */
- ISAC_MASK_SIN; /* sync xfer irq */
-
- ISAC_WRITE(I_MASK, ISAC_IMASK);
-
- return(0);
-}
-
-#endif /* NISIC > 0 */
diff --git a/sys/i4b/layer1/i4b_isac.h b/sys/i4b/layer1/i4b_isac.h
deleted file mode 100644
index 56a4241564fec..0000000000000
--- a/sys/i4b/layer1/i4b_isac.h
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (c) 1996, 1998 Gary Jennejohn. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * $Id: i4b_isac.h,v 1.5 1998/03/28 15:11:03 hm Exp $
- *
- * last edit-date: [Fri Mar 27 15:52:40 1998]
- *
- * -hm split up for rewrite of Siemens chipset driver
- *
- *---------------------------------------------------------------------------
- */
-
-#ifndef I4B_ISAC_H_
-#define I4B_ISAC_H_
-
-/*
- * The ISAC databook specifies a delay of 2.5 DCL clock cycles between
- * writes to the ISAC command register CMDR. This is the delay used to
- * satisfy this requirement.
- */
-
-#define I4B_ISAC_CMDRWRDELAY 30
-
-#if (I4B_ISAC_CMDRWRDELAY > 0)
-#define ISACCMDRWRDELAY() DELAY(I4B_ISAC_CMDRWRDELAY)
-#else
-#warning "I4B_ISAC_CMDRWRDELAY set to 0!"
-#define ISACCMDRWRDELAY()
-#endif
-
-enum ISAC_VERSIONS {
- ISAC_VA, /* 2085 A1 or A2, 2086/2186 V1.1 */
- ISAC_VB1, /* 2085 B1 */
- ISAC_VB2, /* 2085 B2 */
- ISAC_VB3, /* 2085 B3/V2.3 */
- ISAC_UNKN /* unknown version */
-};
-
-#define ISAC_FIFO_LEN 32 /* 32 bytes FIFO on chip */
-
-/*
- * definitions of registers and bits for the ISAC ISDN chip.
- */
-
-typedef struct isac_reg {
-
- /* 32 byte deep FIFO always first */
-
- unsigned char isac_fifo [ISAC_FIFO_LEN];
-
- /* most registers can be read/written, but have different names */
- /* so define a union with read/write names to make that clear */
-
- union {
- struct {
- unsigned char isac_ista;
- unsigned char isac_star;
- unsigned char isac_mode;
- unsigned char isac_timr;
- unsigned char isac_exir;
- unsigned char isac_rbcl;
- unsigned char isac_sapr;
- unsigned char isac_rsta;
- unsigned char dummy_28;
- unsigned char isac_rhcr;
- unsigned char isac_rbch;
- unsigned char isac_star2;
- unsigned char dummy_2c;
- unsigned char dummy_2d;
- unsigned char dummy_2e;
- unsigned char dummt_2f;
- unsigned char isac_spcr;
- unsigned char isac_cirr;
- unsigned char isac_mor;
- unsigned char isac_sscr;
- unsigned char isac_sfcr;
- unsigned char isac_c1r;
- unsigned char isac_c2r;
- unsigned char isac_b1cr;
- unsigned char isac_b2cr;
- unsigned char isac_adf2;
- unsigned char isac_mosr;
- unsigned char isac_sqrr;
- } isac_r;
- struct {
- unsigned char isac_mask;
- unsigned char isac_cmdr;
- unsigned char isac_mode;
- unsigned char isac_timr;
- unsigned char isac_xad1;
- unsigned char isac_xad2;
- unsigned char isac_sap1;
- unsigned char isac_sap2;
- unsigned char isac_tei1;
- unsigned char isac_tei2;
- unsigned char dummy_2a;
- unsigned char isac_star2;
- unsigned char dummy_2c;
- unsigned char dummy_2d;
- unsigned char dummy_2e;
- unsigned char dummt_2f;
- unsigned char isac_spcr;
- unsigned char isac_cixr;
- unsigned char isac_mox;
- unsigned char isac_sscx;
- unsigned char isac_sfcw;
- unsigned char isac_c1r;
- unsigned char isac_c2r;
- unsigned char isac_stcr;
- unsigned char isac_adf1;
- unsigned char isac_adf2;
- unsigned char isac_mocr;
- unsigned char isac_sqxr;
- } isac_w;
- } isac_rw;
-} isac_reg_t;
-
-#define REG_OFFSET(type, field) (int)(&(((type *)0)->field))
-
-/* ISAC read registers */
-
-#define i_ista isac_rw.isac_r.isac_ista
-#define I_ISTA REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_ista)
-#define i_star isac_rw.isac_r.isac_star
-#define I_STAR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_star)
-#define i_mode isac_rw.isac_r.isac_mode
-#define I_MODE REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_mode)
-#define i_timr isac_rw.isac_r.isac_timr
-#define I_TIMR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_timr)
-#define i_exir isac_rw.isac_r.isac_exir
-#define I_EXIR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_exir)
-#define i_rbcl isac_rw.isac_r.isac_rbcl
-#define I_RBCL REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_rbcl)
-#define i_sapr isac_rw.isac_r.isac_sapr
-#define I_SAPR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_sapr)
-#define i_rsta isac_rw.isac_r.isac_rsta
-#define I_RSTA REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_rsta)
-#define i_rhcr isac_rw.isac_r.isac_rhcr
-#define I_RHCR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_rhcr)
-#define i_rbch isac_rw.isac_r.isac_rbch
-#define I_RBCH REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_rbch)
-#define i_star2 isac_rw.isac_r.isac_star2
-#define I_STAR2 REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_star2)
-#define i_spcr isac_rw.isac_r.isac_spcr
-#define I_SPCR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_spcr)
-#define i_cirr isac_rw.isac_r.isac_cirr
-#define I_CIRR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_cirr)
-#define i_mor isac_rw.isac_r.isac_mor
-#define I_MOR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_mor)
-#define i_sscr isac_rw.isac_r.isac_sscr
-#define I_SSCR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_sscr)
-#define i_sfcr isac_rw.isac_r.isac_sfcr
-#define I_SFCR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_sfcr)
-#define i_c1r isac_rw.isac_r.isac_c1r
-#define I_C1R REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_c1r)
-#define i_c2r isac_rw.isac_r.isac_c2r
-#define I_C2R REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_c2r)
-#define i_b1cr isac_rw.isac_r.isac_b1cr
-#define I_B1CR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_b1cr)
-#define i_b2cr isac_rw.isac_r.isac_b2cr
-#define I_B2CR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_b2cr)
-#define i_adf2 isac_rw.isac_r.isac_adf2
-#define I_ADF2 REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_adf2)
-#define i_mosr isac_rw.isac_r.isac_mosr
-#define I_MOSR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_mosr)
-#define i_sqrr isac_rw.isac_r.isac_sqrr
-#define I_SQRR REG_OFFSET(isac_reg_t, isac_rw.isac_r.isac_sqrr)
-
-/* ISAC write registers - isac_mode, isac_timr, isac_star2, isac_spcr, */
-/* isac_c1r, isac_c2r, isac_adf2 see read registers */
-
-#define i_mask isac_rw.isac_w.isac_mask
-#define I_MASK REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_mask)
-#define i_cmdr isac_rw.isac_w.isac_cmdr
-#define I_CMDR REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_cmdr)
-#define i_xad1 isac_rw.isac_w.isac_xad1
-#define I_XAD1 REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_xad1)
-#define i_xad2 isac_rw.isac_w.isac_xad2
-#define I_XAD2 REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_xad2)
-#define i_sap1 isac_rw.isac_w.isac_sap1
-#define I_SAP1 REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_sap1)
-#define i_sap2 isac_rw.isac_w.isac_sap2
-#define I_SAP2 REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_sap2)
-#define i_tei1 isac_rw.isac_w.isac_tei1
-#define i_tei2 isac_rw.isac_w.isac_tei2
-#define i_cixr isac_rw.isac_w.isac_cixr
-#define I_CIXR REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_cixr)
-#define I_CIX0 I_CIXR
-#define i_mox isac_rw.isac_w.isac_mox
-#define I_MOX REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_mox)
-#define i_sscx isac_rw.isac_w.isac_sscx
-#define I_SSCX REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_sscx)
-#define i_sfcw isac_rw.isac_w.isac_sfcw
-#define I_SFCW REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_sfcw)
-#define i_stcr isac_rw.isac_w.isac_stcr
-#define I_STCR REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_stcr)
-#define i_adf1 isac_rw.isac_w.isac_adf1
-#define I_ADF1 REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_adf1)
-#define i_mocr isac_rw.isac_w.isac_mocr
-#define I_MOCR REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_mocr)
-#define i_sqxr isac_rw.isac_w.isac_sqxr
-#define I_SQXR REG_OFFSET(isac_reg_t, isac_rw.isac_w.isac_sqxr)
-
-#define ISAC_ISTA_RME 0x80
-#define ISAC_ISTA_RPF 0x40
-#define ISAC_ISTA_RSC 0x20
-#define ISAC_ISTA_XPR 0x10
-#define ISAC_ISTA_TIN 0x08
-#define ISAC_ISTA_CISQ 0x04
-#define ISAC_ISTA_SIN 0x02
-#define ISAC_ISTA_EXI 0x01
-
-#define ISAC_MASK_RME 0x80
-#define ISAC_MASL_RPF 0x40
-#define ISAC_MASK_RSC 0x20
-#define ISAC_MASK_XPR 0x10
-#define ISAC_MASK_TIN 0x08
-#define ISAC_MASK_CISQ 0x04
-#define ISAC_MASK_SIN 0x02
-#define ISAC_MASK_EXI 0x01
-#define ISAC_MASK_ALL 0xff
-
-#define ISAC_STAR_XDOV 0x80
-#define ISAC_STAR_XFW 0x40
-#define ISAC_STAR_XRNR 0x20
-#define ISAC_STAR_RRNR 0x10
-#define ISAC_STAR_MBR 0x08
-#define ISAC_STAR_MAC1 0x04
-#define ISAC_STAR_BVS 0x02
-#define ISAC_STAR_MAC0 0x01
-
-#define ISAC_CMDR_RMC 0x80
-#define ISAC_CMDR_RRES 0x40
-#define ISAC_CMDR_RNR 0x20
-#define ISAC_CMDR_STI 0x10
-#define ISAC_CMDR_XTF 0x08
-#define ISAC_CMDR_XIF 0x04
-#define ISAC_CMDR_XME 0x02
-#define ISAC_CMDR_XRES 0x01
-
-#define ISAC_MODE_MDS2 0x80
-#define ISAC_MODE_MDS1 0x40
-#define ISAC_MODE_MDS0 0x20
-#define ISAC_MODE_TMD 0x10
-#define ISAC_MODE_RAC 0x08
-#define ISAC_MODE_DIM2 0x04
-#define ISAC_MODE_DIM1 0x02
-#define ISAC_MODE_DIM0 0x01
-
-#define ISAC_EXIR_XMR 0x80
-#define ISAC_EXIR_XDU 0x40
-#define ISAC_EXIR_PCE 0x20
-#define ISAC_EXIR_RFO 0x10
-#define ISAC_EXIR_SOV 0x08
-#define ISAC_EXIR_MOS 0x04
-#define ISAC_EXIR_SAW 0x02
-#define ISAC_EXIR_WOV 0x01
-
-#define ISAC_RSTA_RDA 0x80
-#define ISAC_RSTA_RDO 0x40
-#define ISAC_RSTA_CRC 0x20
-#define ISAC_RSTA_RAB 0x10
-#define ISAC_RSTA_SA1 0x08
-#define ISAC_RSTA_SA0 0x04
-#define ISAC_RSTA_CR 0x02
-#define ISAC_RSTA_TA 0x01
-
-#define ISAC_RSTA_MASK 0x70 /* the interesting bits */
-
-#define ISAC_RBCH_XAC 0x80
-#define ISAC_RBCH_VN1 0x40
-#define ISAC_RBCH_VN0 0x20
-#define ISAC_RBCH_OV 0x10
-/* the other 4 bits are the high bits of the receive byte count */
-
-#define ISAC_SPCR_SPU 0x80
-#define ISAC_SPCR_SAC 0x40
-#define ISAC_SPCR_SPM 0x20
-#define ISAC_SPCR_TLP 0x10
-#define ISAC_SPCR_C1C1 0x08
-#define ISAC_SPCR_C1C0 0x04
-#define ISAC_SPCR_C2C1 0x02
-#define ISAC_SPCR_C2C0 0x01
-
-#define ISAC_CIRR_SQC 0x80
-#define ISAC_CIRR_BAS 0x40
-/* bits 5-2 CODR */
-#define ISAC_CIRR_CIC0 0x02
-/* bit 0 is always 0 */
-/* C/I codes from bits 5-2 (>> 2 & 0xf) */
-/* the indications */
-#define ISAC_CIRR_IPU 0x07
-#define ISAC_CIRR_IDR 0x00
-#define ISAC_CIRR_ISD 0x02
-#define ISAC_CIRR_IDIS 0x03
-#define ISAC_CIRR_IEI 0x06
-#define ISAC_CIRR_IRSY 0x04
-#define ISAC_CIRR_IARD 0x08
-#define ISAC_CIRR_ITI 0x0a
-#define ISAC_CIRR_IATI 0x0b
-#define ISAC_CIRR_IAI8 0x0c
-#define ISAC_CIRR_IAI10 0x0d
-#define ISAC_CIRR_IDID 0x0f
-
-#define ISAC_CI_MASK 0x0f
-
-#define ISAC_CIXR_RSS 0x80
-#define ISAC_CIXR_BAC 0x40
-/* bits 5-2 CODX */
-#define ISAC_CIXR_TCX 0x02
-#define ISAC_CIXR_ECX 0x01
-/* in IOM-2 mode the low bits are always 1 */
-#define ISAC_CIX0_LOW 0x03
-/* C/I codes from bits 5-2 (>> 2 & 0xf) */
-/* the commands */
-#define ISAC_CIXR_CTIM 0
-#define ISAC_CIXR_CRS 0x01
-#define ISAC_CIXR_CSCZ 0x04
-#define ISAC_CIXR_CSSZ 0x02
-#define ISAC_CIXR_CAR8 0x08
-#define ISAC_CIXR_CAR10 0x09
-#define ISAC_CIXR_CARL 0x0a
-#define ISAC_CIXR_CDIU 0x0f
-
-#define ISAC_STCR_TSF 0x80
-#define ISAC_STCR_TBA2 0x40
-#define ISAC_STCR_TBA1 0x20
-#define ISAC_STCR_TBA0 0x10
-#define ISAC_STCR_ST1 0x08
-#define ISAC_STCR_ST0 0x04
-#define ISAC_STCR_SC1 0x02
-#define ISAC_STCR_SC0 0x01
-
-#define ISAC_ADF1_WTC1 0x80
-#define ISAC_ADF1_WTC2 0x40
-#define ISAC_ADF1_TEM 0x20
-#define ISAC_ADF1_PFS 0x10
-#define ISAC_ADF1_CFS 0x08
-#define ISAC_ADF1_FC2 0x04
-#define ISAC_ADF1_FC1 0x02
-#define ISAC_ADF1_ITF 0x01
-
-#define ISAC_ADF2_IMS 0x80
-/* all other bits are 0 */
-
-/* bits 7-5 are always 0 */
-#define ISAC_SQRR_SYN 0x10
-#define ISAC_SQRR_SQR1 0x08
-#define ISAC_SQRR_SQR2 0x04
-#define ISAC_SQRR_SQR3 0x02
-#define ISAC_SQRR_SQR4 0x01
-
-#define ISAC_SQXR_IDC 0x80
-#define ISAC_SQXR_CFS 0x40
-#define ISAC_SQXR_CI1E 0x20
-#define ISAC_SQXR_SQIE 0x10
-#define ISAC_SQXR_SQX1 0x08
-#define ISAC_SQXR_SQX2 0x04
-#define ISAC_SQXR_SQX3 0x02
-#define ISAC_SQXR_SQX4 0x01
-
-#endif /* I4B_ISAC_H_ */
diff --git a/sys/i4b/layer1/i4b_isic.c b/sys/i4b/layer1/i4b_isic.c
deleted file mode 100644
index 922df793c07a7..0000000000000
--- a/sys/i4b/layer1/i4b_isic.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isic.c - global isic stuff
- * ==============================
- *
- * $Id: i4b_isic.c,v 1.44 1998/12/20 11:07:59 hm Exp $
- *
- * last edit-date: [Fri Dec 18 12:14:07 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <sys/device.h>
-#if defined(__NetBSD__) && defined(amiga)
-#include <machine/bus.h>
-#else
-#include <dev/isa/isavar.h>
-#endif
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_ipac.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-void isic_settrace(int unit, int val);
-int isic_gettrace(int unit);
-
-#ifdef __FreeBSD__
-void isicintr_sc(struct isic_softc *sc);
-#if !(defined(__FreeBSD_version)) || (defined(__FreeBSD_version) && __FreeBSD_version >= 300006)
-void isicintr(int unit);
-#endif
-#else
-/* XXX - hack, going away soon! */
-struct isic_softc *isic_sc[ISIC_MAXUNIT];
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic - device driver interrupt routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-void
-isicintr_sc(struct isic_softc *sc)
-{
- isicintr(sc->sc_unit);
-}
-
-void
-isicintr(int unit)
-{
- register struct isic_softc *sc = &isic_sc[unit];
-#else
-int
-isicintr(void *arg)
-{
- struct isic_softc *sc = arg;
-#endif
-
- if(sc->sc_ipac == 0) /* HSCX/ISAC interupt routine */
- {
- u_char was_hscx_irq = 0;
- u_char was_isac_irq = 0;
-
- register u_char hscx_irq_stat;
- register u_char isac_irq_stat;
-
- for(;;)
- {
- /* get hscx irq status from hscx b ista */
- hscx_irq_stat =
- HSCX_READ(HSCX_CH_B, H_ISTA) & ~HSCX_B_IMASK;
-
- /* get isac irq status */
- isac_irq_stat = ISAC_READ(I_ISTA);
-
- /* do as long as there are pending irqs in the chips */
- if(!hscx_irq_stat && !isac_irq_stat)
- break;
-
- if(hscx_irq_stat & (HSCX_ISTA_RME | HSCX_ISTA_RPF |
- HSCX_ISTA_RSC | HSCX_ISTA_XPR |
- HSCX_ISTA_TIN | HSCX_ISTA_EXB))
- {
- isic_hscx_irq(sc, hscx_irq_stat,
- HSCX_CH_B,
- hscx_irq_stat & HSCX_ISTA_EXB);
- was_hscx_irq = 1;
- }
-
- if(hscx_irq_stat & (HSCX_ISTA_ICA | HSCX_ISTA_EXA))
- {
- isic_hscx_irq(sc,
- HSCX_READ(HSCX_CH_A, H_ISTA) & ~HSCX_A_IMASK,
- HSCX_CH_A,
- hscx_irq_stat & HSCX_ISTA_EXA);
- was_hscx_irq = 1;
- }
-
- if(isac_irq_stat)
- {
- isic_isac_irq(sc, isac_irq_stat); /* isac handler */
- was_isac_irq = 1;
- }
- }
-#ifndef amiga /* XXX should be: #if INTERUPTS_ARE_SHARED */
-#ifdef ELSA_QS1ISA
- if(sc->sc_cardtyp != CARD_TYPEP_ELSAQS1ISA)
- {
-#endif
- if((was_hscx_irq == 0) && (was_isac_irq == 0))
- DBGL1(L1_ERROR, "isicintr", ("WARNING: unit %d, No IRQ from HSCX/ISAC!\n", sc->sc_unit));
-#ifdef ELSA_QS1ISA
- }
-#endif
-#endif /* AMIGA */
-
- HSCX_WRITE(0, H_MASK, 0xff);
- ISAC_WRITE(I_MASK, 0xff);
- HSCX_WRITE(1, H_MASK, 0xff);
-
-#ifdef ELSA_QS1ISA
- DELAY(80);
-
- if(sc->sc_cardtyp == CARD_TYPEP_ELSAQS1ISA)
- if (sc->clearirq)
- {
- sc->clearirq(sc);
- }
-#else
- DELAY(100);
-#endif
-
- HSCX_WRITE(0, H_MASK, HSCX_A_IMASK);
- ISAC_WRITE(I_MASK, ISAC_IMASK);
- HSCX_WRITE(1, H_MASK, HSCX_B_IMASK);
-#ifndef __FreeBSD__
- return(was_hscx_irq || was_isac_irq);
-#endif
- }
- else /* IPAC interrupt routine */
- {
- register u_char ipac_irq_stat;
- register u_char was_ipac_irq = 0;
-
- for(;;)
- {
- /* get global irq status */
-
- ipac_irq_stat = (IPAC_READ(IPAC_ISTA)) & 0x3f;
-
- /* check hscx a */
-
- if(ipac_irq_stat & (IPAC_ISTA_ICA | IPAC_ISTA_EXA))
- {
- /* HSCX A interrupt */
- isic_hscx_irq(sc, HSCX_READ(HSCX_CH_A, H_ISTA),
- HSCX_CH_A,
- ipac_irq_stat & IPAC_ISTA_EXA);
- was_ipac_irq = 1;
- }
- if(ipac_irq_stat & (IPAC_ISTA_ICB | IPAC_ISTA_EXB))
- {
- /* HSCX B interrupt */
- isic_hscx_irq(sc, HSCX_READ(HSCX_CH_B, H_ISTA),
- HSCX_CH_B,
- ipac_irq_stat & IPAC_ISTA_EXB);
- was_ipac_irq = 1;
- }
- if(ipac_irq_stat & (IPAC_ISTA_ICD | IPAC_ISTA_EXD))
- {
- /* ISAC interrupt */
- isic_isac_irq(sc, ISAC_READ(I_ISTA));
- was_ipac_irq = 1;
- }
-
- /* do as long as there are pending irqs in the chip */
- if(!ipac_irq_stat)
- break;
- }
-
- if(was_ipac_irq == 0)
- DBGL1(L1_ERROR, "isicintr", ("WARNING: unit %d, No IRQ from IPAC!\n", sc->sc_unit));
-
- IPAC_WRITE(IPAC_MASK, 0xff);
- DELAY(50);
- IPAC_WRITE(IPAC_MASK, 0xc0);
-
-#ifndef __FreeBSD__
- return(was_ipac_irq);
-#endif
- }
-}
-
-/*---------------------------------------------------------------------------*
- * isic_settrace
- *---------------------------------------------------------------------------*/
-void
-isic_settrace(int unit, int val)
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
- sc->sc_trace = val;
-}
-
-/*---------------------------------------------------------------------------*
- * isic_gettrace
- *---------------------------------------------------------------------------*/
-int
-isic_gettrace(int unit)
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
- return(sc->sc_trace);
-}
-
-/*---------------------------------------------------------------------------*
- * isic_recovery - try to recover from irq lockup
- *---------------------------------------------------------------------------*/
-void
-isic_recover(struct isic_softc *sc)
-{
- u_char byte;
-
- /* get hscx irq status from hscx b ista */
-
- byte = HSCX_READ(HSCX_CH_B, H_ISTA);
-
- DBGL1(L1_ERROR, "isic_recover", ("HSCX B: ISTA = 0x%x\n", byte));
-
- if(byte & HSCX_ISTA_ICA)
- DBGL1(L1_ERROR, "isic_recover", ("HSCX A: ISTA = 0x%x\n", (u_char)HSCX_READ(HSCX_CH_A, H_ISTA)));
-
- if(byte & HSCX_ISTA_EXB)
- DBGL1(L1_ERROR, "isic_recover", ("HSCX B: EXIR = 0x%x\n", (u_char)HSCX_READ(HSCX_CH_B, H_EXIR)));
-
- if(byte & HSCX_ISTA_EXA)
- DBGL1(L1_ERROR, "isic_recover", ("HSCX A: EXIR = 0x%x\n", (u_char)HSCX_READ(HSCX_CH_A, H_EXIR)));
-
- /* get isac irq status */
-
- byte = ISAC_READ(I_ISTA);
-
- DBGL1(L1_ERROR, "isic_recover", (" ISAC: ISTA = 0x%x\n", byte));
-
- if(byte & ISAC_ISTA_EXI)
- DBGL1(L1_ERROR, "isic_recover", (" ISAC: EXIR = 0x%x\n", (u_char)ISAC_READ(I_EXIR)));
-
- if(byte & ISAC_ISTA_CISQ)
- {
- byte = ISAC_READ(I_CIRR);
-
- DBGL1(L1_ERROR, "isic_recover", (" ISAC: CISQ = 0x%x\n", byte));
-
- if(byte & ISAC_CIRR_SQC)
- DBGL1(L1_ERROR, "isic_recover", (" ISAC: SQRR = 0x%x\n", (u_char)ISAC_READ(I_SQRR)));
- }
-
- DBGL1(L1_ERROR, "isic_recover", ("HSCX B: IMASK = 0x%x\n", HSCX_B_IMASK));
- DBGL1(L1_ERROR, "isic_recover", ("HSCX A: IMASK = 0x%x\n", HSCX_A_IMASK));
-
- HSCX_WRITE(0, H_MASK, 0xff);
- HSCX_WRITE(1, H_MASK, 0xff);
- DELAY(100);
- HSCX_WRITE(0, H_MASK, HSCX_A_IMASK);
- HSCX_WRITE(1, H_MASK, HSCX_B_IMASK);
- DELAY(100);
-
- DBGL1(L1_ERROR, "isic_recover", (" ISAC: IMASK = 0x%x\n", ISAC_IMASK));
-
- ISAC_WRITE(I_MASK, 0xff);
- DELAY(100);
- ISAC_WRITE(I_MASK, ISAC_IMASK);
-}
-
-#endif /* NISIC > 0 */
-
diff --git a/sys/i4b/layer1/i4b_isic_isa.c b/sys/i4b/layer1/i4b_isic_isa.c
deleted file mode 100644
index c0e11b9a044f0..0000000000000
--- a/sys/i4b/layer1/i4b_isic_isa.c
+++ /dev/null
@@ -1,591 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isic_isa.c - ISA bus interface
- * ==================================
- *
- * $Id: i4b_isic_isa.c,v 1.14 1998/12/20 11:07:59 hm Exp $
- *
- * last edit-date: [Fri Dec 18 12:00:26 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <sys/device.h>
-#if defined(__NetBSD__) && defined(amiga)
-#include <machine/bus.h>
-#else
-#include <dev/isa/isavar.h>
-#endif
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_ipac.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-#ifdef __FreeBSD__
-
-#if !(defined(__FreeBSD_version)) || (defined(__FreeBSD_version) && __FreeBSD_version >= 300006)
-void isicintr ( int unit );
-#endif
-
-void isicintr_sc(struct isic_softc *sc);
-
-static int isicprobe(struct isa_device *dev);
-int isicattach(struct isa_device *dev);
-
-struct isa_driver isicdriver = {
- isicprobe,
- isicattach,
- "isic",
- 0
-};
-
-int next_isic_unit = 0;
-struct isic_softc isic_sc[ISIC_MAXUNIT];
-
-#else
-
-#ifdef NetBSD1_3
-#if NetBSD1_3 < 2
-struct cfdriver isic_cd = {
- NULL, "isic", DV_DULL
-};
-#endif
-#endif
-
-#if defined (__OpenBSD__)
-struct cfdriver isic_cd = {
- NULL, "isic", DV_DULL
-};
-#endif
-
-#endif
-
-/* parameter and format for message producing e.g. "isic0: " */
-
-#ifdef __FreeBSD__
-#define ISIC_FMT "isic%d: "
-#define ISIC_PARM dev->id_unit
-#define TERMFMT " "
-#else
-#define ISIC_FMT "%s: "
-#define ISIC_PARM sc->sc_dev.dv_xname
-#define TERMFMT "\n"
-#endif
-
-extern void isic_settrace(int unit, int val); /*XXX*/
-extern int isic_gettrace(int unit); /*XXX*/
-
-#ifdef __FreeBSD__
-/*---------------------------------------------------------------------------*
- * isic - non-pnp device driver probe routine
- *---------------------------------------------------------------------------*/
-static int
-isicprobe(struct isa_device *dev)
-{
- int ret = 0;
-
- if(dev->id_unit != next_isic_unit)
- {
- printf("isicprobe: Error: new unit (%d) != next_isic_unit (%d)!\n", dev->id_unit, next_isic_unit);
- return(0);
- }
-
- switch(dev->id_flags)
- {
-#ifdef TEL_S0_8
- case FLAG_TELES_S0_8:
- ret = isic_probe_s08(dev);
- break;
-#endif
-
-#ifdef TEL_S0_16
- case FLAG_TELES_S0_16:
- ret = isic_probe_s016(dev);
- break;
-#endif
-
-#ifdef TEL_S0_16_3
- case FLAG_TELES_S0_163:
- ret = isic_probe_s0163(dev);
- break;
-#endif
-
-#ifdef AVM_A1
- case FLAG_AVM_A1:
- ret = isic_probe_avma1(dev);
- break;
-#endif
-
-#ifdef USR_STI
- case FLAG_USR_ISDN_TA_INT:
- ret = isic_probe_usrtai(dev);
- break;
-#endif
-
-#ifdef ITKIX1
- case FLAG_ITK_IX1:
- ret = isic_probe_itkix1(dev);
- break;
-#endif
-
- default:
- break;
- }
- return(ret);
-}
-
-#else
-
-/*---------------------------------------------------------------------------*
- * isic - device driver probe routine, dummy for NetBSD/OpenBSD
- *---------------------------------------------------------------------------*/
-int
-isicprobe(struct isic_attach_args *args)
-{
- return 1;
-}
-
-#endif /* __FreeBSD__ */
-
-#ifdef __FreeBSD__
-
-/*---------------------------------------------------------------------------*
- * isic - non-pnp device driver attach routine
- *---------------------------------------------------------------------------*/
-int
-isicattach(struct isa_device *dev)
-{
- return(isic_realattach(dev, 0));
-}
-
-/*---------------------------------------------------------------------------*
- * isic - non-pnp and pnp device driver attach routine
- *---------------------------------------------------------------------------*/
-int
-isic_realattach(struct isa_device *dev, unsigned int iobase2)
-
-#else /* ! __FreeBSD__ */
-
-int
-isicattach(int flags, struct isic_softc *sc)
-
-#endif /* __FreeBSD__ */
-{
- int ret = 0;
- char *drvid;
-
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-#define PARM dev
-#define PARM2 dev, iobase2
-#define FLAGS dev->id_flags
-#else
-#define PARM sc
-#define PARM2 sc
-#define FLAGS flags
-#endif
-
- static char *ISACversion[] = {
- "2085 Version A1/A2 or 2086/2186 Version 1.1",
- "2085 Version B1",
- "2085 Version B2",
- "2085 Version V2.3 (B3)",
- "Unknown Version"
- };
-
- static char *HSCXversion[] = {
- "82525 Version A1",
- "Unknown (0x01)",
- "82525 Version A2",
- "Unknown (0x03)",
- "82525 Version A3",
- "82525 or 21525 Version 2.1",
- "Unknown Version"
- };
-
- /* done in bus specific attach code for other OS */
-
-#ifdef __FreeBSD__
- if(dev->id_unit != next_isic_unit)
- {
- printf("isicattach: Error: new unit (%d) != next_isic_unit (%d)!\n", dev->id_unit, next_isic_unit);
- return(0);
- }
-
- sc->sc_unit = dev->id_unit;
-#else
- isic_sc[sc->sc_unit] = sc;
-#endif
-
- /* card dependent setup */
- switch(FLAGS)
- {
-#ifdef DYNALINK
- case FLAG_DYNALINK:
- ret = isic_attach_Dyn(PARM2);
- break;
-#endif
-
-#ifdef TEL_S0_8
- case FLAG_TELES_S0_8:
- ret = isic_attach_s08(PARM);
- break;
-#endif
-
-#ifdef TEL_S0_16
- case FLAG_TELES_S0_16:
- ret = isic_attach_s016(PARM);
- break;
-#endif
-
-#ifdef TEL_S0_16_3
- case FLAG_TELES_S0_163:
- ret = isic_attach_s0163(PARM);
- break;
-#endif
-
-#ifdef AVM_A1
- case FLAG_AVM_A1:
- ret = isic_attach_avma1(PARM);
- break;
-#endif
-
-#ifdef USR_STI
- case FLAG_USR_ISDN_TA_INT:
- ret = isic_attach_usrtai(PARM);
- break;
-#endif
-
-#ifdef ITKIX1
- case FLAG_ITK_IX1:
- ret = isic_attach_itkix1(PARM);
- break;
-#endif
-
-/* ======================================================================
- * Only P&P cards follow below!!!
- */
-#ifdef __FreeBSD__ /* we've already splitted all non-ISA stuff
- out of this ISA specific part for the other
- OS */
-
-#ifdef AVM_PCMCIA
- case FLAG_AVM_A1_PCMCIA:
- ret = isic_attach_fritzpcmcia(PARM);
- break;
-#endif
-
-#ifndef __FreeBSD__
-#ifdef TEL_S0_16_3_P
- case FLAG_TELES_S0_163_PnP:
- ret = isic_attach_s0163P(PARM2);
- break;
-#endif
-#endif
-
-#ifdef CRTX_S0_P
- case FLAG_CREATIX_S0_PnP:
- ret = isic_attach_Cs0P(PARM2);
- break;
-#endif
-
-#ifdef DRN_NGO
- case FLAG_DRN_NGO:
- ret = isic_attach_drnngo(PARM2);
- break;
-#endif
-
-#ifdef SEDLBAUER
- case FLAG_SWS:
- ret = isic_attach_sws(PARM);
- break;
-#endif
-
-#ifdef ELSA_QS1ISA
- case FLAG_ELSA_QS1P_ISA:
- ret = isic_attach_Eqs1pi(PARM2);
- break;
-#endif
-
-#endif /* __FreeBSD__ / P&P specific part */
-
-/* --- XXX - don't know how to handle this - should be removed!!!! ---- */
-#ifdef amiga
- case FLAG_BLMASTER:
- ret = 1; /* full detection was done in caller */
- break;
-#endif
-/* ------------------------------------------------------------------- */
-
- default:
- break;
- }
-
- if(ret == 0)
- return(0);
-
- sc->sc_isac_version = 0;
- sc->sc_isac_version = ((ISAC_READ(I_RBCH)) >> 5) & 0x03;
-
- switch(sc->sc_isac_version)
- {
- case ISAC_VA:
- case ISAC_VB1:
- case ISAC_VB2:
- case ISAC_VB3:
- break;
-
- default:
- printf(ISIC_FMT "Error, ISAC version %d unknown!\n",
- ISIC_PARM, sc->sc_isac_version);
- return(0);
- break;
- }
-
- sc->sc_hscx_version = HSCX_READ(0, H_VSTR) & 0xf;
-
- switch(sc->sc_hscx_version)
- {
- case HSCX_VA1:
- case HSCX_VA2:
- case HSCX_VA3:
- case HSCX_V21:
- break;
-
- default:
- printf(ISIC_FMT "Error, HSCX version %d unknown!\n",
- ISIC_PARM, sc->sc_hscx_version);
- return(0);
- break;
- };
-
- /* ISAC setup */
-
- isic_isac_init(sc);
-
- /* HSCX setup */
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_A, BPROT_NONE, 0);
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_B, BPROT_NONE, 0);
-
- /* setup linktab */
-
- isic_init_linktab(sc);
-
- /* set trace level */
-
- sc->sc_trace = TRACE_OFF;
-
- sc->sc_state = ISAC_IDLE;
-
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
-
- sc->sc_obuf = NULL;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
- sc->sc_freeflag = 0;
-
- sc->sc_obuf2 = NULL;
- sc->sc_freeflag2 = 0;
-
-#if defined(__FreeBSD__) && __FreeBSD__ >=3
- callout_handle_init(&sc->sc_T3_callout);
- callout_handle_init(&sc->sc_T4_callout);
-#endif
-
- /* init higher protocol layers */
-
- MPH_Status_Ind(sc->sc_unit, STI_ATTACH, sc->sc_cardtyp);
-
- /* announce manufacturer and card type */
-
- switch(FLAGS)
- {
- case FLAG_TELES_S0_8:
- drvid = "Teles S0/8 or Niccy 1008";
- break;
-
- case FLAG_TELES_S0_16:
- drvid = "Teles S0/16, Creatix ISDN S0-16 or Niccy 1016";
- break;
-
- case FLAG_TELES_S0_163:
- drvid = "Teles S0/16.3";
- break;
-
- case FLAG_AVM_A1:
- drvid = "AVM A1 or AVM Fritz!Card";
- break;
-
- case FLAG_AVM_A1_PCMCIA:
- drvid = "AVM PCMCIA Fritz!Card";
- break;
-
- case FLAG_TELES_S0_163_PnP:
- drvid = "Teles S0/PnP";
- break;
-
- case FLAG_CREATIX_S0_PnP:
- drvid = "Creatix ISDN S0-16 P&P";
- break;
-
- case FLAG_USR_ISDN_TA_INT:
- drvid = "USRobotics Sportster ISDN TA intern";
- break;
-
- case FLAG_DRN_NGO:
- drvid = "Dr. Neuhaus NICCY Go@";
- break;
-
- case FLAG_DYNALINK:
- drvid = "Dynalink IS64PH";
- break;
-
- case FLAG_SWS:
- drvid = "Sedlbauer WinSpeed";
- break;
-
- case FLAG_BLMASTER:
- /* board announcement was done by caller */
- drvid = (char *)0;
- break;
-
- case FLAG_ELSA_QS1P_ISA:
- drvid = "ELSA QuickStep 1000pro (ISA)";
- break;
-
- case FLAG_ITK_IX1:
- drvid = "ITK ix1 micro";
- break;
-
- default:
- drvid = "ERROR, unknown flag used";
- break;
- }
-#ifndef __FreeBSD__
- printf("\n");
-#endif
- if (drvid)
- printf(ISIC_FMT "%s\n", ISIC_PARM, drvid);
-
- /* announce chip versions */
-
- if(sc->sc_isac_version >= ISAC_UNKN)
- {
- printf(ISIC_FMT "ISAC Version UNKNOWN (VN=0x%x)" TERMFMT,
- ISIC_PARM,
- sc->sc_isac_version);
- sc->sc_isac_version = ISAC_UNKN;
- }
- else
- {
- printf(ISIC_FMT "ISAC %s (IOM-%c)" TERMFMT,
- ISIC_PARM,
- ISACversion[sc->sc_isac_version],
- sc->sc_bustyp == BUS_TYPE_IOM1 ? '1' : '2');
- }
-
-#ifdef __FreeBSD__
- printf("(Addr=0x%lx)\n", (u_long)ISAC_BASE);
-#endif
-
- if(sc->sc_hscx_version >= HSCX_UNKN)
- {
- printf(ISIC_FMT "HSCX Version UNKNOWN (VN=0x%x)" TERMFMT,
- ISIC_PARM,
- sc->sc_hscx_version);
- sc->sc_hscx_version = HSCX_UNKN;
- }
- else
- {
- printf(ISIC_FMT "HSCX %s" TERMFMT,
- ISIC_PARM,
- HSCXversion[sc->sc_hscx_version]);
- }
-
-#ifdef __FreeBSD__
- printf("(AddrA=0x%lx, AddrB=0x%lx)\n", (u_long)HSCX_A_BASE, (u_long)HSCX_B_BASE);
-
- next_isic_unit++;
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300003
-
- /* set the interrupt handler - no need to change isa_device.h */
- dev->id_intr = (inthand2_t *)isicintr;
-
-#endif
-
-#endif /* __FreeBSD__ */
-
- return(1);
-#undef PARM
-#undef FLAGS
-}
-
-#endif /* NISIC > 0 */
diff --git a/sys/i4b/layer1/i4b_isic_pci.c b/sys/i4b/layer1/i4b_isic_pci.c
deleted file mode 100644
index bd6d4fd923718..0000000000000
--- a/sys/i4b/layer1/i4b_isic_pci.c
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isic_pci.c - PCI bus interface
- * ==================================
- *
- * $Id: i4b_isic_pci.c,v 1.1 1998/12/27 21:46:46 phk Exp $
- *
- * last edit-date: [Sat Dec 5 18:24:36 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "isic.h"
-
-#if defined(__FreeBSD__)
-#include "opt_i4b.h"
-#include "pci.h"
-#endif
-
-#if (NISIC > 0) && (NPCI > 0)
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#if __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#include <pci/pcireg.h>
-#include <pci/pcivar.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_ipac.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#define PCI_QS1000_ID 0x10001048
-
-#define MEM0_MAPOFF 0
-#define PORT0_MAPOFF 4
-#define PORT1_MAPOFF 12
-
-static const char* i4b_pci_probe(pcici_t tag, pcidi_t type);
-static void i4b_pci_attach(pcici_t config_id, int unit);
-static int isic_pciattach(int unit, u_long type, u_int iobase1, u_int iobase2);
-
-static u_long i4b_pci_count = 0;
-
-static struct pci_device i4b_pci_driver = {
- "isic",
- i4b_pci_probe,
- i4b_pci_attach,
- &i4b_pci_count,
- NULL
-};
-
-DATA_SET (pcidevice_set, i4b_pci_driver);
-
-static void isic_pci_intr_sc(struct isic_softc *sc);
-
-
-/*---------------------------------------------------------------------------*
- * PCI probe routine
- *---------------------------------------------------------------------------*/
-static const char *
-i4b_pci_probe(pcici_t tag, pcidi_t type)
-{
- switch(type)
- {
- case PCI_QS1000_ID:
- return("ELSA QuickStep 1000pro PCI ISDN adaptor");
- break;
-
- default:
- if(bootverbose)
- printf("i4b_pci_probe: unknown PCI type %ul!\n", (u_int)type);
- return(NULL);
- }
- return(NULL);
-}
-
-/*---------------------------------------------------------------------------*
- * PCI attach routine
- *---------------------------------------------------------------------------*/
-static void
-i4b_pci_attach(pcici_t config_id, int unit)
-{
- unsigned short iobase1;
- unsigned short iobase2;
- unsigned long type;
- struct isic_softc *sc = &isic_sc[unit];
-
- if(unit != next_isic_unit)
- {
- printf("i4b_pci_attach: Error: new unit (%d) != next_isic_unit (%d)!\n", unit, next_isic_unit);
- return;
- }
-
- if(!(pci_map_port(config_id, PCI_MAP_REG_START+PORT0_MAPOFF, &iobase1)))
- {
- printf("i4b_pci_attach: pci_map_port 1 failed!\n");
- return;
- }
-
- if(!(pci_map_port(config_id, PCI_MAP_REG_START+PORT1_MAPOFF, &iobase2)))
- {
- printf("i4b_pci_attach: pci_map_port 2 failed!\n");
- return;
- }
-
- if(bootverbose)
- printf("i4b_pci_attach: unit %d, port0 0x%x, port1 0x%x\n", unit, iobase1, iobase2);
-
- type = pci_conf_read(config_id, PCI_ID_REG);
-
- if((isic_pciattach(unit, type, iobase1, iobase2)) == 0)
- return;
-
- if(!(pci_map_int(config_id, (void *)isic_pci_intr_sc, (void *)sc, &net_imask)))
- return;
-}
-
-/*---------------------------------------------------------------------------*
- * isic - pci device driver attach routine
- *---------------------------------------------------------------------------*/
-static int
-isic_pciattach(int unit, u_long type, u_int iobase1, u_int iobase2)
-{
- int ret = 0;
- struct isic_softc *sc = &isic_sc[unit];
-
- static char *ISACversion[] = {
- "2085 Version A1/A2 or 2086/2186 Version 1.1",
- "2085 Version B1",
- "2085 Version B2",
- "2085 Version V2.3 (B3)",
- "Unknown Version"
- };
-
- static char *HSCXversion[] = {
- "82525 Version A1",
- "Unknown (0x01)",
- "82525 Version A2",
- "Unknown (0x03)",
- "82525 Version A3",
- "82525 or 21525 Version 2.1",
- "Unknown Version"
- };
-
- switch(type)
- {
-#ifdef ELSA_QS1PCI
- case PCI_QS1000_ID:
- ret = isic_attach_Eqs1pp(unit, iobase1, iobase2);
- break;
-#endif
- default:
- break;
- }
-
- if(ret == 0)
- return(ret);
-
- sc->sc_isac_version = 0;
- sc->sc_hscx_version = 0;
-
- sc->sc_unit = unit;
-
- if(sc->sc_ipac)
- {
- ret = IPAC_READ(IPAC_ID);
-
- switch(ret)
- {
- case 0x01:
- printf("isic%d: IPAC PSB2115 Version 1.1\n", unit);
- break;
-
- default:
- printf("isic%d: Error, IPAC version %d unknown!\n",
- unit, ret);
- return(0);
- break;
- }
- }
- else
- {
- sc->sc_isac_version = ((ISAC_READ(I_RBCH)) >> 5) & 0x03;
-
- switch(sc->sc_isac_version)
- {
- case ISAC_VA:
- case ISAC_VB1:
- case ISAC_VB2:
- case ISAC_VB3:
- printf("isic%d: ISAC %s (IOM-%c)\n",
- unit,
- ISACversion[sc->sc_isac_version],
- sc->sc_bustyp == BUS_TYPE_IOM1 ? '1' : '2');
- break;
-
- default:
- printf("isic%d: Error, ISAC version %d unknown!\n",
- unit, sc->sc_isac_version);
- return(0);
- break;
- }
-
- sc->sc_hscx_version = HSCX_READ(0, H_VSTR) & 0xf;
-
- switch(sc->sc_hscx_version)
- {
- case HSCX_VA1:
- case HSCX_VA2:
- case HSCX_VA3:
- case HSCX_V21:
- printf("isic%d: HSCX %s\n",
- unit,
- HSCXversion[sc->sc_hscx_version]);
- break;
-
- default:
- printf("isic%d: Error, HSCX version %d unknown!\n",
- unit, sc->sc_hscx_version);
- return(0);
- break;
- }
- }
-
- /* ISAC setup */
-
- isic_isac_init(sc);
-
- /* HSCX setup */
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_A, BPROT_NONE, 0);
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_B, BPROT_NONE, 0);
-
- /* setup linktab */
-
- isic_init_linktab(sc);
-
- /* set trace level */
-
- sc->sc_trace = TRACE_OFF;
-
- sc->sc_state = ISAC_IDLE;
-
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
-
- sc->sc_obuf = NULL;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
- sc->sc_freeflag = 0;
-
- sc->sc_obuf2 = NULL;
- sc->sc_freeflag2 = 0;
-
-#if defined(__FreeBSD__) && __FreeBSD__ >=3
- callout_handle_init(&sc->sc_T3_callout);
- callout_handle_init(&sc->sc_T4_callout);
-#endif
-
- /* init higher protocol layers */
-
- MPH_Status_Ind(sc->sc_unit, STI_ATTACH, sc->sc_cardtyp);
-
- next_isic_unit++;
-
- return(1);
-}
-
-/*---------------------------------------------------------------------------*
- * isic - PCI device driver interrupt routine
- *---------------------------------------------------------------------------*/
-static void
-isic_pci_intr_sc(struct isic_softc *sc)
-{
- if(sc->sc_ipac == 0) /* HSCX/ISAC interupt routine */
- {
- register u_char hscx_irq_stat;
- register u_char isac_irq_stat;
-
- for(;;)
- {
- /* get hscx irq status from hscx b ista */
- hscx_irq_stat =
- HSCX_READ(HSCX_CH_B, H_ISTA) & ~HSCX_B_IMASK;
-
- /* get isac irq status */
- isac_irq_stat = ISAC_READ(I_ISTA);
-
- /* do as long as there are pending irqs in the chips */
- if(!hscx_irq_stat && !isac_irq_stat)
- break;
-
- if(hscx_irq_stat & (HSCX_ISTA_RME | HSCX_ISTA_RPF |
- HSCX_ISTA_RSC | HSCX_ISTA_XPR |
- HSCX_ISTA_TIN | HSCX_ISTA_EXB))
- {
- isic_hscx_irq(sc, hscx_irq_stat,
- HSCX_CH_B,
- hscx_irq_stat & HSCX_ISTA_EXB);
- }
-
- if(hscx_irq_stat & (HSCX_ISTA_ICA | HSCX_ISTA_EXA))
- {
- isic_hscx_irq(sc,
- HSCX_READ(HSCX_CH_A, H_ISTA) & ~HSCX_A_IMASK,
- HSCX_CH_A,
- hscx_irq_stat & HSCX_ISTA_EXA);
- }
-
- if(isac_irq_stat)
- { /* isac handler */
- isic_isac_irq(sc, isac_irq_stat);
- }
- }
-
- HSCX_WRITE(0, H_MASK, 0xff);
- ISAC_WRITE(I_MASK, 0xff);
- HSCX_WRITE(1, H_MASK, 0xff);
-
- DELAY(100);
-
- HSCX_WRITE(0, H_MASK, HSCX_A_IMASK);
- ISAC_WRITE(I_MASK, ISAC_IMASK);
- HSCX_WRITE(1, H_MASK, HSCX_B_IMASK);
- }
- else /* IPAC interrupt routine */
- {
- register u_char ipac_irq_stat;
-
- for(;;)
- {
- /* get global irq status */
-
- ipac_irq_stat = (IPAC_READ(IPAC_ISTA)) & 0x3f;
-
- /* do as long as there are pending irqs in the chip */
- if(!ipac_irq_stat)
- break;
-
- /* check hscx a */
-
- if(ipac_irq_stat & (IPAC_ISTA_ICA | IPAC_ISTA_EXA))
- {
- /* HSCX A interrupt */
- isic_hscx_irq(sc, HSCX_READ(HSCX_CH_A, H_ISTA),
- HSCX_CH_A,
- ipac_irq_stat & IPAC_ISTA_EXA);
- }
- if(ipac_irq_stat & (IPAC_ISTA_ICB | IPAC_ISTA_EXB))
- {
- /* HSCX B interrupt */
- isic_hscx_irq(sc, HSCX_READ(HSCX_CH_B, H_ISTA),
- HSCX_CH_B,
- ipac_irq_stat & IPAC_ISTA_EXB);
- }
- if(ipac_irq_stat & (IPAC_ISTA_ICD | IPAC_ISTA_EXD))
- {
- /* ISAC interrupt */
- isic_isac_irq(sc, ISAC_READ(I_ISTA));
- }
- }
-
- IPAC_WRITE(IPAC_MASK, 0xff);
- DELAY(50);
- IPAC_WRITE(IPAC_MASK, 0xc0);
- }
-}
-
-#endif /* (NISIC > 0) && (NPCI > 0) */
-
diff --git a/sys/i4b/layer1/i4b_isic_pcmcia.c b/sys/i4b/layer1/i4b_isic_pcmcia.c
deleted file mode 100644
index e20964cc92fc4..0000000000000
--- a/sys/i4b/layer1/i4b_isic_pcmcia.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 1998 Matthias Apitz. All rights reserved.
- *
- * Copyright (c) 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isic_pcmcia.c - i4b FreeBSD PCMCIA support
- * ----------------------------------------------
- *
- * $Id: i4b_isic_pcmcia.c,v 1.2 1999/01/12 11:04:59 eivind Exp $
- *
- * last edit-date: [Mon Dec 14 17:30:09 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-
-#include "isic.h"
-#include "opt_i4b.h"
-#include "card.h"
-
-#if (NISIC > 0) && (NCARD > 0)
-
-#include "apm.h"
-#include <sys/param.h>
-#include <sys/select.h>
-#include <i386/isa/isa_device.h>
-
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/module.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-
-#include <pccard/cardinfo.h>
-#include <pccard/slot.h>
-#include <pccard/driver.h>
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-extern int isicattach(struct isa_device *dev);
-extern void isicintr(int unit);
-
-/*
- * PC-Card (PCMCIA) specific code.
- */
-static int isic_pccard_init __P((struct pccard_devinfo *));
-static void isic_unload __P((struct pccard_devinfo *));
-static int isic_card_intr __P((struct pccard_devinfo *));
-
-PCCARD_MODULE(isic, isic_pccard_init, isic_unload, isic_card_intr, 0,net_imask);
-
-/*
- * Initialize the device - called from Slot manager.
- */
-
-static int opened = 0; /* our cards status */
-
-static int isic_pccard_init(devi)
-struct pccard_devinfo *devi;
-{
- struct isa_device *is = &devi->isahd;
-
- if ((1 << is->id_unit) & opened)
- return(EBUSY);
-
- opened |= 1 << is->id_unit;
- printf("isic%d: PCMCIA init, irqmask = 0x%x (%d), iobase = 0x%x\n",
- is->id_unit, is->id_irq, devi->slt->irq, is->id_iobase);
-
-#if 0
- /* XXX: problems resolving isic_probe_avma1_pcmcia() /phk */
- /*
- * look if there is really an AVM PCMCIA Fritz!Card and
- * setup the card specific stuff
- */
- isic_probe_avma1_pcmcia(is);
-#endif
-
- /* ap:
- * XXX what's to do with the return value?
- */
-
- /*
- * try to attach the PCMCIA card as a normal A1 card
- */
- isicattach(is);
- return(0);
-}
-
-static void isic_unload(devi)
-struct pccard_devinfo *devi;
-{
- struct isa_device *is = &devi->isahd;
- printf("isic%d: unloaded\n", is->id_unit);
- opened &= ~(1 << is->id_unit);
-}
-
-/*
- * card_intr - Shared interrupt called from
- * front end of PC-Card handler.
- */
-static int isic_card_intr(devi)
-struct pccard_devinfo *devi;
-{
- isicintr(devi->isahd.id_unit);
- return(1);
-}
-
-#endif /* (NISIC > 0) && (NCARD > 0) */
-#endif /* __FreeBSD__ */
diff --git a/sys/i4b/layer1/i4b_isic_pnp.c b/sys/i4b/layer1/i4b_isic_pnp.c
deleted file mode 100644
index ed1892d9088f3..0000000000000
--- a/sys/i4b/layer1/i4b_isic_pnp.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Copyright (c) 1998 Eivind Eklund. All rights reserved.
- *
- * Copyright (c) 1998 German Tischler. All rights reserved.
- *
- * Copyright (c) 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isic_pnp.c - i4b pnp support
- * --------------------------------
- *
- * $Id: i4b_isic_pnp.c,v 1.15 1998/12/20 11:07:59 hm Exp $
- *
- * last edit-date: [Fri Dec 18 20:54:56 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-
-#include "pnp.h"
-#include "isic.h"
-#include "opt_i4b.h"
-
-#if (NISIC > 0) && (NPNP > 0)
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#if defined(__FreeBSD__) && __FreeBSD__ < 3
-#include "ioconf.h"
-extern void isicintr(int unit); /* XXX this gives a compiler warning */
- /* on one 2.2.7 machine but no */
- /* warning on another one !? (-hm) */
-#endif
-
-#if (defined(__FreeBSD_version) && __FreeBSD_version >= 300006)
-extern void isicintr(int unit);
-#endif
-
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#include <i386/isa/pnp.h>
-
-#include <i4b/include/i4b_global.h>
-#include <machine/i4b_ioctl.h>
-#include <i4b/layer1/i4b_l1.h>
-
-#define VID_TEL163PNP 0x10212750 /* Teles 16.3 PnP */
-#define VID_CREATIXPP 0x0000980e /* Creatix S0/16 P+P */
-#define VID_DYNALINK 0x88167506 /* Dynalink */
-#define VID_SEDLBAUER 0x0100274c /* Sedlbauer WinSpeed */
-#define VID_NICCYGO 0x5001814c /* Neuhaus Niccy GO@ */
-#define VID_ELSAQS1P 0x33019315 /* ELSA Quickstep1000pro*/
-
-static struct i4b_pnp_ids {
- u_long vend_id;
- char *id_str;
-} i4b_pnp_ids[] = {
- { VID_TEL163PNP, "Teles 16.3 PnP" },
- { VID_CREATIXPP, "Creatix S0/16 P+P" },
- { VID_DYNALINK, "Dynalink IS64PH" },
- { VID_SEDLBAUER, "Sedlbauer WinSpeed" },
- { VID_NICCYGO, "Dr.Neuhaus Niccy Go@" },
- { VID_ELSAQS1P, "ELSA QuickStep 1000pro"},
- { 0 }
-};
-
-extern struct isa_driver isicdriver;
-
-static int isic_pnpprobe(struct isa_device *dev, unsigned int iobase2);
-static char *i4b_pnp_probe(u_long csn, u_long vend_id);
-static void i4b_pnp_attach(u_long csn, u_long vend_id, char *name, struct isa_device *dev);
-
-static u_long ni4b_pnp = 0;
-
-static struct pnp_device i4b_pnp = {
- "i4b_pnp",
- i4b_pnp_probe,
- i4b_pnp_attach,
- &ni4b_pnp,
- &net_imask
-};
-
-DATA_SET(pnpdevice_set, i4b_pnp);
-
-/*---------------------------------------------------------------------------*
- * PnP probe routine
- *---------------------------------------------------------------------------*/
-static char *
-i4b_pnp_probe(u_long csn, u_long vend_id)
-{
- struct i4b_pnp_ids *ids;
- char *string = NULL;
-
- /* search table of knowd id's */
-
- for(ids = i4b_pnp_ids; ids->vend_id != 0; ids++)
- {
- if(vend_id == ids->vend_id)
- {
- string = ids->id_str;
- break;
- }
- }
-
- if(string)
- {
- struct pnp_cinfo spci;
-
- read_pnp_parms(&spci, 0);
-
- if((spci.enable == 0) || (spci.flags & 0x01))
- {
- printf("CSN %d (%s) is disabled.\n", (int)csn, string);
- return (NULL);
- }
- }
- return(string);
-}
-
-/*---------------------------------------------------------------------------*
- * PnP attach routine
- *---------------------------------------------------------------------------*/
-static void
-i4b_pnp_attach(u_long csn, u_long vend_id, char *name, struct isa_device *dev)
-{
- struct pnp_cinfo spci;
- struct isa_device *isa_devp;
-
- if(dev->id_unit != next_isic_unit)
- {
- printf("i4b_pnp_attach: Error: new unit (%d) != next_isic_unit (%d)!\n", dev->id_unit, next_isic_unit);
- return;
- }
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for %s\n",
- dev->id_unit, dev->id_unit, name);
- return;
- }
-
- if(read_pnp_parms(&spci, 0) == 0)
- {
- printf("isic%d: read_pnp_parms error for %s\n",
- dev->id_unit, name);
- return;
- }
-
- if(bootverbose)
- {
- printf("isic%d: vendorid = 0x%08x port0 = 0x%04x, port1 = 0x%04x, irq = %d\n",
- dev->id_unit, spci.vendor_id, spci.port[0], spci.port[1], spci.irq[0]);
- }
-
- dev->id_iobase = spci.port[0];
- dev->id_irq = (1 << spci.irq[0]);
- dev->id_intr = (inthand2_t *) isicintr;
- dev->id_drq = -1;
-
-/* XXX add dev->id_alive init here ! ?? */
-
- switch(spci.vendor_id)
- {
- case VID_TEL163PNP:
- dev->id_flags = FLAG_TELES_S0_163_PnP;
- break;
- case VID_CREATIXPP:
- dev->id_flags = FLAG_CREATIX_S0_PnP;
- break;
- case VID_DYNALINK:
- dev->id_flags = FLAG_DYNALINK;
- break;
- case VID_SEDLBAUER:
- dev->id_flags = FLAG_SWS;
- break;
- case VID_NICCYGO:
- dev->id_flags = FLAG_DRN_NGO;
- break;
- case VID_ELSAQS1P:
- dev->id_flags = FLAG_ELSA_QS1P_ISA;
- break;
- }
-
- write_pnp_parms(&spci, 0);
- enable_pnp_card();
-
- if(dev->id_driver == NULL)
- {
- dev->id_driver = &isicdriver;
-
- isa_devp = find_isadev(isa_devtab_net, &isicdriver, 0);
-
- if(isa_devp != NULL)
- {
- dev->id_id = isa_devp->id_id;
- }
- }
-
- if((dev->id_alive = isic_pnpprobe(dev, spci.port[1])) != 0)
- {
-/* XXX dev->id_alive is the size of the port area used ! */
- isic_realattach(dev, spci.port[1]);
- }
- else
- {
- printf("isic%d: probe failed!\n", dev->id_unit);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * isic - pnp device driver probe routine
- *---------------------------------------------------------------------------*/
-static int
-isic_pnpprobe(struct isa_device *dev, unsigned int iobase2)
-{
- int ret = 0;
-
- switch(dev->id_flags)
- {
-#ifndef __FreeBSD__
-#ifdef TEL_S0_16_3_P
- case FLAG_TELES_S0_163_PnP:
- ret = isic_probe_s0163P(dev, iobase2);
- break;
-#endif
-#endif
-
-#ifdef CRTX_S0_P
- case FLAG_CREATIX_S0_PnP:
- ret = isic_probe_Cs0P(dev, iobase2);
- break;
-#endif
-
-#ifdef DRN_NGO
- case FLAG_DRN_NGO:
- ret = isic_probe_drnngo(dev, iobase2);
- break;
-#endif
-
-#ifdef SEDLBAUER
- case FLAG_SWS:
- ret = 8; /* pnp only, nothing to probe */
- break;
-#endif
-
-#ifdef DYNALINK
- case FLAG_DYNALINK:
- ret = isic_probe_Dyn(dev, iobase2);
- break;
-#endif
-
-#ifdef ELSA_QS1ISA
- case FLAG_ELSA_QS1P_ISA:
- ret = isic_probe_Eqs1pi(dev, iobase2);
- break;
-#endif
- default:
- break;
- }
- return(ret);
-}
-
-#endif /* (NISIC > 0) && (NPNP > 0) */
-#endif /* __FreeBSD__ */
diff --git a/sys/i4b/layer1/i4b_itk_ix1.c b/sys/i4b/layer1/i4b_itk_ix1.c
deleted file mode 100644
index cd70dbf9ee074..0000000000000
--- a/sys/i4b/layer1/i4b_itk_ix1.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Copyright (c) 1998 Martin Husemann <martin@rumolt.teuto.de>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. The name of the author may not be used to endorse or promote products
- * derived from this software withough specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_itk_ix1.c - ITK ix1 micro passive card driver for isdn4bsd
- * --------------------------------------------------------------
- *
- * $Id: i4b_itk_ix1.c,v 1.1 1998/12/27 21:46:46 phk Exp $
- *
- * last edit-date: [Wed Dec 16 14:46:36 1998]
- *
- *---------------------------------------------------------------------------
- *
- * The ITK ix1 micro ISDN card is an ISA card with one region
- * of four io ports mapped and a fixed irq all jumpered on the card.
- * Access to the board is straight forward and simmilar to
- * the ELSA and DYNALINK cards. If a PCI version of this card
- * exists all we need is probably a pci-bus attachment, all
- * this low level routines should work imediately.
- *
- * To reset the card:
- * - write 0x01 to ITK_CONFIG
- * - wait >= 10 ms
- * - write 0x00 to ITK_CONFIG
- *
- * To read or write data:
- * - write address to ITK_ALE port
- * - read data from or write data to ITK_ISAC_DATA port or ITK_HSCX_DATA port
- * The two HSCX channel registers are offset by HSCXA (0x00) and HSCXB (0x40).
- *
- * XXX - A reasonable probe routine has to be written.
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0 && defined(ITKIX1)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-
-#define ITK_ISAC_DATA 0
-#define ITK_HSCX_DATA 1
-#define ITK_ALE 2
-#define ITK_CONFIG 3
-#define ITK_IO_SIZE 4
-
-#define HSCXA 0
-#define HSCXB 0x40
-
-#ifndef __FreeBSD__
-static void itkix1_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size);
-static void itkix1_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size);
-static void itkix1_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data);
-static u_int8_t itkix1_read_reg(struct isic_softc *sc, int what, bus_size_t offs);
-#else
-static u_char itkix1_read_reg(u_char *base, u_int offset);
-static void itkix1_write_reg(u_char *base, u_int offset, u_int v);
-static void itkix1_read_fifo(void *base, const void *buf, size_t len);
-static void itkix1_write_fifo(void *base, const void *buf, size_t len);
-#endif
-
-/*
- * Probe for card
- */
-#ifdef __FreeBSD__
-int
-isic_probe_itkix1(struct isa_device *dev)
-{
- u_int8_t hd, cd;
- int ret;
-
- hd = inb(dev->id_iobase + ITK_HSCX_DATA);
- cd = inb(dev->id_iobase + ITK_CONFIG);
-
- ret = (hd == 0 && cd == 0xfc);
-
-#define ITK_PROBE_DEBUG
-#ifdef ITK_PROBE_DEBUG
- printf("\nITK ix1 micro probe: hscx = 0x%02x, config = 0x%02x, would have %s\n",
- hd, cd, ret ? "succeeded" : "failed");
- return 1;
-#else
- return ret;
-#endif
-}
-#else
-int
-isic_probe_itkix1(struct isic_attach_args *ia)
-{
- bus_space_tag_t t = ia->ia_maps[0].t;
- bus_space_handle_t h = ia->ia_maps[0].h;
- u_int8_t hd, cd;
- int ret;
-
- hd = bus_space_read_1(t, h, ITK_HSCX_DATA);
- cd = bus_space_read_1(t, h, ITK_CONFIG);
-
- ret = (hd == 0 && cd == 0xfc);
-
-#define ITK_PROBE_DEBUG
-#ifdef ITK_PROBE_DEBUG
- printf("\nITK ix1 micro probe: hscx = 0x%02x, config = 0x%02x, would have %s\n",
- hd, cd, ret ? "succeeded" : "failed");
- return 1;
-#else
- return ret;
-#endif
-}
-#endif
-
-/*
- * Attach card
- */
-#ifdef __FreeBSD__
-int
-isic_attach_itkix1(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- sc->sc_irq = dev->id_irq;
-
- dev->id_msize = 0;
-
- /* check if we got an iobase */
- sc->sc_port = dev->id_iobase;
-
- /* setup access routines */
- sc->clearirq = NULL;
- sc->readreg = itkix1_read_reg;
- sc->writereg = itkix1_write_reg;
- sc->readfifo = itkix1_read_fifo;
- sc->writefifo = itkix1_write_fifo;
-
- /* setup card type */
- sc->sc_cardtyp = CARD_TYPEP_ITKIX1;
-
- /* setup IOM bus type */
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
- ISAC_BASE = (caddr_t) sc->sc_port;
- HSCX_A_BASE = (caddr_t) sc->sc_port + 1;
- HSCX_B_BASE = (caddr_t) sc->sc_port + 2;
-
- /* Read HSCX A/B VSTR. Expected value is 0x05 (V2.1). */
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) || ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("isic%d: HSCX VSTR test failed for ITK ix1 micro\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- outb((dev->id_iobase)+ITK_CONFIG, 1);
- DELAY(SEC_DELAY / 10);
- outb((dev->id_iobase)+ITK_CONFIG, 0);
- DELAY(SEC_DELAY / 10);
- return(1);
-}
-
-#else
-
-int isic_attach_itkix1(struct isic_softc *sc)
-{
- /* setup access routines */
- sc->clearirq = NULL;
- sc->readreg = itkix1_read_reg;
- sc->writereg = itkix1_write_reg;
- sc->readfifo = itkix1_read_fifo;
- sc->writefifo = itkix1_write_fifo;
-
- /* setup card type */
- sc->sc_cardtyp = CARD_TYPEP_ITKIX1;
-
- /* setup IOM bus type */
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* Read HSCX A/B VSTR. Expected value is 0x05 (V2.1). */
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) || ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("%s: HSCX VSTR test failed for ITK ix1 micro\n",
- sc->sc_dev.dv_xname);
- printf("%s: HSC0: VSTR: %#x\n",
- sc->sc_dev.dv_xname, HSCX_READ(0, H_VSTR));
- printf("%s: HSC1: VSTR: %#x\n",
- sc->sc_dev.dv_xname, HSCX_READ(1, H_VSTR));
- return 0;
- }
-
- bus_space_write_1(sc->sc_maps[0].t, sc->sc_maps[0].h, ITK_CONFIG, 1);
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(sc->sc_maps[0].t, sc->sc_maps[0].h, ITK_CONFIG, 0);
- DELAY(SEC_DELAY / 10);
- return 1;
-}
-
-#endif
-
-#ifdef __FreeBSD__
-static void
-itkix1_read_fifo(void *buf, const void *base, size_t len)
-{
- int port = (u_long)base & ~0x0003;
- switch ((u_long)base & 3) {
- case 0: /* ISAC */
- outb(port+ITK_ALE, 0);
- insb(port+ITK_ISAC_DATA, (u_char *)buf, (u_int)len);
- break;
- case 1: /* HSCXA */
- outb(port+ITK_ALE, HSCXA);
- insb(port+ITK_HSCX_DATA, (u_char *)buf, (u_int)len);
- break;
- case 2: /* HSCXB */
- outb(port+ITK_ALE, HSCXB);
- insb(port+ITK_HSCX_DATA, (u_char *)buf, (u_int)len);
- break;
- }
-}
-#else
-static void
-itkix1_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ITK_ALE, 0);
- bus_space_read_multi_1(t, h, ITK_ISAC_DATA, buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ITK_ALE, HSCXA);
- bus_space_read_multi_1(t, h, ITK_HSCX_DATA, buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ITK_ALE, HSCXB);
- bus_space_read_multi_1(t, h, ITK_HSCX_DATA, buf, size);
- break;
- }
-}
-#endif
-
-#ifdef __FreeBSD__
-static void
-itkix1_write_fifo(void *base, const void *buf, size_t len)
-{
- int port = (u_long)base & ~0x0003;
- switch ((u_long)base & 3) {
- case 0: /* ISAC */
- outb(port+ITK_ALE, 0);
- outsb(port+ITK_ISAC_DATA, (u_char *)buf, (u_int)len);
- break;
- case 1: /* HSCXA */
- outb(port+ITK_ALE, HSCXA);
- outsb(port+ITK_HSCX_DATA, (u_char *)buf, (u_int)len);
- break;
- case 2: /* HSCXB */
- outb(port+ITK_ALE, HSCXB);
- outsb(port+ITK_HSCX_DATA, (u_char *)buf, (u_int)len);
- break;
- }
-}
-#else
-static void itkix1_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ITK_ALE, 0);
- bus_space_write_multi_1(t, h, ITK_ISAC_DATA, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ITK_ALE, HSCXA);
- bus_space_write_multi_1(t, h, ITK_HSCX_DATA, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ITK_ALE, HSCXB);
- bus_space_write_multi_1(t, h, ITK_HSCX_DATA, (u_int8_t*)buf, size);
- break;
- }
-}
-#endif
-
-#ifdef __FreeBSD__
-static void
-itkix1_write_reg(u_char *base, u_int offset, u_int v)
-{
- int port = (u_long)base & ~0x0003;
- switch ((u_long)base & 3) {
- case 0: /* ISAC */
- outb(port+ITK_ALE, offset);
- outb(port+ITK_ISAC_DATA, (u_char)v);
- break;
- case 1: /* HSCXA */
- outb(port+ITK_ALE, HSCXA+offset);
- outb(port+ITK_HSCX_DATA, (u_char)v);
- break;
- case 2: /* HSCXB */
- outb(port+ITK_ALE, HSCXB+offset);
- outb(port+ITK_HSCX_DATA, (u_char)v);
- break;
- }
-}
-#else
-static void itkix1_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ITK_ALE, offs);
- bus_space_write_1(t, h, ITK_ISAC_DATA, data);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ITK_ALE, HSCXA+offs);
- bus_space_write_1(t, h, ITK_HSCX_DATA, data);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ITK_ALE, HSCXB+offs);
- bus_space_write_1(t, h, ITK_HSCX_DATA, data);
- break;
- }
-}
-#endif
-
-#ifdef __FreeBSD__
-static u_char
-itkix1_read_reg(u_char *base, u_int offset)
-{
- int port = (u_long)base & ~0x0003;
- switch ((u_long)base & 3) {
- case 0: /* ISAC */
- outb(port+ITK_ALE, offset);
- return (inb(port+ITK_ISAC_DATA));
- case 1: /* HSCXA */
- outb(port+ITK_ALE, HSCXA+offset);
- return (inb(port+ITK_HSCX_DATA));
- case 2: /* HSCXB */
- outb(port+ITK_ALE, HSCXB+offset);
- return (inb(port+ITK_HSCX_DATA));
- }
- panic("itkix1_read_reg: Fallthrough\n");
-}
-#else
-static u_int8_t itkix1_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, ITK_ALE, offs);
- return bus_space_read_1(t, h, ITK_ISAC_DATA);
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, ITK_ALE, HSCXA+offs);
- return bus_space_read_1(t, h, ITK_HSCX_DATA);
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, ITK_ALE, HSCXB+offs);
- return bus_space_read_1(t, h, ITK_HSCX_DATA);
- }
- return 0;
-}
-#endif
-
-#endif /* ITKIX1 */
diff --git a/sys/i4b/layer1/i4b_l1.c b/sys/i4b/layer1/i4b_l1.c
deleted file mode 100644
index 96497c5df6a4b..0000000000000
--- a/sys/i4b/layer1/i4b_l1.c
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l1.c - isdn4bsd layer 1 handler
- * -----------------------------------
- *
- * $Id: i4b_l1.c,v 1.27 1998/12/05 18:04:51 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:24:52 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "isic.h"
-#else
-#define NISIC 1 /* don't bother */
-#endif
-#if NISIC > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <machine/stdarg.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-unsigned int i4b_l1_debug = L1_DEBUG_DEFAULT;
-
-static int ph_data_req(int, struct mbuf *, int);
-static int ph_activate_req(int);
-
-/* from i4btrc driver i4b_trace.c */
-extern int get_trace_data_from_l1(int unit, int what, int len, char *buf);
-
-/* from layer 2 */
-extern int i4b_ph_data_ind(int unit, struct mbuf *m);
-extern int i4b_ph_activate_ind(int unit);
-extern int i4b_ph_deactivate_ind(int unit);
-extern int i4b_mph_attach_ind(int unit);
-extern int i4b_mph_status_ind(int, int, int);
-
-/* layer 1 lme */
-static int i4b_mph_command_req(int, int, int);
-
-/* jump table */
-struct i4b_l1l2_func i4b_l1l2_func = {
-
- /* Layer 1 --> Layer 2 */
-
- (int (*)(int, struct mbuf *)) i4b_ph_data_ind,
- (int (*)(int)) i4b_ph_activate_ind,
- (int (*)(int)) i4b_ph_deactivate_ind,
-
- /* Layer 2 --> Layer 1 */
-
- (int (*)(int, struct mbuf *, int)) ph_data_req,
- (int (*)(int)) ph_activate_req,
-
- /* Layer 1 --> upstream, ISDN trace data */
-
- (int (*)(i4b_trace_hdr_t *, int, u_char *)) get_trace_data_from_l1,
-
- /* Driver control and status information */
-
- (int (*)(int, int, int)) i4b_mph_status_ind,
- (int (*)(int, int, int)) i4b_mph_command_req,
-};
-
-/*---------------------------------------------------------------------------*
- *
- * L2 -> L1: PH-DATA-REQUEST
- * =========================
- *
- * parms:
- * unit physical interface unit number
- * m mbuf containing L2 frame to be sent out
- * freeflag MBUF_FREE: free mbuf here after having sent
- * it out
- * MBUF_DONTFREE: mbuf is freed by Layer 2
- * returns:
- * ==0 fail, nothing sent out
- * !=0 ok, frame sent out
- *
- *---------------------------------------------------------------------------*/
-static int
-ph_data_req(int unit, struct mbuf *m, int freeflag)
-{
- u_char cmd;
- int s;
-
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
-
-#ifdef NOTDEF
- DBGL1(L1_PRIM, "PH-DATA-REQ", ("unit %d, freeflag=%d\n", unit, freeflag));
-#endif
-
- if(m == NULL) /* failsafe */
- return (0);
-
- s = SPLI4B();
-
- if(sc->sc_I430state == ST_F3) /* layer 1 not running ? */
- {
- DBGL1(L1_I_ERR, "ph_data_req", ("still in state F3!\n"));
- ph_activate_req(unit);
- }
-
- if(sc->sc_state & ISAC_TX_ACTIVE)
- {
- if(sc->sc_obuf2 == NULL)
- {
- sc->sc_obuf2 = m; /* save mbuf ptr */
-
- if(freeflag)
- sc->sc_freeflag2 = 1; /* IRQ must mfree */
- else
- sc->sc_freeflag2 = 0; /* IRQ must not mfree */
-
- DBGL1(L1_I_MSG, "ph_data_req", ("using 2nd ISAC TX buffer, state = %s\n", isic_printstate(sc)));
-
- if(sc->sc_trace & TRACE_D_TX)
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = unit;
- hdr.type = TRC_CH_D;
- hdr.dir = FROM_TE;
- hdr.count = ++sc->sc_trace_dcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, m->m_len, m->m_data);
- }
- splx(s);
- return(1);
- }
-
- DBGL1(L1_I_ERR, "ph_data_req", ("No Space in TX FIFO, state = %s\n", isic_printstate(sc)));
-
- if(freeflag == MBUF_FREE)
- i4b_Dfreembuf(m);
-
- splx(s);
- return (0);
- }
-
- if(sc->sc_trace & TRACE_D_TX)
- {
- i4b_trace_hdr_t hdr;
- hdr.unit = unit;
- hdr.type = TRC_CH_D;
- hdr.dir = FROM_TE;
- hdr.count = ++sc->sc_trace_dcount;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, m->m_len, m->m_data);
- }
-
- sc->sc_state |= ISAC_TX_ACTIVE; /* set transmitter busy flag */
-
- DBGL1(L1_I_MSG, "ph_data_req", ("ISAC_TX_ACTIVE set\n"));
-
- sc->sc_freeflag = 0; /* IRQ must NOT mfree */
-
- ISAC_WRFIFO(m->m_data, min(m->m_len, ISAC_FIFO_LEN)); /* output to TX fifo */
-
- if(m->m_len > ISAC_FIFO_LEN) /* message > 32 bytes ? */
- {
- sc->sc_obuf = m; /* save mbuf ptr */
- sc->sc_op = m->m_data + ISAC_FIFO_LEN; /* ptr for irq hdl */
- sc->sc_ol = m->m_len - ISAC_FIFO_LEN; /* length for irq hdl */
-
- if(freeflag)
- sc->sc_freeflag = 1; /* IRQ must mfree */
-
- cmd = ISAC_CMDR_XTF;
- }
- else
- {
- sc->sc_obuf = NULL;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
-
- if(freeflag)
- i4b_Dfreembuf(m);
-
- cmd = ISAC_CMDR_XTF | ISAC_CMDR_XME;
- }
-
- ISAC_WRITE(I_CMDR, cmd);
- ISACCMDRWRDELAY();
-
- splx(s);
-
- return(1);
-}
-
-/*---------------------------------------------------------------------------*
- *
- * L2 -> L1: PH-ACTIVATE-REQUEST
- * =============================
- *
- * parms:
- * unit physical interface unit number
- *
- * returns:
- * ==0
- * !=0
- *
- *---------------------------------------------------------------------------*/
-static int
-ph_activate_req(int unit)
-{
-
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
-
- DBGL1(L1_PRIM, "PH-ACTIVATE-REQ", ("unit %d\n", unit));
- isic_next_state(sc, EV_PHAR);
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * command from the upper layers
- *---------------------------------------------------------------------------*/
-static int
-i4b_mph_command_req(int unit, int command, int parm)
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[unit];
-#else
- struct isic_softc *sc = isic_find_sc(unit);
-#endif
-
- switch(command)
- {
- case CMR_DOPEN: /* daemon running */
- DBGL1(L1_PRIM, "MPH-COMMAND-REQ", ("unit %d, command = CMR_DOPEN\n", unit));
- sc->sc_enabled = 1;
- break;
-
- case CMR_DCLOSE: /* daemon not running */
- DBGL1(L1_PRIM, "MPH-COMMAND-REQ", ("unit %d, command = CMR_DCLOSE\n", unit));
- sc->sc_enabled = 0;
- break;
-
- default:
- DBGL1(L1_ERROR, "i4b_mph_command_req", ("ERROR, unknown command = %d, unit = %d, parm = %d\n", command, unit, parm));
- break;
- }
-
- return(0);
-}
-
-#endif /* NISIC > 0 */
-
diff --git a/sys/i4b/layer1/i4b_l1.h b/sys/i4b/layer1/i4b_l1.h
deleted file mode 100644
index 2b15ccc92983e..0000000000000
--- a/sys/i4b/layer1/i4b_l1.h
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------*
- *
- * i4b_l1.h - isdn4bsd layer 1 header file
- * ---------------------------------------
- *
- * $Id: i4b_l1.h,v 1.54 1998/12/17 04:55:39 hm Exp $
- *
- * last edit-date: [Mon Dec 14 10:41:36 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef I4B_L1_H_
-#define I4B_L1_H_
-
-#include <i4b/include/i4b_l3l4.h>
-
-/*---------------------------------------------------------------------------
- * kernel config file flags definition
- *---------------------------------------------------------------------------*/
- /* XXX: we do need these only for real ISA (not even ISAPNP cards), and only
- * because we are not confident enough in the general ISA probe routine (as
- * practiced by the NetBSD variant). *And* it is completely redundant to the
- * various options enabling only a few card's support routines to be compiled
- * in. Probably the current truth is: this is usefull for anybody with more
- * than one supported real ISA card. It is not usefull in generic configs,
- * nor in typical one-controller-only configurations.
- * Further - it is identical to the CARD_TYPEP_xxx definitions in
- * ../machine/i4b_ioctl.h.
- */
-#define FLAG_TELES_S0_8 1
-#define FLAG_TELES_S0_16 2
-#define FLAG_TELES_S0_163 3
-#define FLAG_AVM_A1 4
-#define FLAG_TELES_S0_163_PnP 5 /* XXX - not needed, remove! */
-#define FLAG_CREATIX_S0_PnP 6 /* XXX - not needed, remove! */
-#define FLAG_USR_ISDN_TA_INT 7
-#define FLAG_DRN_NGO 8 /* XXX - not needed, remove! */
-#define FLAG_SWS 9 /* XXX - not needed, remove! */
-#define FLAG_AVM_A1_PCMCIA 10 /* XXX - not needed, remove! */
-#define FLAG_DYNALINK 11 /* XXX - not needed, remove! */
-#define FLAG_BLMASTER 12
-#define FLAG_ELSA_QS1P_ISA 13 /* XXX - not needed, remove! */
-#define FLAG_ELSA_QS1P_PCI 14 /* XXX - not needed, remove! */
-#define FLAG_SIEMENS_ITALK 15
-#define FLAG_ELSA_MLIMC 16 /* XXX - not needed, remove! */
-#define FLAG_ELSA_MLMCALL 17 /* XXX - not needed, remove! */
-#define FLAG_ITK_IX1 18
-
-#define SEC_DELAY 1000000 /* one second DELAY for DELAY*/
-
-#define MAX_DFRAME_LEN 264 /* max length of a D frame */
-
-#define min(a,b) ((a)<(b)?(a):(b))
-
-#ifndef __FreeBSD__
-/* We try to map as few as possible as small as possible io and/or
- memory regions. Each card defines its own interpretation of this
- mapping array. At probe time we have a fixed size array, later
- (when the card type is known) we allocate a minimal array
- dynamically. */
-
-#define ISIC_MAX_IO_MAPS 49 /* no cardtype needs more yet */
-
-/* one entry in mapping array */
-struct isic_io_map {
- bus_space_tag_t t; /* which bus-space is this? */
- bus_space_handle_t h; /* handle of mapped bus space region */
- bus_size_t offset; /* offset into region */
- bus_size_t size; /* size of region, zero if not ours
- (i.e.: don't ever unmap it!) */
-};
-
-/* this is passed around at probe time (no struct isic_softc yet) */
-struct isic_attach_args {
- int ia_flags; /* flags from config file */
- int ia_num_mappings; /* number of io mappings provided */
- struct isic_io_map ia_maps[ISIC_MAX_IO_MAPS];
-};
-#endif
-
-#ifdef __FreeBSD__
-extern int next_isic_unit;
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_Bchan: the state of one B channel
- *---------------------------------------------------------------------------*/
-typedef struct
-{
- int unit; /* cards unit number */
- int channel; /* which channel is this*/
-
-#ifdef __FreeBSD__
- caddr_t hscx; /* HSCX address */
-#endif
-
- u_char hscx_mask; /* HSCX interrupt mask */
-
- int bprot; /* B channel protocol */
-
- int state; /* this channels state */
-#define HSCX_IDLE 0x00 /* channel idle */
-#define HSCX_TX_ACTIVE 0x01 /* tx running */
-
- /* receive data from ISDN */
-
- struct ifqueue rx_queue; /* receiver queue */
-
- int rxcount; /* rx statistics counter*/
-
- struct mbuf *in_mbuf; /* rx input buffer */
- u_char *in_cbptr; /* curr buffer pointer */
- int in_len; /* rx input buffer len */
-
- /* transmit data to ISDN */
-
- struct ifqueue tx_queue; /* transmitter queue */
-
- int txcount; /* tx statistics counter*/
-
- struct mbuf *out_mbuf_head; /* first mbuf in possible chain */
- struct mbuf *out_mbuf_cur; /* current mbuf in possbl chain */
- unsigned char *out_mbuf_cur_ptr; /* data pointer into mbuf */
- int out_mbuf_cur_len; /* remaining bytes in mbuf */
-
- /* link between b channel and driver */
-
- isdn_link_t isdn_linktab; /* b channel addresses */
- drvr_link_t *drvr_linktab; /* ptr to driver linktab*/
-
- /* statistics */
-
- /* RSTA */
-
- int stat_VFR; /* HSCX RSTA Valid FRame */
- int stat_RDO; /* HSCX RSTA Rx Data Overflow */
- int stat_CRC; /* HSCX RSTA CRC */
- int stat_RAB; /* HSCX RSTA Rx message ABorted */
-
- /* EXIR */
-
- int stat_XDU; /* HSCX EXIR tx data underrun */
- int stat_RFO; /* HSCX EXIR rx frame overflow */
-
-} isic_Bchan_t;
-
-/*---------------------------------------------------------------------------*
- * isic_softc: the state of the layer 1 of the D channel
- *---------------------------------------------------------------------------*/
-struct isic_softc
-{
-#ifndef __FreeBSD__
- /* We are inherited from this class. All drivers must have this
- as their first entry in struct softc. */
- struct device sc_dev;
-#endif
-
- int sc_unit; /* unit number */
- int sc_irq; /* interrupt vector */
-
-#ifdef __FreeBSD__
- int sc_port; /* port base address */
-#else
- u_int sc_maddr; /* "memory address" for card config register */
- int sc_num_mappings; /* number of io mappings provided */
- struct isic_io_map *sc_maps;
-#define MALLOC_MAPS(sc) \
- (sc)->sc_maps = (struct isic_io_map*)malloc(sizeof((sc)->sc_maps[0])*(sc)->sc_num_mappings, M_DEVBUF, 0)
-#endif
-
- int sc_cardtyp; /* CARD_TYPEP_xxxx */
-
- int sc_bustyp; /* IOM1 or IOM2 */
-#define BUS_TYPE_IOM1 0x01
-#define BUS_TYPE_IOM2 0x02
-
- int sc_trace; /* output protocol data for tracing */
- unsigned int sc_trace_dcount;/* d channel trace frame counter */
- unsigned int sc_trace_bcount;/* b channel trace frame counter */
-
- int sc_state; /* ISAC state flag */
-#define ISAC_IDLE 0x00 /* state = idle */
-#define ISAC_TX_ACTIVE 0x01 /* state = transmitter active */
-
- int sc_init_tries; /* no of out tries to access S0 */
-
-#ifdef __FreeBSD__
- caddr_t sc_vmem_addr; /* card RAM virtual memory base */
- caddr_t sc_isac; /* ISAC port base addr */
-#define ISAC_BASE (sc->sc_isac)
-
- caddr_t sc_ipacbase; /* IPAC port base addr */
-#define IPAC_BASE (sc->sc_ipacbase)
-#endif
-
- u_char sc_isac_mask; /* ISAC IRQ mask */
-#define ISAC_IMASK (sc->sc_isac_mask)
-
- isic_Bchan_t sc_chan[2]; /* B-channel state */
-#define HSCX_A_BASE (sc->sc_chan[0].hscx)
-#define HSCX_A_IMASK (sc->sc_chan[0].hscx_mask)
-#define HSCX_B_BASE (sc->sc_chan[1].hscx)
-#define HSCX_B_IMASK (sc->sc_chan[1].hscx_mask)
-
- struct mbuf *sc_ibuf; /* input buffer mgmt */
- u_short sc_ilen;
- u_char *sc_ib;
- /* this is for the irq TX routine */
- struct mbuf *sc_obuf; /* pointer to an mbuf with TX frame */
- u_char *sc_op; /* ptr to next chunk of frame to tx */
- int sc_ol; /* length of remaining frame to tx */
- int sc_freeflag; /* m_freem mbuf if set */
-
- struct mbuf *sc_obuf2; /* pointer to an mbuf with TX frame */
- int sc_freeflag2; /* m_freem mbuf if set */
-
- int sc_isac_version; /* version number of ISAC */
- int sc_hscx_version; /* version number of HSCX */
-
- int sc_I430state; /* I.430 state F3 .... F8 */
-
- int sc_I430T3; /* I.430 Timer T3 running */
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- struct callout_handle sc_T3_callout;
-#endif
-
- int sc_I430T4; /* Timer T4 running */
-#if defined(__FreeBSD__) && __FreeBSD__ >=3
- struct callout_handle sc_T4_callout;
-#endif
-
- int sc_enabled; /* daemon is running */
-
- int sc_ipac; /* flag, running on ipac */
- int sc_bfifolen; /* length of b channel fifos */
-
-#ifdef __FreeBSD__
-
- u_char (*readreg)(u_char *, u_int);
- void (*writereg)(u_char *, u_int, u_int);
- void (*readfifo)(void *, const void *, size_t);
- void (*writefifo)(void *, const void *, size_t);
- void (*clearirq)(void *);
-
-#define ISAC_READ(r) (*sc->readreg)(ISAC_BASE, (r))
-#define ISAC_WRITE(r,v) (*sc->writereg)(ISAC_BASE, (r), (v));
-#define ISAC_RDFIFO(b,s) (*sc->readfifo)((b), ISAC_BASE, (s))
-#define ISAC_WRFIFO(b,s) (*sc->writefifo)(ISAC_BASE, (b), (s))
-
-#define HSCX_READ(n,r) (*sc->readreg)(sc->sc_chan[(n)].hscx, (r))
-#define HSCX_WRITE(n,r,v) (*sc->writereg)(sc->sc_chan[(n)].hscx, (r), (v))
-#define HSCX_RDFIFO(n,b,s) (*sc->readfifo)((b), sc->sc_chan[(n)].hscx, (s))
-#define HSCX_WRFIFO(n,b,s) (*sc->writefifo)(sc->sc_chan[(n)].hscx, (b), (s))
-
-#define IPAC_READ(r) (*sc->readreg)(IPAC_BASE, (r))
-#define IPAC_WRITE(r,v) (*sc->writereg)(IPAC_BASE, (r), (v));
-
-#else /* ! __FreeBSD__ */
-
-#define ISIC_WHAT_ISAC 0
-#define ISIC_WHAT_HSCXA 1
-#define ISIC_WHAT_HSCXB 2
-#define ISIC_WHAT_IPAC 3
-
- u_int8_t (*readreg) __P((struct isic_softc *sc, int what, bus_size_t offs));
- void (*writereg) __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
- void (*readfifo) __P((struct isic_softc *sc, int what, void *buf, size_t size));
- void (*writefifo) __P((struct isic_softc *sc, int what, const void *data, size_t size));
- void (*clearirq) __P((struct isic_softc *sc));
-
-#define ISAC_READ(r) (*sc->readreg)(sc, ISIC_WHAT_ISAC, (r))
-#define ISAC_WRITE(r,v) (*sc->writereg)(sc, ISIC_WHAT_ISAC, (r), (v))
-#define ISAC_RDFIFO(b,s) (*sc->readfifo)(sc, ISIC_WHAT_ISAC, (b), (s))
-#define ISAC_WRFIFO(b,s) (*sc->writefifo)(sc, ISIC_WHAT_ISAC, (b), (s))
-
-#define HSCX_READ(n,r) (*sc->readreg)(sc, ISIC_WHAT_HSCXA+(n), (r))
-#define HSCX_WRITE(n,r,v) (*sc->writereg)(sc, ISIC_WHAT_HSCXA+(n), (r), (v))
-#define HSCX_RDFIFO(n,b,s) (*sc->readfifo)(sc, ISIC_WHAT_HSCXA+(n), (b), (s))
-#define HSCX_WRFIFO(n,b,s) (*sc->writefifo)(sc, ISIC_WHAT_HSCXA+(n), (b), (s))
-
-#define IPAC_READ(r) (*sc->readreg)(sc, ISIC_WHAT_IPAC, (r))
-#define IPAC_WRITE(r, v) (*sc->writereg)(sc, ISIC_WHAT_IPAC, (r), (v))
-
-#endif /* __FreeBSD__ */
-};
-
-/*---------------------------------------------------------------------------*
- * possible I.430/ISAC states
- *---------------------------------------------------------------------------*/
-enum I430states {
- ST_F3, /* F3 Deactivated */
- ST_F4, /* F4 Awaiting Signal */
- ST_F5, /* F5 Identifying Input */
- ST_F6, /* F6 Synchronized */
- ST_F7, /* F7 Activated */
- ST_F8, /* F8 Lost Framing */
- ST_ILL, /* Illegal State */
- N_STATES
-};
-
-/*---------------------------------------------------------------------------*
- * possible I.430/ISAC events
- *---------------------------------------------------------------------------*/
-enum I430events {
- EV_PHAR, /* PH ACTIVATE REQUEST */
- EV_T3, /* Timer 3 expired */
- EV_INFO0, /* receiving INFO0 */
- EV_RSY, /* receiving any signal */
- EV_INFO2, /* receiving INFO2 */
- EV_INFO48, /* receiving INFO4 pri 8/9 */
- EV_INFO410, /* receiving INFO4 pri 10/11 */
- EV_DR, /* Deactivate Request */
- EV_PU, /* Power UP */
- EV_DIS, /* Disconnected (only 2085) */
- EV_EI, /* Error Indication */
- EV_ILL, /* Illegal Event */
- N_EVENTS
-};
-
-enum I430commands {
- CMD_TIM, /* Timing */
- CMD_RS, /* Reset */
- CMD_AR8, /* Activation request pri 8 */
- CMD_AR10, /* Activation request pri 10 */
- CMD_DIU, /* Deactivate Indication Upstream */
- CMD_ILL /* Illegal command */
-};
-
-#define N_COMMANDS CMD_ILL
-
-#ifdef __FreeBSD__
-
-extern struct isic_softc isic_sc[];
-
-extern void isic_recover(struct isic_softc *sc);
-extern int isic_realattach(struct isa_device *dev, unsigned int iobase2);
-extern int isic_attach_avma1 ( struct isa_device *dev );
-extern int isic_attach_fritzpcmcia ( struct isa_device *dev );
-extern int isic_attach_Cs0P ( struct isa_device *dev, unsigned int iobase2);
-extern int isic_attach_Dyn ( struct isa_device *dev, unsigned int iobase2);
-extern int isic_attach_s016 ( struct isa_device *dev );
-extern int isic_attach_s0163 ( struct isa_device *dev );
-extern int isic_attach_s0163P ( struct isa_device *dev );
-extern int isic_attach_s08 ( struct isa_device *dev );
-extern int isic_attach_usrtai ( struct isa_device *dev );
-extern int isic_attach_itkix1 ( struct isa_device *dev );
-extern int isic_attach_drnngo ( struct isa_device *dev, unsigned int iobase2);
-extern int isic_attach_sws ( struct isa_device *dev );
-extern int isic_attach_Eqs1pi(struct isa_device *dev, unsigned int iobase2);
-extern int isic_attach_Eqs1pp(int unit, unsigned int iobase1, unsigned int iobase2);
-extern void isic_bchannel_setup (int unit, int hscx_channel, int bprot, int activate );
-extern void isic_hscx_init ( struct isic_softc *sc, int hscx_channel, int activate );
-extern void isic_hscx_irq ( struct isic_softc *sc, u_char ista, int hscx_channel, u_char ex_irq );
-extern int isic_hscx_silence ( unsigned char *data, int len );
-extern void isic_hscx_cmd( struct isic_softc *sc, int h_chan, unsigned char cmd );
-extern void isic_hscx_waitxfw( struct isic_softc *sc, int h_chan );
-extern void isic_init_linktab ( struct isic_softc *sc );
-extern int isic_isac_init ( struct isic_softc *sc );
-extern void isic_isac_irq ( struct isic_softc *sc, int r );
-extern void isic_isac_l1_cmd ( struct isic_softc *sc, int command );
-extern void isic_next_state ( struct isic_softc *sc, int event );
-extern char *isic_printstate ( struct isic_softc *sc );
-extern int isic_probe_avma1 ( struct isa_device *dev );
-extern int isic_probe_avma1_pcmcia ( struct isa_device *dev );
-extern int isic_probe_Cs0P ( struct isa_device *dev, unsigned int iobase2);
-extern int isic_probe_Dyn ( struct isa_device *dev, unsigned int iobase2);
-extern int isic_probe_s016 ( struct isa_device *dev );
-extern int isic_probe_s0163 ( struct isa_device *dev );
-extern int isic_probe_s0163P ( struct isa_device *dev );
-extern int isic_probe_s08 ( struct isa_device *dev );
-extern int isic_probe_usrtai ( struct isa_device *dev );
-extern int isic_probe_itkix1 ( struct isa_device *dev );
-extern int isic_probe_drnngo ( struct isa_device *dev, unsigned int iobase2);
-extern int isic_probe_sws ( struct isa_device *dev );
-extern int isic_probe_Eqs1pi(struct isa_device *dev, unsigned int iobase2);
-
-#else /* not FreeBSD */
-
-extern void isic_recover __P((struct isic_softc *sc));
-extern int isicattach __P((int flags, struct isic_softc *sc));
-extern int isicintr __P((void *));
-extern int isicprobe __P((struct isic_attach_args *ia));
-extern int isic_attach_avma1 __P((struct isic_softc *sc));
-extern int isic_attach_s016 __P((struct isic_softc *sc));
-extern int isic_attach_s0163 __P((struct isic_softc *sc));
-extern int isic_attach_s08 __P((struct isic_softc *sc));
-extern int isic_attach_usrtai __P((struct isic_softc *sc));
-extern int isic_attach_itkix1 __P((struct isic_softc *sc));
-extern void isic_bchannel_setup __P((int unit, int hscx_channel, int bprot, int activate));
-extern void isic_hscx_init __P((struct isic_softc *sc, int hscx_channel, int activate));
-extern void isic_hscx_irq __P((struct isic_softc *sc, u_char ista, int hscx_channel, u_char ex_irq));
-extern int isic_hscx_silence __P(( unsigned char *data, int len ));
-extern void isic_hscx_cmd __P(( struct isic_softc *sc, int h_chan, unsigned char cmd ));
-extern void isic_hscx_waitxfw __P(( struct isic_softc *sc, int h_chan ));
-extern void isic_init_linktab __P((struct isic_softc *sc));
-extern int isic_isac_init __P((struct isic_softc *sc));
-extern void isic_isac_irq __P((struct isic_softc *sc, int r));
-extern void isic_isac_l1_cmd __P((struct isic_softc *sc, int command));
-extern void isic_next_state __P((struct isic_softc *sc, int event));
-extern char * isic_printstate __P((struct isic_softc *sc));
-extern int isic_probe_avma1 __P((struct isic_attach_args *ia));
-extern int isic_probe_s016 __P((struct isic_attach_args *ia));
-extern int isic_probe_s0163 __P((struct isic_attach_args *ia));
-extern int isic_probe_s08 __P((struct isic_attach_args *ia));
-extern int isic_probe_usrtai __P((struct isic_attach_args *ia));
-extern int isic_probe_itkix1 __P((struct isic_attach_args *ia));
-
-extern struct isic_softc *isic_sc[];
-
-#define isic_find_sc(unit) (isic_sc[(unit)])
-
-#endif /* __FreeBSD__ */
-
-#endif /* I4B_L1_H_ */
diff --git a/sys/i4b/layer1/i4b_l1fsm.c b/sys/i4b/layer1/i4b_l1fsm.c
deleted file mode 100644
index 397ce11f711cc..0000000000000
--- a/sys/i4b/layer1/i4b_l1fsm.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l1fsm.c - isdn4bsd layer 1 I.430 state machine
- * --------------------------------------------------
- *
- * $Id: i4b_l1fsm.c,v 1.26 1998/12/05 18:04:55 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:25:12 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#else
-#define NISIC 1
-#endif
-
-#if NISIC > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#include <machine/stdarg.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-
-static char *state_text[N_STATES] = {
- "F3 Deactivated",
- "F4 Awaiting Signal",
- "F5 Identifying Input",
- "F6 Synchronized",
- "F7 Activated",
- "F8 Lost Framing",
- "Illegal State"
-};
-
-static char *event_text[N_EVENTS] = {
- "EV_PHAR PH_ACT_REQ",
- "EV_T3 Timer 3 expired",
- "EV_INFO0 INFO0 received",
- "EV_RSY Level Detected",
- "EV_INFO2 INFO2 received",
- "EV_INFO48 INFO4 received",
- "EV_INFO410 INFO4 received",
- "EV_DR Deactivate Req",
- "EV_PU Power UP",
- "EV_DIS Disconnected",
- "EV_EI Error Ind",
- "Illegal Event"
-};
-
-/* Function prototypes */
-
-static void timer3_expired (struct isic_softc *sc);
-static void T3_start (struct isic_softc *sc);
-static void T3_stop (struct isic_softc *sc);
-static void F_T3ex (struct isic_softc *sc);
-static void timer4_expired (struct isic_softc *sc);
-static void T4_start (struct isic_softc *sc);
-static void T4_stop (struct isic_softc *sc);
-static void F_AI8 (struct isic_softc *sc);
-static void F_AI10 (struct isic_softc *sc);
-static void F_I01 (struct isic_softc *sc);
-static void F_I02 (struct isic_softc *sc);
-static void F_I03 (struct isic_softc *sc);
-static void F_I2 (struct isic_softc *sc);
-static void F_ill (struct isic_softc *sc);
-static void F_NULL (struct isic_softc *sc);
-
-/*---------------------------------------------------------------------------*
- * I.430 Timer T3 expire function
- *---------------------------------------------------------------------------*/
-static void
-timer3_expired(struct isic_softc *sc)
-{
- if(sc->sc_I430T3)
- {
- DBGL1(L1_T_ERR, "timer3_expired", ("state = %s\n", isic_printstate(sc)));
- sc->sc_I430T3 = 0;
-
- /* XXX try some recovery here XXX */
-
- isic_recover(sc);
-
- sc->sc_init_tries++; /* increment retry count */
-
-/*XXX*/ if(sc->sc_init_tries > 4)
- {
- int s = SPLI4B();
-
- sc->sc_init_tries = 0;
-
- if(sc->sc_obuf2 != NULL)
- {
- i4b_Dfreembuf(sc->sc_obuf2);
- sc->sc_obuf2 = NULL;
- }
- if(sc->sc_obuf != NULL)
- {
- i4b_Dfreembuf(sc->sc_obuf);
- sc->sc_obuf = NULL;
- sc->sc_freeflag = 0;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
- }
-
- splx(s);
-
- MPH_Status_Ind(sc->sc_unit, STI_NOL1ACC, 0);
- }
-
- isic_next_state(sc, EV_T3);
- }
- else
- {
- DBGL1(L1_T_ERR, "timer3_expired", ("expired without starting it ....\n"));
- }
-}
-
-/*---------------------------------------------------------------------------*
- * I.430 Timer T3 start
- *---------------------------------------------------------------------------*/
-static void
-T3_start(struct isic_softc *sc)
-{
- DBGL1(L1_T_MSG, "T3_start", ("state = %s\n", isic_printstate(sc)));
- sc->sc_I430T3 = 1;
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- sc->sc_T3_callout = timeout((TIMEOUT_FUNC_T)timer3_expired,(struct isic_softc *)sc, 2*hz);
-#else
- timeout((TIMEOUT_FUNC_T)timer3_expired,(struct isic_softc *)sc, 2*hz);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * I.430 Timer T3 stop
- *---------------------------------------------------------------------------*/
-static void
-T3_stop(struct isic_softc *sc)
-{
- DBGL1(L1_T_MSG, "T3_stop", ("state = %s\n", isic_printstate(sc)));
-
- sc->sc_init_tries = 0; /* init connect retry count */
-
- if(sc->sc_I430T3)
- {
- sc->sc_I430T3 = 0;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)timer3_expired,(struct isic_softc *)sc, sc->sc_T3_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)timer3_expired,(struct isic_softc *)sc);
-#endif
- }
-}
-
-/*---------------------------------------------------------------------------*
- * I.430 Timer T3 expiry
- *---------------------------------------------------------------------------*/
-static void
-F_T3ex(struct isic_softc *sc)
-{
- DBGL1(L1_F_MSG, "F_T3ex", ("FSM function F_T3ex executing\n"));
- PH_Deact_Ind(sc->sc_unit);
-}
-
-/*---------------------------------------------------------------------------*
- * Timer T4 expire function
- *---------------------------------------------------------------------------*/
-static void
-timer4_expired(struct isic_softc *sc)
-{
- if(sc->sc_I430T4)
- {
- DBGL1(L1_T_ERR, "timer4_expired", ("state = %s\n", isic_printstate(sc)));
- sc->sc_I430T4 = 0;
- MPH_Status_Ind(sc->sc_unit, STI_PDEACT, 0);
- }
- else
- {
- DBGL1(L1_T_ERR, "timer4_expired", ("expired without starting it ....\n"));
- }
-}
-
-/*---------------------------------------------------------------------------*
- * Timer T4 start
- *---------------------------------------------------------------------------*/
-static void
-T4_start(struct isic_softc *sc)
-{
- DBGL1(L1_T_MSG, "T4_start", ("state = %s\n", isic_printstate(sc)));
- sc->sc_I430T4 = 1;
-
-#if defined(__FreeBSD__) && __FreeBSD__ >=3
- sc->sc_T4_callout = timeout((TIMEOUT_FUNC_T)timer4_expired,(struct isic_softc *)sc, hz);
-#else
- timeout((TIMEOUT_FUNC_T)timer4_expired,(struct isic_softc *)sc, hz);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * Timer T4 stop
- *---------------------------------------------------------------------------*/
-static void
-T4_stop(struct isic_softc *sc)
-{
- DBGL1(L1_T_MSG, "T4_stop", ("state = %s\n", isic_printstate(sc)));
-
- if(sc->sc_I430T4)
- {
- sc->sc_I430T4 = 0;
-#if defined(__FreeBSD__) && __FreeBSD__ >=3
- untimeout((TIMEOUT_FUNC_T)timer4_expired,(struct isic_softc *)sc, sc->sc_T4_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)timer4_expired,(struct isic_softc *)sc);
-#endif
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM function: received AI8
- *---------------------------------------------------------------------------*/
-static void
-F_AI8(struct isic_softc *sc)
-{
- T4_stop(sc);
-
- DBGL1(L1_F_MSG, "F_AI8", ("FSM function F_AI8 executing\n"));
-
- PH_Act_Ind(sc->sc_unit);
-
- T3_stop(sc);
-
- if(sc->sc_trace & TRACE_I)
- {
- i4b_trace_hdr_t hdr;
- char info = INFO4_8;
-
- hdr.unit = sc->sc_unit;
- hdr.type = TRC_CH_I;
- hdr.dir = FROM_NT;
- hdr.count = 0;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, 1, &info);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM function: received AI10
- *---------------------------------------------------------------------------*/
-static void
-F_AI10(struct isic_softc *sc)
-{
- T4_stop(sc);
-
- DBGL1(L1_F_MSG, "F_AI10", ("FSM function F_AI10 executing\n"));
-
- PH_Act_Ind(sc->sc_unit);
-
- T3_stop(sc);
-
- if(sc->sc_trace & TRACE_I)
- {
- i4b_trace_hdr_t hdr;
- char info = INFO4_10;
-
- hdr.unit = sc->sc_unit;
- hdr.type = TRC_CH_I;
- hdr.dir = FROM_NT;
- hdr.count = 0;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, 1, &info);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM function: received INFO 0 in states F3 .. F5
- *---------------------------------------------------------------------------*/
-static void
-F_I01(struct isic_softc *sc)
-{
- DBGL1(L1_F_MSG, "F_I01", ("FSM function F_I01 executing\n"));
-
- if(sc->sc_trace & TRACE_I)
- {
- i4b_trace_hdr_t hdr;
- char info = INFO0;
-
- hdr.unit = sc->sc_unit;
- hdr.type = TRC_CH_I;
- hdr.dir = FROM_NT;
- hdr.count = 0;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, 1, &info);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM function: received INFO 0 in state F6
- *---------------------------------------------------------------------------*/
-static void
-F_I02(struct isic_softc *sc)
-{
- DBGL1(L1_F_MSG, "F_I02", ("FSM function F_I02 executing\n"));
-
- PH_Deact_Ind(sc->sc_unit);
-
- if(sc->sc_trace & TRACE_I)
- {
- i4b_trace_hdr_t hdr;
- char info = INFO0;
-
- hdr.unit = sc->sc_unit;
- hdr.type = TRC_CH_I;
- hdr.dir = FROM_NT;
- hdr.count = 0;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, 1, &info);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM function: received INFO 0 in state F7 or F8
- *---------------------------------------------------------------------------*/
-static void
-F_I03(struct isic_softc *sc)
-{
- DBGL1(L1_F_MSG, "F_I03", ("FSM function F_I03 executing\n"));
-
- PH_Deact_Ind(sc->sc_unit);
-
- T4_start(sc);
-
- if(sc->sc_trace & TRACE_I)
- {
- i4b_trace_hdr_t hdr;
- char info = INFO0;
-
- hdr.unit = sc->sc_unit;
- hdr.type = TRC_CH_I;
- hdr.dir = FROM_NT;
- hdr.count = 0;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, 1, &info);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM function: activate request
- *---------------------------------------------------------------------------*/
-static void
-F_AR(struct isic_softc *sc)
-{
- DBGL1(L1_F_MSG, "F_AR", ("FSM function F_AR executing\n"));
-
- if(sc->sc_trace & TRACE_I)
- {
- i4b_trace_hdr_t hdr;
- char info = INFO1_8;
-
- hdr.unit = sc->sc_unit;
- hdr.type = TRC_CH_I;
- hdr.dir = FROM_TE;
- hdr.count = 0;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, 1, &info);
- }
-
- isic_isac_l1_cmd(sc, CMD_AR8);
-
- T3_start(sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM function: received INFO2
- *---------------------------------------------------------------------------*/
-static void
-F_I2(struct isic_softc *sc)
-{
- DBGL1(L1_F_MSG, "F_I2", ("FSM function F_I2 executing\n"));
-
- if(sc->sc_trace & TRACE_I)
- {
- i4b_trace_hdr_t hdr;
- char info = INFO2;
-
- hdr.unit = sc->sc_unit;
- hdr.type = TRC_CH_I;
- hdr.dir = FROM_NT;
- hdr.count = 0;
- MICROTIME(hdr.time);
- MPH_Trace_Ind(&hdr, 1, &info);
- }
-
-}
-
-/*---------------------------------------------------------------------------*
- * illegal state default action
- *---------------------------------------------------------------------------*/
-static void
-F_ill(struct isic_softc *sc)
-{
- DBGL1(L1_F_ERR, "F_ill", ("FSM function F_ill executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * No action
- *---------------------------------------------------------------------------*/
-static void
-F_NULL(struct isic_softc *sc)
-{
- DBGL1(L1_F_MSG, "F_NULL", ("FSM function F_NULL executing\n"));
-}
-
-
-/*---------------------------------------------------------------------------*
- * layer 1 state transition table
- *---------------------------------------------------------------------------*/
-struct isic_state_tab {
- void (*func) (struct isic_softc *sc); /* function to execute */
- int newstate; /* next state */
-} isic_state_tab[N_EVENTS][N_STATES] = {
-
-/* STATE: F3 F4 F5 F6 F7 F8 ILLEGAL STATE */
-/* -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
-/* EV_PHAR x*/ {{F_AR, ST_F4}, {F_NULL, ST_F4}, {F_NULL, ST_F5}, {F_NULL, ST_F6}, {F_ill, ST_ILL}, {F_NULL, ST_F8}, {F_ill, ST_ILL}},
-/* EV_T3 x*/ {{F_NULL, ST_F3}, {F_T3ex, ST_F3}, {F_T3ex, ST_F3}, {F_T3ex, ST_F3}, {F_NULL, ST_F7}, {F_NULL, ST_F8}, {F_ill, ST_ILL}},
-/* EV_INFO0 */ {{F_I01, ST_F3}, {F_I01, ST_F4}, {F_I01, ST_F5}, {F_I02, ST_F3}, {F_I03, ST_F3}, {F_I03, ST_F3}, {F_ill, ST_ILL}},
-/* EV_RSY x*/ {{F_NULL, ST_F3}, {F_NULL, ST_F5}, {F_NULL, ST_F5}, {F_NULL, ST_F8}, {F_NULL, ST_F8}, {F_NULL, ST_F8}, {F_ill, ST_ILL}},
-/* EV_INFO2 */ {{F_I2, ST_F6}, {F_I2, ST_F6}, {F_I2, ST_F6}, {F_I2, ST_F6}, {F_I2, ST_F6}, {F_I2, ST_F6}, {F_ill, ST_ILL}},
-/* EV_INFO48*/ {{F_AI8, ST_F7}, {F_AI8, ST_F7}, {F_AI8, ST_F7}, {F_AI8, ST_F7}, {F_NULL, ST_F7}, {F_AI8, ST_F7}, {F_ill, ST_ILL}},
-/* EV_INFO41*/ {{F_AI10, ST_F7}, {F_AI10, ST_F7}, {F_AI10, ST_F7}, {F_AI10, ST_F7}, {F_NULL, ST_F7}, {F_AI10, ST_F7}, {F_ill, ST_ILL}},
-/* EV_DR */ {{F_NULL, ST_F3}, {F_NULL, ST_F4}, {F_NULL, ST_F5}, {F_NULL, ST_F6}, {F_NULL, ST_F7}, {F_NULL, ST_F8}, {F_ill, ST_ILL}},
-/* EV_PU */ {{F_NULL, ST_F3}, {F_NULL, ST_F4}, {F_NULL, ST_F5}, {F_NULL, ST_F6}, {F_NULL, ST_F7}, {F_NULL, ST_F8}, {F_ill, ST_ILL}},
-/* EV_DIS */ {{F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}},
-/* EV_EI */ {{F_NULL, ST_F3}, {F_NULL, ST_F3}, {F_NULL, ST_F3}, {F_NULL, ST_F3}, {F_NULL, ST_F3}, {F_NULL, ST_F3}, {F_ill, ST_ILL}},
-/* EV_ILL */ {{F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}, {F_ill, ST_ILL}}
-};
-
-/*---------------------------------------------------------------------------*
- * event handler
- *---------------------------------------------------------------------------*/
-void
-isic_next_state(struct isic_softc *sc, int event)
-{
- int currstate, newstate;
-
- if(event >= N_EVENTS)
- panic("i4b_l1fsm.c: event >= N_EVENTS\n");
-
- currstate = sc->sc_I430state;
-
- if(currstate >= N_STATES)
- panic("i4b_l1fsm.c: currstate >= N_STATES\n");
-
- newstate = isic_state_tab[event][currstate].newstate;
-
- if(newstate >= N_STATES)
- panic("i4b_l1fsm.c: newstate >= N_STATES\n");
-
- DBGL1(L1_F_MSG, "isic_next_state", ("FSM event [%s]: [%s => %s]\n", event_text[event],
- state_text[currstate],
- state_text[newstate]));
-
- (*isic_state_tab[event][currstate].func)(sc);
-
- if(newstate == ST_ILL)
- {
- newstate = ST_F3;
- DBGL1(L1_F_ERR, "isic_next_state", ("FSM Illegal State ERROR, oldstate = %s, newstate = %s, event = %s!\n",
- state_text[currstate],
- state_text[newstate],
- event_text[event]));
- }
-
- sc->sc_I430state = newstate;
-}
-
-/*---------------------------------------------------------------------------*
- * return pointer to current state description
- *---------------------------------------------------------------------------*/
-char *
-isic_printstate(struct isic_softc *sc)
-{
- return((char *) state_text[sc->sc_I430state]);
-}
-
-#endif /* NISIC > 0 */
-
diff --git a/sys/i4b/layer1/i4b_sws.c b/sys/i4b/layer1/i4b_sws.c
deleted file mode 100644
index c5182b49e3d79..0000000000000
--- a/sys/i4b/layer1/i4b_sws.c
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Copyright (c) 1998 German Tischler. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * Card format:
- *
- * iobase + 0 : reset on (0x03)
- * iobase + 1 : reset off (0x0)
- * iobase + 2 : isac read/write
- * iobase + 3 : hscx read/write ( offset 0-0x3f hscx0 ,
- * offset 0x40-0x7f hscx1 )
- * iobase + 4 : offset for indirect adressing
- *
- *---------------------------------------------------------------------------
- *
- * isic - I4B Siemens ISDN Chipset Driver for SWS cards
- * ====================================================
- *
- * EXPERIMENTAL !!!!
- * =================
- *
- * $Id: i4b_sws.c,v 1.12 1998/12/18 09:32:45 hm Exp $
- *
- * last edit-date: [Sun Dec 13 10:49:25 1998]
- *
- * -hm adding driver to i4b
- * -hm adjustments for FreeBSD < 2.2.6, no PnP support yet
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-
-#include "isic.h"
-#include "opt_i4b.h"
-
-#else
-
-#define NISIC 1
-
-#endif
-
-#if defined (SEDLBAUER) && NISIC > 0
-
-#define SWS_RESON 0 /* reset on */
-#define SWS_RESOFF 1 /* reset off */
-#define SWS_ISAC 2 /* ISAC */
-#define SWS_HSCX0 3 /* HSCX0 */
-#define SWS_RW 4 /* indirect access register */
-#define SWS_HSCX1 5 /* this is for fakeing that we mean hscx1, though */
- /* access is done through hscx0 */
-
-#define SWS_REGS 8 /* we use an area of 8 bytes for io */
-
-#define SWS_BASE(X) ((unsigned int)X&~(SWS_REGS-1))
-#define SWS_PART(X) ((unsigned int)X& (SWS_REGS-1))
-#define SWS_ADDR(X) ((SWS_PART(X) == SWS_ISAC) ? (SWS_BASE(X)+SWS_ISAC) : (SWS_BASE(X)+SWS_HSCX0) )
-#define SWS_REG(X,Y) ((SWS_PART(X) != SWS_HSCX1) ? Y : (Y+0x40) )
-#define SWS_IDO(X) (SWS_BASE(X)+SWS_RW)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#ifndef __FreeBSD__
-static u_int8_t sws_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void sws_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void sws_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void sws_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-void isic_attach_sws __P((struct isic_softc *sc));
-#endif
-
-/*---------------------------------------------------------------------------*
- * SWS P&P ISAC get fifo routine
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-
-static void
-sws_read_fifo(void *buf, const void *base, size_t len)
-{
- outb(SWS_IDO(base),SWS_REG(base,0));
- insb(SWS_ADDR(base),buf,len);
-}
-
-#else
-
-static void
-sws_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, SWS_RW, 0);
- bus_space_read_multi_1(t, h, SWS_ISAC, buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, SWS_RW, 0);
- bus_space_read_multi_1(t, h, SWS_HSCX0, buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, SWS_RW, 0x40);
- bus_space_read_multi_1(t, h, SWS_HSCX0, buf, size);
- break;
- }
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * SWS P&P ISAC put fifo routine
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-
-static void
-sws_write_fifo(void *base, const void *buf, size_t len)
-{
- outb (SWS_IDO(base),SWS_REG(base,0));
- outsb(SWS_ADDR(base),buf,len);
-}
-
-#else
-
-static void
-sws_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, SWS_RW, 0);
- bus_space_write_multi_1(t, h, SWS_ISAC, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, SWS_RW, 0);
- bus_space_write_multi_1(t, h, SWS_HSCX0, (u_int8_t*)buf, size);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, SWS_RW, 0x40);
- bus_space_write_multi_1(t, h, SWS_HSCX0, (u_int8_t*)buf, size);
- break;
- }
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * SWS P&P ISAC put register routine
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-
-static void
-sws_write_reg(u_char *base, u_int offset, u_int v)
-{
- outb(SWS_IDO(base),SWS_REG(base,offset));
- outb(SWS_ADDR(base),v);
-}
-
-#else
-
-static void
-sws_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, SWS_RW, offs);
- bus_space_write_1(t, h, SWS_ISAC, data);
- break;
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, SWS_RW, offs);
- bus_space_write_1(t, h, SWS_HSCX0, data);
- break;
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, SWS_RW, 0x40+offs);
- bus_space_write_1(t, h, SWS_HSCX0, data);
- break;
- }
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * SWS P&P ISAC get register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static u_char
-sws_read_reg(u_char *base, u_int offset)
-{
- outb(SWS_IDO(base),SWS_REG(base,offset));
- return inb(SWS_ADDR(base));
-}
-
-#else
-
-static u_int8_t
-sws_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- switch (what) {
- case ISIC_WHAT_ISAC:
- bus_space_write_1(t, h, SWS_RW, offs);
- return bus_space_read_1(t, h, SWS_ISAC);
- case ISIC_WHAT_HSCXA:
- bus_space_write_1(t, h, SWS_RW, offs);
- return bus_space_read_1(t, h, SWS_HSCX0);
- case ISIC_WHAT_HSCXB:
- bus_space_write_1(t, h, SWS_RW, 0x40+offs);
- return bus_space_read_1(t, h, SWS_HSCX0);
- }
- return 0;
-}
-
-#endif
-
-#ifdef __FreeBSD__
-
-/* attach callback routine */
-
-int
-isic_attach_sws(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* fill in isic_softc structure */
-
- sc->readreg = sws_read_reg;
- sc->writereg = sws_write_reg;
- sc->readfifo = sws_read_fifo;
- sc->writefifo = sws_write_fifo;
- sc->clearirq = NULL;
- sc->sc_unit = dev->id_unit;
- sc->sc_irq = dev->id_irq;
- sc->sc_port = dev->id_iobase;
- sc->sc_cardtyp = CARD_TYPEP_SWS;
- sc->sc_bustyp = BUS_TYPE_IOM2;
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
- dev->id_msize = 0;
-
- ISAC_BASE = (caddr_t) (((u_int) sc->sc_port) + SWS_ISAC);
- HSCX_A_BASE = (caddr_t) (((u_int) sc->sc_port) + SWS_HSCX0);
- HSCX_B_BASE = (caddr_t) (((u_int) sc->sc_port) + SWS_HSCX1);
-
- /*
- * Read HSCX A/B VSTR. Expected value for the SWS PnP card is
- * 0x05 ( = version 2.1 ) in the least significant bits.
- */
-
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("isic%d: HSCX VSTR test failed for SWS PnP\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- /* reset card */
-
- outb( ((u_int) sc->sc_port) + SWS_RESON , 0x3);
- DELAY(SEC_DELAY / 5);
- outb( ((u_int) sc->sc_port) + SWS_RESOFF, 0);
- DELAY(SEC_DELAY / 5);
-
- return(1);
-}
-
-#else /* !__FreeBSD__ */
-
-void
-isic_attach_sws(struct isic_softc *sc)
-{
- /* setup access routines */
-
- sc->readreg = sws_read_reg;
- sc->writereg = sws_write_reg;
-
- sc->readfifo = sws_read_fifo;
- sc->writefifo = sws_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_SWS;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /*
- * Read HSCX A/B VSTR. Expected value for the SWS PnP card is
- * 0x05 ( = version 2.1 ) in the least significant bits.
- */
-
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("%s: HSCX VSTR test failed for SWS PnP\n",
- sc->sc_dev.dv_xname);
- printf("%s: HSC0: VSTR: %#x\n",
- sc->sc_dev.dv_xname, HSCX_READ(0, H_VSTR));
- printf("%s: HSC1: VSTR: %#x\n",
- sc->sc_dev.dv_xname, HSCX_READ(1, H_VSTR));
- return;
- }
-
- /* reset card */
- {
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_1(t, h, SWS_RESON, 0x3);
- DELAY(SEC_DELAY / 5);
- bus_space_write_1(t, h, SWS_RESOFF, 0);
- DELAY(SEC_DELAY / 5);
- }
-}
-
-#endif /* !__FreeBSD__ */
-
-#endif /* defined(SEDLBAUER) && NISIC > 0 */
diff --git a/sys/i4b/layer1/i4b_tel_s016.c b/sys/i4b/layer1/i4b_tel_s016.c
deleted file mode 100644
index f77a3c184241d..0000000000000
--- a/sys/i4b/layer1/i4b_tel_s016.c
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- * Copyright (c) 1996 Arne Helme. All rights reserved.
- *
- * Copyright (c) 1996 Gary Jennejohn. All rights reserved.
- *
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isic - I4B Siemens ISDN Chipset Driver for Teles S0/16 and clones
- * =================================================================
- *
- * $Id: i4b_tel_s016.c,v 1.12 1998/12/05 18:04:56 hm Exp $
- *
- * last edit-date: [Fri Dec 4 10:40:17 1998]
- *
- * -hm clean up
- * -hm checked with a Creatix ISDN-S0 (PCB version: mp 130.1)
- * -hm more cleanup
- * -hm NetBSD patches from Martin
- * -hm converting asm -> C
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0 && defined(TEL_S0_16)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <machine/md_var.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-static u_char intr_no[] = { 1, 1, 0, 2, 4, 6, 1, 1, 1, 0, 8, 10, 12, 1, 1, 14 };
-
-#ifndef __FreeBSD__
-static u_int8_t tels016_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void tels016_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void tels016_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void tels016_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16 write register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels016_write_reg(u_char *base, u_int i, u_int v)
-{
- if(i & 0x01)
- i |= 0x200;
- base[i] = v;
-}
-
-#else
-
-static const bus_size_t offset[] = { 0x100, 0x180, 0x1c0 };
-
-static void
-tels016_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[1].t;
- bus_space_handle_t h = sc->sc_maps[1].h;
-
- offs += offset[what];
- if (offs & 0x01)
- offs |= 0x200;
-
- bus_space_write_1(t, h, offs, data);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16 read register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static u_char
-tels016_read_reg(u_char *base, u_int i)
-{
- if(i & 0x1)
- i |= 0x200;
- return(base[i]);
-}
-
-#else
-
-static u_int8_t
-tels016_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[1].t;
- bus_space_handle_t h = sc->sc_maps[1].h;
-
- offs += offset[what];
-
- if(offs & 0x01)
- offs |= 0x200;
-
- return bus_space_read_1(t, h, offs);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16 fifo read/write routines
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels016_memcpyb(void *to, const void *from, size_t len)
-{
- for(;len > 0; len--)
- *((unsigned char *)to)++ = *((unsigned char *)from)++;
-}
-
-#else
-
-static void
-tels016_write_fifo(struct isic_softc *sc, int what, const void *data, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[1].t;
- bus_space_handle_t h = sc->sc_maps[1].h;
- bus_space_write_region_1(t, h, offset[what], data, size);
-}
-
-static void
-tels016_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[1].t;
- bus_space_handle_t h = sc->sc_maps[1].h;
- bus_space_read_region_1(t, h, offset[what], buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_probe_s016 - probe for Teles S0/16 and compatibles
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_probe_s016(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
- u_char byte;
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Teles S0/16!\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- if((intr_no[ffs(dev->id_irq) - 1]) == 1)
- {
- printf("isic%d: Error, invalid IRQ [%d] specified for Teles S0/16!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if we got an iobase */
-
- switch(dev->id_iobase)
- {
- case 0xd80:
- case 0xe80:
- case 0xf80:
- break;
-
- default:
- printf("isic%d: Error, invalid iobase 0x%x specified for Teles S0/16!\n",
- dev->id_unit, dev->id_iobase);
- return(0);
- break;
- }
- sc->sc_port = dev->id_iobase;
-
- /* check if valid memory addr */
-
- switch((unsigned int)kvtop(dev->id_maddr))
- {
- case 0xc0000:
- case 0xc2000:
- case 0xc4000:
- case 0xc6000:
- case 0xc8000:
- case 0xca000:
- case 0xcc000:
- case 0xce000:
- case 0xd0000:
- case 0xd2000:
- case 0xd4000:
- case 0xd6000:
- case 0xd8000:
- case 0xda000:
- case 0xdc000:
- case 0xde000:
- break;
-
- default:
- printf("isic%d: Error, invalid mem addr 0x%lx for Teles S0/16!\n",
- dev->id_unit, kvtop(dev->id_maddr));
- return(0);
- break;
- }
- sc->sc_vmem_addr = (caddr_t) dev->id_maddr;
- dev->id_msize = 0x1000;
-
- /* check card signature */
-
- if((byte = inb(sc->sc_port)) != 0x51)
- {
- printf("isic%d: Error, signature 1 0x%x != 0x51 for Teles S0/16!\n",
- dev->id_unit, byte);
- return(0);
- }
-
- if((byte = inb(sc->sc_port + 1)) != 0x93)
- {
- printf("isic%d: Error, signature 2 0x%x != 0x93 for Teles S0/16!\n",
- dev->id_unit, byte);
- return(0);
- }
-
- byte = inb(sc->sc_port + 2);
-
- if((byte != 0x1e) && (byte != 0x1f))
- {
- printf("isic%d: Error, signature 3 0x%x != 0x1e or 0x1f for Teles S0/16!\n",
- dev->id_unit, byte);
- return(0);
- }
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = tels016_read_reg;
- sc->writereg = tels016_write_reg;
-
- sc->readfifo = tels016_memcpyb;
- sc->writefifo = tels016_memcpyb;
-
- /* setup card type */
-
- sc->sc_cardtyp= CARD_TYPEP_16;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM1;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC base addr */
-
- ISAC_BASE = (caddr_t) ((dev->id_maddr) + 0x100);
-
- /* setup HSCX base addr */
-
- HSCX_A_BASE = (caddr_t) ((dev->id_maddr) + 0x180);
- HSCX_B_BASE = (caddr_t) ((dev->id_maddr) + 0x1c0);
-
- return (1);
-}
-
-#else
-
-int
-isic_probe_s016(struct isic_attach_args *ia)
-{
- bus_space_tag_t t = ia->ia_maps[0].t;
- bus_space_handle_t h = ia->ia_maps[0].h;
- u_int8_t b0, b1, b2;
-
- b0 = bus_space_read_1(t, h, 0);
- b1 = bus_space_read_1(t, h, 1);
- b2 = bus_space_read_1(t, h, 2);
-
- if (b0 == 0x51 && b1 == 0x93 && (b2 == 0x1e || b2 == 0x1f))
- return 1;
-
- return 0;
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_attach_s016 - attach Teles S0/16 and compatibles
- *---------------------------------------------------------------------------*/
-int
-#ifdef __FreeBSD__
-isic_attach_s016(struct isa_device *dev)
-#else
-isic_attach_s016(struct isic_softc *sc)
-#endif
-{
-
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-#endif
-
- u_long irq;
-
-#ifndef __FreeBSD__
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = tels016_read_reg;
- sc->writereg = tels016_write_reg;
-
- sc->readfifo = tels016_read_fifo;
- sc->writefifo = tels016_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp= CARD_TYPEP_16;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM1;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
-#endif
-
-#ifdef __FreeBSD__
- if((irq = intr_no[ffs(dev->id_irq) - 1]) == 1)
- {
- printf("isic%d: Attach error, invalid IRQ [%d] specified for Teles S0/16!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- }
-#else
- irq = intr_no[sc->sc_irq];
-#endif
-
- /* configure IRQ */
-
-#ifdef __FreeBSD__
- irq |= ((u_long) sc->sc_vmem_addr) >> 9;
-
- DELAY(SEC_DELAY / 10);
- outb(sc->sc_port + 4, irq);
-
- DELAY(SEC_DELAY / 10);
- outb(sc->sc_port + 4, irq | 0x01);
-
- DELAY(SEC_DELAY / 5);
-
- /* set card bit off */
-
- sc->sc_vmem_addr[0x80] = 0;
- DELAY(SEC_DELAY / 5);
-
- /* set card bit on */
-
- sc->sc_vmem_addr[0x80] = 1;
- DELAY(SEC_DELAY / 5);
-
-#else
-
- irq |= ((sc->sc_maddr >> 9) & 0x000000f0);
-
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(sc->sc_maps[0].t, sc->sc_maps[0].h, 4, irq);
-
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(sc->sc_maps[0].t, sc->sc_maps[0].h, 4, irq | 0x01);
-
- DELAY(SEC_DELAY / 5);
-
- /* set card bit off */
-
- bus_space_write_1(sc->sc_maps[1].t, sc->sc_maps[1].h, 0x80, 0);
- DELAY(SEC_DELAY / 5);
-
- /* set card bit on */
-
- bus_space_write_1(sc->sc_maps[1].t, sc->sc_maps[1].h, 0x80, 1);
- DELAY(SEC_DELAY / 5);
-#endif
-
- return (1);
-}
-
-#endif /* ISIC > 0 */
-
diff --git a/sys/i4b/layer1/i4b_tel_s0163.c b/sys/i4b/layer1/i4b_tel_s0163.c
deleted file mode 100644
index 5fdd32961b735..0000000000000
--- a/sys/i4b/layer1/i4b_tel_s0163.c
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * Copyright (c) 1996 Arne Helme. All rights reserved.
- *
- * Copyright (c) 1996 Gary Jennejohn. All rights reserved.
- *
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isic - I4B Siemens ISDN Chipset Driver for Teles S0/16.3
- * ========================================================
- *
- * $Id: i4b_tel_s0163.c,v 1.15 1998/12/05 18:04:58 hm Exp $
- *
- * last edit-date: [Fri Dec 4 10:40:58 1998]
- *
- * -hm clean up
- * -hm more cleanup
- * -hm NetBSD patches from Martin
- * -hm VSTR detection for older 16.3 cards
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0 && defined(TEL_S0_16_3)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-static u_char intr_no[] = { 1, 1, 0, 2, 4, 6, 1, 1, 1, 0, 8, 10, 12, 1, 1, 14 };
-
-#ifndef __FreeBSD__
-static u_int8_t tels0163_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void tels0163_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void tels0163_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void tels0163_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16.3 read fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels0163_read_fifo(void *buf, const void *base, size_t len)
-{
- insb((int)base + 0x3e, (u_char *)buf, (u_int)len);
-}
-
-#else
-
-static void
-tels0163_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_read_multi_1(t, h, o + 0x1e, buf, size);
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16.3 write fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels0163_write_fifo(void *base, const void *buf, size_t len)
-{
- outsb((int)base + 0x3e, (u_char *)buf, (u_int)len);
-}
-
-#else
-
-static void
-tels0163_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_write_multi_1(t, h, o + 0x1e, (u_int8_t*)buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16.3 ISAC put register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels0163_write_reg(u_char *base, u_int offset, u_int v)
-{
- outb((int)base + offset, (u_char)v);
-}
-
-#else
-
-static void
-tels0163_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_write_1(t, h, o + offs - 0x20, data);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16.3 ISAC get register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static u_char
-tels0163_read_reg(u_char *base, u_int offset)
-{
- return (inb((int)base + offset));
-}
-
-#else
-
-static u_int8_t
-tels0163_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- return bus_space_read_1(t, h, o + offs - 0x20);
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_probe_s0163 - probe for Teles S0/16.3 and compatibles
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_probe_s0163(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
- u_char byte;
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Teles S0/16.3!",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- if((intr_no[ffs(dev->id_irq) - 1]) == 1)
- {
- printf("isic%d: Error, invalid IRQ [%d] specified for Teles S0/16.3!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if memory addr specified */
-
- if(dev->id_maddr)
- {
- printf("isic%d: Error, mem addr 0x%lx specified for Teles S0/16.3!",
- dev->id_unit, (u_long)dev->id_maddr);
- return(0);
- }
-
- dev->id_msize = 0;
-
- /* check if we got an iobase */
-
- switch(dev->id_iobase)
- {
- case 0xd80:
- case 0xe80:
- case 0xf80:
- break;
-
- default:
- printf("isic%d: Error, invalid iobase 0x%x specified for Teles S0/16.3!",
- dev->id_unit, dev->id_iobase);
- return(0);
- break;
- }
- sc->sc_port = dev->id_iobase;
-
- if((byte = inb(sc->sc_port)) != 0x51)
- {
- printf("isic%d: Error, signature 1 0x%x != 0x51 for Teles S0/16.3!",
- dev->id_unit, byte);
- return(0);
- }
-
- if((byte = inb(sc->sc_port + 1)) != 0x93)
- {
- printf("isic%d: Error, signature 2 0x%x != 0x93 for Teles S0/16.3!",
- dev->id_unit, byte);
- return(0);
- }
-
- if((byte = inb(sc->sc_port + 2)) != 0x1c)
- {
- printf("isic%d: Error, signature 3 0x%x != 0x1c for Teles S0/16.3!",
- dev->id_unit, byte);
- return(0);
- }
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = tels0163_read_reg;
- sc->writereg = tels0163_write_reg;
-
- sc->readfifo = tels0163_read_fifo;
- sc->writefifo = tels0163_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp= CARD_TYPEP_16_3;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
-
- switch(dev->id_iobase)
- {
- case 0xd80:
- ISAC_BASE = (caddr_t) 0x960;
- HSCX_A_BASE = (caddr_t) 0x160;
- HSCX_B_BASE = (caddr_t) 0x560;
- break;
-
- case 0xe80:
- ISAC_BASE = (caddr_t) 0xa60;
- HSCX_A_BASE = (caddr_t) 0x260;
- HSCX_B_BASE = (caddr_t) 0x660;
- break;
-
- case 0xf80:
- ISAC_BASE = (caddr_t) 0xb60;
- HSCX_A_BASE = (caddr_t) 0x360;
- HSCX_B_BASE = (caddr_t) 0x760;
- break;
- }
-
- /*
- * Read HSCX A/B VSTR. Expected value for the S0/16.3 card is
- * 0x05 or 0x04 (for older 16.3's) in the least significant bits.
- */
-
- if( (((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) &&
- ((HSCX_READ(0, H_VSTR) & 0xf) != 0x4)) ||
- (((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) &&
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x4)) )
- {
- printf("isic%d: HSCX VSTR test failed for Teles S0/16.3\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- return (1);
-}
-
-#else
-
-int
-isic_probe_s0163(struct isic_attach_args *ia)
-{
- bus_space_tag_t t = ia->ia_maps[0].t;
- bus_space_handle_t h = ia->ia_maps[0].h;
- u_int8_t b0, b1, b2;
-
- b0 = bus_space_read_1(t, h, 0);
- b1 = bus_space_read_1(t, h, 1);
- b2 = bus_space_read_1(t, h, 2);
-
- if (b0 == 0x51 && b1 == 0x93 && b2 == 0x1c)
- return 1;
-
- return 0;
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_attach_s0163 - attach Teles S0/16.3 and compatibles
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_attach_s0163(struct isa_device *dev)
-{
- u_char irq;
-
- if((irq = intr_no[ffs(dev->id_irq) - 1]) == 1)
- {
- printf("isic%d: Attach error, invalid IRQ [%d] specified for Teles S0/16.3!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- }
-
- /* configure IRQ */
-
- DELAY(SEC_DELAY / 10);
- outb(dev->id_iobase + 4, irq);
-
- DELAY(SEC_DELAY / 10);
- outb(dev->id_iobase + 4, irq | 0x01);
-
- return (1);
-}
-
-#else
-
-int
-isic_attach_s0163(struct isic_softc *sc)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- u_int8_t irq = intr_no[sc->sc_irq];
-
- /* configure IRQ */
-
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(t, h, 4, irq);
-
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(t, h, 4, irq | 0x01);
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = tels0163_read_reg;
- sc->writereg = tels0163_write_reg;
-
- sc->readfifo = tels0163_read_fifo;
- sc->writefifo = tels0163_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp= CARD_TYPEP_16_3;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- return (1);
-}
-#endif
-
-#endif /* ISIC > 0 */
-
diff --git a/sys/i4b/layer1/i4b_tel_s08.c b/sys/i4b/layer1/i4b_tel_s08.c
deleted file mode 100644
index 6115e12ab6245..0000000000000
--- a/sys/i4b/layer1/i4b_tel_s08.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright (c) 1996 Arne Helme. All rights reserved.
- *
- * Copyright (c) 1996 Gary Jennejohn. All rights reserved.
- *
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isic - I4B Siemens ISDN Chipset Driver for Teles S0/8 and clones
- * ================================================================
- *
- * $Id: i4b_tel_s08.c,v 1.13 1998/12/05 18:04:59 hm Exp $
- *
- * last edit-date: [Fri Dec 4 10:39:12 1998]
- *
- * -hm clean up
- * -hm more cleanup
- * -hm NetBSD patches from Martin
- * -hm making it finally work (checked with board revision 1.2)
- * -hm converting asm -> C
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0 && defined(TEL_S0_8)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <machine/md_var.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#ifndef __FreeBSD__
-static u_int8_t tels08_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void tels08_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void tels08_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-static void tels08_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/8 write register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels08_write_reg(u_char *base, u_int i, u_int v)
-{
- if(i & 0x01)
- i |= 0x200;
- base[i] = v;
-}
-
-#else
-
-static const bus_size_t offset[] = { 0x100, 0x180, 0x1c0 };
-
-static void
-tels08_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
-
- offs += offset[what];
-
- if (offs & 0x01)
- offs |= 0x200;
-
- bus_space_write_1(t, h, offs, data);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/8 read register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static u_char
-tels08_read_reg(u_char *base, u_int i)
-{
- if(i & 0x1)
- i |= 0x200;
- return(base[i]);
-}
-
-#else
-
-static u_int8_t
-tels08_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
-
- offs += offset[what];
-
- if (offs & 0x01)
- offs |= 0x200;
-
- return bus_space_read_1(t, h, offs);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/8 fifo read/write access
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels08_memcpyb(void *to, const void *from, size_t len)
-{
- for(;len > 0; len--)
- *((unsigned char *)to)++ = *((unsigned char *)from)++;
-}
-
-#else
-
-static void
-tels08_write_fifo(struct isic_softc *sc, int what, const void *data, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_region_1(t, h, offset[what], data, size);
-}
-
-static void
-tels08_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_read_region_1(t, h, offset[what], buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_probe_s08 - probe for Teles S0/8 and compatibles
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-int
-isic_probe_s08(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Teles S0/8!\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- switch(ffs(dev->id_irq)-1)
- {
- case 2:
- case 9: /* XXX */
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- break;
-
- default:
- printf("isic%d: Error, invalid IRQ [%d] specified for Teles S0/8!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- break;
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if we got an iobase */
-
- if(dev->id_iobase > 0)
- {
- printf("isic%d: Error, iobase specified for Teles S0/8!\n",
- dev->id_unit);
- return(0);
- }
-
- /* check if inside memory range of 0xA0000 .. 0xDF000 */
-
- if( (kvtop(dev->id_maddr) < 0xa0000) ||
- (kvtop(dev->id_maddr) > 0xdf000) )
- {
- printf("isic%d: Error, mem addr 0x%lx outside 0xA0000-0xDF000 for Teles S0/8!\n",
- dev->id_unit, kvtop(dev->id_maddr));
- return(0);
- }
-
- sc->sc_vmem_addr = (caddr_t) dev->id_maddr;
- dev->id_msize = 0x1000;
-
- /* setup ISAC access routines */
-
- sc->clearirq = NULL;
- sc->readreg = tels08_read_reg;
- sc->writereg = tels08_write_reg;
-
- sc->readfifo = tels08_memcpyb;
- sc->writefifo = tels08_memcpyb;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_8;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM1;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC base addr */
-
- ISAC_BASE = (caddr_t)((dev->id_maddr) + 0x100);
-
- /* setup HSCX base addr */
-
- HSCX_A_BASE = (caddr_t)((dev->id_maddr) + 0x180);
- HSCX_B_BASE = (caddr_t)((dev->id_maddr) + 0x1c0);
-
- return (1);
-}
-
-#else
-
-int
-isic_probe_s08(struct isic_attach_args *ia)
-{
- /* no real sensible probe is easy - write to fifo memory
- and read back to verify there is memory doesn't work,
- because you talk to tx fifo and rcv fifo. So, just check
- HSCX version, which at least fails if no card present
- at the given location. */
- bus_space_tag_t t = ia->ia_maps[0].t;
- bus_space_handle_t h = ia->ia_maps[0].h;
- u_int8_t v1, v2;
-
- /* HSCX A VSTR */
- v1 = bus_space_read_1(t, h, offset[1] + H_VSTR) & 0x0f;
- if (v1 != HSCX_VA1 && v1 != HSCX_VA2 && v1 != HSCX_VA3 && v1 != HSCX_V21)
- return 0;
-
- /* HSCX B VSTR */
- v2 = bus_space_read_1(t, h, offset[2] + H_VSTR) & 0x0f;
- if (v2 != HSCX_VA1 && v2 != HSCX_VA2 && v2 != HSCX_VA3 && v2 != HSCX_V21)
- return 0;
-
- /* both HSCX channels should have the same version... */
- if (v1 != v2)
- return 0;
-
- return 1;
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_attach_s08 - attach Teles S0/8 and compatibles
- *---------------------------------------------------------------------------*/
-int
-#ifdef __FreeBSD__
-isic_attach_s08(struct isa_device *dev)
-#else
-isic_attach_s08(struct isic_softc *sc)
-#endif
-{
-#ifdef __FreeBSD__
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-#else
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
-#endif
-
- /* set card off */
-
-#ifdef __FreeBSD__
- sc->sc_vmem_addr[0x80] = 0;
-#else
- bus_space_write_1(t, h, 0x80, 0);
-#endif
-
- DELAY(SEC_DELAY / 5);
-
- /* set card on */
-
-#ifdef __FreeBSD__
- sc->sc_vmem_addr[0x80] = 1;
-#else
- bus_space_write_1(t, h, 0x80, 1);
-#endif
-
- DELAY(SEC_DELAY / 5);
-
-#ifndef __FreeBSD__
-
- /* setup ISAC access routines */
-
- sc->clearirq = NULL;
- sc->readreg = tels08_read_reg;
- sc->writereg = tels08_write_reg;
- sc->readfifo = tels08_read_fifo;
- sc->writefifo = tels08_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_8;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM1;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
-#endif
-
- return (1);
-}
-
-#endif /* ISIC > 0 */
-
diff --git a/sys/i4b/layer1/i4b_tel_s0P.c b/sys/i4b/layer1/i4b_tel_s0P.c
deleted file mode 100644
index 9bccd77b6fc92..0000000000000
--- a/sys/i4b/layer1/i4b_tel_s0P.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright (c) 1997 Andrew Gordon. All rights reserved.
- *
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isic - I4B Siemens ISDN Chipset Driver for Teles S0 PnP
- * =======================================================
- *
- * EXPERIMENTAL !!!
- * ================
- *
- * $Id: i4b_tel_s0P.c,v 1.12 1998/12/13 09:52:34 hm Exp $
- *
- * last edit-date: [Thu Dec 10 07:11:15 1998]
- *
- * -hm rudimentary PnP support, hint from Andrew Gordon
- * -hm more cleanup
- * -hm NetBSD patches from Martin
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0 && defined(TEL_S0_16_3_P)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#ifndef __FreeBSD__
-static u_int8_t tels0163P_read_reg __P((struct isic_softc *sc, int what, bus_size_t offs));
-static void tels0163P_write_reg __P((struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data));
-static void tels0163P_read_fifo __P((struct isic_softc *sc, int what, void *buf, size_t size));
-static void tels0163P_write_fifo __P((struct isic_softc *sc, int what, const void *data, size_t size));
-void isic_attach_s0163P __P((struct isic_softc *sc));
-#endif
-
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16.3 PnP read fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels0163P_read_fifo(void *buf, const void *base, size_t len)
-{
- insb((int)base + 0x3e, (u_char *)buf, (u_int)len);
-}
-
-#else
-
-static void
-tels0163P_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_read_multi_1(t, h, o + 0x3e, buf, size);
-}
-
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16.3 PnP write fifo routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels0163P_write_fifo(void *base, const void *buf, size_t len)
-{
- outsb((int)base + 0x3e, (u_char *)buf, (u_int)len);
-}
-
-#else
-
-static void
-tels0163P_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_write_multi_1(t, h, o + 0x3e, (u_int8_t*)buf, size);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16.3 PnP write register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static void
-tels0163P_write_reg(u_char *base, u_int offset, u_int v)
-{
- outb((int)base + offset, (u_char)v);
-}
-
-#else
-
-static void
-tels0163P_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- bus_space_write_1(t, h, o + offs, data);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Teles S0/16.3 PnP read register routine
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-
-static u_char
-tels0163P_read_reg(u_char *base, u_int offset)
-{
- return (inb((int)base + offset));
-}
-
-#else
-
-static u_int8_t
-tels0163P_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[what+1].t;
- bus_space_handle_t h = sc->sc_maps[what+1].h;
- bus_size_t o = sc->sc_maps[what+1].offset;
- return bus_space_read_1(t, h, o + offs);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_probe_s0163P - probe for Teles S0/16.3 PnP and compatibles
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_probe_s0163P(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Teles S0/16.3 PnP!\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- switch(ffs(dev->id_irq) - 1)
- {
- case 3:
- case 5:
- case 7:
- case 10:
- case 11:
- case 12:
- break;
-
- default:
- printf("isic%d: Error, invalid IRQ [%d] specified for Teles S0/16.3 PnP!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- break;
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if memory addr specified */
-
- if(dev->id_maddr)
- {
- printf("isic%d: Error, mem addr 0x%lx specified for Teles S0/16.3 PnP!\n",
- dev->id_unit, (u_long)dev->id_maddr);
- return(0);
- }
- dev->id_msize = 0;
-
- /* check if we got an iobase */
-
- switch(dev->id_iobase)
- {
- case 0x580:
- case 0x500:
- case 0x680:
- break;
-
- default:
- printf("isic%d: Error, invalid iobase 0x%x specified for Teles S0/16.3 PnP!\n",
- dev->id_unit, dev->id_iobase);
- return(0);
- break;
- }
- sc->sc_port = dev->id_iobase;
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = tels0163P_read_reg;
- sc->writereg = tels0163P_write_reg;
-
- sc->readfifo = tels0163P_read_fifo;
- sc->writefifo = tels0163P_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_163P;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
-
- switch(dev->id_iobase)
- {
- case 0x580:
- ISAC_BASE = (caddr_t) 0x580 - 0x20;
- HSCX_A_BASE = (caddr_t) 0x180 - 0x20;
- HSCX_B_BASE = (caddr_t) 0x180;
- break;
-
- case 0x500:
- ISAC_BASE = (caddr_t) 0x500 - 0x20;
- HSCX_A_BASE = (caddr_t) 0x100 - 0x20;
- HSCX_B_BASE = (caddr_t) 0x100;
- break;
-
- case 0x680:
- ISAC_BASE = (caddr_t) 0x680 - 0x20;
- HSCX_A_BASE = (caddr_t) 0x280 - 0x20;
- HSCX_B_BASE = (caddr_t) 0x280;
- break;
- }
-
- /*
- * Read HSCX A/B VSTR. Expected value for the S0/16.3 PnP card is
- * 0x05 in the least significant bits.
- */
-
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("isic%d: HSCX VSTR test failed for Teles S0/16.3 PnP\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- return (1);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * isic_attach_s0163P - attach Teles S0/16.3 PnP and compatibles
- *---------------------------------------------------------------------------*/
-#ifdef __FreeBSD__
-int
-isic_attach_s0163P(struct isa_device *dev)
-{
- outb((dev->id_iobase) + 0x1c, 0);
- DELAY(SEC_DELAY / 10);
- outb((dev->id_iobase) + 0x1c, 1);
- DELAY(SEC_DELAY / 10);
- return(1);
-}
-
-#else
-
-void
-isic_attach_s0163P(struct isic_softc *sc)
-{
- /* init card */
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- bus_space_write_1(t, h, 0x1c, 0);
- DELAY(SEC_DELAY / 10);
- bus_space_write_1(t, h, 0x1c, 1);
- DELAY(SEC_DELAY / 10);
-
- /* setup access routines */
-
- sc->clearirq = NULL;
- sc->readreg = tels0163P_read_reg;
- sc->writereg = tels0163P_write_reg;
-
- sc->readfifo = tels0163P_read_fifo;
- sc->writefifo = tels0163P_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_163P;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-}
-#endif
-
-#endif /* ISIC > 0 */
-
diff --git a/sys/i4b/layer1/i4b_usr_sti.c b/sys/i4b/layer1/i4b_usr_sti.c
deleted file mode 100644
index db89296160faf..0000000000000
--- a/sys/i4b/layer1/i4b_usr_sti.c
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_usr_sti.c - USRobotics Sportster ISDN TA intern (Tina-pp)
- * -------------------------------------------------------------
- *
- * $Id: i4b_usr_sti.c,v 1.16 1998/12/05 18:05:02 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:25:34 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#if defined(__FreeBSD__)
-#include "isic.h"
-#include "opt_i4b.h"
-#else
-#define NISIC 1
-#endif
-#if NISIC > 0 && defined(USR_STI)
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-
-#ifdef __FreeBSD__
-#include <machine/clock.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#endif
-
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_global.h>
-
-/*---------------------------------------------------------------------------*
- * USR Sportster TA intern special registers
- *---------------------------------------------------------------------------*/
-#define USR_HSCXA_OFF 0x0000
-#define USR_HSCXB_OFF 0x4000
-#define USR_INTL_OFF 0x8000
-#define USR_ISAC_OFF 0xc000
-
-#define USR_RES_BIT 0x80 /* 0 = normal, 1 = reset ISAC/HSCX */
-#define USR_INTE_BIT 0x40 /* 0 = IRQ disabled, 1 = IRQ's enabled */
-#define USR_IL_MASK 0x07 /* IRQ level config */
-
-static u_char intr_no[] = { 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 3, 4, 5, 0, 6, 7 };
-
-#ifdef __FreeBSD__
-
-#define ADDR(reg) \
- (((reg/4) * 1024) + ((reg%4) * 2))
-
-/*---------------------------------------------------------------------------*
- * USRobotics read fifo routine
- *---------------------------------------------------------------------------*/
-static void
-usrtai_read_fifo(void *buf, const void *base, size_t len)
-{
- register int offset = 0;
-
- for(;len > 0; len--, offset++)
- *((u_char *)buf + offset) = inb((int)base + ADDR(offset));
-}
-
-/*---------------------------------------------------------------------------*
- * USRobotics write fifo routine
- *---------------------------------------------------------------------------*/
-static void
-usrtai_write_fifo(void *base, const void *buf, size_t len)
-{
- register int offset = 0;
-
- for(;len > 0; len--, offset++)
- outb((int)base + ADDR(offset), *((u_char *)buf + offset));
-}
-
-/*---------------------------------------------------------------------------*
- * USRobotics write register routine
- *---------------------------------------------------------------------------*/
-static void
-usrtai_write_reg(u_char *base, u_int offset, u_int v)
-{
- outb((int)base + ADDR(offset), (u_char)v);
-}
-
-/*---------------------------------------------------------------------------*
- * USRobotics read register routine
- *---------------------------------------------------------------------------*/
-static u_char
-usrtai_read_reg(u_char *base, u_int offset)
-{
- return(inb((int)base + ADDR(offset)));
-}
-
-/*---------------------------------------------------------------------------*
- * isic_probe_usrtai - probe for USR
- *---------------------------------------------------------------------------*/
-int
-isic_probe_usrtai(struct isa_device *dev)
-{
- struct isic_softc *sc = &isic_sc[dev->id_unit];
-
- /* check max unit range */
-
- if(dev->id_unit >= ISIC_MAXUNIT)
- {
- printf("isic%d: Error, unit %d >= MAXUNIT for USR Sportster TA!\n",
- dev->id_unit, dev->id_unit);
- return(0);
- }
- sc->sc_unit = dev->id_unit;
-
- /* check IRQ validity */
-
- if((intr_no[ffs(dev->id_irq) - 1]) == 0)
- {
- printf("isic%d: Error, invalid IRQ [%d] specified for USR Sportster TA!\n",
- dev->id_unit, (ffs(dev->id_irq))-1);
- return(0);
- }
- sc->sc_irq = dev->id_irq;
-
- /* check if memory addr specified */
-
- if(dev->id_maddr)
- {
- printf("isic%d: Error, mem addr 0x%lx specified for USR Sportster TA!\n",
- dev->id_unit, (u_long)dev->id_maddr);
- return(0);
- }
- dev->id_msize = 0;
-
- /* check if we got an iobase */
-
- switch(dev->id_iobase)
- {
- case 0x200:
- case 0x208:
- case 0x210:
- case 0x218:
- case 0x220:
- case 0x228:
- case 0x230:
- case 0x238:
- case 0x240:
- case 0x248:
- case 0x250:
- case 0x258:
- case 0x260:
- case 0x268:
- case 0x270:
- case 0x278:
- break;
-
- default:
- printf("isic%d: Error, invalid iobase 0x%x specified for USR Sportster TA!\n",
- dev->id_unit, dev->id_iobase);
- return(0);
- break;
- }
- sc->sc_port = dev->id_iobase;
-
- /* setup ISAC access routines */
-
- sc->clearirq = NULL;
- sc->readreg = usrtai_read_reg;
- sc->writereg = usrtai_write_reg;
-
- sc->readfifo = usrtai_read_fifo;
- sc->writefifo = usrtai_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_USRTA;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* setup ISAC and HSCX base addr */
-
- ISAC_BASE = (caddr_t)dev->id_iobase + USR_ISAC_OFF;
- HSCX_A_BASE = (caddr_t)dev->id_iobase + USR_HSCXA_OFF;
- HSCX_B_BASE = (caddr_t)dev->id_iobase + USR_HSCXB_OFF;
-
- /*
- * Read HSCX A/B VSTR. Expected value for USR Sportster TA based
- * boards is 0x05 in the least significant bits.
- */
-
- if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
- ((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
- {
- printf("isic%d: HSCX VSTR test failed for USR Sportster TA\n",
- dev->id_unit);
- printf("isic%d: HSC0: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(0, H_VSTR));
- printf("isic%d: HSC1: VSTR: %#x\n",
- dev->id_unit, HSCX_READ(1, H_VSTR));
- return (0);
- }
-
- return (1);
-}
-
-/*---------------------------------------------------------------------------*
- * isic_attach_usrtai - attach USR
- *---------------------------------------------------------------------------*/
-int
-isic_attach_usrtai(struct isa_device *dev)
-{
- u_char irq = 0;
-
- /* reset the HSCX and ISAC chips */
-
- outb(dev->id_iobase + USR_INTL_OFF, USR_RES_BIT);
- DELAY(SEC_DELAY / 10);
-
- outb(dev->id_iobase + USR_INTL_OFF, 0x00);
- DELAY(SEC_DELAY / 10);
-
- /* setup IRQ */
-
- if((irq = intr_no[ffs(dev->id_irq) - 1]) == 0)
- {
- printf("isic%d: Attach error, invalid IRQ [%d] specified for USR Sportster TA!\n",
- dev->id_unit, ffs(dev->id_irq)-1);
- return(0);
- }
-
- /* configure and enable irq */
-
- outb(dev->id_iobase + USR_INTL_OFF, irq | USR_INTE_BIT);
- DELAY(SEC_DELAY / 10);
-
- return (1);
-}
-
-#else /* end of FreeBSD, start NetBSD */
-
-/*
- * Use of sc->sc_maps:
- * 0 : config register
- * 1 - 16 : HSCX A registers
- * 17 - 32 : HSCX B registers
- * 33 - 48 : ISAC registers
- */
-
-#define USR_REG_OFFS(reg) ((reg % 4) * 2)
-#define USR_HSCXA_MAP(reg) ((reg / 4) + 1)
-#define USR_HSCXB_MAP(reg) ((reg / 4) + 17)
-#define USR_ISAC_MAP(reg) ((reg / 4) + 33)
-
-static int map_base[] = { 33, 1, 17, 0 }; /* ISAC, HSCX A, HSCX B */
-
-/*---------------------------------------------------------------------------*
- * USRobotics read fifo routine
- *---------------------------------------------------------------------------*/
-static void
-usrtai_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- int map, off, offset;
- u_char * p = buf;
- bus_space_tag_t t;
- bus_space_handle_t h;
-
- for (offset = 0; size > 0; size--, offset++) {
- map = map_base[what] + (offset / 4);
- t = sc->sc_maps[map].t;
- h = sc->sc_maps[map].h;
- off = USR_REG_OFFS(offset);
-
- *p++ = bus_space_read_1(t, h, off);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * USRobotics write fifo routine
- *---------------------------------------------------------------------------*/
-static void
-usrtai_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- int map, off, offset;
- const u_char * p = buf;
- bus_space_tag_t t;
- bus_space_handle_t h;
- u_char v;
-
- for (offset = 0; size > 0; size--, offset++) {
- map = map_base[what] + (offset / 4);
- t = sc->sc_maps[map].t;
- h = sc->sc_maps[map].h;
- off = USR_REG_OFFS(offset);
-
- v = *p++;
- bus_space_write_1(t, h, off, v);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * USRobotics write register routine
- *---------------------------------------------------------------------------*/
-static void
-usrtai_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- int map = map_base[what] + (offs / 4),
- off = USR_REG_OFFS(offs);
- bus_space_tag_t t = sc->sc_maps[map].t;
- bus_space_handle_t h = sc->sc_maps[map].h;
-
- bus_space_write_1(t, h, off, data);
-}
-
-/*---------------------------------------------------------------------------*
- * USRobotics read register routine
- *---------------------------------------------------------------------------*/
-static u_char
-usrtai_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- int map = map_base[what] + (offs / 4),
- off = USR_REG_OFFS(offs);
- bus_space_tag_t t = sc->sc_maps[map].t;
- bus_space_handle_t h = sc->sc_maps[map].h;
-
- return bus_space_read_1(t, h, off);
-}
-
-/*---------------------------------------------------------------------------*
- * isic_probe_usrtai - probe for USR
- *---------------------------------------------------------------------------*/
-int
-isic_probe_usrtai(struct isic_attach_args *ia)
-{
- /*
- * Read HSCX A/B VSTR. Expected value for IOM2 based
- * boards is 0x05 in the least significant bits.
- */
-
- if(((bus_space_read_1(ia->ia_maps[USR_HSCXA_MAP(H_VSTR)].t, ia->ia_maps[USR_HSCXA_MAP(H_VSTR)].h, USR_REG_OFFS(H_VSTR)) & 0x0f) != 0x05) ||
- ((bus_space_read_1(ia->ia_maps[USR_HSCXB_MAP(H_VSTR)].t, ia->ia_maps[USR_HSCXB_MAP(H_VSTR)].h, USR_REG_OFFS(H_VSTR)) & 0x0f) != 0x05))
- return 0;
-
- return (1);
-}
-
-/*---------------------------------------------------------------------------*
- * isic_attach_usrtai - attach USR
- *---------------------------------------------------------------------------*/
-int
-isic_attach_usrtai(struct isic_softc *sc)
-{
- bus_space_tag_t t = sc->sc_maps[0].t;
- bus_space_handle_t h = sc->sc_maps[0].h;
- u_char irq = intr_no[sc->sc_irq];
-
- sc->clearirq = NULL;
- sc->readreg = usrtai_read_reg;
- sc->writereg = usrtai_write_reg;
-
- sc->readfifo = usrtai_read_fifo;
- sc->writefifo = usrtai_write_fifo;
-
- /* setup card type */
-
- sc->sc_cardtyp = CARD_TYPEP_USRTA;
-
- /* setup IOM bus type */
-
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* reset the HSCX and ISAC chips */
-
- bus_space_write_1(t, h, 0, USR_RES_BIT);
- DELAY(SEC_DELAY / 10);
-
- bus_space_write_1(t, h, 0, 0x00);
- DELAY(SEC_DELAY / 10);
-
- /* setup IRQ */
-
- bus_space_write_1(t, h, 0, irq | USR_INTE_BIT);
- DELAY(SEC_DELAY / 10);
-
- return (1);
-}
-
-#endif /* __FreeBSD__ */
-
-#endif /* ISIC > 0 */
diff --git a/sys/i4b/layer1/isa_isic.c b/sys/i4b/layer1/isa_isic.c
deleted file mode 100644
index 94e4bf7e4151f..0000000000000
--- a/sys/i4b/layer1/isa_isic.c
+++ /dev/null
@@ -1,828 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Martin Husemann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isa_isic.c - ISA bus frontend for i4b_isic driver
- * --------------------------------------------------
- *
- * $Id: isa_isic.c,v 1.18 1998/12/16 13:39:47 hm Exp $
- *
- * last edit-date: [Mon Dec 14 10:53:16 1998]
- *
- * -mh original implementation
- * -hm NetBSD patches from Martin
- *
- *---------------------------------------------------------------------------*/
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/errno.h>
-#include <sys/syslog.h>
-#include <sys/device.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-
-#include <machine/cpu.h>
-#include <machine/intr.h>
-#include <machine/bus.h>
-
-#include <dev/isa/isavar.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-
-#if defined(__OpenBSD__)
-#define __BROKEN_INDIRECT_CONFIG
-#endif
-
-/* local functions */
-#ifdef __BROKEN_INDIRECT_CONFIG
-static int isa_isic_probe __P((struct device *, void *, void *));
-#else
-static int isa_isic_probe __P((struct device *, struct cfdata *, void *));
-#endif
-
-static void isa_isic_attach __P((struct device *, struct device *, void *));
-static int setup_io_map __P((int flags, bus_space_tag_t iot,
- bus_space_tag_t memt, bus_size_t iobase, bus_size_t maddr,
- int *num_mappings, struct isic_io_map *maps, int *iosize,
- int *msize));
-static void args_unmap __P((int *num_mappings, struct isic_io_map *maps));
-
-struct cfattach isa_isic_ca = {
- sizeof(struct isic_softc), isa_isic_probe, isa_isic_attach
-};
-
-
-/*
- * Probe card
- */
-static int
-#ifdef __BROKEN_INDIRECT_CONFIG
-isa_isic_probe(parent, match, aux)
-#else
-isa_isic_probe(parent, cf, aux)
-#endif
- struct device *parent;
-#ifdef __BROKEN_INDIRECT_CONFIG
- void *match;
-#else
- struct cfdata *cf;
-#endif
- void *aux;
-{
-#ifdef __BROKEN_INDIRECT_CONFIG
- struct cfdata *cf = ((struct device*)match)->dv_cfdata;
-#endif
- struct isa_attach_args *ia = aux;
- bus_space_tag_t memt = ia->ia_memt, iot = ia->ia_iot;
- int flags = cf->cf_flags;
- struct isic_attach_args args;
- int ret = 0;
-
- /* check irq */
- if (ia->ia_irq == IRQUNK) {
- printf("isic%d: config error: no IRQ specified\n", cf->cf_unit);
- return 0;
- }
-
- /* setup MI attach args */
- bzero(&args, sizeof(args));
- args.ia_flags = flags;
-
- /* if card type specified setup io map for that card */
- switch(flags)
- {
- case FLAG_TELES_S0_8:
- case FLAG_TELES_S0_16:
- case FLAG_TELES_S0_163:
- case FLAG_AVM_A1:
- case FLAG_USR_ISDN_TA_INT:
- case FLAG_ITK_IX1:
- if (setup_io_map(flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &ia->ia_msize)) {
- ret = 0;
- goto done;
- }
- break;
-
- default:
- /* no io map now, will figure card type later */
- break;
- }
-
- /* probe card */
- switch(flags)
- {
-#ifdef DYNALINK
- case FLAG_DYNALINK:
- ret = isic_probe_Dyn(&args);
- break;
-#endif
-
-#ifdef TEL_S0_8
- case FLAG_TELES_S0_8:
- ret = isic_probe_s08(&args);
- break;
-#endif
-
-#ifdef TEL_S0_16
- case FLAG_TELES_S0_16:
- ret = isic_probe_s016(&args);
- break;
-#endif
-
-#ifdef TEL_S0_16_3
- case FLAG_TELES_S0_163:
- ret = isic_probe_s0163(&args);
- break;
-#endif
-
-#ifdef AVM_A1
- case FLAG_AVM_A1:
- ret = isic_probe_avma1(&args);
- break;
-#endif
-
-#ifdef USR_STI
- case FLAG_USR_ISDN_TA_INT:
- ret = isic_probe_usrtai(&args);
- break;
-#endif
-
-#ifdef ITKIX1
- case FLAG_ITK_IX1:
- ret = isic_probe_itkix1(&args);
- break;
-#endif
-
- default:
- /* No card type given, try to figure ... */
- if (ia->ia_iobase == IOBASEUNK) {
- ret = 0;
-#ifdef TEL_S0_8
- /* only Teles S0/8 will work without IO */
- args.ia_flags = FLAG_TELES_S0_8;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_s08(&args);
- }
-#endif /* TEL_S0_8 */
- } else if (ia->ia_maddr == MADDRUNK) {
- ret = 0;
-#ifdef TEL_S0_16_3
- /* no shared memory, only a 16.3 based card,
- AVM A1, the usr sportster or an ITK would work */
- args.ia_flags = FLAG_TELES_S0_163;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_s0163(&args);
- if (ret)
- break;
- }
-#endif /* TEL_S0_16_3 */
-#ifdef AVM_A1
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
- args.ia_flags = FLAG_AVM_A1;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_avma1(&args);
- if (ret)
- break;
- }
-#endif /* AVM_A1 */
-#ifdef USR_STI
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
- args.ia_flags = FLAG_USR_ISDN_TA_INT;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_usrtai(&args);
- if (ret)
- break;
- }
-#endif /* USR_STI */
-
-#ifdef ITKIX1
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
- args.ia_flags = FLAG_ITK_IX1;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_itkix1(&args);
- if (ret)
- break;
- }
-#endif /* ITKIX1 */
-
- } else {
-#ifdef TEL_S0_16_3
- /* could be anything */
- args.ia_flags = FLAG_TELES_S0_163;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_s0163(&args);
- if (ret)
- break;
- }
-#endif /* TEL_S0_16_3 */
-#ifdef TEL_S0_16
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
- args.ia_flags = FLAG_TELES_S0_16;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_s016(&args);
- if (ret)
- break;
- }
-#endif /* TEL_S0_16 */
-#ifdef AVM_A1
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
- args.ia_flags = FLAG_AVM_A1;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_avma1(&args);
- if (ret)
- break;
- }
-#endif /* AVM_A1 */
-#ifdef TEL_S0_8
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
- args.ia_flags = FLAG_TELES_S0_8;
- if (setup_io_map(args.ia_flags, iot, memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0],
- &(ia->ia_iosize), &(ia->ia_msize)) == 0)
- {
- ret = isic_probe_s08(&args);
- }
-#endif /* TEL_S0_8 */
- }
- break;
- }
-
-done:
- /* unmap resources */
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-
- return ret;
-}
-
-/*
- * Attach the card
- */
-static void
-isa_isic_attach(parent, self, aux)
- struct device *parent, *self;
- void *aux;
-{
- struct isic_softc *sc = (void *)self;
- struct isa_attach_args *ia = aux;
- int flags = sc->sc_dev.dv_cfdata->cf_flags;
- int ret = 0;
- struct isic_attach_args args;
-
- /* Setup parameters */
- sc->sc_unit = sc->sc_dev.dv_unit;
- sc->sc_irq = ia->ia_irq;
- sc->sc_maddr = ia->ia_maddr;
- sc->sc_num_mappings = 0;
- sc->sc_maps = NULL;
- switch(flags)
- {
- case FLAG_TELES_S0_8:
- case FLAG_TELES_S0_16:
- case FLAG_TELES_S0_163:
- case FLAG_AVM_A1:
- case FLAG_USR_ISDN_TA_INT:
- setup_io_map(flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &(sc->sc_num_mappings), NULL, NULL, NULL);
- MALLOC_MAPS(sc);
- setup_io_map(flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &(sc->sc_num_mappings), &(sc->sc_maps[0]), NULL, NULL);
- break;
-
- default:
- /* No card type given, try to figure ... */
-
- /* setup MI attach args */
- bzero(&args, sizeof(args));
- args.ia_flags = flags;
-
- /* Probe cards */
- if (ia->ia_iobase == IOBASEUNK) {
- ret = 0;
-#ifdef TEL_S0_8
- /* only Teles S0/8 will work without IO */
- args.ia_flags = FLAG_TELES_S0_8;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_s08(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* TEL_S0_8 */
- } else if (ia->ia_maddr == MADDRUNK) {
- /* no shared memory, only a 16.3 based card,
- AVM A1, the usr sportster or an ITK would work */
- ret = 0;
-#ifdef TEL_S0_16_3
- args.ia_flags = FLAG_TELES_S0_163;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_s0163(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* TEL_S0_16_3 */
-#ifdef AVM_A1
- args.ia_flags = FLAG_AVM_A1;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_avma1(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* AVM_A1 */
-#ifdef USR_STI
- args.ia_flags = FLAG_USR_ISDN_TA_INT;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_usrtai(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* USR_STI */
-#ifdef ITKIX1
- args.ia_flags = FLAG_ITK_IX1;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_itkix1(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* ITKIX1 */
- } else {
- /* could be anything */
- ret = 0;
-#ifdef TEL_S0_16_3
- args.ia_flags = FLAG_TELES_S0_163;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_s0163(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* TEL_S0_16_3 */
-#ifdef TEL_S0_16
- args.ia_flags = FLAG_TELES_S0_16;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_s016(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* TEL_S0_16 */
-#ifdef AVM_A1
- args.ia_flags = FLAG_AVM_A1;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_avma1(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* AVM_A1 */
-#ifdef TEL_S0_8
- args.ia_flags = FLAG_TELES_S0_8;
- setup_io_map(args.ia_flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &args.ia_num_mappings, &args.ia_maps[0], NULL, NULL);
- ret = isic_probe_s08(&args);
- if (ret)
- goto found;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
-#endif /* TEL_S0_8 */
- }
- break;
-
- found:
- flags = args.ia_flags;
- sc->sc_num_mappings = args.ia_num_mappings;
- args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
- if (ret) {
- MALLOC_MAPS(sc);
- setup_io_map(flags, ia->ia_iot, ia->ia_memt, ia->ia_iobase, ia->ia_maddr,
- &(sc->sc_num_mappings), &(sc->sc_maps[0]), NULL, NULL);
- } else {
- printf(": could not determine card type - not configured!\n");
- return;
- }
- break;
- }
-
-#if defined(__OpenBSD__)
- isa_intr_establish(ia->ia_ic, ia->ia_irq, IST_EDGE,
- IPL_NET, isicintr, sc, sc->sc_dev.dv_xname);
-
- /* MI initialization of card */
- isicattach(flags, sc);
-
-#else
-
- /* MI initialization of card */
- isicattach(flags, sc);
-
- /*
- * Try to get a level-triggered interrupt first. If that doesn't
- * work (like on NetBSD/Atari, try to establish an edge triggered
- * interrupt.
- */
- if (isa_intr_establish(ia->ia_ic, ia->ia_irq, IST_LEVEL,
- IPL_NET, isicintr, sc) == NULL) {
- if(isa_intr_establish(ia->ia_ic, ia->ia_irq, IST_EDGE,
- IPL_NET, isicintr, sc) == NULL) {
- args_unmap(&(sc->sc_num_mappings), &(sc->sc_maps[0]));
- free((sc)->sc_maps, M_DEVBUF);
- }
- else {
- /*
- * XXX: This is a hack that probably needs to be
- * solved by setting an interrupt type in the sc
- * structure. I don't feel familiar enough with the
- * code to do this currently. Feel free to contact
- * me about it (leo@netbsd.org).
- */
- isicintr(sc);
- }
- }
-#endif
-}
-
-/*
- * Setup card specific io mapping. Return 0 on success,
- * any other value on config error.
- * Be prepared to get NULL as maps array.
- * Make sure to keep *num_mappings in sync with the real
- * mappings already setup when returning!
- */
-static int
-setup_io_map(flags, iot, memt, iobase, maddr, num_mappings, maps, iosize, msize)
- int flags, *num_mappings, *iosize, *msize;
- bus_size_t iobase, maddr;
- bus_space_tag_t iot, memt;
- struct isic_io_map *maps;
-{
- /* nothing mapped yet */
- *num_mappings = 0;
-
- /* which resources do we need? */
- switch(flags)
- {
- case FLAG_TELES_S0_8:
- if (maddr == MADDRUNK) {
- printf("isic: config error: no shared memory specified for Teles S0/8!\n");
- return 1;
- }
- if (iosize) *iosize = 0; /* no i/o ports */
- if (msize) *msize = 0x1000; /* shared memory size */
-
- /* this card uses a single memory mapping */
- if (maps == NULL) {
- *num_mappings = 1;
- return 0;
- }
- *num_mappings = 0;
- maps[0].t = memt;
- maps[0].offset = 0;
- maps[0].size = 0x1000;
- if (bus_space_map(maps[0].t, maddr,
- maps[0].size, 0, &maps[0].h)) {
- return 1;
- }
- (*num_mappings)++;
- break;
-
- case FLAG_TELES_S0_16:
- if (iobase == IOBASEUNK) {
- printf("isic: config error: no i/o address specified for Teles S0/16!\n");
- return 1;
- }
- if (maddr == MADDRUNK) {
- printf("isic: config error: no shared memory specified for Teles S0/16!\n");
- return 1;
- }
- if (iosize) *iosize = 8; /* i/o ports */
- if (msize) *msize = 0x1000; /* shared memory size */
-
- /* one io and one memory mapping */
- if (maps == NULL) {
- *num_mappings = 2;
- return 0;
- }
- *num_mappings = 0;
- maps[0].t = iot;
- maps[0].offset = 0;
- maps[0].size = 8;
- if (bus_space_map(maps[0].t, iobase,
- maps[0].size, 0, &maps[0].h)) {
- return 1;
- }
- (*num_mappings)++;
- maps[1].t = memt;
- maps[1].offset = 0;
- maps[1].size = 0x1000;
- if (bus_space_map(maps[1].t, maddr,
- maps[1].size, 0, &maps[1].h)) {
- return 1;
- }
- (*num_mappings)++;
- break;
-
- case FLAG_TELES_S0_163:
- if (iobase == IOBASEUNK) {
- printf("isic: config error: no i/o address specified for Teles S0/16!\n");
- return 1;
- }
- if (iosize) *iosize = 8; /* only some i/o ports shown */
- if (msize) *msize = 0; /* no shared memory */
-
- /* Four io mappings: config, isac, 2 * hscx */
- if (maps == NULL) {
- *num_mappings = 4;
- return 0;
- }
- *num_mappings = 0;
- maps[0].t = iot;
- maps[0].offset = 0;
- maps[0].size = 8;
- if (bus_space_map(maps[0].t, iobase,
- maps[0].size, 0, &maps[0].h)) {
- return 1;
- }
- (*num_mappings)++;
- maps[1].t = iot;
- maps[1].offset = 0;
- maps[1].size = 0x40; /* XXX - ??? */
- if ((iobase - 0xd80 + 0x980) < 0 || (iobase - 0xd80 + 0x980) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[1].t, iobase - 0xd80 + 0x980,
- maps[1].size, 0, &maps[1].h)) {
- return 1;
- }
- (*num_mappings)++;
- maps[2].t = iot;
- maps[2].offset = 0;
- maps[2].size = 0x40; /* XXX - ??? */
- if ((iobase - 0xd80 + 0x180) < 0 || (iobase - 0xd80 + 0x180) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[2].t, iobase - 0xd80 + 0x180,
- maps[2].size, 0, &maps[2].h)) {
- return 1;
- }
- (*num_mappings)++;
- maps[3].t = iot;
- maps[3].offset = 0;
- maps[3].size = 0x40; /* XXX - ??? */
- if ((iobase - 0xd80 + 0x580) < 0 || (iobase - 0xd80 + 0x580) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[3].t, iobase - 0xd80 + 0x580,
- maps[3].size, 0, &maps[3].h)) {
- return 1;
- }
- (*num_mappings)++;
- break;
-
- case FLAG_AVM_A1:
- if (iobase == IOBASEUNK) {
- printf("isic: config error: no i/o address specified for AVM A1/Fritz! card!\n");
- return 1;
- }
- if (iosize) *iosize = 8; /* only some i/o ports shown */
- if (msize) *msize = 0; /* no shared memory */
-
- /* Seven io mappings: config, isac, 2 * hscx,
- isac-fifo, 2 * hscx-fifo */
- if (maps == NULL) {
- *num_mappings = 7;
- return 0;
- }
- *num_mappings = 0;
- maps[0].t = iot; /* config */
- maps[0].offset = 0;
- maps[0].size = 8;
- if ((iobase + 0x1800) < 0 || (iobase + 0x1800) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[0].t, iobase + 0x1800, maps[0].size, 0, &maps[0].h))
- return 1;
- (*num_mappings)++;
- maps[1].t = iot; /* isac */
- maps[1].offset = 0;
- maps[1].size = 0x80; /* XXX - ??? */
- if ((iobase + 0x1400 - 0x20) < 0 || (iobase + 0x1400 - 0x20) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[1].t, iobase + 0x1400 - 0x20, maps[1].size, 0, &maps[1].h))
- return 1;
- (*num_mappings)++;
- maps[2].t = iot; /* hscx 0 */
- maps[2].offset = 0;
- maps[2].size = 0x40; /* XXX - ??? */
- if ((iobase + 0x400 - 0x20) < 0 || (iobase + 0x400 - 0x20) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[2].t, iobase + 0x400 - 0x20, maps[2].size, 0, &maps[2].h))
- return 1;
- (*num_mappings)++;
- maps[3].t = iot; /* hscx 1 */
- maps[3].offset = 0;
- maps[3].size = 0x40; /* XXX - ??? */
- if ((iobase + 0xc00 - 0x20) < 0 || (iobase + 0xc00 - 0x20) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[3].t, iobase + 0xc00 - 0x20, maps[3].size, 0, &maps[3].h))
- return 1;
- (*num_mappings)++;
- maps[4].t = iot; /* isac-fifo */
- maps[4].offset = 0;
- maps[4].size = 1;
- if ((iobase + 0x1400 - 0x20 -0x3e0) < 0 || (iobase + 0x1400 - 0x20 -0x3e0) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[4].t, iobase + 0x1400 - 0x20 -0x3e0, maps[4].size, 0, &maps[4].h))
- return 1;
- (*num_mappings)++;
- maps[5].t = iot; /* hscx 0 fifo */
- maps[5].offset = 0;
- maps[5].size = 1;
- if ((iobase + 0x400 - 0x20 -0x3e0) < 0 || (iobase + 0x400 - 0x20 -0x3e0) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[5].t, iobase + 0x400 - 0x20 -0x3e0, maps[5].size, 0, &maps[5].h))
- return 1;
- (*num_mappings)++;
- maps[6].t = iot; /* hscx 1 fifo */
- maps[6].offset = 0;
- maps[6].size = 1;
- if ((iobase + 0xc00 - 0x20 -0x3e0) < 0 || (iobase + 0xc00 - 0x20 -0x3e0) > 0x0ffff)
- return 1;
- if (bus_space_map(maps[6].t, iobase + 0xc00 - 0x20 -0x3e0, maps[6].size, 0, &maps[6].h))
- return 1;
- (*num_mappings)++;
- break;
-
- case FLAG_USR_ISDN_TA_INT:
- if (iobase == IOBASEUNK) {
- printf("isic: config error: no I/O base specified for USR Sportster TA intern!\n");
- return 1;
- }
- if (iosize) *iosize = 8; /* scattered ports, only some shown */
- if (msize) *msize = 0; /* no shared memory */
-
- /* 49 io mappings: 1 config and 48x8 registers */
- if (maps == NULL) {
- *num_mappings = 49;
- return 0;
- }
- *num_mappings = 0;
- {
- int i, num;
- bus_size_t base;
-
- /* config at offset 0x8000 */
- base = iobase + 0x8000;
- maps[0].size = 1;
- maps[0].t = iot;
- maps[0].offset = 0;
- if (base < 0 || base > 0x0ffff)
- return 1;
- if (bus_space_map(iot, base, 1, 0, &maps[0].h)) {
- return 1;
- }
- *num_mappings = num = 1;
-
- /* HSCX A at offset 0 */
- base = iobase;
- for (i = 0; i < 16; i++) {
- maps[num].size = 8;
- maps[num].offset = 0;
- maps[num].t = iot;
- if (base+i*1024 < 0 || base+i*1024+8 > 0x0ffff)
- return 1;
- if (bus_space_map(iot, base+i*1024, 8, 0, &maps[num].h)) {
- return 1;
- }
- *num_mappings = ++num;
- }
- /* HSCX B at offset 0x4000 */
- base = iobase + 0x4000;
- for (i = 0; i < 16; i++) {
- maps[num].size = 8;
- maps[num].offset = 0;
- maps[num].t = iot;
- if (base+i*1024 < 0 || base+i*1024+8 > 0x0ffff)
- return 1;
- if (bus_space_map(iot, base+i*1024, 8, 0, &maps[num].h)) {
- return 1;
- }
- *num_mappings = ++num;
- }
- /* ISAC at offset 0xc000 */
- base = iobase + 0xc000;
- for (i = 0; i < 16; i++) {
- maps[num].size = 8;
- maps[num].offset = 0;
- maps[num].t = iot;
- if (base+i*1024 < 0 || base+i*1024+8 > 0x0ffff)
- return 1;
- if (bus_space_map(iot, base+i*1024, 8, 0, &maps[num].h)) {
- return 1;
- }
- *num_mappings = ++num;
- }
- }
- break;
-
- case FLAG_ITK_IX1:
- if (iobase == IOBASEUNK) {
- printf("isic: config error: no I/O base specified for ITK ix1 micro!\n");
- return 1;
- }
- if (iosize) *iosize = 4;
- if (msize) *msize = 0;
- if (maps == NULL) {
- *num_mappings = 1;
- return 0;
- }
- *num_mappings = 0;
- maps[0].size = 4;
- maps[0].t = iot;
- maps[0].offset = 0;
- if (bus_space_map(iot, iobase, 4, 0, &maps[0].h)) {
- return 1;
- }
- *num_mappings = 1;
- break;
-
- default:
- printf("isic: config error: flags do not specify any known card!\n");
- return 1;
- break;
- }
-
- return 0;
-}
-
-static void
-args_unmap(num_mappings, maps)
- int *num_mappings;
- struct isic_io_map *maps;
-{
- int i, n;
- for (i = 0, n = *num_mappings; i < n; i++)
- if (maps[i].size)
- bus_space_unmap(maps[i].t, maps[i].h, maps[i].size);
- *num_mappings = 0;
-}
diff --git a/sys/i4b/layer1/isapnp_isic.c b/sys/i4b/layer1/isapnp_isic.c
deleted file mode 100644
index 9dfdf68c62b38..0000000000000
--- a/sys/i4b/layer1/isapnp_isic.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Martin Husemann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isapnp_isic.c - ISA-P&P bus frontend for i4b_isic driver
- * --------------------------------------------------------
- *
- * $Id: isapnp_isic.c,v 1.9 1998/12/16 13:39:47 hm Exp $
- *
- * last edit-date: [Mon Dec 14 10:54:23 1998]
- *
- * -mh original implementation
- * -hm NetBSD patches from Martin
- *
- *---------------------------------------------------------------------------*/
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/errno.h>
-#include <sys/syslog.h>
-#include <sys/device.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-
-#include <machine/cpu.h>
-#include <machine/intr.h>
-#include <machine/bus.h>
-
-#include <dev/isa/isavar.h>
-#include <dev/isapnp/isapnpreg.h>
-#include <dev/isapnp/isapnpvar.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_ipac.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_global.h>
-
-#ifdef __BROKEN_INDIRECT_CONFIG
-static int isapnp_isic_probe __P((struct device *, void *, void *));
-#else
-static int isapnp_isic_probe __P((struct device *, struct cfdata *, void *));
-#endif
-static void isapnp_isic_attach __P((struct device *, struct device *, void *));
-
-struct cfattach isapnp_isic_ca = {
- sizeof(struct isic_softc), isapnp_isic_probe, isapnp_isic_attach
-};
-
-typedef void (*allocmaps_func)(struct isapnp_attach_args *ipa, struct isic_softc *sc);
-typedef void (*attach_func)(struct isic_softc *sc);
-
-/* map allocators */
-static void generic_pnp_mapalloc(struct isapnp_attach_args *ipa, struct isic_softc *sc);
-static void ngo_pnp_mapalloc(struct isapnp_attach_args *ipa, struct isic_softc *sc);
-static void tls_pnp_mapalloc(struct isapnp_attach_args *ipa, struct isic_softc *sc);
-
-/* card attach functions */
-extern void isic_attach_Cs0P __P((struct isic_softc *sc));
-extern void isic_attach_Dyn __P((struct isic_softc *sc));
-extern void isic_attach_s0163P __P((struct isic_softc *sc));
-extern void isic_attach_drnngo __P((struct isic_softc *sc));
-extern void isic_attach_sws __P((struct isic_softc *sc));
-extern void isic_attach_Eqs1pi __P((struct isic_softc *sc));
-
-struct isapnp_isic_card_desc {
- char *devlogic; /* ISAPNP logical device ID */
- char *name; /* Name of the card */
- int card_type; /* isic card type identifier */
- allocmaps_func allocmaps; /* map allocator function */
- attach_func attach; /* card attach and init function */
-};
-static const struct isapnp_isic_card_desc
-isapnp_isic_descriptions[] =
-{
-#ifdef CRTX_S0_P
- { "CTX0000", "Creatix ISDN S0-16 P&P", CARD_TYPEP_CS0P,
- tls_pnp_mapalloc, isic_attach_Cs0P },
-#endif
-#ifdef TEL_S0_16_3_P
- { "TAG2110", "Teles S0/PnP", CARD_TYPEP_163P,
- tls_pnp_mapalloc, isic_attach_s0163P },
-#endif
-#ifdef DRN_NGO
- { "SDA0150", "Dr. Neuhaus NICCY GO@", CARD_TYPEP_DRNNGO,
- ngo_pnp_mapalloc, isic_attach_drnngo },
-#endif
-#ifdef ELSA_QS1ISA
- { "ELS0133", "Elsa QuickStep 1000 (ISA)", CARD_TYPEP_ELSAQS1ISA,
- generic_pnp_mapalloc, isic_attach_Eqs1pi },
-#endif
-#ifdef SEDLBAUER
- { "SAG0001", "Sedlbauer WinSpeed", CARD_TYPEP_SWS,
- generic_pnp_mapalloc, isic_attach_sws },
-#endif
-#ifdef DYNALINK
- { "ASU1688", "Dynalink IS64PH", CARD_TYPEP_DYNALINK,
- generic_pnp_mapalloc, isic_attach_Dyn },
-#endif
-};
-#define NUM_DESCRIPTIONS (sizeof(isapnp_isic_descriptions)/sizeof(isapnp_isic_descriptions[0]))
-
-/*
- * Probe card
- */
-static int
-#ifdef __BROKEN_INDIRECT_CONFIG
-isapnp_isic_probe(parent, match, aux)
-#else
-isapnp_isic_probe(parent, cf, aux)
-#endif
- struct device *parent;
-#ifdef __BROKEN_INDIRECT_CONFIG
- void *match;
-#else
- struct cfdata *cf;
-#endif
- void *aux;
-{
- struct isapnp_attach_args *ipa = aux;
- const struct isapnp_isic_card_desc *desc = isapnp_isic_descriptions;
- int i;
-
- for (i = 0; i < NUM_DESCRIPTIONS; i++, desc++)
- if (strcmp(ipa->ipa_devlogic, desc->devlogic) == 0)
- return 1;
-
- return 0;
-}
-
-
-/*---------------------------------------------------------------------------*
- * card independend attach for ISA P&P cards
- *---------------------------------------------------------------------------*/
-
-/* parameter and format for message producing e.g. "isic0: " */
-
-#ifdef __FreeBSD__
-#define ISIC_FMT "isic%d: "
-#define ISIC_PARM dev->id_unit
-#define TERMFMT " "
-#else
-#define ISIC_FMT "%s: "
-#define ISIC_PARM sc->sc_dev.dv_xname
-#define TERMFMT "\n"
-#endif
-
-static void
-isapnp_isic_attach(parent, self, aux)
- struct device *parent, *self;
- void *aux;
-{
- static char *ISACversion[] = {
- "2085 Version A1/A2 or 2086/2186 Version 1.1",
- "2085 Version B1",
- "2085 Version B2",
- "2085 Version V2.3 (B3)",
- "Unknown Version"
- };
-
- static char *HSCXversion[] = {
- "82525 Version A1",
- "Unknown (0x01)",
- "82525 Version A2",
- "Unknown (0x03)",
- "82525 Version A3",
- "82525 or 21525 Version 2.1",
- "Unknown Version"
- };
-
- struct isic_softc *sc = (void *)self;
- struct isapnp_attach_args *ipa = aux;
- const struct isapnp_isic_card_desc *desc = isapnp_isic_descriptions;
- int i;
-
- for (i = 0; i < NUM_DESCRIPTIONS; i++, desc++)
- if (strcmp(ipa->ipa_devlogic, desc->devlogic) == 0)
- break;
- if (i >= NUM_DESCRIPTIONS)
- panic("could not identify isic PnP device");
-
- /* setup parameters */
- sc->sc_cardtyp = desc->card_type;
- sc->sc_unit = sc->sc_dev.dv_unit;
- sc->sc_irq = ipa->ipa_irq[0].num;
- desc->allocmaps(ipa, sc);
-
- /* announce card name */
- printf(": %s\n", desc->name);
-
- /* establish interrupt handler */
- isa_intr_establish(ipa->ipa_ic, ipa->ipa_irq[0].num, IST_EDGE,
- IPL_NET, isicintr, sc);
-
- /* init card */
- isic_sc[sc->sc_unit] = sc;
- desc->attach(sc);
-
- /* announce chip versions */
- sc->sc_isac_version = 0;
- sc->sc_isac_version = ((ISAC_READ(I_RBCH)) >> 5) & 0x03;
-
- switch(sc->sc_isac_version)
- {
- case ISAC_VA:
- case ISAC_VB1:
- case ISAC_VB2:
- case ISAC_VB3:
- break;
-
- default:
- printf(ISIC_FMT "Error, ISAC version %d unknown!\n",
- ISIC_PARM, sc->sc_isac_version);
- return;
- break;
- }
-
- sc->sc_hscx_version = HSCX_READ(0, H_VSTR) & 0xf;
-
- switch(sc->sc_hscx_version)
- {
- case HSCX_VA1:
- case HSCX_VA2:
- case HSCX_VA3:
- case HSCX_V21:
- break;
-
- default:
- printf(ISIC_FMT "Error, HSCX version %d unknown!\n",
- ISIC_PARM, sc->sc_hscx_version);
- return;
- break;
- };
-
- /* ISAC setup */
-
- isic_isac_init(sc);
-
- /* HSCX setup */
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_A, BPROT_NONE, 0);
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_B, BPROT_NONE, 0);
-
- /* setup linktab */
-
- isic_init_linktab(sc);
-
- /* set trace level */
-
- sc->sc_trace = TRACE_OFF;
-
- sc->sc_state = ISAC_IDLE;
-
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
-
- sc->sc_obuf = NULL;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
- sc->sc_freeflag = 0;
-
- sc->sc_obuf2 = NULL;
- sc->sc_freeflag2 = 0;
-
- /* init higher protocol layers */
-
- MPH_Status_Ind(sc->sc_unit, STI_ATTACH, sc->sc_cardtyp);
-
- /* announce chip versions */
-
- if(sc->sc_isac_version >= ISAC_UNKN)
- {
- printf(ISIC_FMT "ISAC Version UNKNOWN (VN=0x%x)" TERMFMT,
- ISIC_PARM,
- sc->sc_isac_version);
- sc->sc_isac_version = ISAC_UNKN;
- }
- else
- {
- printf(ISIC_FMT "ISAC %s (IOM-%c)" TERMFMT,
- ISIC_PARM,
- ISACversion[sc->sc_isac_version],
- sc->sc_bustyp == BUS_TYPE_IOM1 ? '1' : '2');
- }
-
- if(sc->sc_hscx_version >= HSCX_UNKN)
- {
- printf(ISIC_FMT "HSCX Version UNKNOWN (VN=0x%x)" TERMFMT,
- ISIC_PARM,
- sc->sc_hscx_version);
- sc->sc_hscx_version = HSCX_UNKN;
- }
- else
- {
- printf(ISIC_FMT "HSCX %s" TERMFMT,
- ISIC_PARM,
- HSCXversion[sc->sc_hscx_version]);
- }
-}
-
-static void
-generic_pnp_mapalloc(struct isapnp_attach_args *ipa, struct isic_softc *sc)
-{
- sc->sc_num_mappings = 1; /* most cards have just one mapping */
- MALLOC_MAPS(sc); /* malloc the maps */
- sc->sc_maps[0].t = ipa->ipa_iot; /* copy the access handles */
- sc->sc_maps[0].h = ipa->ipa_io[0].h;
- sc->sc_maps[0].size = 0; /* foreign mapping, leave it alone */
-}
-
-static void
-ngo_pnp_mapalloc(struct isapnp_attach_args *ipa, struct isic_softc *sc)
-{
- sc->sc_num_mappings = 2; /* one data, one address mapping */
- MALLOC_MAPS(sc); /* malloc the maps */
- sc->sc_maps[0].t = ipa->ipa_iot; /* copy the access handles */
- sc->sc_maps[0].h = ipa->ipa_io[0].h;
- sc->sc_maps[0].size = 0; /* foreign mapping, leave it alone */
- sc->sc_maps[1].t = ipa->ipa_iot;
- sc->sc_maps[1].h = ipa->ipa_io[1].h;
- sc->sc_maps[1].size = 0;
-}
-
-static void
-tls_pnp_mapalloc(struct isapnp_attach_args *ipa, struct isic_softc *sc)
-{
- sc->sc_num_mappings = 4; /* config, isac, 2 * hscx */
- MALLOC_MAPS(sc); /* malloc the maps */
- sc->sc_maps[0].t = ipa->ipa_iot; /* copy the access handles */
- sc->sc_maps[0].h = ipa->ipa_io[0].h;
- sc->sc_maps[0].size = 0; /* foreign mapping, leave it alone */
- sc->sc_maps[1].t = ipa->ipa_iot;
- sc->sc_maps[1].h = ipa->ipa_io[0].h;
- sc->sc_maps[1].size = 0;
- sc->sc_maps[1].offset = - 0x20;
- sc->sc_maps[2].t = ipa->ipa_iot;
- sc->sc_maps[2].offset = - 0x20;
- sc->sc_maps[2].h = ipa->ipa_io[1].h;
- sc->sc_maps[2].size = 0;
- sc->sc_maps[3].t = ipa->ipa_iot;
- sc->sc_maps[3].offset = 0;
- sc->sc_maps[3].h = ipa->ipa_io[1].h;
- sc->sc_maps[3].size = 0;
-}
diff --git a/sys/i4b/layer1/isic_supio.c b/sys/i4b/layer1/isic_supio.c
deleted file mode 100644
index 6c58ad218425f..0000000000000
--- a/sys/i4b/layer1/isic_supio.c
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright (c) 1998 Ignatios Souvatzis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * isic_supio.c - Amiga supio pseudo bus frontend for i4b_isic driver
- * supports:
- * - ISDN Blaster 5001/1
- * - ISDN Master 2092/64
- * But we attach to the supio, so just see "isic".
- * -----------------------------------------------
- *
- * $Id: isic_supio.c,v 1.5 1998/12/19 12:07:55 hm Exp $
- *
- * last edit-date: [Mon Nov 16 12:29:19 1998]
- *
- * -is original implementation
- *
- *---------------------------------------------------------------------------*/
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/errno.h>
-#include <sys/syslog.h>
-#include <sys/device.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-
-#include <machine/cpu.h>
-#include <machine/intr.h>
-#include <machine/bus.h>
-
-#include <amiga/dev/supio.h>
-
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_hscx.h>
-#include <i4b/layer1/i4b_isac.h>
-
-/*static*/ int isic_supio_match __P((struct device *, struct cfdata *, void *));
-/*static*/ void isic_supio_attach __P((struct device *, struct device *, void *));
-
-/*static*/ u_int8_t aster_read_reg __P((struct isic_softc *sc, int what,
- bus_size_t offs));
-/*static*/ void aster_write_reg __P((struct isic_softc *sc, int what,
- bus_size_t offs, u_int8_t data));
-/*static*/ void aster_read_fifo __P((struct isic_softc *sc, int what,
- void *buf, size_t size));
-/*static*/ void aster_write_fifo __P((struct isic_softc *sc, int what,
- const void *data, size_t size));
-
-static int supio_isicattach __P((struct isic_softc *sc));
-
-struct isic_supio_softc {
- struct isic_softc sc_isic;
- struct isr sc_isr;
- struct bus_space_tag sc_bst;
-};
-
-struct cfattach isic_supio_ca = {
- sizeof(struct isic_supio_softc), isic_supio_match, isic_supio_attach
-};
-
-/*
- * Probe card
- */
-/*static*/ int
-isic_supio_match(parent, cf, aux)
- struct device *parent;
- struct cfdata *cf;
- void *aux;
-{
- struct supio_attach_args *sap = aux;
-
- /* ARGSUSED */
- return (!strcmp("isic", sap->supio_name));
-}
-
-int isic_supio_ipl = 2;
-/*
- * Attach the card
- */
-/*static*/ void
-isic_supio_attach(parent, self, aux)
- struct device *parent, *self;
- void *aux;
-{
- struct isic_supio_softc *ssc = (void *)self;
- struct isic_softc *sc = &ssc->sc_isic;
- struct supio_attach_args *sap = aux;
-
- bus_space_tag_t bst;
- bus_space_handle_t h;
-
- /* setup parameters */
- sc->sc_cardtyp = CARD_TYPEP_BLMASTER;
- sc->sc_num_mappings = 3;
- sc->sc_unit = sc->sc_dev.dv_unit; /* XXX ??? */
-
- /* create io mappings */
- MALLOC_MAPS(sc);
-
- bst = sap->supio_iot;
- bus_space_map(bst, sap->supio_iobase, 0x400, 0, &h);
-
- /* ISAC */
- sc->sc_maps[0].t = bst;
- sc->sc_maps[0].h = h;
- sc->sc_maps[0].offset = 0x300/2;
- sc->sc_maps[0].size = 0; /* foreign mapping, leave it alone */
-
- /* HSCX A */
- sc->sc_maps[1].t = bst;
- sc->sc_maps[1].h = h;
- sc->sc_maps[1].offset = 0x100/2;
- sc->sc_maps[1].size = 0; /* foreign mapping, leave it alone */
-
- /* HSCX B */
- sc->sc_maps[2].t = bst;
- sc->sc_maps[2].h = h;
- sc->sc_maps[2].offset = 0x180/2;
- sc->sc_maps[2].size = 0; /* foreign mapping, leave it alone */
-
- sc->clearirq = NULL;
- sc->readreg = aster_read_reg;
- sc->writereg = aster_write_reg;
- sc->readfifo = aster_read_fifo;
- sc->writefifo = aster_write_fifo;
-
- /* setup card type */
- sc->sc_cardtyp = CARD_TYPEP_BLMASTER;
- sc->sc_bustyp = BUS_TYPE_IOM2;
-
- sc->sc_ipac = 0;
- sc->sc_bfifolen = HSCX_FIFO_LEN;
-
- /* enable RTS on HSCX A */
- aster_write_reg(sc, ISIC_WHAT_HSCXA, H_MODE, HSCX_MODE_RTS);
-
- /* MI initialization of card */
-
- printf("\n");
- supio_isicattach(sc);
-
- ssc->sc_isr.isr_intr = isicintr;
- ssc->sc_isr.isr_arg = sc;
- ssc->sc_isr.isr_ipl = isic_supio_ipl; /* XXX */
- add_isr(&ssc->sc_isr);
-}
-
-#if 0
-int
-isic_supiointr(p)
- void *p;
-{
- /* XXX should test whether it is our interupt at all */
- add_sicallback((sifunc_t)isicintr, p, NULL);
- return 1;
-}
-#endif
-
-/*static*/ void
-aster_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what].t;
- bus_space_handle_t h = sc->sc_maps[what].h;
- bus_size_t o = sc->sc_maps[what].offset;
-
- bus_space_read_multi_1(t, h, o, buf, size);
-}
-
-/*static*/ void
-aster_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size)
-{
- bus_space_tag_t t = sc->sc_maps[what].t;
- bus_space_handle_t h = sc->sc_maps[what].h;
- bus_size_t o = sc->sc_maps[what].offset;
-
- bus_space_write_multi_1(t, h, o, (u_int8_t*)buf, size);
-}
-
-/*static*/ u_int8_t
-aster_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
-{
- bus_space_tag_t t = sc->sc_maps[what].t;
- bus_space_handle_t h = sc->sc_maps[what].h;
- bus_size_t o = sc->sc_maps[what].offset;
-
- return bus_space_read_1(t, h, o + offs);
-}
-
-/*static*/ void
-aster_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data)
-{
- bus_space_tag_t t = sc->sc_maps[what].t;
- bus_space_handle_t h = sc->sc_maps[what].h;
- bus_size_t o = sc->sc_maps[what].offset;
-
- bus_space_write_1(t, h, o + offs, data);
-}
-
-/*---------------------------------------------------------------------------*
- * card independend attach for pcmcia^Wsupio cards
- * XXX this should be centralized!
- *---------------------------------------------------------------------------*/
-
-/*
- * parameter and format for message producing e.g. "isic0: "
- * there is no FreeBSD/Amiga, so just:
- */
-
-#define ISIC_FMT "%s: "
-#define ISIC_PARM sc->sc_dev.dv_xname
-#define TERMFMT "\n"
-
-int
-supio_isicattach(struct isic_softc *sc)
-{
- static char *ISACversion[] = {
- "2085 Version A1/A2 or 2086/2186 Version 1.1",
- "2085 Version B1",
- "2085 Version B2",
- "2085 Version V2.3 (B3)",
- "Unknown Version"
- };
-
- static char *HSCXversion[] = {
- "82525 Version A1",
- "Unknown (0x01)",
- "82525 Version A2",
- "Unknown (0x03)",
- "82525 Version A3",
- "82525 or 21525 Version 2.1",
- "Unknown Version"
- };
-
- isic_sc[sc->sc_unit] = sc;
- sc->sc_isac_version = 0;
- sc->sc_isac_version = ((ISAC_READ(I_RBCH)) >> 5) & 0x03;
-
- switch(sc->sc_isac_version)
- {
- case ISAC_VA:
- case ISAC_VB1:
- case ISAC_VB2:
- case ISAC_VB3:
- break;
-
- default:
- printf(ISIC_FMT "Error, ISAC version %d unknown!\n",
- ISIC_PARM, sc->sc_isac_version);
- return(0);
- break;
- }
-
- sc->sc_hscx_version = HSCX_READ(0, H_VSTR) & 0xf;
-
- switch(sc->sc_hscx_version)
- {
- case HSCX_VA1:
- case HSCX_VA2:
- case HSCX_VA3:
- case HSCX_V21:
- break;
-
- default:
- printf(ISIC_FMT "Error, HSCX version %d unknown!\n",
- ISIC_PARM, sc->sc_hscx_version);
- return(0);
- break;
- };
-
- /* ISAC setup */
-
- isic_isac_init(sc);
-
- /* HSCX setup */
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_A, BPROT_NONE, 0);
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_B, BPROT_NONE, 0);
-
- /* setup linktab */
-
- isic_init_linktab(sc);
-
- /* set trace level */
-
- sc->sc_trace = TRACE_OFF;
-
- sc->sc_state = ISAC_IDLE;
-
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
-
- sc->sc_obuf = NULL;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
- sc->sc_freeflag = 0;
-
- sc->sc_obuf2 = NULL;
- sc->sc_freeflag2 = 0;
-
- /* init higher protocol layers */
-
- MPH_Status_Ind(sc->sc_unit, STI_ATTACH, sc->sc_cardtyp);
-
- /* announce chip versions */
-
- if(sc->sc_isac_version >= ISAC_UNKN)
- {
- printf(ISIC_FMT "ISAC Version UNKNOWN (VN=0x%x)" TERMFMT,
- ISIC_PARM,
- sc->sc_isac_version);
- sc->sc_isac_version = ISAC_UNKN;
- }
- else
- {
- printf(ISIC_FMT "ISAC %s (IOM-%c)" TERMFMT,
- ISIC_PARM,
- ISACversion[sc->sc_isac_version],
- sc->sc_bustyp == BUS_TYPE_IOM1 ? '1' : '2');
- }
-
- if(sc->sc_hscx_version >= HSCX_UNKN)
- {
- printf(ISIC_FMT "HSCX Version UNKNOWN (VN=0x%x)" TERMFMT,
- ISIC_PARM,
- sc->sc_hscx_version);
- sc->sc_hscx_version = HSCX_UNKN;
- }
- else
- {
- printf(ISIC_FMT "HSCX %s" TERMFMT,
- ISIC_PARM,
- HSCXversion[sc->sc_hscx_version]);
- }
-
- return(1);
-}
-
diff --git a/sys/i4b/layer1/pci_isic.c b/sys/i4b/layer1/pci_isic.c
deleted file mode 100644
index 6f929e52cca69..0000000000000
--- a/sys/i4b/layer1/pci_isic.c
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright (c) 1998 Martin Husemann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * pci_isic.c - pcmcia bus frontend for i4b_isic driver
- * -------------------------------------------------------
- *
- * $Id: pci_isic.c,v 1.1 1998/12/16 13:39:47 hm Exp $
- *
- * last edit-date: [Mon Nov 16 20:37:32 1998]
- *
- * -mh original implementation
- *
- *---------------------------------------------------------------------------*/
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/errno.h>
-#include <sys/syslog.h>
-#include <sys/device.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-
-#include <machine/cpu.h>
-#include <machine/intr.h>
-#include <machine/bus.h>
-
-
-#include <machine/bus.h>
-#include <machine/intr.h>
-#include <dev/pci/pcireg.h>
-#include <dev/pci/pcivar.h>
-#include <dev/pci/pcidevs.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_ipac.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-
-static int pci_isic_match __P((struct device *, struct cfdata *, void *));
-static void pci_isic_attach __P((struct device *, struct device *, void *));
-static const struct isic_pci_product * find_matching_card __P((struct pci_attach_args *pa));
-
-extern void isic_attach_Eqs1pp __P((struct isic_softc *sc, struct pci_attach_args *pa));
-static int isic_pciattach __P((struct isic_softc *sc));
-
-struct pci_isic_softc {
- struct isic_softc sc_isic; /* parent class */
-
- /* PCI-specific goo */
- void *sc_ih; /* interrupt handler */
-};
-
-struct cfattach pci_isic_ca = {
- sizeof(struct pci_isic_softc), pci_isic_match, pci_isic_attach
-};
-
-
-static const struct isic_pci_product {
- pci_vendor_id_t npp_vendor;
- pci_product_id_t npp_product;
- int cardtype;
- int flag;
- const char * name;
- void (*attach)(struct isic_softc *sc, struct pci_attach_args *pa);
-} isic_pci_products[] = {
- { PCI_VENDOR_ELSA, 0x1000,
- CARD_TYPEP_ELSAQS1PCI, FLAG_ELSA_QS1P_PCI,
- "ELSA QuickStep 1000pro/PCI",
- isic_attach_Eqs1pp },
-
- { 0, 0, 0, 0, NULL, NULL },
-};
-
-static const struct isic_pci_product * find_matching_card(pa)
- struct pci_attach_args *pa;
-{
- const struct isic_pci_product * pp = NULL;
-
- for (pp = isic_pci_products; pp->npp_vendor; pp++)
- if (PCI_VENDOR(pa->pa_id) == pp->npp_vendor &&
- PCI_PRODUCT(pa->pa_id) == pp->npp_product)
- return pp;
-
- return NULL;
-}
-
-/*
- * Match card
- */
-static int
-pci_isic_match(parent, match, aux)
- struct device *parent;
- struct cfdata *match;
- void *aux;
-{
- struct pci_attach_args *pa = aux;
-
- if (!find_matching_card(pa))
- return 0;
-
- return 1;
-}
-
-/*
- * Attach the card
- */
-static void
-pci_isic_attach(parent, self, aux)
- struct device *parent, *self;
- void *aux;
-{
- struct pci_isic_softc *psc = (void*) self;
- struct isic_softc *sc = &psc->sc_isic;
- struct pci_attach_args *pa = aux;
- pci_chipset_tag_t pc = pa->pa_pc;
- pci_intr_handle_t ih;
- const struct isic_pci_product * prod;
- const char *intrstr;
-
- /* Redo probe */
- prod = find_matching_card(pa);
- if (prod == NULL) return; /* oops - not found?!? */
-
- sc->sc_unit = sc->sc_dev.dv_unit;
- printf(": %s\n", prod->name);
-
- /* card initilization and sc setup */
- prod->attach(sc, pa);
-
- /* generic setup */
- isic_pciattach(sc);
-
- /* Map and establish the interrupt. */
- if (pci_intr_map(pc, pa->pa_intrtag, pa->pa_intrpin,
- pa->pa_intrline, &ih)) {
- printf("%s: couldn't map interrupt\n", sc->sc_dev.dv_xname);
- return;
- }
- intrstr = pci_intr_string(pc, ih);
- psc->sc_ih = pci_intr_establish(pc, ih, IPL_NET, isicintr, sc);
- if (psc->sc_ih == NULL) {
- printf("%s: couldn't establish interrupt",
- sc->sc_dev.dv_xname);
- if (intrstr != NULL)
- printf(" at %s", intrstr);
- printf("\n");
- return;
- }
- printf("%s: interrupting at %s\n", sc->sc_dev.dv_xname, intrstr);
-}
-
-/*---------------------------------------------------------------------------*
- * isic - pci device driver attach routine
- *---------------------------------------------------------------------------*/
-static int
-isic_pciattach(sc)
- struct isic_softc *sc;
-{
- int ret = 0;
-
- static char *ISACversion[] = {
- "2085 Version A1/A2 or 2086/2186 Version 1.1",
- "2085 Version B1",
- "2085 Version B2",
- "2085 Version V2.3 (B3)",
- "Unknown Version"
- };
-
- static char *HSCXversion[] = {
- "82525 Version A1",
- "Unknown (0x01)",
- "82525 Version A2",
- "Unknown (0x03)",
- "82525 Version A3",
- "82525 or 21525 Version 2.1",
- "Unknown Version"
- };
-
- isic_sc[sc->sc_unit] = sc; /* XXX - hack! */
-
- sc->sc_isac_version = 0;
- sc->sc_hscx_version = 0;
-
- if(sc->sc_ipac)
- {
- ret = IPAC_READ(IPAC_ID);
-
- switch(ret)
- {
- case 0x01:
- printf("%s: IPAC PSB2115 Version 1.1\n", sc->sc_dev.dv_xname);
- break;
-
- default:
- printf("%s: Error, IPAC version %d unknown!\n",
- sc->sc_dev.dv_xname, ret);
- return(0);
- break;
- }
- }
- else
- {
- sc->sc_isac_version = ((ISAC_READ(I_RBCH)) >> 5) & 0x03;
-
- switch(sc->sc_isac_version)
- {
- case ISAC_VA:
- case ISAC_VB1:
- case ISAC_VB2:
- case ISAC_VB3:
- printf("%s: ISAC %s (IOM-%c)\n",
- sc->sc_dev.dv_xname,
- ISACversion[sc->sc_isac_version],
- sc->sc_bustyp == BUS_TYPE_IOM1 ? '1' : '2');
- break;
-
- default:
- printf("%s: Error, ISAC version %d unknown!\n",
- sc->sc_dev.dv_xname, sc->sc_isac_version);
- return(0);
- break;
- }
-
- sc->sc_hscx_version = HSCX_READ(0, H_VSTR) & 0xf;
-
- switch(sc->sc_hscx_version)
- {
- case HSCX_VA1:
- case HSCX_VA2:
- case HSCX_VA3:
- case HSCX_V21:
- printf("%s: HSCX %s\n",
- sc->sc_dev.dv_xname,
- HSCXversion[sc->sc_hscx_version]);
- break;
-
- default:
- printf("%s: Error, HSCX version %d unknown!\n",
- sc->sc_dev.dv_xname, sc->sc_hscx_version);
- return(0);
- break;
- }
- }
-
- /* ISAC setup */
-
- isic_isac_init(sc);
-
- /* HSCX setup */
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_A, BPROT_NONE, 0);
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_B, BPROT_NONE, 0);
-
- /* setup linktab */
-
- isic_init_linktab(sc);
-
- /* set trace level */
-
- sc->sc_trace = TRACE_OFF;
-
- sc->sc_state = ISAC_IDLE;
-
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
-
- sc->sc_obuf = NULL;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
- sc->sc_freeflag = 0;
-
- sc->sc_obuf2 = NULL;
- sc->sc_freeflag2 = 0;
-
-#if defined(__FreeBSD__) && __FreeBSD__ >=3
- callout_handle_init(&sc->sc_T3_callout);
- callout_handle_init(&sc->sc_T4_callout);
-#endif
-
- /* init higher protocol layers */
-
- MPH_Status_Ind(sc->sc_unit, STI_ATTACH, sc->sc_cardtyp);
-
- return(1);
-}
-
diff --git a/sys/i4b/layer1/pcmcia_isic.c b/sys/i4b/layer1/pcmcia_isic.c
deleted file mode 100644
index 9d428a1b3cefe..0000000000000
--- a/sys/i4b/layer1/pcmcia_isic.c
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Copyright (c) 1998 Martin Husemann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * pcmcia_isic.c - pcmcia bus frontend for i4b_isic driver
- * -------------------------------------------------------
- *
- * $Id: pcmcia_isic.c,v 1.3 1998/12/05 18:05:04 hm Exp $
- *
- * last edit-date: [Fri Dec 4 10:38:43 1998]
- *
- * -mh original implementation
- *
- *---------------------------------------------------------------------------*/
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/errno.h>
-#include <sys/syslog.h>
-#include <sys/device.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-
-#include <machine/cpu.h>
-#include <machine/intr.h>
-#include <machine/bus.h>
-
-#include <dev/pcmcia/pcmciareg.h>
-#include <dev/pcmcia/pcmciavar.h>
-#include <dev/pcmcia/pcmciadevs.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/layer1/i4b_l1.h>
-#include <i4b/layer1/i4b_ipac.h>
-#include <i4b/layer1/i4b_isac.h>
-#include <i4b/layer1/i4b_hscx.h>
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer1/pcmcia_isic.h>
-
-static int pcmcia_isic_match __P((struct device *, struct cfdata *, void *));
-static void pcmcia_isic_attach __P((struct device *, struct device *, void *));
-static const struct isic_pcmcia_card_entry * find_matching_card __P((struct pcmcia_attach_args *pa));
-static int pcmcia_isicattach __P((struct isic_softc *sc));
-
-struct cfattach pcmcia_isic_ca = {
- sizeof(struct pcmcia_isic_softc), pcmcia_isic_match, pcmcia_isic_attach
-};
-
-struct isic_pcmcia_card_entry {
- int32_t vendor; /* vendor ID */
- int32_t product; /* product ID */
- char *cis1_info[4]; /* CIS info to match */
- char *name; /* name of controller */
- int function; /* expected PCMCIA function type */
- int card_type; /* card type found */
- isic_pcmcia_attach_func attach; /* card initialization */
-};
-
-static const struct isic_pcmcia_card_entry card_list[] = {
-
-#ifdef AVM_PCMCIA
- { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID,
- { "AVM", "ISDN A", NULL, NULL },
- "AVM Fritz!Card", PCMCIA_FUNCTION_NETWORK,
- CARD_TYPEP_PCFRITZ, isic_attach_fritzpcmcia },
-#endif
-
-#ifdef ELSA_ISDNMC
- { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID,
- { "ELSA GmbH, Aachen", "MicroLink ISDN/MC ", NULL, NULL },
- "ELSA MicroLink ISDN/MC", PCMCIA_FUNCTION_NETWORK,
- CARD_TYPEP_ELSAMLIMC, isic_attach_elsaisdnmc },
- { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID,
- { "ELSA AG, Aachen", "MicroLink ISDN/MC ", NULL, NULL },
- "ELSA MicroLink ISDN/MC", PCMCIA_FUNCTION_NETWORK,
- CARD_TYPEP_ELSAMLIMC, isic_attach_elsaisdnmc },
-#endif
-
-#ifdef ELSA_MCALL
- { 0x105, 0x410a,
- { "ELSA", "MicroLink MC all", NULL, NULL },
- "ELSA MicroLink MCall", PCMCIA_FUNCTION_NETWORK,
- CARD_TYPEP_ELSAMLMCALL, isic_attach_elsamcall },
-#endif
-
-};
-#define NUM_MATCH_ENTRIES (sizeof(card_list)/sizeof(card_list[0]))
-
-static const struct isic_pcmcia_card_entry *
-find_matching_card(pa)
- struct pcmcia_attach_args *pa;
-{
- int i, j;
-
- for (i = 0; i < NUM_MATCH_ENTRIES; i++) {
- if (card_list[i].vendor != PCMCIA_VENDOR_INVALID && pa->card->manufacturer != card_list[i].vendor)
- continue;
- if (card_list[i].product != PCMCIA_PRODUCT_INVALID && pa->card->product != card_list[i].product)
- continue;
- if (pa->pf->function != card_list[i].function)
- continue;
- for (j = 0; j < 4; j++) {
- if (card_list[i].cis1_info[j] == NULL)
- continue; /* wildcard */
- if (pa->card->cis1_info[j] == NULL)
- break; /* not available */
- if (strcmp(pa->card->cis1_info[j], card_list[i].cis1_info[j]) != 0)
- break; /* mismatch */
- }
- if (j >= 4)
- break;
- }
- if (i >= NUM_MATCH_ENTRIES)
- return NULL;
-
- return &card_list[i];
-}
-
-/*
- * Match card
- */
-static int
-pcmcia_isic_match(parent, match, aux)
- struct device *parent;
- struct cfdata *match;
- void *aux;
-{
- struct pcmcia_attach_args *pa = aux;
-
- if (!find_matching_card(pa))
- return 0;
-
- return 1;
-}
-
-/*
- * Attach the card
- */
-static void
-pcmcia_isic_attach(parent, self, aux)
- struct device *parent, *self;
- void *aux;
-{
- struct pcmcia_isic_softc *psc = (void*) self;
- struct isic_softc *sc = &psc->sc_isic;
- struct pcmcia_attach_args *pa = aux;
- struct pcmcia_config_entry *cfe;
- const struct isic_pcmcia_card_entry * cde;
-
- /* Which card is it? */
- cde = find_matching_card(pa);
- if (cde == NULL) return; /* oops - not found?!? */
-
- psc->sc_pf = pa->pf;
- cfe = pa->pf->cfe_head.sqh_first;
-
- /* Enable the card */
- pcmcia_function_init(pa->pf, cfe);
- pcmcia_function_enable(pa->pf);
-
- if (!cde->attach(psc, cfe, pa))
- return; /* Ooops ? */
-
- sc->sc_unit = sc->sc_dev.dv_unit;
-
- /* Announce card name */
- printf(": %s\n", cde->name);
-
- /* MI initilization */
- pcmcia_isicattach(sc);
-
- /* setup interrupt */
- psc->sc_ih = pcmcia_intr_establish(pa->pf, IPL_NET, isicintr, sc);
-}
-
-/*---------------------------------------------------------------------------*
- * card independend attach for pcmicia cards
- *---------------------------------------------------------------------------*/
-
-/* parameter and format for message producing e.g. "isic0: " */
-
-#ifdef __FreeBSD__
-#define ISIC_FMT "isic%d: "
-#define ISIC_PARM dev->id_unit
-#define TERMFMT " "
-#else
-#define ISIC_FMT "%s: "
-#define ISIC_PARM sc->sc_dev.dv_xname
-#define TERMFMT "\n"
-#endif
-
-int
-pcmcia_isicattach(struct isic_softc *sc)
-{
- static char *ISACversion[] = {
- "2085 Version A1/A2 or 2086/2186 Version 1.1",
- "2085 Version B1",
- "2085 Version B2",
- "2085 Version V2.3 (B3)",
- "Unknown Version"
- };
-
- static char *HSCXversion[] = {
- "82525 Version A1",
- "Unknown (0x01)",
- "82525 Version A2",
- "Unknown (0x03)",
- "82525 Version A3",
- "82525 or 21525 Version 2.1",
- "Unknown Version"
- };
-
- isic_sc[sc->sc_unit] = sc;
- sc->sc_isac_version = 0;
- sc->sc_isac_version = ((ISAC_READ(I_RBCH)) >> 5) & 0x03;
-
- switch(sc->sc_isac_version)
- {
- case ISAC_VA:
- case ISAC_VB1:
- case ISAC_VB2:
- case ISAC_VB3:
- break;
-
- default:
- printf(ISIC_FMT "Error, ISAC version %d unknown!\n",
- ISIC_PARM, sc->sc_isac_version);
- return(0);
- break;
- }
-
- sc->sc_hscx_version = HSCX_READ(0, H_VSTR) & 0xf;
-
- switch(sc->sc_hscx_version)
- {
- case HSCX_VA1:
- case HSCX_VA2:
- case HSCX_VA3:
- case HSCX_V21:
- break;
-
- default:
- printf(ISIC_FMT "Error, HSCX version %d unknown!\n",
- ISIC_PARM, sc->sc_hscx_version);
- return(0);
- break;
- };
-
- /* ISAC setup */
-
- isic_isac_init(sc);
-
- /* HSCX setup */
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_A, BPROT_NONE, 0);
-
- isic_bchannel_setup(sc->sc_unit, HSCX_CH_B, BPROT_NONE, 0);
-
- /* setup linktab */
-
- isic_init_linktab(sc);
-
- /* set trace level */
-
- sc->sc_trace = TRACE_OFF;
-
- sc->sc_state = ISAC_IDLE;
-
- sc->sc_ibuf = NULL;
- sc->sc_ib = NULL;
- sc->sc_ilen = 0;
-
- sc->sc_obuf = NULL;
- sc->sc_op = NULL;
- sc->sc_ol = 0;
- sc->sc_freeflag = 0;
-
- sc->sc_obuf2 = NULL;
- sc->sc_freeflag2 = 0;
-
- /* init higher protocol layers */
-
- MPH_Status_Ind(sc->sc_unit, STI_ATTACH, sc->sc_cardtyp);
-
- /* announce chip versions */
-
- if(sc->sc_isac_version >= ISAC_UNKN)
- {
- printf(ISIC_FMT "ISAC Version UNKNOWN (VN=0x%x)" TERMFMT,
- ISIC_PARM,
- sc->sc_isac_version);
- sc->sc_isac_version = ISAC_UNKN;
- }
- else
- {
- printf(ISIC_FMT "ISAC %s (IOM-%c)" TERMFMT,
- ISIC_PARM,
- ISACversion[sc->sc_isac_version],
- sc->sc_bustyp == BUS_TYPE_IOM1 ? '1' : '2');
- }
-
- if(sc->sc_hscx_version >= HSCX_UNKN)
- {
- printf(ISIC_FMT "HSCX Version UNKNOWN (VN=0x%x)" TERMFMT,
- ISIC_PARM,
- sc->sc_hscx_version);
- sc->sc_hscx_version = HSCX_UNKN;
- }
- else
- {
- printf(ISIC_FMT "HSCX %s" TERMFMT,
- ISIC_PARM,
- HSCXversion[sc->sc_hscx_version]);
- }
-
- return(1);
-}
-
diff --git a/sys/i4b/layer1/pcmcia_isic.h b/sys/i4b/layer1/pcmcia_isic.h
deleted file mode 100644
index 73f52d6930203..0000000000000
--- a/sys/i4b/layer1/pcmcia_isic.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 1998 Martin Husemann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- * 4. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software and/or documentation.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * pcmcia_isic.h - common definitions for pcmcia isic cards
- * --------------------------------------------------------
- *
- * $Id: pcmcia_isic.h,v 1.1 1998/12/02 06:44:30 hm Exp $
- *
- * last edit-date: [Mon Nov 30 21:19:14 1998]
- *
- * -mh original implementation
- *
- *---------------------------------------------------------------------------*/
-
-struct pcmcia_isic_softc {
- struct isic_softc sc_isic; /* parent class */
-
- /* PCMCIA-specific goo */
- struct pcmcia_io_handle sc_pcioh; /* PCMCIA i/o space info */
- int sc_io_window; /* our i/o window */
- struct pcmcia_function *sc_pf; /* our PCMCIA function */
- void *sc_ih; /* interrupt handler */
-};
-
-typedef int (*isic_pcmcia_attach_func)(struct pcmcia_isic_softc *sc, struct pcmcia_config_entry *cfe, struct pcmcia_attach_args *pa);
-
-extern int isic_attach_fritzpcmcia(struct pcmcia_isic_softc *sc, struct pcmcia_config_entry *cfe, struct pcmcia_attach_args *pa);
-extern int isic_attach_elsaisdnmc(struct pcmcia_isic_softc *sc, struct pcmcia_config_entry *cfe, struct pcmcia_attach_args *pa);
-extern int isic_attach_elsamcall(struct pcmcia_isic_softc *sc, struct pcmcia_config_entry *cfe, struct pcmcia_attach_args *pa);
-
-
diff --git a/sys/i4b/layer2/i4b_iframe.c b/sys/i4b/layer2/i4b_iframe.c
deleted file mode 100644
index c5e38d80f8ece..0000000000000
--- a/sys/i4b/layer2/i4b_iframe.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_iframe.c - i frame handling routines
- * ------------------------------------------
- *
- * $Id: i4b_iframe.c,v 1.15 1998/12/05 18:05:06 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:26:16 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_trace.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_trace.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-/*---------------------------------------------------------------------------*
- * process i frame
- * implements the routine "I COMMAND" Q.921 03/93 pp 77
- *---------------------------------------------------------------------------*/
-void
-i4b_rxd_i_frame(int unit, struct mbuf *m)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
- u_char *ptr = m->m_data;
- int nr;
- int ns;
- int p;
- int x;
-
- if(!((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI)))))
- {
- i4b_Dfreembuf(m);
- return;
- }
-
- if((l2sc->Q921_state != ST_MULTIFR) && (l2sc->Q921_state != ST_TIMREC))
- {
- i4b_Dfreembuf(m);
- DBGL2(L2_I_ERR, "i4b_rxd_i_frame", ("ERROR, state != (MF || TR)!\n"));
- return;
- }
-
- x = SPLI4B();
-
- nr = GETINR(*(ptr + OFF_INR));
- ns = GETINS(*(ptr + OFF_INS));
- p = GETIP(*(ptr + OFF_INR));
-
- i4b_rxd_ack(l2sc, nr); /* last packet ack */
-
- if(l2sc->own_busy) /* own receiver busy ? */
- {
- i4b_Dfreembuf(m); /* yes, discard information */
-
- if(p == 1) /* P bit == 1 ? */
- {
- i4b_tx_rnr_response(l2sc, p); /* yes, tx RNR */
- l2sc->ack_pend = 0; /* clear ACK pending */
- }
- }
- else /* own receiver ready */
- {
- if(ns == l2sc->vr) /* expected sequence number ? */
- {
- M128INC(l2sc->vr); /* yes, update */
-
- l2sc->rej_excpt = 0; /* clr reject exception */
-
- m_adj(m, I_HDR_LEN); /* strip i frame header */
-
- l2sc->iframe_sent = 0; /* reset i acked already */
-
- DL_Data_Ind(l2sc->unit, m); /* pass data up */
-
- if(!l2sc->iframe_sent)
- {
- i4b_tx_rr_response(l2sc, p); /* yes, tx RR */
- l2sc->ack_pend = 0; /* clr ACK pending */
- }
- }
- else /* ERROR, sequence number NOT expected */
- {
- i4b_Dfreembuf(m); /* discard information */
-
- if(l2sc->rej_excpt == 1) /* already exception ? */
- {
- if(p == 1) /* immediate response ? */
- {
- i4b_tx_rr_response(l2sc, p); /* yes, tx RR */
- l2sc->ack_pend = 0; /* clr ack pend */
- }
- }
- else /* not in exception cond */
- {
- l2sc->rej_excpt = 1; /* set exception */
- i4b_tx_rej_response(l2sc, p); /* tx REJ */
- l2sc->ack_pend = 0; /* clr ack pending */
- }
- }
- }
-
- /* sequence number ranges as expected ? */
-
- if(i4b_l2_nr_ok(nr, l2sc->va, l2sc->vs))
- {
- if(l2sc->Q921_state == ST_TIMREC)
- {
- l2sc->va = nr;
- splx(x);
- return;
- }
-
- if(l2sc->peer_busy) /* yes, other side busy ? */
- {
- l2sc->va = nr; /* yes, update ack count */
- }
- else /* other side ready */
- {
- if(nr == l2sc->vs) /* count expected ? */
- {
- l2sc->va = nr; /* update ack */
- i4b_T200_stop(l2sc);
- i4b_T203_restart(l2sc);
- }
- else
- {
- if(nr != l2sc->va)
- {
- l2sc->va = nr;
- i4b_T200_restart(l2sc);
- }
- }
- }
- }
- else
- {
- i4b_nr_error_recovery(l2sc); /* sequence error */
- l2sc->Q921_state = ST_AW_EST;
- }
- splx(x);
-}
-
-/*---------------------------------------------------------------------------*
- * internal I FRAME QUEUED UP routine (Q.921 03/93 p 61)
- *---------------------------------------------------------------------------*/
-void
-i4b_i_frame_queued_up(l2_softc_t *l2sc)
-{
- int x;
- struct mbuf *m;
- u_char *ptr;
-
- x = SPLI4B();
-
- if(l2sc->peer_busy)
- {
- DBGL2(L2_I_MSG, "i4b_i_frame_queued_up", ("peer busy!\n"));
- i4b_print_l2var(l2sc);
- splx(x);
- return;
- }
-
- if(l2sc->vs == ((l2sc->va + MAX_K_VALUE) & 127))
- {
- DBGL2(L2_I_ERR, "i4b_i_frame_queued_up", ("V(S) == ((V(A) + k) & 127)!\n"));
- DBGL2(L2_I_ERR, "i4b_i_frame_queued_up", ("state = %s\n", i4b_print_l2state(l2sc)));
- i4b_print_l2var(l2sc);
- splx(x);
- return;
- }
-
- IF_DEQUEUE(&l2sc->i_queue, m); /* fetch next frame to tx */
-
- if(!m)
- {
- DBGL2(L2_I_ERR, "i4b_i_frame_queued_up", ("ERROR, mbuf NULL after IF_DEQUEUE\n"));
- splx(x);
- return;
- }
-
- ptr = m->m_data;
-
- PUTSAPI(SAPI_CCP, CR_CMD_TO_NT, *(ptr + OFF_SAPI));
- PUTTEI(l2sc->tei, *(ptr + OFF_TEI));
-
- *(ptr + OFF_INS) = (l2sc->vs << 1) & 0xfe; /* bit 0 = 0 */
- *(ptr + OFF_INR) = (l2sc->vr << 1) & 0xfe; /* P bit = 0 */
-
- PH_Data_Req(l2sc->unit, m, MBUF_DONTFREE); /* free'd when ack'd ! */
-
- l2sc->iframe_sent = 1; /* in case we ack an I frame with another I frame */
-
- if(l2sc->ua_num != UA_EMPTY) /* failsafe */
- {
- DBGL2(L2_I_ERR, "i4b_i_frame_queued_up", ("ERROR, l2sc->ua_num: %d != UA_EMPTY\n", l2sc->ua_num));
- i4b_print_l2var(l2sc);
- i4b_Dfreembuf(l2sc->ua_frame);
- }
-
- l2sc->ua_frame = m; /* save unacked frame */
- l2sc->ua_num = l2sc->vs; /* save frame number */
-
- M128INC(l2sc->vs);
-
- l2sc->ack_pend = 0;
-
- splx(x);
-
- if(l2sc->T200 == TIMER_IDLE)
- {
- i4b_T203_stop(l2sc);
- i4b_T200_start(l2sc);
- }
-}
-
-#endif /* NI4BQ921 > 0 */
diff --git a/sys/i4b/layer2/i4b_l2.c b/sys/i4b/layer2/i4b_l2.c
deleted file mode 100644
index 5cdc1c7cc582a..0000000000000
--- a/sys/i4b/layer2/i4b_l2.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l2.c - ISDN layer 2 (Q.921)
- * -------------------------------
- *
- * $Id: i4b_l2.c,v 1.23 1998/12/05 18:05:08 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:27:00 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-int i4b_dl_establish_ind(int);
-int i4b_dl_establish_cnf(int);
-int i4b_dl_release_ind(int);
-int i4b_dl_release_cnf(int);
-int i4b_dl_data_ind(int, struct mbuf *);
-int i4b_dl_unit_data_ind(int, struct mbuf *);
-
-static int i4b_mdl_command_req(int, int, int);
-
-/* from layer 2 */
-
-extern int i4b_mdl_attach_ind(int, int);
-extern int i4b_mdl_status_ind(int, int, int);
-
-/* this layers debug level */
-
-unsigned int i4b_l2_debug = L2_DEBUG_DEFAULT;
-
-struct i4b_l2l3_func i4b_l2l3_func = {
-
- /* Layer 2 --> Layer 3 */
-
- (int (*)(int)) i4b_dl_establish_ind,
- (int (*)(int)) i4b_dl_establish_cnf,
- (int (*)(int)) i4b_dl_release_ind,
- (int (*)(int)) i4b_dl_release_cnf,
- (int (*)(int, struct mbuf *)) i4b_dl_data_ind,
- (int (*)(int, struct mbuf *)) i4b_dl_unit_data_ind,
-
- /* Layer 3 --> Layer 2 */
-
- (int (*)(int)) i4b_dl_establish_req,
- (int (*)(int)) i4b_dl_release_req,
- (int (*)(int, struct mbuf *)) i4b_dl_data_req,
- (int (*)(int, struct mbuf *)) i4b_dl_unit_data_req,
-
- /* Layer 2 --> Layer 3 management */
-
- (int (*)(int, int, int)) i4b_mdl_status_ind,
-
- /* Layer 3 --> Layer 2 management */
-
- (int (*)(int, int, int)) i4b_mdl_command_req
-};
-
-/*---------------------------------------------------------------------------*
- * DL_ESTABLISH_REQ from layer 3
- *---------------------------------------------------------------------------*/
-int i4b_dl_establish_req(int unit)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
-
- DBGL2(L2_PRIM, "DL-ESTABLISH-REQ", ("unit %d\n",unit));
- i4b_l1_activate(l2sc);
- i4b_next_l2state(l2sc, EV_DLESTRQ);
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * DL_RELEASE_REQ from layer 3
- *---------------------------------------------------------------------------*/
-int i4b_dl_release_req(int unit)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
-
- DBGL2(L2_PRIM, "DL-RELEASE-REQ", ("unit %d\n",unit));
- i4b_next_l2state(l2sc, EV_DLRELRQ);
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * DL UNIT DATA REQUEST from Layer 3
- *---------------------------------------------------------------------------*/
-int i4b_dl_unit_data_req(int unit, struct mbuf *m)
-{
-#ifdef NOTDEF
- DBGL2(L2_PRIM, "DL-UNIT-DATA-REQ", ("unit %d\n",unit));
-#endif
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * DL DATA REQUEST from Layer 3
- *---------------------------------------------------------------------------*/
-int i4b_dl_data_req(int unit, struct mbuf *m)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
- int x;
-#ifdef NOTDEF
- DBGL2(L2_PRIM, "DL-DATA-REQ", ("unit %d\n",unit));
-#endif
- switch(l2sc->Q921_state)
- {
- case ST_AW_EST:
- case ST_MULTIFR:
- case ST_TIMREC:
-
- if(IF_QFULL(&l2sc->i_queue))
- {
- DBGL2(L2_ERROR, "i4b_dl_data_req", ("i_queue full!!\n"));
- i4b_Dfreembuf(m);
- }
- else
- {
- x = splimp();
- IF_ENQUEUE(&l2sc->i_queue, m);
- splx(x);
- i4b_i_frame_queued_up(l2sc);
- }
- break;
-
- default:
- DBGL2(L2_ERROR, "i4b_dl_data_req", ("unit %d ERROR in state [%s], freeing mbuf\n", unit, i4b_print_l2state(l2sc)));
- i4b_Dfreembuf(m);
- break;
- }
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_ph_activate_ind - link activation indication from layer 1
- *---------------------------------------------------------------------------*/
-int
-i4b_ph_activate_ind(int unit)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
-
- DBGL1(L1_PRIM, "PH-ACTIVATE-IND", ("unit %d\n",unit));
- l2sc->ph_active = PH_ACTIVE;
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_ph_deactivate_ind - link deactivation indication from layer 1
- *---------------------------------------------------------------------------*/
-int
-i4b_ph_deactivate_ind(int unit)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
-
- DBGL1(L1_PRIM, "PH-DEACTIVATE-IND", ("unit %d\n",unit));
- l2sc->ph_active = PH_INACTIVE;
- return(0);
-}
-
-
-/*---------------------------------------------------------------------------*
- * i4b_l2_unit_init - place layer 2 unit into known state
- *---------------------------------------------------------------------------*/
-static void
-i4b_l2_unit_init(int unit)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
-
- l2sc->Q921_state = ST_TEI_UNAS;
- l2sc->tei_valid = TEI_INVALID;
- l2sc->vr = 0;
- l2sc->vs = 0;
- l2sc->va = 0;
- l2sc->ack_pend = 0;
- l2sc->rej_excpt = 0;
- l2sc->peer_busy = 0;
- l2sc->own_busy = 0;
- l2sc->l3initiated = 0;
-
- l2sc->rxd_CR = 0;
- l2sc->rxd_PF = 0;
- l2sc->rxd_NR = 0;
- l2sc->RC = 0;
- l2sc->iframe_sent = 0;
-
- l2sc->postfsmfunc = NULL;
-
- if(l2sc->ua_num != UA_EMPTY)
- {
- i4b_Dfreembuf(l2sc->ua_frame);
- l2sc->ua_num = UA_EMPTY;
- l2sc->ua_frame = NULL;
- }
-
- i4b_T200_stop(l2sc);
- i4b_T202_stop(l2sc);
- i4b_T203_stop(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_mph_status_ind - status indication upward
- *---------------------------------------------------------------------------*/
-int
-i4b_mph_status_ind(int unit, int status, int parm)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
- int sendup = 1;
-
- int x = SPLI4B();
-
- DBGL1(L1_PRIM, "MPH-STATUS-IND", ("unit %d, status=%d, parm=%d\n", unit, status, parm));
-
- switch(status)
- {
- case STI_ATTACH:
- l2sc->unit = unit;
- l2sc->i_queue.ifq_maxlen = IQUEUE_MAXLEN;
- l2sc->ua_frame = NULL;
- i4b_l2_unit_init(unit);
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- /* initialize the callout handles for timeout routines */
- callout_handle_init(&l2sc->T200_callout);
- callout_handle_init(&l2sc->T202_callout);
- callout_handle_init(&l2sc->T203_callout);
-#endif
- break;
-
- case STI_L1STAT: /* state of layer 1 */
- break;
-
- case STI_PDEACT: /* Timer 4 expired */
- if((l2sc->Q921_state >= ST_AW_EST) &&
- (l2sc->Q921_state <= ST_TIMREC))
- {
- DBGL2(L2_ERROR, "i4b_mph_status_ind", ("unit %d, persistent deactivation!\n", unit));
- i4b_l2_unit_init(unit);
- }
- else
- {
- sendup = 0;
- }
- break;
-
- case STI_NOL1ACC:
- i4b_l2_unit_init(unit);
- DBGL2(L2_ERROR, "i4b_mph_status_ind", ("unit %d, cannot access S0 bus!\n", unit));
- break;
-
- default:
- DBGL2(L2_ERROR, "i4b_mph_status_ind", ("ERROR, unit %d, unknown status message!\n", unit));
- break;
- }
-
- if(sendup)
- MDL_Status_Ind(unit, status, parm); /* send up to layer 3 */
-
- splx(x);
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * MDL_COMMAND_REQ from layer 3
- *---------------------------------------------------------------------------*/
-int i4b_mdl_command_req(int unit, int command, int parm)
-{
- DBGL2(L2_PRIM, "MDL-COMMAND-REQ", ("unit %d, command=%d, parm=%d\n", unit, command, parm));
-
- switch(command)
- {
- case CMR_DOPEN:
- i4b_l2_unit_init(unit);
- break;
- }
-
- MPH_Command_Req(unit, command, parm);
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_ph_data_ind - process a rx'd frame got from layer 1
- *---------------------------------------------------------------------------*/
-int
-i4b_ph_data_ind(int unit, struct mbuf *m)
-{
-#ifdef NOTDEF
- DBGL1(L1_PRIM, "PH-DATA-IND", ("unit %d\n", unit));
-#endif
- u_char *ptr = m->m_data;
-
- if ( (*(ptr + OFF_CNTL) & 0x01) == 0 )
- {
- if(m->m_len < 4) /* 6 oct - 2 chksum oct */
- {
- DBGL2(L2_ERROR, "i4b_ph_data_ind", ("ERROR, I-frame < 6 octetts!\n"));
- i4b_Dfreembuf(m);
- return(0);
- }
- i4b_rxd_i_frame(unit, m);
- }
- else if ( (*(ptr + OFF_CNTL) & 0x03) == 0x01 )
- {
- if(m->m_len < 4) /* 6 oct - 2 chksum oct */
- {
- DBGL2(L2_ERROR, "i4b_ph_data_ind", ("ERROR, S-frame < 6 octetts!\n"));
- i4b_Dfreembuf(m);
- return(0);
- }
- i4b_rxd_s_frame(unit, m);
- }
- else if ( (*(ptr + OFF_CNTL) & 0x03) == 0x03 )
- {
- if(m->m_len < 3) /* 5 oct - 2 chksum oct */
- {
- DBGL2(L2_ERROR, "i4b_ph_data_ind", ("ERROR, U-frame < 5 octetts!\n"));
- i4b_Dfreembuf(m);
- return(0);
- }
- i4b_rxd_u_frame(unit, m);
- }
- else
- {
- DBGL2(L2_ERROR, "i4b_ph_data_ind", ("ERROR, bad frame rx'd - "));
- i4b_print_frame(m->m_len, m->m_data);
- i4b_Dfreembuf(m);
- }
- return(0);
-}
-
-#endif /* NI4BQ921 > 0 */
-
diff --git a/sys/i4b/layer2/i4b_l2.h b/sys/i4b/layer2/i4b_l2.h
deleted file mode 100644
index ab1dfd7cd549d..0000000000000
--- a/sys/i4b/layer2/i4b_l2.h
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l2.h - ISDN layer 2 (Q.921) definitions
- * ---------------------------------------------
- *
- * $Id: i4b_l2.h,v 1.14 1998/12/05 18:05:09 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:27:13 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_L2_H_
-#define _I4B_L2_H_
-
-typedef struct {
- int unit; /* unit number this entry is for */
-
- int Q921_state; /* state according to Q.921 */
-
- u_char last_ril; /* last reference number from TEI management */
- u_char last_rih;
-
- int tei_valid; /* tei is valid flag */
-#define TEI_INVALID 0
-#define TEI_VALID 1
- int tei; /* tei, if tei flag valid */
-
- int ph_active; /* Layer 1 active flag */
-#define PH_INACTIVE 0 /* layer 1 inactive */
-#define PH_ACTIVEPEND 1 /* already tried to activate */
-#define PH_ACTIVE 2 /* layer 1 active */
-
- int T200; /* Multiframe timeout timer */
- int T201; /* min time between TEI ID check */
- int T202; /* min time between TEI ID Req messages */
- int N202; /* TEI ID Req tx counter */
- void(*T202func)(void *);/* function to be called when T202 expires */
- int T203; /* max line idle time */
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- struct callout_handle T200_callout;
- struct callout_handle T202_callout;
- struct callout_handle T203_callout;
-#endif
-
- int vr; /* receive sequence frame counter */
- int vs; /* transmit sequence frame counter */
- int va; /* acknowledge sequence frame counter */
-
- int ack_pend; /* acknowledge pending */
- int rej_excpt; /* reject exception */
- int peer_busy; /* peer receiver busy */
- int own_busy; /* own receiver busy */
- int l3initiated; /* layer 3 initiated */
-
- struct ifqueue i_queue; /* queue of outgoing i frames */
-#define IQUEUE_MAXLEN 20
-
- /* this implementation only supports a k-value of 1 !!! */
- struct mbuf *ua_frame; /* last unacked frame */
- int ua_num; /* last unacked frame number */
-#define UA_EMPTY (-1) /* ua_frame is unused */
-
- int rxd_CR; /* received Command Response bit */
- int rxd_PF; /* received Poll/Final bit */
- int rxd_NR; /* received N(R) field */
- int RC; /* Retry Counter */
-
- int iframe_sent; /* check if i frame acked by another i frame */
-
- int (*postfsmfunc)(int);/* function to be called at fsm exit */
- int postfsmarg; /* argument for above function */
-} l2_softc_t;
-
-extern l2_softc_t l2_softc[];
-
-/* Q.912 system parameters (Q.921 03/93 pp 43) */
-
-#define MAX_K_VALUE 1 /* BRI - # of outstanding frames */
-
-#define N200 3 /* max no of retransmissions */
-#define N201DEF 260 /* max no of octetts in information field */
-#define N202DEF 3 /* max no of TEI ID Request message transmissions */
-
-#define T200DEF (hz*1) /* default T200 timer value = 1 second */
-#define T201DEF T200DEF /* default T201 timer value = T200DEF */
-#define T202DEF (hz*2) /* default T202 timer value = 2 seconds */
-#define T203DEF (hz*10) /* default T203 timer value = 10 seconds*/
-
-/* modulo 128 operations */
-
-#define M128INC(v) (v)++; \
- if((v)>127) \
- { \
- v = 0; \
- }
-
-#define M128DEC(v) (v)--; \
- if((v)<0) \
- { \
- v = 127;\
- }
-
-/* P-bit values */
-
-typedef enum {
- P0,
- P1
-} pbit_t;
-
-/* F-bit values */
-
-typedef enum {
- F0,
- F1
-} fbit_t;
-
-/* CR-bit values to NT */
-
-typedef enum {
- CR_CMD_TO_NT,
- CR_RSP_TO_NT
-} crbit_to_nt_t;
-
-/* CR-bit values from NT */
-
-typedef enum {
- CR_RSP_FROM_NT,
- CR_CMD_FROM_NT
-} crbit_from_nt_t;
-
-/* address field - octett 2 */
-
-#define OFF_SAPI 0 /* SAPI offset, HDLC flag is eaten by L1 */
-#define SAPI_CCP 0 /* SAPI = 0 - call control procedures */
-#define SAPI_X25 16 /* SAPI = 16 - X.25 packet procedures */
-#define SAPI_L2M 63 /* SAPI = 63 - Layer 2 management procedures */
-
-/* extract and insert macros for SAPI octett */
-
-#define GETSAPI(octett) (((octett) >> 2) & 0x3f)
-#define PUTSAPI(sapi,cr,octett) ((octett) = (((sapi << 2) & 0xfc) | ((cr & 0x01) << 1)))
-#define GETCR(octett) (((octett) >> 1) & 0x01)
-#define GETEA(octett) ((octett) & 0x01)
-
-/* address field - octett 3 */
-
-#define OFF_TEI 1 /* TEI offset */
-#define GETTEI(octett) (((octett) >> 1) & 0x7f)
-#define PUTTEI(tei, octett) ((octett) = ((((tei) << 1) & 0xfe)) | 0x01)
-#define GROUP_TEI 127 /* broadcast TEI for LME */
-
-/* control field - octett 4 */
-
-#define OFF_CNTL 2 /* 1st byte of control field */
-
-/* S frames */
-
-#define S_FRAME_LEN 4 /* lenght of a U-frame */
-#define OFF_SRCR 2 /* 1st byte of control field, */
- /* R-commands and R-responses */
-#define OFF_SNR 3 /* 2nd byte of control field, N(R) and PF */
-#define SPFBIT 0x01 /* poll/final bit mask */
-#define SPBITSET SPFBIT
-#define SFBITSET SPFBIT
-#define GETSNR(octett) (((octett) >> 1) & 0x7f)
-#define GETSPF(octett) ((octett) & SPFBIT)
-#define RR 0x01 /* RR and bit 0 set */
-#define RNR 0x05 /* RNR and bit 0 set */
-#define REJ 0x09 /* REJ and bit 0 set */
-
-/* U frames */
-
-#define UI_HDR_LEN 3 /* length of UI header in front of L3 frame */
-#define U_FRAME_LEN 3 /* lenght of a U-frame */
-#define UPFBIT 0x10 /* poll/final bit mask */
-#define UPBITSET UPFBIT
-#define UFBITSET UPFBIT
-#define GETUPF(octett) (((octett) >> 4) & 0x01)
-
-/* commands/responses with pf bit set to 0 */
-
-#define SABME 0x6f
-#define DM 0x0f
-#define UI 0x03
-#define DISC 0x43
-#define UA 0x63
-#define FRMR 0x87
-#define XID 0xaf
-
-/* control field - octett 3 */
-
-#define OFF_MEI 3 /* 2nd byte of control field */
-
-/* control field - octett 4,5 */
-
-#define OFF_RIL 4 /* Ri low byte */
-#define OFF_RIH 5 /* Ri high byte */
-
-/* control field - octett 6 */
-
-#define OFF_MT 6 /* Message Type */
-#define OFF_AI 7 /* Action Indicator */
-#define GET_TEIFROMAI(octett) (((octett) >> 1) & 0x7f)
-
-/* I frame */
-
-#define I_HDR_LEN 4 /* length of I header in front of L3 frame */
-#define OFF_INS 2 /* transmit sequence number */
-#define OFF_INR 3 /* receive sequence number */
-#define IPFBIT 0x01 /* poll/final bit mask */
-#define IPBITSET 0x01
-#define GETINR(octett) (((octett) >> 1) & 0x7f)
-#define GETINS(octett) (((octett) >> 1) & 0x7f)
-#define GETIP(octett) ((octett) & IPFBIT)
-
-/* structure of a TEI management frame */
-
-#define TEI_MGMT_FRM_LEN 8 /* frame length */
-#define TEIM_SAPIO 0x00 /* SAPI, CR, EA */
-#define TEIM_TEIO 0x01 /* TEI, EA */
-#define TEIM_UIO 0x02 /* frame type = UI = 0x03 */
-#define TEIM_MEIO 0x03 /* management entity id = 0x0f */
-#define MEI 0x0f
-#define TEIM_RILO 0x04 /* reference number, low */
-#define TEIM_RIHO 0x05 /* reference number, high */
-#define TEIM_MTO 0x06 /* message type */
-#define MT_ID_REQEST 0x01
-#define MT_ID_ASSIGN 0x02
-#define MT_ID_DENY 0x03
-#define MT_ID_CHK_REQ 0x04
-#define MT_ID_CHK_RSP 0x05
-#define MT_ID_REMOVE 0x06
-#define MT_ID_VERIFY 0x07
-#define TEIM_AIO 0x07 /* action indicator */
-
-/* i4b_mdl_error_ind codes */
-
-enum MDL_ERROR_CODES {
- MDL_ERR_A,
- MDL_ERR_B,
- MDL_ERR_C,
- MDL_ERR_D,
- MDL_ERR_E,
- MDL_ERR_F,
- MDL_ERR_G,
- MDL_ERR_H,
- MDL_ERR_I,
- MDL_ERR_J,
- MDL_ERR_K,
- MDL_ERR_L,
- MDL_ERR_M,
- MDL_ERR_N,
- MDL_ERR_O,
- MDL_ERR_MAX
-};
-
-/* forward decl */
-
-extern void i4b_acknowledge_pending ( l2_softc_t *l2sc );
-extern struct mbuf * i4b_build_s_frame ( l2_softc_t *l2sc, crbit_to_nt_t crbit, pbit_t pbit, u_char type );
-extern struct mbuf * i4b_build_u_frame ( l2_softc_t *l2sc, crbit_to_nt_t crbit, pbit_t pbit, u_char type );
-extern void i4b_clear_exception_conditions ( l2_softc_t *l2sc );
-extern int i4b_dl_data_req ( int unit, struct mbuf *m );
-extern int i4b_dl_establish_req ( int unit );
-extern int i4b_dl_release_req ( int unit );
-extern int i4b_dl_unit_data_req ( int unit, struct mbuf *m );
-extern void i4b_enquiry_response ( l2_softc_t *l2sc );
-extern void i4b_establish_data_link ( l2_softc_t *l2sc );
-extern void i4b_invoke_retransmission ( l2_softc_t *l2sc, int nr );
-extern void i4b_i_frame_queued_up ( l2_softc_t *l2sc );
-extern void i4b_l1_activate ( l2_softc_t *l2sc );
-extern int i4b_l2_nr_ok ( int nr, int va, int vs );
-extern void i4b_make_rand_ri ( l2_softc_t *l2sc );
-extern void i4b_mdl_assign_ind ( l2_softc_t *l2sc );
-extern void i4b_mdl_error_ind ( l2_softc_t *l2sc, char *where, int errorcode );
-extern int i4b_mph_attach_ind ( int unit, int type );
-extern int i4b_mph_status_ind ( int unit, int status, int parm );
-extern void i4b_next_l2state ( l2_softc_t *l2sc, int event );
-extern void i4b_nr_error_recovery ( l2_softc_t *l2sc );
-extern int i4b_ph_activate_ind ( int unit );
-extern int i4b_ph_deactivate_ind ( int unit );
-extern int i4b_ph_data_ind ( int unit, struct mbuf *m );
-extern void i4b_print_frame ( int len, u_char *buf );
-extern char *i4b_print_l2state ( l2_softc_t *l2sc );
-extern void i4b_print_l2var ( l2_softc_t *l2sc );
-extern void i4b_rxd_ack(l2_softc_t *l2sc, int nr);
-extern void i4b_rxd_i_frame ( int unit, struct mbuf *m );
-extern void i4b_rxd_s_frame ( int unit, struct mbuf *m );
-extern void i4b_rxd_u_frame ( int unit, struct mbuf *m );
-extern void i4b_T200_restart ( l2_softc_t *l2sc );
-extern void i4b_T200_start ( l2_softc_t *l2sc );
-extern void i4b_T200_stop ( l2_softc_t *l2sc );
-extern void i4b_T202_start ( l2_softc_t *l2sc );
-extern void i4b_T202_stop ( l2_softc_t *l2sc );
-extern void i4b_T203_restart ( l2_softc_t *l2sc );
-extern void i4b_T203_start ( l2_softc_t *l2sc );
-extern void i4b_T203_stop ( l2_softc_t *l2sc );
-extern void i4b_tei_assign ( l2_softc_t *l2sc );
-extern void i4b_tei_chkresp ( l2_softc_t *l2sc );
-extern void i4b_tei_rxframe ( int unit, struct mbuf *m );
-extern void i4b_tei_verify ( l2_softc_t *l2sc );
-extern void i4b_transmit_enquire ( l2_softc_t *l2sc );
-extern void i4b_tx_disc ( l2_softc_t *l2sc, pbit_t pbit );
-extern void i4b_tx_dm ( l2_softc_t *l2sc, fbit_t fbit );
-extern void i4b_tx_frmr ( l2_softc_t *l2sc, fbit_t fbit );
-extern void i4b_tx_rej_response ( l2_softc_t *l2sc, fbit_t fbit );
-extern void i4b_tx_rnr_command ( l2_softc_t *l2sc, pbit_t pbit );
-extern void i4b_tx_rnr_response ( l2_softc_t *l2sc, fbit_t fbit );
-extern void i4b_tx_rr_command ( l2_softc_t *l2sc, pbit_t pbit );
-extern void i4b_tx_rr_response ( l2_softc_t *l2sc, fbit_t fbit );
-extern void i4b_tx_sabme ( l2_softc_t *l2sc, pbit_t pbit );
-extern void i4b_tx_ua ( l2_softc_t *l2sc, fbit_t fbit );
-
-#endif /* _I4B_L2_H_ */
diff --git a/sys/i4b/layer2/i4b_l2fsm.c b/sys/i4b/layer2/i4b_l2fsm.c
deleted file mode 100644
index 113167c114295..0000000000000
--- a/sys/i4b/layer2/i4b_l2fsm.c
+++ /dev/null
@@ -1,1593 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l2fsm.c - layer 2 FSM
- * -------------------------
- *
- * $Id: i4b_l2fsm.c,v 1.13 1998/12/05 18:05:11 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:28:15 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-l2_softc_t l2_softc[ISIC_MAXUNIT];
-
-static char *l2state_text[N_STATES] = {
- "ST_TEI_UNAS",
- "ST_ASG_AW_TEI",
- "ST_EST_AW_TEI",
- "ST_TEI_ASGD",
-
- "ST_AW_EST",
- "ST_AW_REL",
- "ST_MULTIFR",
- "ST_TIMREC",
-
- "ST_SUBSET",
- "Illegal State"
-};
-
-static char *l2event_text[N_EVENTS] = {
- "EV_DLESTRQ",
- "EV_DLUDTRQ",
- "EV_MDASGRQ",
- "EV_MDERRRS",
- "EV_PSDEACT",
- "EV_MDREMRQ",
- "EV_RXSABME",
- "EV_RXDISC",
- "EV_RXUA",
- "EV_RXDM",
- "EV_T200EXP",
- "EV_DLDATRQ",
- "EV_DLRELRQ",
- "EV_T203EXP",
- "EV_OWNBUSY",
- "EV_OWNRDY",
- "EV_RXRR",
- "EV_RXREJ",
- "EV_RXRNR",
- "EV_RXFRMR",
- "Illegal Event"
-};
-
-static void F_TU01 __P((l2_softc_t *));
-static void F_TU03 __P((l2_softc_t *));
-
-static void F_TA03 __P((l2_softc_t *));
-static void F_TA04 __P((l2_softc_t *));
-static void F_TA05 __P((l2_softc_t *));
-
-static void F_TE03 __P((l2_softc_t *));
-static void F_TE04 __P((l2_softc_t *));
-static void F_TE05 __P((l2_softc_t *));
-
-static void F_T01 __P((l2_softc_t *));
-static void F_T05 __P((l2_softc_t *));
-static void F_T06 __P((l2_softc_t *));
-static void F_T07 __P((l2_softc_t *));
-static void F_T08 __P((l2_softc_t *));
-static void F_T09 __P((l2_softc_t *));
-static void F_T10 __P((l2_softc_t *));
-static void F_T13 __P((l2_softc_t *));
-
-static void F_AE01 __P((l2_softc_t *));
-static void F_AE05 __P((l2_softc_t *));
-static void F_AE06 __P((l2_softc_t *));
-static void F_AE07 __P((l2_softc_t *));
-static void F_AE08 __P((l2_softc_t *));
-static void F_AE09 __P((l2_softc_t *));
-static void F_AE10 __P((l2_softc_t *));
-static void F_AE11 __P((l2_softc_t *));
-static void F_AE12 __P((l2_softc_t *));
-
-static void F_AR05 __P((l2_softc_t *));
-static void F_AR06 __P((l2_softc_t *));
-static void F_AR07 __P((l2_softc_t *));
-static void F_AR08 __P((l2_softc_t *));
-static void F_AR09 __P((l2_softc_t *));
-static void F_AR10 __P((l2_softc_t *));
-static void F_AR11 __P((l2_softc_t *));
-
-static void F_MF01 __P((l2_softc_t *));
-static void F_MF05 __P((l2_softc_t *));
-static void F_MF06 __P((l2_softc_t *));
-static void F_MF07 __P((l2_softc_t *));
-static void F_MF08 __P((l2_softc_t *));
-static void F_MF09 __P((l2_softc_t *));
-static void F_MF10 __P((l2_softc_t *));
-static void F_MF11 __P((l2_softc_t *));
-static void F_MF12 __P((l2_softc_t *));
-static void F_MF13 __P((l2_softc_t *));
-static void F_MF14 __P((l2_softc_t *));
-static void F_MF15 __P((l2_softc_t *));
-static void F_MF16 __P((l2_softc_t *));
-static void F_MF17 __P((l2_softc_t *));
-static void F_MF18 __P((l2_softc_t *));
-static void F_MF19 __P((l2_softc_t *));
-static void F_MF20 __P((l2_softc_t *));
-
-static void F_TR01 __P((l2_softc_t *));
-static void F_TR05 __P((l2_softc_t *));
-static void F_TR06 __P((l2_softc_t *));
-static void F_TR07 __P((l2_softc_t *));
-static void F_TR08 __P((l2_softc_t *));
-static void F_TR09 __P((l2_softc_t *));
-static void F_TR10 __P((l2_softc_t *));
-static void F_TR11 __P((l2_softc_t *));
-static void F_TR12 __P((l2_softc_t *));
-static void F_TR13 __P((l2_softc_t *));
-static void F_TR15 __P((l2_softc_t *));
-static void F_TR16 __P((l2_softc_t *));
-static void F_TR17 __P((l2_softc_t *));
-static void F_TR18 __P((l2_softc_t *));
-static void F_TR19 __P((l2_softc_t *));
-static void F_TR20 __P((l2_softc_t *));
-static void F_ILL __P((l2_softc_t *));
-static void F_NCNA __P((l2_softc_t *));
-
-/*---------------------------------------------------------------------------*
- * FSM illegal state default action
- *---------------------------------------------------------------------------*/
-static void
-F_ILL(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_ERR, "F_ILL", ("FSM function F_ILL executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * FSM No change, No action
- *---------------------------------------------------------------------------*/
-static void
-F_NCNA(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_NCNA", ("FSM function F_NCNA executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * layer 2 state transition table
- *---------------------------------------------------------------------------*/
-struct l2state_tab {
- void (*func) __P((l2_softc_t *)); /* function to execute */
- int newstate; /* next state */
-} l2state_tab[N_EVENTS][N_STATES] = {
-
-/* STATE: ST_TEI_UNAS, ST_ASG_AW_TEI, ST_EST_AW_TEI, ST_TEI_ASGD, ST_AW_EST, ST_AW_REL, ST_MULTIFR, ST_TIMREC, ST_SUBSET, ILLEGAL STATE */
-/* -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
-/*EV_DLESTRQ*/{ {F_TU01, ST_EST_AW_TEI}, {F_NCNA, ST_EST_AW_TEI}, {F_ILL, ST_ILL}, {F_T01, ST_AW_EST}, {F_AE01, ST_AW_EST}, {F_ILL, ST_ILL}, {F_MF01, ST_AW_EST}, {F_TR01, ST_AW_EST}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_DLUDTRQ*/{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_MDASGRQ*/{ {F_TU03, ST_TEI_ASGD}, {F_TA03, ST_TEI_ASGD}, {F_TE03, ST_AW_EST}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_MDERRRS*/{ {F_ILL, ST_ILL}, {F_TA04, ST_TEI_UNAS}, {F_TE04, ST_TEI_UNAS}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_PSDEACT*/{ {F_ILL, ST_ILL}, {F_TA05, ST_TEI_UNAS}, {F_TE05, ST_TEI_UNAS}, {F_T05, ST_TEI_ASGD}, {F_AE05, ST_TEI_ASGD}, {F_AR05, ST_TEI_ASGD}, {F_MF05, ST_TEI_ASGD}, {F_TR05, ST_TEI_ASGD}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_MDREMRQ*/{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_T06, ST_TEI_UNAS}, {F_AE06, ST_TEI_UNAS}, {F_AR06, ST_TEI_UNAS}, {F_MF06, ST_TEI_UNAS}, {F_TR06, ST_TEI_UNAS}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_RXSABME*/{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_T07, ST_SUBSET}, {F_AE07, ST_AW_EST}, {F_AR07, ST_AW_REL}, {F_MF07, ST_MULTIFR}, {F_TR07, ST_MULTIFR}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_RXDISC */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_T08, ST_TEI_ASGD}, {F_AE08, ST_AW_EST}, {F_AR08, ST_AW_REL}, {F_MF08, ST_TEI_ASGD}, {F_TR08, ST_TEI_ASGD}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_RXUA */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_T09, ST_TEI_ASGD}, {F_AE09, ST_SUBSET}, {F_AR09, ST_SUBSET}, {F_MF09, ST_MULTIFR}, {F_TR09, ST_TIMREC}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_RXDM */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_T10, ST_SUBSET}, {F_AE10, ST_SUBSET}, {F_AR10, ST_SUBSET}, {F_MF10, ST_SUBSET}, {F_TR10, ST_AW_EST}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_T200EXP*/{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_AE11, ST_SUBSET}, {F_AR11, ST_SUBSET}, {F_MF11, ST_TIMREC}, {F_TR11, ST_SUBSET}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_DLDATRQ*/{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_AE12, ST_AW_EST}, {F_ILL, ST_ILL}, {F_MF12, ST_MULTIFR}, {F_TR12, ST_TIMREC}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_DLRELRQ*/{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_T13, ST_TEI_ASGD}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_MF13, ST_AW_REL}, {F_TR13, ST_AW_REL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_T203EXP*/{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_MF14, ST_TIMREC}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_OWNBUSY*/{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_MF15, ST_MULTIFR}, {F_TR15, ST_TIMREC}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_OWNRDY */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_MF16, ST_MULTIFR}, {F_TR16, ST_TIMREC}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_RXRR */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_MF17, ST_SUBSET}, {F_TR17, ST_SUBSET}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_RXREJ */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_MF18, ST_SUBSET}, {F_TR18, ST_SUBSET}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_RXRNR */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_MF19, ST_SUBSET}, {F_TR19, ST_SUBSET}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_RXFRMR */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_MF20, ST_AW_EST}, {F_TR20, ST_AW_EST}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} },
-/*EV_ILL */{ {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL} }
-};
-
-/*---------------------------------------------------------------------------*
- * event handler, executes function and sets new state
- *---------------------------------------------------------------------------*/
-void i4b_next_l2state(l2_softc_t *l2sc, int event)
-{
- int currstate, newstate;
-
- /* check event number */
- if(event > N_EVENTS)
- panic("i4b_l2fsm.c: event > N_EVENTS\n");
-
- /* get current state and check it */
- if((currstate = l2sc->Q921_state) > N_STATES) /* failsafe */
- panic("i4b_l2fsm.c: currstate > N_STATES\n");
-
- /* get new state and check it */
- if((newstate = l2state_tab[event][currstate].newstate) > N_STATES)
- panic("i4b_l2fsm.c: newstate > N_STATES\n");
-
-
- if(newstate != ST_SUBSET)
- { /* state function does NOT set new state */
- DBGL2(L2_F_MSG, "i4b_next_l2state", ("FSM event [%s]: [%s/%d => %s/%d]\n",
- l2event_text[event],
- l2state_text[currstate], currstate,
- l2state_text[newstate], newstate));
- }
-
- /* execute state transition function */
- (*l2state_tab[event][currstate].func)(l2sc);
-
- if(newstate == ST_SUBSET)
- { /* state function DOES set new state */
- DBGL2(L2_F_MSG, "i4b_next_l2state", ("FSM S-event [%s]: [%s => %s]\n", l2event_text[event],
- l2state_text[currstate],
- l2state_text[l2sc->Q921_state]));
- }
-
- /* check for illegal new state */
-
- if(newstate == ST_ILL)
- {
- newstate = currstate;
- DBGL2(L2_F_ERR, "i4b_next_l2state", ("FSM illegal state, state = %s, event = %s!\n",
- l2state_text[currstate],
- l2event_text[event]));
- }
-
- /* check if state machine function has to set new state */
-
- if(newstate != ST_SUBSET)
- l2sc->Q921_state = newstate; /* no, we set new state */
-
- if(l2sc->postfsmfunc != NULL)
- {
- DBGL2(L2_F_MSG, "i4b_next_l2state", ("FSM executing postfsmfunc!\n"));
- (*l2sc->postfsmfunc)(l2sc->postfsmarg);
- l2sc->postfsmfunc = NULL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * return pointer to current state description
- *---------------------------------------------------------------------------*/
-char *i4b_print_l2state(l2_softc_t *l2sc)
-{
- return((char *) l2state_text[l2sc->Q921_state]);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_UNAS event dl establish request
- *---------------------------------------------------------------------------*/
-static void
-F_TU01(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TU01", ("FSM function F_TU01 executing\n"));
- i4b_mdl_assign_ind(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_UNAS event mdl assign request
- *---------------------------------------------------------------------------*/
-static void
-F_TU03(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TU03", ("FSM function F_TU03 executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_ASG_AW_TEI event mdl assign request
- *---------------------------------------------------------------------------*/
-static void
-F_TA03(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TA03", ("FSM function F_TA03 executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_ASG_AW_TEI event mdl error response
- *---------------------------------------------------------------------------*/
-static void
-F_TA04(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TA04", ("FSM function F_TA04 executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_ASG_AW_TEI event persistent deactivation
- *---------------------------------------------------------------------------*/
-static void
-F_TA05(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TA05", ("FSM function F_TA05 executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_EST_AW_TEI event mdl assign request
- *---------------------------------------------------------------------------*/
-static void
-F_TE03(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TE03", ("FSM function F_TE03 executing\n"));
- i4b_establish_data_link(l2sc);
- l2sc->l3initiated = 1;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_EST_AW_TEI event mdl error response
- *---------------------------------------------------------------------------*/
-static void
-F_TE04(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TE04", ("FSM function F_TE04 executing\n"));
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_EST_AW_TEI event persistent deactivation
- *---------------------------------------------------------------------------*/
-static void
-F_TE05(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TE05", ("FSM function F_TE05 executing\n"));
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_ASGD event dl establish request
- *---------------------------------------------------------------------------*/
-static void
-F_T01(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_T01", ("FSM function F_T01 executing\n"));
- i4b_establish_data_link(l2sc);
- l2sc->l3initiated = 1;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_ASGD event persistent deactivation
- *---------------------------------------------------------------------------*/
-static void
-F_T05(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_T05", ("FSM function F_T05 executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_ASGD event mdl remove request
- *---------------------------------------------------------------------------*/
-static void
-F_T06(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_T06", ("FSM function F_T06 executing\n"));
-/*XXX*/ i4b_mdl_assign_ind(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_ASGD event rx'd SABME
- *---------------------------------------------------------------------------*/
-static void
-F_T07(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_T07", ("FSM function F_T07 executing\n"));
-
-/* XXX */
-#ifdef NOTDEF
- if(NOT able to establish)
- {
- i4b_tx_dm(l2sc, l2sc->rxd_PF);
- l2sc->Q921_state = ST_TEI_ASGD;
- return;
- }
-#endif
-
- i4b_clear_exception_conditions(l2sc);
-
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_ACTIVE);
-
- i4b_tx_ua(l2sc, l2sc->rxd_PF);
-
- l2sc->vs = 0;
- l2sc->va = 0;
- l2sc->vr = 0;
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Est_Ind_A;
-
- i4b_T203_start(l2sc);
-
- l2sc->Q921_state = ST_MULTIFR;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_ASGD event rx'd DISC
- *---------------------------------------------------------------------------*/
-static void
-F_T08(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_T08", ("FSM function F_T08 executing\n"));
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_IDLE);
- i4b_tx_ua(l2sc, l2sc->rxd_PF);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_ASGD event rx'd UA
- *---------------------------------------------------------------------------*/
-static void
-F_T09(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_T09", ("FSM function F_T09 executing\n"));
- i4b_mdl_error_ind(l2sc, "F_T09", MDL_ERR_C);
- i4b_mdl_error_ind(l2sc, "F_T09", MDL_ERR_D);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_ASGD event rx'd DM
- *---------------------------------------------------------------------------*/
-static void
-F_T10(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_T10", ("FSM function F_T10 executing\n"));
-
- if(l2sc->rxd_PF)
- {
- l2sc->Q921_state = ST_TEI_ASGD;
- }
- else
- {
-#ifdef NOTDEF
- if(NOT able_to_etablish)
- {
- l2sc->Q921_state = ST_TEI_ASGD;
- return;
- }
-#endif
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 1;
-
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TEI_ASGD event dl release request
- *---------------------------------------------------------------------------*/
-static void
-F_T13(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_T13", ("FSM function F_T13 executing\n"));
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Cnf_A;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event dl establish request
- *---------------------------------------------------------------------------*/
-static void
-F_AE01(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE01", ("FSM function F_AE01 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->l3initiated = 1;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event persistent deactivation
- *---------------------------------------------------------------------------*/
-static void
-F_AE05(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE05", ("FSM function F_AE05 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event mdl remove request
- *---------------------------------------------------------------------------*/
-static void
-F_AE06(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE06", ("FSM function F_AE06 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
-
-/*XXX*/ i4b_mdl_assign_ind(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event rx'd SABME
- *---------------------------------------------------------------------------*/
-static void
-F_AE07(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE07", ("FSM function F_AE07 executing\n"));
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_ACTIVE);
- i4b_tx_ua(l2sc, l2sc->rxd_PF);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event rx'd DISC
- *---------------------------------------------------------------------------*/
-static void
-F_AE08(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE08", ("FSM function F_AE08 executing\n"));
- i4b_tx_dm(l2sc, l2sc->rxd_PF);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event rx'd UA
- *---------------------------------------------------------------------------*/
-static void
-F_AE09(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE09", ("FSM function F_AE09 executing\n"));
-
- if(l2sc->rxd_PF == 0)
- {
- i4b_mdl_error_ind(l2sc, "F_AE09", MDL_ERR_D);
- l2sc->Q921_state = ST_AW_EST;
- }
- else
- {
- if(l2sc->l3initiated)
- {
- l2sc->l3initiated = 0;
- l2sc->vr = 0;
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Est_Cnf_A;
- }
- else
- {
- if(l2sc->vs != l2sc->va)
- {
- i4b_Dcleanifq(&l2sc->i_queue);
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Est_Ind_A;
- }
- }
-
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_ACTIVE);
-
- i4b_T200_stop(l2sc);
- i4b_T203_start(l2sc);
-
- l2sc->vs = 0;
- l2sc->va = 0;
-
- l2sc->Q921_state = ST_MULTIFR;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event rx'd DM
- *---------------------------------------------------------------------------*/
-static void
-F_AE10(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE10", ("FSM function F_AE10 executing\n"));
-
- if(l2sc->rxd_PF == 0)
- {
- l2sc->Q921_state = ST_AW_EST;
- }
- else
- {
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
-
- l2sc->Q921_state = ST_TEI_ASGD;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event T200 expiry
- *---------------------------------------------------------------------------*/
-static void
-F_AE11(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE11", ("FSM function F_AE11 executing\n"));
-
- if(l2sc->RC >= N200)
- {
- i4b_Dcleanifq(&l2sc->i_queue);
-
- i4b_mdl_error_ind(l2sc, "F_AE11", MDL_ERR_G);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- l2sc->Q921_state = ST_TEI_ASGD;
- }
- else
- {
- l2sc->RC++;
-
- i4b_tx_sabme(l2sc, P1);
-
- i4b_T200_start(l2sc);
-
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_EST event dl data request
- *---------------------------------------------------------------------------*/
-static void
-F_AE12(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AE12", ("FSM function F_AE12 executing\n"));
-
- if(l2sc->l3initiated == 0)
- {
- i4b_i_frame_queued_up(l2sc);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_REL event persistent deactivation
- *---------------------------------------------------------------------------*/
-static void
-F_AR05(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AR05", ("FSM function F_AR05 executing\n"));
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Cnf_A;
-
- i4b_T200_stop(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_REL event mdl remove request
- *---------------------------------------------------------------------------*/
-static void
-F_AR06(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AR06", ("FSM function F_AR06 executing\n"));
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Cnf_A;
-
- i4b_T200_stop(l2sc);
-
-/*XXX*/ i4b_mdl_assign_ind(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_REL event rx'd SABME
- *---------------------------------------------------------------------------*/
-static void
-F_AR07(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AR07", ("FSM function F_AR07 executing\n"));
- i4b_tx_dm(l2sc, l2sc->rxd_PF);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_REL event rx'd DISC
- *---------------------------------------------------------------------------*/
-static void
-F_AR08(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AR08", ("FSM function F_AR08 executing\n"));
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_IDLE);
- i4b_tx_ua(l2sc, l2sc->rxd_PF);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_REL event rx'd UA
- *---------------------------------------------------------------------------*/
-static void
-F_AR09(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AR09", ("FSM function F_AR09 executing\n"));
-
- if(l2sc->rxd_PF)
- {
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Cnf_A;
-
- i4b_T200_stop(l2sc);
-
- l2sc->Q921_state = ST_TEI_ASGD;
- }
- else
- {
- i4b_mdl_error_ind(l2sc, "F_AR09", MDL_ERR_D);
-
- l2sc->Q921_state = ST_AW_REL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_REL event rx'd DM
- *---------------------------------------------------------------------------*/
-static void
-F_AR10(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AR10", ("FSM function F_AR10 executing\n"));
-
- if(l2sc->rxd_PF)
- {
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Cnf_A;
-
- i4b_T200_stop(l2sc);
-
- l2sc->Q921_state = ST_TEI_ASGD;
- }
- else
- {
- l2sc->Q921_state = ST_AW_REL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_AW_REL event T200 expiry
- *---------------------------------------------------------------------------*/
-static void
-F_AR11(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_AR11", ("FSM function F_AR11 executing\n"));
-
- if(l2sc->RC >= N200)
- {
- i4b_mdl_error_ind(l2sc, "F_AR11", MDL_ERR_H);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Cnf_A;
-
- l2sc->Q921_state = ST_TEI_ASGD;
- }
- else
- {
- l2sc->RC++;
-
- i4b_tx_disc(l2sc, P1);
-
- i4b_T200_start(l2sc);
-
- l2sc->Q921_state = ST_AW_REL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event dl establish request
- *---------------------------------------------------------------------------*/
-static void
-F_MF01(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF01", ("FSM function F_MF01 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 1;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event persistent deactivation
- *---------------------------------------------------------------------------*/
-static void
-F_MF05(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF05", ("FSM function F_MF05 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
- i4b_T203_stop(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event mdl remove request
- *---------------------------------------------------------------------------*/
-static void
-F_MF06(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF06", ("FSM function F_MF06 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
- i4b_T203_stop(l2sc);
-
-/*XXX*/ i4b_mdl_assign_ind(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event rx'd SABME
- *---------------------------------------------------------------------------*/
-static void
-F_MF07(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF07", ("FSM function F_MF07 executing\n"));
-
- i4b_clear_exception_conditions(l2sc);
-
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_ACTIVE);
-
- i4b_tx_ua(l2sc, l2sc->rxd_PF);
-
- i4b_mdl_error_ind(l2sc, "F_MF07", MDL_ERR_F);
-
- if(l2sc->vs != l2sc->va)
- {
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Est_Ind_A;
- }
-
- i4b_T200_stop(l2sc);
- i4b_T203_start(l2sc);
-
- l2sc->vs = 0;
- l2sc->va = 0;
- l2sc->vr = 0;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event rx'd DISC
- *---------------------------------------------------------------------------*/
-static void
-F_MF08(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF08", ("FSM function F_MF08 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_IDLE);
- i4b_tx_ua(l2sc, l2sc->rxd_PF);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
- i4b_T203_stop(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event rx'd UA
- *---------------------------------------------------------------------------*/
-static void
-F_MF09(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF09", ("FSM function F_MF09 executing\n"));
- if(l2sc->rxd_PF)
- i4b_mdl_error_ind(l2sc, "F_MF09", MDL_ERR_C);
- else
- i4b_mdl_error_ind(l2sc, "F_MF09", MDL_ERR_D);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event rx'd DM
- *---------------------------------------------------------------------------*/
-static void
-F_MF10(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF10", ("FSM function F_MF10 executing\n"));
-
- if(l2sc->rxd_PF)
- {
- i4b_mdl_error_ind(l2sc, "F_MF10", MDL_ERR_B);
-
- l2sc->Q921_state = ST_MULTIFR;
- }
- else
- {
- i4b_mdl_error_ind(l2sc, "F_MF10", MDL_ERR_E);
-
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 0;
-
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event T200 expiry
- *---------------------------------------------------------------------------*/
-static void
-F_MF11(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF11", ("FSM function F_MF11 executing\n"));
-
- l2sc->RC = 0;
-
- i4b_transmit_enquire(l2sc);
-
- l2sc->RC++;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event dl data request
- *---------------------------------------------------------------------------*/
-static void
-F_MF12(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF12", ("FSM function F_MF12 executing\n"));
-
- i4b_i_frame_queued_up(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event dl release request
- *---------------------------------------------------------------------------*/
-static void
-F_MF13(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF13", ("FSM function F_MF13 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->RC = 0;
-
- i4b_tx_disc(l2sc, P1);
-
- i4b_T203_stop(l2sc);
- i4b_T200_restart(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event T203 expiry
- *---------------------------------------------------------------------------*/
-static void
-F_MF14(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF14", ("FSM function F_MF14 executing\n"));
-
- i4b_transmit_enquire(l2sc);
-
- l2sc->RC = 0;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event set own rx busy
- *---------------------------------------------------------------------------*/
-static void
-F_MF15(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF15", ("FSM function F_MF15 executing\n"));
-
- if(l2sc->own_busy == 0)
- {
- l2sc->own_busy = 1;
-
- i4b_tx_rnr_response(l2sc, F0); /* wrong in Q.921 03/93 p 64 */
-
- l2sc->ack_pend = 0;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event clear own rx busy
- *---------------------------------------------------------------------------*/
-static void
-F_MF16(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF16", ("FSM function F_MF16 executing\n"));
-
- if(l2sc->own_busy != 0)
- {
- l2sc->own_busy = 0;
-
- i4b_tx_rr_response(l2sc, F0); /* wrong in Q.921 03/93 p 64 */
-
- l2sc->ack_pend = 0;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event rx'd RR
- *---------------------------------------------------------------------------*/
-static void
-F_MF17(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF17", ("FSM function F_MF17 executing\n"));
-
- l2sc->peer_busy = 0;
-
- if(l2sc->rxd_CR == CR_CMD_FROM_NT)
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_enquiry_response(l2sc);
- }
- }
- else
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_mdl_error_ind(l2sc, "F_MF17", MDL_ERR_A);
- }
- }
-
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- if(l2sc->rxd_NR == l2sc->vs)
- {
- l2sc->va = l2sc->rxd_NR;
- i4b_T200_stop(l2sc);
- i4b_T203_restart(l2sc);
- }
- else if(l2sc->rxd_NR != l2sc->va)
- {
- l2sc->va = l2sc->rxd_NR;
- i4b_T200_restart(l2sc);
- }
- l2sc->Q921_state = ST_MULTIFR;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event rx'd REJ
- *---------------------------------------------------------------------------*/
-static void
-F_MF18(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF18", ("FSM function F_MF18 executing\n"));
-
- l2sc->peer_busy = 0;
-
- if(l2sc->rxd_CR == CR_CMD_FROM_NT)
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_enquiry_response(l2sc);
- }
- }
- else
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_mdl_error_ind(l2sc, "F_MF18", MDL_ERR_A);
- }
- }
-
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- l2sc->va = l2sc->rxd_NR;
- i4b_T200_stop(l2sc);
- i4b_T203_start(l2sc);
- i4b_invoke_retransmission(l2sc, l2sc->rxd_NR);
- l2sc->Q921_state = ST_MULTIFR;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event rx'd RNR
- *---------------------------------------------------------------------------*/
-static void
-F_MF19(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF19", ("FSM function F_MF19 executing\n"));
-
- l2sc->peer_busy = 1;
-
- if(l2sc->rxd_CR == CR_CMD_FROM_NT)
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_enquiry_response(l2sc);
- }
- }
- else
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_mdl_error_ind(l2sc, "F_MF19", MDL_ERR_A);
- }
- }
-
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- l2sc->va = l2sc->rxd_NR;
- i4b_T203_stop(l2sc);
- i4b_T200_restart(l2sc);
- l2sc->Q921_state = ST_MULTIFR;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_MULTIFR event rx'd FRMR
- *---------------------------------------------------------------------------*/
-static void
-F_MF20(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_MF20", ("FSM function F_MF20 executing\n"));
-
- i4b_mdl_error_ind(l2sc, "F_MF20", MDL_ERR_K);
-
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 0;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event dl establish request
- *---------------------------------------------------------------------------*/
-static void
-F_TR01(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR01", ("FSM function F_TR01 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 1;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event persistent deactivation
- *---------------------------------------------------------------------------*/
-static void
-F_TR05(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR05", ("FSM function F_TR05 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event mdl remove request
- *---------------------------------------------------------------------------*/
-static void
-F_TR06(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR06", ("FSM function F_TR06 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
-
-/*XXX*/ i4b_mdl_assign_ind(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event rx'd SABME
- *---------------------------------------------------------------------------*/
-static void
-F_TR07(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR07", ("FSM function F_TR07 executing\n"));
-
- i4b_clear_exception_conditions(l2sc);
-
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_ACTIVE);
-
- i4b_tx_ua(l2sc, l2sc->rxd_PF);
-
- i4b_mdl_error_ind(l2sc, "F_TR07", MDL_ERR_F);
-
- if(l2sc->vs != l2sc->va)
- {
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Est_Ind_A;
- }
-
- i4b_T200_stop(l2sc);
- i4b_T203_start(l2sc);
-
- l2sc->vs = 0;
- l2sc->va = 0;
- l2sc->vr = 0;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event rx'd DISC
- *---------------------------------------------------------------------------*/
-static void
-F_TR08(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR08", ("FSM function F_TR08 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
- MDL_Status_Ind(l2sc->unit, STI_L2STAT, LAYER_IDLE);
- i4b_tx_ua(l2sc, l2sc->rxd_PF);
-
- l2sc->postfsmarg = l2sc->unit;
- l2sc->postfsmfunc = DL_Rel_Ind_A;
-
- i4b_T200_stop(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event rx'd UA
- *---------------------------------------------------------------------------*/
-static void
-F_TR09(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR09", ("FSM function F_TR09 executing\n"));
- if(l2sc->rxd_PF)
- i4b_mdl_error_ind(l2sc, "F_TR09", MDL_ERR_C);
- else
- i4b_mdl_error_ind(l2sc, "F_TR09", MDL_ERR_D);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event rx'd DM
- *---------------------------------------------------------------------------*/
-static void
-F_TR10(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR10", ("FSM function F_TR10 executing\n"));
-
- if(l2sc->rxd_PF)
- {
- i4b_mdl_error_ind(l2sc, "F_TR10", MDL_ERR_B);
- }
- else
- {
- i4b_mdl_error_ind(l2sc, "F_TR10", MDL_ERR_E);
- }
-
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 0;
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event T200 expiry
- *---------------------------------------------------------------------------*/
-static void
-F_TR11(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR11", ("FSM function F_TR11 executing\n"));
-
- if(l2sc->RC >= N200)
- {
- i4b_mdl_error_ind(l2sc, "F_TR11", MDL_ERR_I);
-
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 0;
-
- l2sc->Q921_state = ST_AW_EST;
- }
- else
- {
- i4b_transmit_enquire(l2sc);
-
- l2sc->RC++;
-
- l2sc->Q921_state = ST_TIMREC;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event dl data request
- *---------------------------------------------------------------------------*/
-static void
-F_TR12(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR12", ("FSM function F_TR12 executing\n"));
-
- i4b_i_frame_queued_up(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event dl release request
- *---------------------------------------------------------------------------*/
-static void
-F_TR13(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR13", ("FSM function F_TR13 executing\n"));
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- l2sc->RC = 0;
-
- i4b_tx_disc(l2sc, P1);
-
- i4b_T200_restart(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event set own rx busy
- *---------------------------------------------------------------------------*/
-static void
-F_TR15(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR15", ("FSM function F_TR15 executing\n"));
-
- if(l2sc->own_busy == 0)
- {
- l2sc->own_busy = 1;
-
- i4b_tx_rnr_response(l2sc, F0);
-
- l2sc->ack_pend = 0;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event clear own rx busy
- *---------------------------------------------------------------------------*/
-static void
-F_TR16(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR16", ("FSM function F_TR16 executing\n"));
-
- if(l2sc->own_busy != 0)
- {
- l2sc->own_busy = 0;
-
- i4b_tx_rr_response(l2sc, F0); /* this is wrong */
- /* in Q.921 03/93 p 74 ! */
- l2sc->ack_pend = 0;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event rx'd RR
- *---------------------------------------------------------------------------*/
-static void
-F_TR17(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR17", ("FSM function F_TR17 executing\n"));
-
- l2sc->peer_busy = 0;
-
- if(l2sc->rxd_CR == CR_CMD_FROM_NT)
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_enquiry_response(l2sc);
- }
- }
- else
- {
- if(l2sc->rxd_PF == 1)
- {
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- l2sc->va = l2sc->rxd_NR;
- i4b_T200_stop(l2sc);
- i4b_T203_start(l2sc);
- i4b_invoke_retransmission(l2sc, l2sc->rxd_NR);
- l2sc->Q921_state = ST_MULTIFR;
- return;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- return;
- }
- }
- }
-
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- l2sc->va = l2sc->rxd_NR;
- l2sc->Q921_state = ST_TIMREC;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event
- *---------------------------------------------------------------------------*/
-static void
-F_TR18(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR18", ("FSM function F_TR18 executing\n"));
-
- l2sc->peer_busy = 0;
-
- if(l2sc->rxd_CR == CR_CMD_FROM_NT)
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_enquiry_response(l2sc);
- }
- }
- else
- {
- if(l2sc->rxd_PF == 1)
- {
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- l2sc->va = l2sc->rxd_NR;
- i4b_T200_stop(l2sc);
- i4b_T203_start(l2sc);
- i4b_invoke_retransmission(l2sc, l2sc->rxd_NR);
- l2sc->Q921_state = ST_MULTIFR;
- return;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- return;
- }
- }
- }
-
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- l2sc->va = l2sc->rxd_NR;
- l2sc->Q921_state = ST_TIMREC;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event rx'd RNR
- *---------------------------------------------------------------------------*/
-static void
-F_TR19(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR19", ("FSM function F_TR19 executing\n"));
-
- l2sc->peer_busy = 0;
-
- if(l2sc->rxd_CR == CR_CMD_FROM_NT)
- {
- if(l2sc->rxd_PF == 1)
- {
- i4b_enquiry_response(l2sc);
- }
- }
- else
- {
- if(l2sc->rxd_PF == 1)
- {
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- l2sc->va = l2sc->rxd_NR;
- i4b_T200_restart(l2sc);
- i4b_invoke_retransmission(l2sc, l2sc->rxd_NR);
- l2sc->Q921_state = ST_MULTIFR;
- return;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- return;
- }
- }
- }
-
- if(i4b_l2_nr_ok(l2sc->rxd_NR, l2sc->va, l2sc->vs))
- {
- l2sc->va = l2sc->rxd_NR;
- l2sc->Q921_state = ST_TIMREC;
- }
- else
- {
- i4b_nr_error_recovery(l2sc);
- l2sc->Q921_state = ST_AW_EST;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * FSM state ST_TIMREC event rx'd FRMR
- *---------------------------------------------------------------------------*/
-static void
-F_TR20(l2_softc_t *l2sc)
-{
- DBGL2(L2_F_MSG, "F_TR20", ("FSM function F_TR20 executing\n"));
-
- i4b_mdl_error_ind(l2sc, "F_TR20", MDL_ERR_K);
-
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 0;
-}
-
-#endif /* NI4BQ921 > 0 */
diff --git a/sys/i4b/layer2/i4b_l2fsm.h b/sys/i4b/layer2/i4b_l2fsm.h
deleted file mode 100644
index 8f510682bebfc..0000000000000
--- a/sys/i4b/layer2/i4b_l2fsm.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l2fsm.h - layer 2 FSM
- * -------------------------
- *
- * $Id: i4b_l2fsm.h,v 1.3 1998/12/05 18:05:13 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:28:39 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_L2FSM_H_
-#define _I4B_L2FSM_H_
-
-enum Q921_states {
- ST_TEI_UNAS, /* TEI unassigned */
- ST_ASG_AW_TEI, /* assign awaiting TEI */
- ST_EST_AW_TEI, /* establish awaiting TEI */
- ST_TEI_ASGD, /* TEI assigned */
-
- ST_AW_EST, /* awaiting establishment */
- ST_AW_REL, /* awaiting release */
- ST_MULTIFR, /* multiple frame established */
- ST_TIMREC, /* timer recovery */
-
- ST_SUBSET, /* SUBroutine SETs new state */
- ST_ILL, /* illegal state */
- N_STATES /* number of states */
-};
-
-enum Q921_events {
- EV_DLESTRQ, /* dl establish req */
- EV_DLUDTRQ, /* dl unit data req */
- EV_MDASGRQ, /* mdl assign req */
- EV_MDERRRS, /* mdl error response */
- EV_PSDEACT, /* persistent deactivation */
- EV_MDREMRQ, /* mdl remove req */
- EV_RXSABME, /* rx'd SABME */
- EV_RXDISC, /* rx'd DISC */
- EV_RXUA, /* rx'd UA */
- EV_RXDM, /* rx'd DM */
- EV_T200EXP, /* T200 expired */
- EV_DLDATRQ, /* dl data req */
- EV_DLRELRQ, /* dl release req */
- EV_T203EXP, /* T203 expired */
- EV_OWNBUSY, /* set own rx busy */
- EV_OWNRDY, /* clear own rx busy */
- EV_RXRR, /* rx'd RR */
- EV_RXREJ, /* rx'd REJ */
- EV_RXRNR, /* rx'd RNR */
- EV_RXFRMR, /* rx'd FRMR */
-
- EV_ILL, /* Illegal */
- N_EVENTS
-};
-
-#endif /* _I4B_L2FSM_H_ */
-
diff --git a/sys/i4b/layer2/i4b_l2timer.c b/sys/i4b/layer2/i4b_l2timer.c
deleted file mode 100644
index 3b45e807dcdbf..0000000000000
--- a/sys/i4b/layer2/i4b_l2timer.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l2timer.c - layer 2 timer handling
- * --------------------------------------
- *
- * $Id: i4b_l2timer.c,v 1.12 1998/12/05 18:05:15 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:29:13 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T200 timeout function
- *---------------------------------------------------------------------------*/
-static void
-i4b_T200_timeout(l2_softc_t *l2sc)
-{
- DBGL2(L2_T_ERR, "i4b_T200_timeout", ("unit %d, RC = %d\n", l2sc->unit, l2sc->RC));
- i4b_next_l2state(l2sc, EV_T200EXP);
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T200 start
- *---------------------------------------------------------------------------*/
-void
-i4b_T200_start(l2_softc_t *l2sc)
-{
- DBGL2(L2_T_MSG, "i4b_T200_start", ("unit %d\n", l2sc->unit));
- l2sc->T200 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- l2sc->T200_callout = timeout((TIMEOUT_FUNC_T)i4b_T200_timeout, (void *)l2sc, T200DEF);
-#else
- timeout((TIMEOUT_FUNC_T)i4b_T200_timeout, (void *)l2sc, T200DEF);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T200 stop
- *---------------------------------------------------------------------------*/
-void
-i4b_T200_stop(l2_softc_t *l2sc)
-{
- if(l2sc->T200 != TIMER_IDLE)
- {
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)i4b_T200_timeout, (void *)l2sc, l2sc->T200_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)i4b_T200_timeout, (void *)l2sc);
-#endif
- l2sc->T200 = TIMER_IDLE;
- }
- DBGL2(L2_T_MSG, "i4b_T200_stop", ("unit %d\n", l2sc->unit));
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T200 restart
- *---------------------------------------------------------------------------*/
-void
-i4b_T200_restart(l2_softc_t *l2sc)
-{
- if(l2sc->T200 != TIMER_IDLE)
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)i4b_T200_timeout, (void *)l2sc, l2sc->T200_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)i4b_T200_timeout, (void *)l2sc);
-#endif
- else
- l2sc->T200 = TIMER_ACTIVE;
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- l2sc->T200_callout = timeout((TIMEOUT_FUNC_T)i4b_T200_timeout, (void *)l2sc, T200DEF);
-#else
- timeout((TIMEOUT_FUNC_T)i4b_T200_timeout, (void *)l2sc, T200DEF);
-#endif
-
- DBGL2(L2_T_MSG, "i4b_T200_restart", ("unit %d\n", l2sc->unit));
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T202 timeout function
- *---------------------------------------------------------------------------*/
-static void
-i4b_T202_timeout(l2_softc_t *l2sc)
-{
- DBGL2(L2_T_ERR, "i4b_T202_timeout", ("unit %d, N202 = %d\n", l2sc->unit, l2sc->N202));
-
- if(--(l2sc->N202))
- {
- (*l2sc->T202func)(l2sc);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T202 start
- *---------------------------------------------------------------------------*/
-void
-i4b_T202_start(l2_softc_t *l2sc)
-{
- DBGL2(L2_T_MSG, "i4b_T202_start", ("unit %d\n", l2sc->unit));
- l2sc->N202 = N202DEF;
- l2sc->T202 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- l2sc->T202_callout = timeout((TIMEOUT_FUNC_T)i4b_T202_timeout, (void *)l2sc, T202DEF);
-#else
- timeout((TIMEOUT_FUNC_T)i4b_T202_timeout, (void *)l2sc, T202DEF);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T202 stop
- *---------------------------------------------------------------------------*/
-void
-i4b_T202_stop(l2_softc_t *l2sc)
-{
- if(l2sc->T202 != TIMER_IDLE)
- {
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)i4b_T202_timeout, (void *)l2sc, l2sc->T202_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)i4b_T202_timeout, (void *)l2sc);
-#endif
- l2sc->T202 = TIMER_IDLE;
- }
- DBGL2(L2_T_MSG, "i4b_T202_stop", ("unit %d\n", l2sc->unit));
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T203 timeout function
- *---------------------------------------------------------------------------*/
-#if I4B_T203_ACTIVE
-static void
-i4b_T203_timeout(l2_softc_t *l2sc)
-{
- DBGL2(L2_T_ERR, "i4b_T203_timeout", ("unit %d\n", l2sc->unit));
- i4b_next_l2state(l2sc, EV_T203EXP);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T203 start
- *---------------------------------------------------------------------------*/
-void
-i4b_T203_start(l2_softc_t *l2sc)
-{
-#if I4B_T203_ACTIVE
- DBGL2(L2_T_MSG, "i4b_T203_start", ("unit %d\n", l2sc->unit));
- l2sc->T203 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- l2sc->T203_callout = timeout((TIMEOUT_FUNC_T)i4b_T203_timeout, (void *)l2sc, T203DEF);
-#else
- timeout((TIMEOUT_FUNC_T)i4b_T203_timeout, (void *)l2sc, T203DEF);
-#endif
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T203 stop
- *---------------------------------------------------------------------------*/
-void
-i4b_T203_stop(l2_softc_t *l2sc)
-{
-#if I4B_T203_ACTIVE
- if(l2sc->T203 != TIMER_IDLE)
- {
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)i4b_T203_timeout, (void *)l2sc, l2sc->T203_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)i4b_T203_timeout, (void *)l2sc);
-#endif
- l2sc->T203 = TIMER_IDLE;
- }
- DBGL2(L2_T_MSG, "i4b_T203_stop", ("unit %d\n", l2sc->unit));
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * Q.921 timer T203 restart
- *---------------------------------------------------------------------------*/
-void
-i4b_T203_restart(l2_softc_t *l2sc)
-{
-#if I4B_T203_ACTIVE
- if(l2sc->T203 != TIMER_IDLE)
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)i4b_T203_timeout, (void *)l2sc, l2sc->T203_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)i4b_T203_timeout, (void *)l2sc);
-#endif
- else
- l2sc->T203 = TIMER_ACTIVE;
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- l2sc->T203_callout = timeout((TIMEOUT_FUNC_T)i4b_T203_timeout, (void *)l2sc, T203DEF);
-#else
- timeout((TIMEOUT_FUNC_T)i4b_T203_timeout, (void *)l2sc, T203DEF);
-#endif
-
- DBGL2(L2_T_MSG, "i4b_T203_restart", ("unit %d\n", l2sc->unit));
-#endif
-}
-
-#endif /* NI4BQ921 > 0 */
-
diff --git a/sys/i4b/layer2/i4b_lme.c b/sys/i4b/layer2/i4b_lme.c
deleted file mode 100644
index b179e94bfe43c..0000000000000
--- a/sys/i4b/layer2/i4b_lme.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_lme.c - layer management entity
- * -------------------------------------
- *
- * $Id: i4b_lme.c,v 1.8 1998/12/05 18:05:19 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:29:25 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-/*---------------------------------------------------------------------------*
- * mdl assign indication handler
- *---------------------------------------------------------------------------*/
-void
-i4b_mdl_assign_ind(l2_softc_t *l2sc)
-{
- DBGL2(L2_PRIM, "MDL-ASSIGN-IND", ("unit %d\n", l2sc->unit));
-
- i4b_l1_activate(l2sc);
-
- if(l2sc->tei_valid == TEI_VALID)
- {
- l2sc->T202func = (void(*)(void*))i4b_tei_verify;
- l2sc->N202 = N202DEF;
- i4b_tei_verify(l2sc);
- }
- else
- {
- l2sc->T202func = (void(*)(void*))i4b_tei_assign;
- l2sc->N202 = N202DEF;
- i4b_tei_assign(l2sc);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_mdl_error_ind handler (Q.921 01/94 pp 156)
- *---------------------------------------------------------------------------*/
-void
-i4b_mdl_error_ind(l2_softc_t *l2sc, char *where, int errorcode)
-{
- static char *error_text[] = {
- "MDL_ERR_A: rx'd unsolicited response - supervisory (F=1)",
- "MDL_ERR_B: rx'd unsolicited response - DM (F=1)",
- "MDL_ERR_C: rx'd unsolicited response - UA (F=1)",
- "MDL_ERR_D: rx'd unsolicited response - UA (F=0)",
- "MDL_ERR_E: rx'd unsolicited response - DM (F=0)",
- "MDL_ERR_F: peer initiated re-establishment - SABME",
- "MDL_ERR_G: unsuccessful transmission N200times - SABME",
- "MDL_ERR_H: unsuccessful transmission N200times - DIS",
- "MDL_ERR_I: unsuccessful transmission N200times - Status ENQ",
- "MDL_ERR_J: other error - N(R) error",
- "MDL_ERR_K: other error - rx'd FRMR response",
- "MDL_ERR_L: other error - rx'd undefined frame",
- "MDL_ERR_M: other error - receipt of I field not permitted",
- "MDL_ERR_N: other error - rx'd frame with wrong size",
- "MDL_ERR_O: other error - N201 error",
- "MDL_ERR_MAX: i4b_mdl_error_ind called with wrong parameter!!!"
- };
-
- if(errorcode > MDL_ERR_MAX)
- errorcode = MDL_ERR_MAX;
-
- DBGL2(L2_ERROR, "i4b_mdl_error_ind", ("unit = %d, location = %s\n", l2sc->unit, where));
- DBGL2(L2_ERROR, "i4b_mdl_error_ind", ("error = %s\n", error_text[errorcode]));
-
- switch(errorcode)
- {
- case MDL_ERR_A:
- case MDL_ERR_B:
- break;
-
- case MDL_ERR_C:
- case MDL_ERR_D:
- i4b_tei_verify(l2sc);
- break;
-
- case MDL_ERR_E:
- case MDL_ERR_F:
- break;
-
- case MDL_ERR_G:
- case MDL_ERR_H:
- i4b_tei_verify(l2sc);
- break;
-
- case MDL_ERR_I:
- case MDL_ERR_J:
- case MDL_ERR_K:
- case MDL_ERR_L:
- case MDL_ERR_M:
- case MDL_ERR_N:
- case MDL_ERR_O:
- break;
-
- default:
- break;
- }
-}
-
-#endif /* NI4BQ921 > 0 */
diff --git a/sys/i4b/layer2/i4b_mbuf.c b/sys/i4b/layer2/i4b_mbuf.c
deleted file mode 100644
index 6d085c3e08c08..0000000000000
--- a/sys/i4b/layer2/i4b_mbuf.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b - mbuf handling support routines
- * ------------------------------------
- *
- * $Id: i4b_mbuf.c,v 1.10 1998/12/05 18:05:20 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:29:44 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/tty.h>
-#include <sys/proc.h>
-#include <sys/uio.h>
-#include <sys/kernel.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-#define I4B_MBUF_DEBUG
-#undef I4B_MBUF_TYPE_DEBUG
-
-#ifdef I4B_MBUF_TYPE_DEBUG
-
-#ifdef __FreeBSD__
-
-#define MT_DCHAN 42
-#define MT_BCHAN 43
-
-#else /* NetBSD */
-
-#define MT_DCHAN MT_DATA
-#define MT_BCHAN MT_DATA
-
-#endif
-
-#define MT_I4B_D MT_DCHAN
-#define MT_I4B_B MT_BCHAN
-
-#else /* ! I4B_MBUF_TYPE_DEBUG */
-
-#define MT_I4B_D MT_DATA
-#define MT_I4B_B MT_DATA
-
-#endif /* I4B_MBUF_TYPE_DEBUG */
-
-/*---------------------------------------------------------------------------*
- * allocate D-channel mbuf space
- *---------------------------------------------------------------------------*/
-struct mbuf*
-i4b_Dgetmbuf(int len)
-{
- struct mbuf *m;
-
- if(len > MCLBYTES) /* if length > max extension size */
- {
-
-#ifdef I4B_MBUF_DEBUG
- printf("i4b_getmbuf: error - len(%d) > MCLBYTES(%d)\n",
- len, MCLBYTES);
-#endif
-
- return(NULL);
- }
-
- MGETHDR(m, M_DONTWAIT, MT_I4B_D); /* get mbuf with pkthdr */
-
- /* did we actually get the mbuf ? */
-
- if(!m)
- {
-
-#ifdef I4B_MBUF_DEBUG
- printf("i4b_getbuf: error - MGETHDR failed!\n");
-#endif
-
- return(NULL);
- }
-
- if(len >= MHLEN)
- {
- MCLGET(m, M_DONTWAIT);
-
- if(!(m->m_flags & M_EXT))
- {
- m_freem(m);
-
-#ifdef I4B_MBUF_DEBUG
- printf("i4b_getbuf: error - MCLGET failed, len(%d)\n", len);
-#endif
-
- return (NULL);
- }
- }
-
- m->m_len = len;
-
- return(m);
-}
-
-/*---------------------------------------------------------------------------*
- * free a D-channel mbuf
- *---------------------------------------------------------------------------*/
-void
-i4b_Dfreembuf(struct mbuf *m)
-{
- if(m)
- m_freem(m);
-}
-
-/*---------------------------------------------------------------------------*
- * clear a D-channel ifqueue from data
- *---------------------------------------------------------------------------*/
-void
-i4b_Dcleanifq(struct ifqueue *ifq)
-{
- struct mbuf *m;
- int x = splimp();
-
- while(!IF_QEMPTY(ifq))
- {
- IF_DEQUEUE(ifq, m);
- i4b_Dfreembuf(m);
- }
-
- splx(x);
-}
-
-/*---------------------------------------------------------------------------*
- * allocate B-channel mbuf space
- *---------------------------------------------------------------------------*/
-struct mbuf*
-i4b_Bgetmbuf(int len)
-{
- struct mbuf *m;
-
- if(len > MCLBYTES) /* if length > max extension size */
- {
-
-#ifdef I4B_MBUF_DEBUG
- printf("i4b_getmbuf: error - len(%d) > MCLBYTES(%d)\n",
- len, MCLBYTES);
-#endif
-
- return(NULL);
- }
-
- MGETHDR(m, M_DONTWAIT, MT_I4B_B); /* get mbuf with pkthdr */
-
- /* did we actually get the mbuf ? */
-
- if(!m)
- {
-
-#ifdef I4B_MBUF_DEBUG
- printf("i4b_getbuf: error - MGETHDR failed!\n");
-#endif
-
- return(NULL);
- }
-
- if(len >= MHLEN)
- {
- MCLGET(m, M_DONTWAIT);
-
- if(!(m->m_flags & M_EXT))
- {
- m_freem(m);
-
-#ifdef I4B_MBUF_DEBUG
- printf("i4b_getbuf: error - MCLGET failed, len(%d)\n", len);
-#endif
-
- return (NULL);
- }
- }
-
- m->m_len = len;
-
- return(m);
-}
-
-/*---------------------------------------------------------------------------*
- * free a B-channel mbuf
- *---------------------------------------------------------------------------*/
-void
-i4b_Bfreembuf(struct mbuf *m)
-{
- if(m)
- m_freem(m);
-}
-
-/*---------------------------------------------------------------------------*
- * clear a B-channel ifqueue from data
- *---------------------------------------------------------------------------*/
-void
-i4b_Bcleanifq(struct ifqueue *ifq)
-{
- struct mbuf *m;
- int x = splimp();
-
- while(!IF_QEMPTY(ifq))
- {
- IF_DEQUEUE(ifq, m);
- i4b_Bfreembuf(m);
- }
-
- splx(x);
-}
-
-/* EOF */
diff --git a/sys/i4b/layer2/i4b_sframe.c b/sys/i4b/layer2/i4b_sframe.c
deleted file mode 100644
index f8d14ba1a2465..0000000000000
--- a/sys/i4b/layer2/i4b_sframe.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_sframe.c - s frame handling routines
- * ----------------------------------------
- *
- * $Id: i4b_sframe.c,v 1.8 1998/12/05 18:05:21 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:30:02 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-/*---------------------------------------------------------------------------*
- * process s frame
- *---------------------------------------------------------------------------*/
-void
-i4b_rxd_s_frame(int unit, struct mbuf *m)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
- u_char *ptr = m->m_data;
-
- if(!((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI)))))
- {
- i4b_Dfreembuf(m);
- return;
- }
-
- l2sc->rxd_CR = GETCR(*(ptr + OFF_SAPI));
- l2sc->rxd_PF = GETSPF(*(ptr + OFF_SNR));
- l2sc->rxd_NR = GETSNR(*(ptr + OFF_SNR));
-
- i4b_rxd_ack(l2sc, l2sc->rxd_NR);
-
- switch(*(ptr + OFF_SRCR))
- {
- case RR:
- DBGL2(L2_S_MSG, "i4b_rxd_s_frame", ("rx'd RR, N(R) = %d\n", l2sc->rxd_NR));
- i4b_next_l2state(l2sc, EV_RXRR);
- break;
-
- case RNR:
- DBGL2(L2_S_MSG, "i4b_rxd_s_frame", ("rx'd RNR, N(R) = %d\n", l2sc->rxd_NR));
- i4b_next_l2state(l2sc, EV_RXRNR);
- break;
-
- case REJ:
- DBGL2(L2_S_MSG, "i4b_rxd_s_frame", ("rx'd REJ, N(R) = %d\n", l2sc->rxd_NR));
- i4b_next_l2state(l2sc, EV_RXREJ);
- break;
-
- default:
- DBGL2(L2_S_ERR, "i4b_rxd_s_frame", ("ERROR, unknown code, frame = \n"));
- i4b_print_frame(m->m_len, m->m_data);
- break;
- }
- i4b_Dfreembuf(m);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit RR command
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_rr_command(l2_softc_t *l2sc, pbit_t pbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_S_MSG, "i4b_tx_rr_command", ("tx RR, unit = %d\n", l2sc->unit));
-
- m = i4b_build_s_frame(l2sc, CR_CMD_TO_NT, pbit, RR);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit RR response
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_rr_response(l2_softc_t *l2sc, fbit_t fbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_S_MSG, "i4b_tx_rr_response", ("tx RR, unit = %d\n", l2sc->unit));
-
- m = i4b_build_s_frame(l2sc, CR_RSP_TO_NT, fbit, RR);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit RNR command
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_rnr_command(l2_softc_t *l2sc, pbit_t pbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_S_MSG, "i4b_tx_rnr_command", ("tx RNR, unit = %d\n", l2sc->unit));
-
- m = i4b_build_s_frame(l2sc, CR_CMD_TO_NT, pbit, RNR);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit RNR response
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_rnr_response(l2_softc_t *l2sc, fbit_t fbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_S_MSG, "i4b_tx_rnr_response", ("tx RNR, unit = %d\n", l2sc->unit));
-
- m = i4b_build_s_frame(l2sc, CR_RSP_TO_NT, fbit, RNR);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit REJ response
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_rej_response(l2_softc_t *l2sc, fbit_t fbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_S_MSG, "i4b_tx_rej_response", ("tx REJ, unit = %d\n", l2sc->unit));
-
- m = i4b_build_s_frame(l2sc, CR_RSP_TO_NT, fbit, REJ);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * build S-frame for sending
- *---------------------------------------------------------------------------*/
-struct mbuf *
-i4b_build_s_frame(l2_softc_t *l2sc, crbit_to_nt_t crbit, pbit_t pbit, u_char type)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(S_FRAME_LEN)) == NULL)
- return(NULL);
-
- PUTSAPI(SAPI_CCP, crbit, m->m_data[OFF_SAPI]);
-
- PUTTEI(l2sc->tei, m->m_data[OFF_TEI]);
-
- m->m_data[OFF_SRCR] = type;
-
- m->m_data[OFF_SNR] = (l2sc->vr << 1) | (pbit & 0x01);
-
- return(m);
-}
-
-#endif /* NI4BQ921 > 0 */
diff --git a/sys/i4b/layer2/i4b_tei.c b/sys/i4b/layer2/i4b_tei.c
deleted file mode 100644
index 5c5b7b83fd873..0000000000000
--- a/sys/i4b/layer2/i4b_tei.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_tei.c - tei handling procedures
- * -----------------------------------
- *
- * $Id: i4b_tei.c,v 1.13 1998/12/05 18:05:23 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:30:20 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/syslog.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <machine/random.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-/*---------------------------------------------------------------------------*
- * handle a received TEI management frame
- *---------------------------------------------------------------------------*/
-void
-i4b_tei_rxframe(int unit, struct mbuf *m)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
- u_char *ptr = m->m_data;
-
- switch(*(ptr + OFF_MT))
- {
- case MT_ID_ASSIGN:
- if( (*(ptr + OFF_RIL) == l2sc->last_ril) &&
- (*(ptr + OFF_RIH) == l2sc->last_rih))
- {
- l2sc->tei = GET_TEIFROMAI(*(ptr+OFF_AI));
- l2sc->tei_valid = TEI_VALID;
-
- if(l2sc->T202 == TIMER_ACTIVE)
- i4b_T202_stop(l2sc);
-
- MDL_Status_Ind(l2sc->unit, STI_TEIASG, l2sc->tei);
-
- log(LOG_INFO, "i4b: unit %d, assigned TEI = %d = 0x%02x\n", l2sc->unit, l2sc->tei, l2sc->tei);
-
- DBGL2(L2_TEI_MSG, "i4b_tei_rx_frame", ("TEI ID Assign - TEI = %d\n", l2sc->tei));
-
- i4b_next_l2state(l2sc, EV_MDASGRQ);
- }
- break;
-
- case MT_ID_DENY:
- if( (*(ptr + OFF_RIL) == l2sc->last_ril) &&
- (*(ptr + OFF_RIH) == l2sc->last_rih))
- {
- l2sc->tei_valid = TEI_INVALID;
- l2sc->tei = GET_TEIFROMAI(*(ptr+OFF_AI));
-
- if(l2sc->tei == GROUP_TEI)
- {
- log(LOG_WARNING, "i4b: unit %d, denied TEI, no TEI values available from exchange!\n", l2sc->unit);
- DBGL2(L2_TEI_ERR, "i4b_tei_rx_frame", ("TEI ID Denied, No TEI values available from exchange!\n"));
- }
- else
- {
- log(LOG_WARNING, "i4b: unit %d, denied TEI = %d = 0x%02x\n", l2sc->unit, l2sc->tei, l2sc->tei);
- DBGL2(L2_TEI_ERR, "i4b_tei_rx_frame", ("TEI ID Denied - TEI = %d\n", l2sc->tei));
- }
- MDL_Status_Ind(l2sc->unit, STI_TEIASG, -1);
- i4b_next_l2state(l2sc, EV_MDERRRS);
- }
- break;
-
- case MT_ID_CHK_REQ:
- if( (l2sc->tei_valid == TEI_VALID) &&
- ( (l2sc->tei == GET_TEIFROMAI(*(ptr+OFF_AI))) ||
- (GROUP_TEI == GET_TEIFROMAI(*(ptr+OFF_AI))) ))
- {
- static int lasttei = -1;
-
- if(l2sc->tei != lasttei)
- {
- DBGL2(L2_TEI_MSG, "i4b_tei_rx_frame", ("TEI ID Check Req - TEI = %d\n", l2sc->tei));
- lasttei = l2sc->tei;
- }
-
- if(l2sc->T202 == TIMER_ACTIVE)
- i4b_T202_stop(l2sc);
- i4b_tei_chkresp(l2sc);
- }
- break;
-
- case MT_ID_REMOVE:
- if( (l2sc->tei_valid == TEI_VALID) &&
- ( (l2sc->tei == GET_TEIFROMAI(*(ptr+OFF_AI))) ||
- (l2sc->tei == GET_TEIFROMAI(*(ptr+OFF_AI)))))
- {
- l2sc->tei_valid = TEI_INVALID;
- l2sc->tei = GET_TEIFROMAI(*(ptr+OFF_AI));
-
- log(LOG_INFO, "i4b: unit %d, removed TEI = %d = 0x%02x\n", l2sc->unit, l2sc->tei, l2sc->tei);
- DBGL2(L2_TEI_MSG, "i4b_tei_rx_frame", ("TEI ID Remove - TEI = %d\n", l2sc->tei));
- MDL_Status_Ind(l2sc->unit, STI_TEIASG, -1);
- i4b_next_l2state(l2sc, EV_MDREMRQ);
- }
- break;
-
- default:
- DBGL2(L2_TEI_ERR, "i4b_tei_rx_frame", ("UNKNOWN TEI MGMT Frame, type = 0x%x\n", *(ptr + OFF_MT)));
- i4b_print_frame(m->m_len, m->m_data);
- break;
- }
- i4b_Dfreembuf(m);
-}
-
-/*---------------------------------------------------------------------------*
- * allocate and fill up a TEI management frame for sending
- *---------------------------------------------------------------------------*/
-static struct mbuf *
-build_tei_mgmt_frame(l2_softc_t *l2sc, unsigned char type)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(TEI_MGMT_FRM_LEN)) == NULL)
- return(NULL);
-
- m->m_data[TEIM_SAPIO] = 0xfc; /* SAPI = 63, CR = 0, EA = 0 */
- m->m_data[TEIM_TEIO] = 0xff; /* TEI = 127, EA = 1 */
- m->m_data[TEIM_UIO] = UI; /* UI */
- m->m_data[TEIM_MEIO] = MEI; /* MEI */
- m->m_data[TEIM_MTO] = type; /* message type */
-
- switch(type)
- {
- case MT_ID_REQEST:
- i4b_make_rand_ri(l2sc);
- m->m_data[TEIM_RILO] = l2sc->last_ril;
- m->m_data[TEIM_RIHO] = l2sc->last_rih;
- m->m_data[TEIM_AIO] = (GROUP_TEI << 1) | 0x01;
- break;
-
- case MT_ID_CHK_RSP:
- i4b_make_rand_ri(l2sc);
- m->m_data[TEIM_RILO] = l2sc->last_ril;
- m->m_data[TEIM_RIHO] = l2sc->last_rih;
- m->m_data[TEIM_AIO] = (l2sc->tei << 1) | 0x01;
- break;
-
- case MT_ID_VERIFY:
- m->m_data[TEIM_RILO] = 0;
- m->m_data[TEIM_RIHO] = 0;
- m->m_data[TEIM_AIO] = (l2sc->tei << 1) | 0x01;
- break;
-
- default:
- i4b_Dfreembuf(m);
- panic("build_tei_mgmt_frame: invalid type");
- break;
- }
- return(m);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_tei_assign - TEI assignment procedure (Q.921, 5.3.2, pp 24)
- * T202func and N202 _MUST_ be set prior to calling this function !
- *---------------------------------------------------------------------------*/
-void
-i4b_tei_assign(l2_softc_t *l2sc)
-{
- struct mbuf *m;
-
- DBGL2(L2_TEI_MSG, "i4b_tei_assign", ("tx TEI ID_Request\n"));
-
- m = build_tei_mgmt_frame(l2sc, MT_ID_REQEST);
-
- if(m == NULL)
- panic("i4b_tei_assign: no mbuf");
-
- i4b_T202_start(l2sc);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_tei_assign - TEI verify procedure (Q.921, 5.3.5, pp 29)
- * T202func and N202 _MUST_ be set prior to calling this function !
- *---------------------------------------------------------------------------*/
-void
-i4b_tei_verify(l2_softc_t *l2sc)
-{
- struct mbuf *m;
-
- DBGL2(L2_TEI_MSG, "i4b_tei_verify", ("tx TEI ID_Verify\n"));
-
- m = build_tei_mgmt_frame(l2sc, MT_ID_VERIFY);
-
- if(m == NULL)
- panic("i4b_tei_verify: no mbuf");
-
- i4b_T202_start(l2sc);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_tei_chkresp - TEI check response procedure (Q.921, 5.3.5, pp 29)
- *---------------------------------------------------------------------------*/
-void
-i4b_tei_chkresp(l2_softc_t *l2sc)
-{
- struct mbuf *m;
- static int lasttei = 0;
-
- if(l2sc->tei != lasttei)
- {
- lasttei = l2sc->tei;
- DBGL2(L2_TEI_MSG, "i4b_tei_chkresp", ("tx TEI ID_Check_Response\n"));
- }
-
- m = build_tei_mgmt_frame(l2sc, MT_ID_CHK_RSP);
-
- if(m == NULL)
- panic("i4b_tei_chkresp: no mbuf");
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * generate some 16 bit "random" number used for TEI mgmt Ri field
- *---------------------------------------------------------------------------*/
-void
-i4b_make_rand_ri(l2_softc_t *l2sc)
-{
-
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-
- u_short val;
- read_random((char *)&val, sizeof(val));
-
-#else
-
- register u_short val;
- register int i;
- static int called = 42;
-
- val = (l2sc->last_rih << 8) | l2sc->last_ril;
-
- val += ++called;
-
- for(i=0; i < 50 ; i++, val++)
- {
- val |= l2sc->unit+i;
- val <<= i;
- val ^= (time.tv_sec >> 16) ^ time.tv_usec;
- val <<= i;
- val ^= time.tv_sec ^ (time.tv_usec >> 16);
-
- if(val != 0 && val != 0xffff)
- break;
- }
-#endif
- l2sc->last_rih = (val >> 8) & 0x00ff;
- l2sc->last_ril = val & 0x00ff;
-}
-
-#endif /* NI4BQ921 > 0 */
diff --git a/sys/i4b/layer2/i4b_uframe.c b/sys/i4b/layer2/i4b_uframe.c
deleted file mode 100644
index 90e79124d29c8..0000000000000
--- a/sys/i4b/layer2/i4b_uframe.c
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_uframe.c - routines for handling U-frames
- * -----------------------------------------------
- *
- * $Id: i4b_uframe.c,v 1.6 1998/12/05 18:05:24 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:30:33 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-/*---------------------------------------------------------------------------*
- * process a received U-frame
- *---------------------------------------------------------------------------*/
-void
-i4b_rxd_u_frame(int unit, struct mbuf *m)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
- u_char *ptr = m->m_data;
-
- int sapi = GETSAPI(*(ptr + OFF_SAPI));
- int tei = GETTEI(*(ptr + OFF_TEI));
- int pfbit = GETUPF(*(ptr + OFF_CNTL));
-
- switch(*(ptr + OFF_CNTL) & ~UPFBIT)
- {
- /* commands */
-
- case SABME:
- if((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
- {
- DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("SABME, sapi = %d, tei = %d\n", sapi, tei));
-
- l2sc->rxd_PF = pfbit;
-
- i4b_next_l2state(l2sc, EV_RXSABME);
- }
- i4b_Dfreembuf(m);
- break;
-
- case UI:
- if(sapi == SAPI_L2M &&
- tei == GROUP_TEI &&
- *(ptr + OFF_MEI) == MEI)
- {
- /* layer 2 management (SAPI = 63) */
-
- i4b_tei_rxframe(unit, m);
- }
- else if(sapi == SAPI_CCP && tei == GROUP_TEI)
- {
- /* call control (SAPI = 0) */
-
- /* strip ui header */
- m_adj(m, UI_HDR_LEN);
- /* to upper layer */
- DL_Unit_Data_Ind(unit, m);
- }
- else
- {
- DBGL2(L2_U_ERR, "i4b_rxd_u_frame", ("unknown UI frame!\n"));
-
- i4b_Dfreembuf(m);
- }
- break;
-
- case DISC:
- if((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
- {
- DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("DISC, sapi = %d, tei = %d\n", sapi, tei));
-
- l2sc->rxd_PF = pfbit;
-
- i4b_next_l2state(l2sc, EV_RXDISC);
- }
- i4b_Dfreembuf(m);
- break;
-
- case XID:
- if((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
- {
- DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("XID, sapi = %d, tei = %d\n", sapi, tei));
- }
- i4b_Dfreembuf(m);
- break;
-
- /* responses */
-
- case DM:
- if((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
- {
- DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("DM, sapi = %d, tei = %d\n", sapi, tei));
-
- i4b_print_frame(m->m_len, m->m_data);
-
- l2sc->rxd_PF = pfbit;
-
- i4b_next_l2state(l2sc, EV_RXDM);
- }
- i4b_Dfreembuf(m);
- break;
-
- case UA:
- if((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
- {
- DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("UA, sapi = %d, tei = %d\n", sapi, tei));
-
- l2sc->rxd_PF = pfbit;
-
- i4b_next_l2state(l2sc, EV_RXUA);
- }
- i4b_Dfreembuf(m);
- break;
-
- case FRMR:
- if((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
- {
- DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("FRMR, sapi = %d, tei = %d\n", sapi, tei));
-
- l2sc->rxd_PF = pfbit;
-
- i4b_next_l2state(l2sc, EV_RXFRMR);
- }
- i4b_Dfreembuf(m);
- break;
-
- default:
- if((l2sc->tei_valid == TEI_VALID) &&
- (l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
- {
- DBGL2(L2_U_ERR, "i4b_rxd_u_frame", ("UNKNOWN TYPE ERROR, sapi = %d, tei = %d, frame = ", sapi, tei));
- i4b_print_frame(m->m_len, m->m_data);
- }
- else
- {
- DBGL2(L2_U_ERR, "i4b_rxd_u_frame", ("not mine - UNKNOWN TYPE ERROR, sapi = %d, tei = %d, frame = ", sapi, tei));
- i4b_print_frame(m->m_len, m->m_data);
- }
- i4b_Dfreembuf(m);
- break;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * build U-frame for sending
- *---------------------------------------------------------------------------*/
-struct mbuf *
-i4b_build_u_frame(l2_softc_t *l2sc, crbit_to_nt_t crbit, pbit_t pbit, u_char type)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(U_FRAME_LEN)) == NULL)
- return(NULL);
-
- PUTSAPI(SAPI_CCP, crbit, m->m_data[OFF_SAPI]);
-
- PUTTEI(l2sc->tei, m->m_data[OFF_TEI]);
-
- if(pbit)
- m->m_data[OFF_CNTL] = type | UPBITSET;
- else
- m->m_data[OFF_CNTL] = type & ~UPBITSET;
-
- return(m);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit SABME command
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_sabme(l2_softc_t *l2sc, pbit_t pbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_U_MSG, "i4b_tx_sabme", ("tx SABME, tei = %d\n", l2sc->tei));
-
- m = i4b_build_u_frame(l2sc, CR_CMD_TO_NT, pbit, SABME);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit DM response
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_dm(l2_softc_t *l2sc, fbit_t fbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_U_MSG, "i4b_tx_dm", ("tx DM, tei = %d\n", l2sc->tei));
-
- m = i4b_build_u_frame(l2sc, CR_RSP_TO_NT, fbit, DM);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit DISC command
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_disc(l2_softc_t *l2sc, pbit_t pbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_U_MSG, "i4b_tx_disc", ("tx DISC, tei = %d\n", l2sc->tei));
-
- m = i4b_build_u_frame(l2sc, CR_CMD_TO_NT, pbit, DISC);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit UA response
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_ua(l2_softc_t *l2sc, fbit_t fbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_U_MSG, "i4b_tx_ua", ("tx UA, tei = %d\n", l2sc->tei));
-
- m = i4b_build_u_frame(l2sc, CR_RSP_TO_NT, fbit, UA);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * transmit FRMR response
- *---------------------------------------------------------------------------*/
-void
-i4b_tx_frmr(l2_softc_t *l2sc, fbit_t fbit)
-{
- struct mbuf *m;
-
- DBGL2(L2_U_MSG, "i4b_tx_frmr", ("tx FRMR, tei = %d\n", l2sc->tei));
-
- m = i4b_build_u_frame(l2sc, CR_RSP_TO_NT, fbit, FRMR);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-
-#endif /* NI4BQ921 > 0 */
diff --git a/sys/i4b/layer2/i4b_util.c b/sys/i4b/layer2/i4b_util.c
deleted file mode 100644
index 9f8fe196c56cc..0000000000000
--- a/sys/i4b/layer2/i4b_util.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_util.c - layer 2 utility routines
- * -------------------------------------
- *
- * $Id: i4b_util.c,v 1.15 1998/12/05 18:05:26 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:31:10 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-/*---------------------------------------------------------------------------*
- * routine ESTABLISH DATA LINK (Q.921 03/93 page 83)
- *---------------------------------------------------------------------------*/
-void
-i4b_establish_data_link(l2_softc_t *l2sc)
-{
- i4b_l1_activate(l2sc);
-
- i4b_clear_exception_conditions(l2sc);
-
- l2sc->RC = 0;
-
- i4b_tx_sabme(l2sc, P1);
-
- i4b_T200_restart(l2sc);
-
- i4b_T203_stop(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * routine CLEAR EXCEPTION CONDITIONS (Q.921 03/93 page 83)
- *---------------------------------------------------------------------------*/
-void
-i4b_clear_exception_conditions(l2_softc_t *l2sc)
-{
-
-/*XXX -------------------------------------------------------------- */
-/*XXX is this really appropriate here or should it moved elsewhere ? */
-
- i4b_Dcleanifq(&l2sc->i_queue);
-
- if(l2sc->ua_num != UA_EMPTY)
- {
- i4b_Dfreembuf(l2sc->ua_frame);
- l2sc->ua_num = UA_EMPTY;
- }
-/*XXX -------------------------------------------------------------- */
-
- l2sc->peer_busy = 0;
-
- l2sc->rej_excpt = 0;
-
- l2sc->own_busy = 0;
-
- l2sc->ack_pend = 0;
-}
-
-/*---------------------------------------------------------------------------*
- * routine TRANSMIT ENQUIRE (Q.921 03/93 page 83)
- *---------------------------------------------------------------------------*/
-void
-i4b_transmit_enquire(l2_softc_t *l2sc)
-{
- if(l2sc->own_busy)
- i4b_tx_rnr_command(l2sc, P1);
- else
- i4b_tx_rr_command(l2sc, P1);
-
- l2sc->ack_pend = 0;
-
- i4b_T200_start(l2sc);
-}
-
-/*---------------------------------------------------------------------------*
- * routine NR ERROR RECOVERY (Q.921 03/93 page 83)
- *---------------------------------------------------------------------------*/
-void
-i4b_nr_error_recovery(l2_softc_t *l2sc)
-{
- i4b_mdl_error_ind(l2sc, "i4b_nr_error_recovery", MDL_ERR_J);
-
- i4b_establish_data_link(l2sc);
-
- l2sc->l3initiated = 0;
-}
-
-/*---------------------------------------------------------------------------*
- * routine ENQUIRY RESPONSE (Q.921 03/93 page 84)
- *---------------------------------------------------------------------------*/
-void
-i4b_enquiry_response(l2_softc_t *l2sc)
-{
- if(l2sc->own_busy)
- i4b_tx_rnr_response(l2sc, F1);
- else
- i4b_tx_rr_response(l2sc, F1);
-
- l2sc->ack_pend = 0;
-}
-
-/*---------------------------------------------------------------------------*
- * routine INVOKE RETRANSMISSION (Q.921 03/93 page 84)
- *---------------------------------------------------------------------------*/
-void
-i4b_invoke_retransmission(l2_softc_t *l2sc, int nr)
-{
- DBGL2(L2_ERROR, "i4b_invoke_retransmission", ("nr = %d\n", nr ));
-
- while(l2sc->vs != nr)
- {
- DBGL2(L2_ERROR, "i4b_invoke_retransmission", ("nr != vs, nr = %d, vs = %d\n", nr, l2sc->vs));
-
- M128DEC(l2sc->vs);
-
-/* XXXXXXXXXXXXXXXXX */
-
- if((l2sc->ua_num != UA_EMPTY) && (l2sc->vs == l2sc->ua_num))
- {
- IF_ENQUEUE(&l2sc->i_queue, l2sc->ua_frame);
- l2sc->ua_num = UA_EMPTY;
- }
- else
- {
- DBGL2(L2_ERROR, "i4b_invoke_retransmission", ("ERROR, l2sc->vs = %d, l2sc->ua_num = %d \n",l2sc->vs, l2sc->ua_num));
- }
-
-/* XXXXXXXXXXXXXXXXX */
-
- i4b_i_frame_queued_up(l2sc);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * routine ACKNOWLEDGE PENDING (Q.921 03/93 p 70)
- *---------------------------------------------------------------------------*/
-void
-i4b_acknowledge_pending(l2_softc_t *l2sc)
-{
- if(l2sc->ack_pend)
- {
- l2sc->ack_pend = 0;
- i4b_tx_rr_response(l2sc, F0);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_print_frame - just print the hex contents of a frame
- *---------------------------------------------------------------------------*/
-void
-i4b_print_frame(int len, u_char *buf)
-{
-#ifdef DO_I4B_DEBUG
- int i;
-
- if (!(i4b_l2_debug & L2_ERROR)) /* XXXXXXXXXXXXXXXXXXXXX */
- return;
-
- for(i = 0; i < len; i++)
- printf(" 0x%x", buf[i]);
- printf("\n");
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_print_l2var - print some l2softc vars
- *---------------------------------------------------------------------------*/
-void
-i4b_print_l2var(l2_softc_t *l2sc)
-{
- DBGL2(L2_ERROR, "i4b_print_l2var", ("unit%d V(R)=%d, V(S)=%d, V(A)=%d,ACKP=%d,PBSY=%d,OBSY=%d\n",
- l2sc->unit,
- l2sc->vr,
- l2sc->vs,
- l2sc->va,
- l2sc->ack_pend,
- l2sc->peer_busy,
- l2sc->own_busy));
-}
-
-/*---------------------------------------------------------------------------*
- * got s or i frame, check if valid ack for last sent frame
- *---------------------------------------------------------------------------*/
-void
-i4b_rxd_ack(l2_softc_t *l2sc, int nr)
-{
-
-#ifdef NOTDEF
- DBGL2(L2_ERROR, "i4b_rxd_ack", ("N(R)=%d, UA=%d, V(R)=%d, V(S)=%d, V(A)=%d\n",
- nr,
- l2sc->ua_num,
- l2sc->vr,
- l2sc->vs,
- l2sc->va));
-#endif
-
- if(l2sc->ua_num != UA_EMPTY)
- {
- int s;
-
- M128DEC(nr);
-
- if(l2sc->ua_num != nr)
- DBGL2(L2_ERROR, "i4b_rxd_ack", ("((N(R)-1)=%d) != (UA=%d) !!!\n", nr, l2sc->ua_num));
-
- s = SPLI4B();
-
- i4b_Dfreembuf(l2sc->ua_frame);
- l2sc->ua_num = UA_EMPTY;
-
- splx(s);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * if not already active, activate layer 1
- *---------------------------------------------------------------------------*/
-void
-i4b_l1_activate(l2_softc_t *l2sc)
-{
- if(l2sc->ph_active == PH_INACTIVE)
- {
- l2sc->ph_active = PH_ACTIVEPEND;
- PH_Act_Req(l2sc->unit);
- }
-};
-
-/*---------------------------------------------------------------------------*
- * check for v(a) <= n(r) <= v(s)
- * nr = receive sequence frame counter, va = acknowledge sequence frame
- * counter and vs = transmit sequence frame counter
- *---------------------------------------------------------------------------*/
-int
-i4b_l2_nr_ok(int nr, int va, int vs)
-{
- if((va > nr) && ((nr != 0) || (va != 127)))
- {
- DBGL2(L2_ERROR, "i4b_l2_nr_ok", ("ERROR, va = %d, nr = %d, vs = %d [1]\n", va, nr, vs));
- return 0; /* fail */
- }
-
- if((nr > vs) && ((vs != 0) || (nr != 127)))
- {
- DBGL2(L2_ERROR, "i4b_l2_nr_ok", ("ERROR, va = %d, nr = %d, vs = %d [2]\n", va, nr, vs));
- return 0; /* fail */
- }
-
- return 1; /* good */
-}
-
-#endif /* NI4BQ921 > 0 */
-
diff --git a/sys/i4b/layer3/i4b_l2if.c b/sys/i4b/layer3/i4b_l2if.c
deleted file mode 100644
index 33b1340738ec2..0000000000000
--- a/sys/i4b/layer3/i4b_l2if.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l2if.c - Layer 3 interface to Layer 2
- * -------------------------------------------
- *
- * $Id: i4b_l2if.c,v 1.14 1998/12/05 18:05:28 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:31:26 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq931.h"
-#else
-#define NI4BQ931 1
-#endif
-#if NI4BQ931 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_cause.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_cause.h>
-#endif
-
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer3/i4b_l3.h>
-#include <i4b/layer3/i4b_l3fsm.h>
-#include <i4b/layer3/i4b_q931.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-static unsigned char make_q931_cause(cause_t cause);
-
-/*---------------------------------------------------------------------------*
- * this converts our internal state (number) to the number specified
- * in Q.931 and is used for reporting our state in STATUS messages.
- *---------------------------------------------------------------------------*/
-int i4b_status_tab[] = {
- 0, /* ST_U0, */
- 1, /* ST_U1, */
- 3, /* ST_U3, */
- 4, /* ST_U4, */
- 6, /* ST_U6, */
- 7, /* ST_U7, */
- 8, /* ST_U8, */
- 9, /* ST_U9, */
- 10, /* ST_U10, */
- 11, /* ST_U11, */
- 12, /* ST_U12, */
- 19, /* ST_U19, */
- 6, /* ST_IWA, */
- 6, /* ST_IWR, */
- 1, /* ST_OW, */
- 6, /* ST_IWL, */
-};
-
-/*---------------------------------------------------------------------------*
- * return a valid q.931/q.850 cause from any of the internal causes
- *---------------------------------------------------------------------------*/
-static unsigned char
-make_q931_cause(cause_t cause)
-{
- register unsigned char ret;
-
- switch(GET_CAUSE_TYPE(cause))
- {
- case CAUSET_Q850:
- ret = GET_CAUSE_VAL(cause);
- break;
- case CAUSET_I4B:
- ret = cause_tab_q931[GET_CAUSE_VAL(cause)];
- break;
- default:
- panic("make_q931_cause: unknown cause type!");
- break;
- }
- ret |= EXT_LAST;
- return(ret);
-}
-
-/*---------------------------------------------------------------------------*
- * return status of data link
- *---------------------------------------------------------------------------*/
-int
-i4b_get_dl_stat(call_desc_t *cd)
-{
- return(ctrl_desc[cd->controller].dl_est);
-}
-
-/*---------------------------------------------------------------------------*
- * DL ESTABLISH INDICATION from Layer 2
- *---------------------------------------------------------------------------*/
-int
-i4b_dl_establish_ind(int unit)
-{
- int i;
- int found = 0;
-
- DBGL2(L2_PRIM, "DL-ESTABLISH-IND", ("unit %d\n",unit));
-
- /* first set DL up in controller descriptor */
-
- for(i=0; i < nctrl; i++)
- {
- if((ctrl_desc[i].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[i].unit == unit))
- {
- DBGL3(L3_MSG, "i4b_dl_establish_ind", ("unit=%d DL established!\n",unit));
- ctrl_desc[i].dl_est = DL_UP;
- found = 1;
- }
- }
-
- if(found == 0)
- {
- DBGL3(L3_ERR, "i4b_dl_establish_ind", ("ERROR, controller not found for unit=%d!\n",unit));
- return(-1);
- }
-
- found = 0;
-
- /* second, inform all (!) active call of the event */
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if( (call_desc[i].cdid != 0) &&
- (ctrl_desc[call_desc[i].controller].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[call_desc[i].controller].unit == unit))
- {
- DBGL3(L3_MSG, "i4b_dl_establish_ind", ("unit=%d, index=%d cdid=%u cr=%d\n",
- unit, i, call_desc[i].cdid, call_desc[i].cr));
- next_l3state(&call_desc[i], EV_DLESTIN);
- found++;
- }
- }
-
- if(found == 0)
- {
- DBGL3(L3_ERR, "i4b_dl_establish_ind", ("ERROR, no cdid for unit %d found!\n", unit));
- return(-1);
- }
- else
- {
- return(0);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * DL ESTABLISH CONFIRM from Layer 2
- *---------------------------------------------------------------------------*/
-int
-i4b_dl_establish_cnf(int unit)
-{
- int i;
- int found = 0;
-
- DBGL2(L2_PRIM, "DL-ESTABLISH-CONF", ("unit %d\n",unit));
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if( (call_desc[i].cdid != 0) &&
- (ctrl_desc[call_desc[i].controller].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[call_desc[i].controller].unit == unit))
- {
- ctrl_desc[call_desc[i].controller].dl_est = DL_UP;
-
- DBGL3(L3_MSG, "i4b_dl_establish_cnf", ("unit=%d, index=%d cdid=%u cr=%d\n",
- unit, i, call_desc[i].cdid, call_desc[i].cr));
-
- next_l3state(&call_desc[i], EV_DLESTCF);
- found++;
- }
- }
-
- if(found == 0)
- {
- DBGL3(L3_ERR, "i4b_dl_establish_cnf", ("ERROR, no cdid for unit %d found!\n", unit));
- return(-1);
- }
- else
- {
- return(0);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * DL RELEASE INDICATION from Layer 2
- *---------------------------------------------------------------------------*/
-int
-i4b_dl_release_ind(int unit)
-{
- int i;
- int found = 0;
-
- DBGL2(L2_PRIM, "DL-RELEASE-IND", ("unit %d\n",unit));
-
- /* first set controller to down */
-
- for(i=0; i < nctrl; i++)
- {
- if((ctrl_desc[i].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[i].unit == unit))
- {
- DBGL3(L3_MSG, "i4b_dl_release_ind", ("unit=%d DL released!\n",unit));
- ctrl_desc[i].dl_est = DL_DOWN;
- found = 1;
- }
- }
-
- if(found == 0)
- {
- DBGL3(L3_ERR, "i4b_dl_release_ind", ("ERROR, controller not found for unit=%d!\n",unit));
- return(-1);
- }
-
- found = 0;
-
- /* second, inform all (!) active calls of the event */
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if( (call_desc[i].cdid != 0) &&
- (ctrl_desc[call_desc[i].controller].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[call_desc[i].controller].unit == unit))
- {
- DBGL3(L3_MSG, "i4b_dl_release_ind", ("unit=%d, index=%d cdid=%u cr=%d\n",
- unit, i, call_desc[i].cdid, call_desc[i].cr));
- next_l3state(&call_desc[i], EV_DLRELIN);
- found++;
- }
- }
-
- if(found == 0)
- {
- /* this is not an error since it might be a normal call end */
- DBGL3(L3_MSG, "i4b_dl_release_ind", ("no cdid for unit %d found\n", unit));
- }
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * DL RELEASE CONFIRM from Layer 2
- *---------------------------------------------------------------------------*/
-int
-i4b_dl_release_cnf(int unit)
-{
- int i;
-
- DBGL2(L2_PRIM, "DL-RELEASE-CONF", ("unit %d\n",unit));
-
- for(i=0; i < nctrl; i++)
- {
- if((ctrl_desc[i].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[i].unit == unit))
- {
- DBGL3(L3_MSG, "i4b_dl_release_cnf", ("unit=%d DL released!\n",unit));
- ctrl_desc[i].dl_est = DL_DOWN;
- return(0);
- }
- }
- DBGL3(L3_ERR, "i4b_dl_release_cnf", ("ERROR, controller not found for unit=%d!\n",unit));
- return(-1);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_dl_data_ind - process a rx'd I-frame got from layer 2
- *---------------------------------------------------------------------------*/
-int
-i4b_dl_data_ind(int unit, struct mbuf *m)
-{
-#ifdef NOTDEF
- DBGL2(L2_PRIM, "DL-DATA-IND", ("unit %d\n",unit));
-#endif
- i4b_decode_q931(unit, m->m_len, m->m_data);
- i4b_Dfreembuf(m);
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * dl_unit_data_ind - process a rx'd U-frame got from layer 2
- *---------------------------------------------------------------------------*/
-int
-i4b_dl_unit_data_ind(int unit, struct mbuf *m)
-{
-#ifdef NOTDEF
- DBGL2(L2_PRIM, "DL-UNIT-DATA-IND", ("unit %d\n",unit));
-#endif
- i4b_decode_q931(unit, m->m_len, m->m_data);
- i4b_Dfreembuf(m);
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * send CONNECT message
- *---------------------------------------------------------------------------*/
-void
-i4b_l3_tx_connect(call_desc_t *cd)
-{
- struct mbuf *m;
- u_char *ptr;
-
- DBGL3(L3_PRIM, "tx CONNECT", ("unit %d, cr = 0x%02x\n", ctrl_desc[cd->controller].unit, cd->cr));
-
- if((m = i4b_Dgetmbuf(I_FRAME_HDRLEN + MSG_CONNECT_LEN)) == NULL)
- panic("i4b_l3_tx_connect: can't allocate mbuf\n");
-
- ptr = m->m_data + I_FRAME_HDRLEN;
-
- *ptr++ = PD_Q931; /* protocol discriminator */
- *ptr++ = 0x01; /* call reference length */
- *ptr++ = setup_cr(cd, cd->cr); /* call reference value */
- *ptr++ = CONNECT; /* message type = connect */
-
- DL_Data_Req(ctrl_desc[cd->controller].unit, m);
-}
-
-/*---------------------------------------------------------------------------*
- * send RELEASE COMPLETE message
- *---------------------------------------------------------------------------*/
-void
-i4b_l3_tx_release_complete(call_desc_t *cd, int send_cause_flag)
-{
- struct mbuf *m;
- u_char *ptr;
- int len = I_FRAME_HDRLEN + MSG_RELEASE_COMPLETE_LEN;
-
- DBGL3(L3_PRIM, "tx RELEASE-COMPLETE", ("unit %d, cr = 0x%02x\n", ctrl_desc[cd->controller].unit, cd->cr));
-
- if(send_cause_flag == 0)
- len -= 4;
-
- if((m = i4b_Dgetmbuf(len)) == NULL)
- panic("i4b_l3_tx_release_complete: can't allocate mbuf\n");
-
- ptr = m->m_data + I_FRAME_HDRLEN;
-
- *ptr++ = PD_Q931; /* protocol discriminator */
- *ptr++ = 0x01; /* call reference length */
- *ptr++ = setup_cr(cd, cd->cr); /* call reference value */
- *ptr++ = RELEASE_COMPLETE; /* message type = release complete */
-
- if(send_cause_flag)
- {
- *ptr++ = IEI_CAUSE; /* cause ie */
- *ptr++ = CAUSE_LEN;
- *ptr++ = CAUSE_STD_LOC_OUT;
- *ptr++ = make_q931_cause(cd->cause_out);
- }
-
- DL_Data_Req(ctrl_desc[cd->controller].unit, m);
-}
-
-/*---------------------------------------------------------------------------*
- * send DISCONNECT message
- *---------------------------------------------------------------------------*/
-void
-i4b_l3_tx_disconnect(call_desc_t *cd)
-{
- struct mbuf *m;
- u_char *ptr;
-
- DBGL3(L3_PRIM, "tx DISCONNECT", ("unit %d, cr = 0x%02x\n", ctrl_desc[cd->controller].unit, cd->cr));
-
- if((m = i4b_Dgetmbuf(I_FRAME_HDRLEN + MSG_DISCONNECT_LEN)) == NULL)
- panic("i4b_l3_tx_disconnect: can't allocate mbuf\n");
-
- ptr = m->m_data + I_FRAME_HDRLEN;
-
- *ptr++ = PD_Q931; /* protocol discriminator */
- *ptr++ = 0x01; /* call ref length */
- *ptr++ = setup_cr(cd, cd->cr); /* call reference value */
- *ptr++ = DISCONNECT; /* message type = disconnect */
-
- *ptr++ = IEI_CAUSE; /* cause ie */
- *ptr++ = CAUSE_LEN;
- *ptr++ = CAUSE_STD_LOC_OUT;
- *ptr++ = make_q931_cause(cd->cause_out);
-
- DL_Data_Req(ctrl_desc[cd->controller].unit, m);
-}
-
-/*---------------------------------------------------------------------------*
- * send SETUP message
- *---------------------------------------------------------------------------*/
-void
-i4b_l3_tx_setup(call_desc_t *cd)
-{
- struct mbuf *m;
- u_char *ptr;
- int slen = strlen(cd->src_telno);
- int dlen = strlen(cd->dst_telno);
-
- /*
- * there is one additional octet if cd->bprot == BPROT_NONE
- * NOTE: the selection of a bearer capability by a B L1
- * protocol is highly questionable and a better
- * mechanism should be used in future. (-hm)
- */
-
- DBGL3(L3_PRIM, "tx SETUP", ("unit %d, cr = 0x%02x\n", ctrl_desc[cd->controller].unit, cd->cr));
-
- if((m = i4b_Dgetmbuf(I_FRAME_HDRLEN + MSG_SETUP_LEN + slen + dlen +
- (cd->bprot == BPROT_NONE ? 1 : 0))) == NULL)
- {
- panic("i4b_l3_tx_setup: can't allocate mbuf\n");
- }
-
- cd->crflag = CRF_ORIG; /* we are the originating side */
-
- ptr = m->m_data + I_FRAME_HDRLEN;
-
- *ptr++ = PD_Q931; /* protocol discriminator */
- *ptr++ = 0x01; /* call ref length */
- *ptr++ = setup_cr(cd, cd->cr); /* call reference value */
- *ptr++ = SETUP; /* message type = setup */
-
- *ptr++ = IEI_SENDCOMPL; /* sending complete */
-
- *ptr++ = IEI_BEARERCAP; /* bearer capability */
-
- /* XXX
- * currently i have no idea if this should be switched by
- * the choosen B channel protocol or if there should be a
- * separate configuration item for the bearer capability.
- * For now, it is switched by the choosen b protocol (-hm)
- */
-
- switch(cd->bprot)
- {
- case BPROT_NONE: /* telephony */
- *ptr++ = IEI_BEARERCAP_LEN+1;
- *ptr++ = IT_CAP_SPEECH;
- *ptr++ = IT_RATE_64K;
- *ptr++ = IT_UL1_G711A;
- break;
-
- case BPROT_RHDLC: /* raw HDLC */
- *ptr++ = IEI_BEARERCAP_LEN;
- *ptr++ = IT_CAP_UNR_DIG_INFO;
- *ptr++ = IT_RATE_64K;
- break;
-
- default:
- *ptr++ = IEI_BEARERCAP_LEN;
- *ptr++ = IT_CAP_UNR_DIG_INFO;
- *ptr++ = IT_RATE_64K;
- break;
- }
-
- *ptr++ = IEI_CHANNELID; /* channel id */
- *ptr++ = IEI_CHANNELID_LEN; /* channel id length */
-
- switch(cd->channelid)
- {
- case CHAN_B1:
- *ptr++ = CHANNELID_B1;
- break;
- case CHAN_B2:
- *ptr++ = CHANNELID_B2;
- break;
- default:
- *ptr++ = CHANNELID_ANY;
- break;
- }
-
- *ptr++ = IEI_CALLINGPN; /* calling party no */
- *ptr++ = IEI_CALLINGPN_LEN+slen;/* calling party no length */
- *ptr++ = NUMBER_TYPEPLAN; /* type of number, number plan id */
- strncpy(ptr, cd->src_telno, slen);
- ptr += slen;
-
- *ptr++ = IEI_CALLEDPN; /* called party no */
- *ptr++ = IEI_CALLEDPN_LEN+dlen; /* called party no length */
- *ptr++ = NUMBER_TYPEPLAN; /* type of number, number plan id */
- strncpy(ptr, cd->dst_telno, dlen);
- ptr += dlen;
-
- DL_Data_Req(ctrl_desc[cd->controller].unit, m);
-}
-
-/*---------------------------------------------------------------------------*
- * send CONNECT ACKNOWLEDGE message
- *---------------------------------------------------------------------------*/
-void
-i4b_l3_tx_connect_ack(call_desc_t *cd)
-{
- struct mbuf *m;
- u_char *ptr;
-
- DBGL3(L3_PRIM, "tx CONNECT-ACK", ("unit %d, cr = 0x%02x\n", ctrl_desc[cd->controller].unit, cd->cr));
-
- if((m = i4b_Dgetmbuf(I_FRAME_HDRLEN + MSG_CONNECT_ACK_LEN)) == NULL)
- panic("i4b_l3_tx_connect_ack: can't allocate mbuf\n");
-
- ptr = m->m_data + I_FRAME_HDRLEN;
-
- *ptr++ = PD_Q931; /* protocol discriminator */
- *ptr++ = 0x01; /* call reference length */
- *ptr++ = setup_cr(cd, cd->cr); /* call reference value */
- *ptr++ = CONNECT_ACKNOWLEDGE; /* message type = connect ack */
-
- DL_Data_Req(ctrl_desc[cd->controller].unit, m);
-}
-
-/*---------------------------------------------------------------------------*
- * send STATUS message
- *---------------------------------------------------------------------------*/
-void
-i4b_l3_tx_status(call_desc_t *cd, u_char q850cause)
-{
- struct mbuf *m;
- u_char *ptr;
-
- DBGL3(L3_PRIM, "tx STATUS", ("unit %d, cr = 0x%02x\n", ctrl_desc[cd->controller].unit, cd->cr));
-
- if((m = i4b_Dgetmbuf(I_FRAME_HDRLEN + MSG_STATUS_LEN)) == NULL)
- panic("i4b_l3_tx_status: can't allocate mbuf\n");
-
- ptr = m->m_data + I_FRAME_HDRLEN;
-
- *ptr++ = PD_Q931; /* protocol discriminator */
- *ptr++ = 0x01; /* call reference length */
- *ptr++ = setup_cr(cd, cd->cr); /* call reference value */
- *ptr++ = STATUS; /* message type = connect ack */
-
- *ptr++ = IEI_CAUSE; /* cause ie */
- *ptr++ = CAUSE_LEN;
- *ptr++ = CAUSE_STD_LOC_OUT;
- *ptr++ = q850cause;
-
- *ptr++ = IEI_CALLSTATE; /* call state ie */
- *ptr++ = CALLSTATE_LEN;
- *ptr++ = i4b_status_tab[cd->Q931state];
-
- DL_Data_Req(ctrl_desc[cd->controller].unit, m);
-}
-
-/*---------------------------------------------------------------------------*
- * send RELEASE message
- *---------------------------------------------------------------------------*/
-void
-i4b_l3_tx_release(call_desc_t *cd, int send_cause_flag)
-{
- struct mbuf *m;
- u_char *ptr;
- int len = I_FRAME_HDRLEN + MSG_RELEASE_LEN;
-
- DBGL3(L3_PRIM, "tx RELEASE", ("unit %d, cr = 0x%02x\n", ctrl_desc[cd->controller].unit, cd->cr));
-
- if(send_cause_flag == 0)
- len -= 4;
-
- if((m = i4b_Dgetmbuf(len)) == NULL)
- panic("i4b_l3_tx_release: can't allocate mbuf\n");
-
- ptr = m->m_data + I_FRAME_HDRLEN;
-
- *ptr++ = PD_Q931; /* protocol discriminator */
- *ptr++ = 0x01; /* call reference length */
- *ptr++ = setup_cr(cd, cd->cr); /* call reference value */
- *ptr++ = RELEASE; /* message type = release complete */
-
- if(send_cause_flag)
- {
- *ptr++ = IEI_CAUSE; /* cause ie */
- *ptr++ = CAUSE_LEN;
- *ptr++ = CAUSE_STD_LOC_OUT;
- *ptr++ = make_q931_cause(cd->cause_out);
- }
-
- DL_Data_Req(ctrl_desc[cd->controller].unit, m);
-}
-
-/*---------------------------------------------------------------------------*
- * send ALERTING message
- *---------------------------------------------------------------------------*/
-void
-i4b_l3_tx_alert(call_desc_t *cd)
-{
- struct mbuf *m;
- u_char *ptr;
-
- if((m = i4b_Dgetmbuf(I_FRAME_HDRLEN + MSG_ALERT_LEN)) == NULL)
- panic("i4b_l3_tx_alert: can't allocate mbuf\n");
-
- DBGL3(L3_PRIM, "tx ALERT", ("unit %d, cr = 0x%02x\n", ctrl_desc[cd->controller].unit, cd->cr));
-
- ptr = m->m_data + I_FRAME_HDRLEN;
-
- *ptr++ = PD_Q931; /* protocol discriminator */
- *ptr++ = 0x01; /* call reference length */
- *ptr++ = setup_cr(cd, cd->cr); /* call reference value */
- *ptr++ = ALERT; /* message type = alert */
-
- DL_Data_Req(ctrl_desc[cd->controller].unit, m);
-}
-
-#endif /* NI4BQ931 > 0 */
diff --git a/sys/i4b/layer3/i4b_l3.h b/sys/i4b/layer3/i4b_l3.h
deleted file mode 100644
index 9d05055fc5373..0000000000000
--- a/sys/i4b/layer3/i4b_l3.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l3.h - layer 3 header file
- * ------------------------------
- *
- * $Id: i4b_l3.h,v 1.8 1998/12/05 18:05:30 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:31:41 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_L3_H_
-#define _I4B_L3_H_
-
-extern int utoc_tab[];
-extern unsigned char cause_tab_q931[];
-
-extern int i4b_aoc ( unsigned char *, call_desc_t *cd );
-extern void i4b_decode_q931 ( int unit, int msg_len, u_char *msg_ptr );
-extern int i4b_decode_q931_cs0_ie ( int unit, call_desc_t *cd, int msg_len, u_char *msg_ptr );
-extern void i4b_decode_q931_message ( int unit, call_desc_t *cd, u_char message_type );
-extern void i4b_l3_stop_all_timers ( call_desc_t *cd );
-extern void i4b_l3_tx_alert ( call_desc_t *cd );
-extern void i4b_l3_tx_connect ( call_desc_t *cd );
-extern void i4b_l3_tx_connect_ack ( call_desc_t *cd );
-extern void i4b_l3_tx_disconnect ( call_desc_t *cd );
-extern void i4b_l3_tx_release ( call_desc_t *cd, int send_cause_flag );
-extern void i4b_l3_tx_release_complete ( call_desc_t *cd, int send_cause_flag );
-extern void i4b_l3_tx_setup ( call_desc_t *cd );
-extern void i4b_l3_tx_status ( call_desc_t *cd, u_char q850cause );
-extern int i4b_dl_data_ind ( int unit, struct mbuf *m );
-extern int i4b_dl_establish_cnf ( int unit );
-extern int i4b_dl_establish_ind ( int unit );
-extern int i4b_dl_release_cnf ( int unit );
-extern int i4b_dl_release_ind ( int unit );
-extern int i4b_dl_unit_data_ind ( int unit, struct mbuf *m );
-extern int i4b_get_dl_stat( call_desc_t *cd );
-extern int i4b_mdl_status_ind ( int unit, int status, int parm);
-extern void i4b_print_frame ( int len, u_char *buf );
-extern void next_l3state ( call_desc_t *cd, int event );
-extern char *print_l3state ( call_desc_t *cd );
-extern unsigned char setup_cr ( call_desc_t *cd, unsigned char cr );
-extern void T303_start ( call_desc_t *cd );
-extern void T303_stop ( call_desc_t *cd );
-extern void T305_start ( call_desc_t *cd );
-extern void T305_stop ( call_desc_t *cd );
-extern void T308_start ( call_desc_t *cd );
-extern void T308_stop ( call_desc_t *cd );
-extern void T309_start ( call_desc_t *cd );
-extern void T309_stop ( call_desc_t *cd );
-extern void T310_start ( call_desc_t *cd );
-extern void T310_stop ( call_desc_t *cd );
-extern void T313_start ( call_desc_t *cd );
-extern void T313_stop ( call_desc_t *cd );
-
-#endif /* _I4B_L3_H_ */
diff --git a/sys/i4b/layer3/i4b_l3fsm.c b/sys/i4b/layer3/i4b_l3fsm.c
deleted file mode 100644
index e45e1195e399d..0000000000000
--- a/sys/i4b/layer3/i4b_l3fsm.c
+++ /dev/null
@@ -1,1034 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l3fsm.c - layer 3 FSM
- * -------------------------
- *
- * $Id: i4b_l3fsm.c,v 1.13 1998/12/05 18:05:31 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:32:17 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq931.h"
-#else
-#define NI4BQ931 1
-#endif
-#if NI4BQ931 > 0
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_cause.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_cause.h>
-#endif
-
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer3/i4b_l3.h>
-#include <i4b/layer3/i4b_l3fsm.h>
-#include <i4b/layer3/i4b_q931.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-
-static void F_00A(call_desc_t *cd), F_00H(call_desc_t *cd), F_00I(call_desc_t *cd);
-static void F_00J(call_desc_t *cd);
-
-static void F_01B(call_desc_t *cd), F_01K(call_desc_t *cd), F_01L(call_desc_t *cd);
-static void F_01M(call_desc_t *cd), F_01N(call_desc_t *cd), F_01U(call_desc_t *cd);
-static void F_01O(call_desc_t *cd);
-
-static void F_03C(call_desc_t *cd), F_03N(call_desc_t *cd), F_03O(call_desc_t *cd);
-static void F_03P(call_desc_t *cd), F_03Y(call_desc_t *cd);
-
-static void F_04O(call_desc_t *cd);
-
-static void F_06D(call_desc_t *cd), F_06E(call_desc_t *cd), F_06F(call_desc_t *cd);
-static void F_06G(call_desc_t *cd), F_06J(call_desc_t *cd), F_06Q(call_desc_t *cd);
-
-static void F_07E(call_desc_t *cd), F_07F(call_desc_t *cd), F_07G(call_desc_t *cd);
-
-static void F_08R(call_desc_t *cd), F_08Z(call_desc_t *cd);
-
-static void F_09D(call_desc_t *cd), F_09E(call_desc_t *cd), F_09F(call_desc_t *cd);
-static void F_09G(call_desc_t *cd);
-
-static void F_11J(call_desc_t *cd), F_11Q(call_desc_t *cd), F_11V(call_desc_t *cd);
-
-static void F_12C(call_desc_t *cd), F_12J(call_desc_t *cd);
-
-static void F_19I(call_desc_t *cd), F_19J(call_desc_t *cd), F_19K(call_desc_t *cd);
-static void F_19W(call_desc_t *cd);
-
-static void F_NCNA(call_desc_t *cd), F_STENQ(call_desc_t *cd), F_STAT(call_desc_t *cd);
-static void F_INFO(call_desc_t *cd), F_RELCP(call_desc_t *cd), F_REL(call_desc_t *cd);
-static void F_DISC(call_desc_t *cd), F_DCRQ(call_desc_t *cd), F_UEM(call_desc_t *cd);
-static void F_SIGN(call_desc_t *cd), F_DLEI(call_desc_t *cd), F_ILL(call_desc_t *cd);
-static void F_309TO(call_desc_t *cd), F_DECF(call_desc_t *cd), F_FCTY(call_desc_t *cd);
-static void F_DECF1(call_desc_t *cd), F_DECF2(call_desc_t *cd), F_DECF3(call_desc_t *cd);
-static void F_DLRI(call_desc_t *cd), F_DLRIA(call_desc_t *cd), F_DECF4(call_desc_t *cd);
-
-static char *l3state_text[N_STATES] = {
- "ST_U0 - Null",
- "ST_U1 - Out Init",
- "ST_U3 - Out Proc",
- "ST_U4 - Out Delv",
- "ST_U6 - In Pres",
- "ST_U7 - In Rxd",
- "ST_U8 - In ConReq",
- "ST_U9 - In Proc",
- "ST_U10 - Active",
- "ST_U11 - Disc Req",
- "ST_U12 - Disc Ind",
- "ST_U19 - Rel Req",
-
- "ST_IWA - In Wait EST-Accept",
- "ST_IWR - In Wait EST-Reject",
- "ST_OW - Out Wait EST",
- "ST_IWL - In Wait EST-Alert",
-
- "ST_SUSE - Subroutine sets state",
-
- "Illegal State"
-};
-
-static char *l3event_text[N_EVENTS] = {
- "EV_SETUPRQ - L4 SETUP REQ", /* setup request from L4 */
- "EV_DISCRQ - L4 DISC REQ", /* disconnect request from L4 */
- "EV_RELRQ - L4 REL REQ", /* release request from L4 */
- "EV_ALERTRQ - L4 ALERT REQ", /* alerting request from L4 */
- "EV_SETACRS - L4 accept RSP", /* setup response accept from l4 */
- "EV_SETRJRS - L4 reject RSP", /* setup response reject from l4 */
- "EV_SETDCRS - L4 ignore RSP", /* setup response dontcare from l4 */
-
- "EV_SETUP - rxd SETUP", /* incoming SETUP message from L2 */
- "EV_STATUS - rxd STATUS", /* incoming STATUS message from L2 */
- "EV_RELEASE - rxd REL", /* incoming RELEASE message from L2 */
- "EV_RELCOMP - rxd REL COMPL", /* incoming RELEASE COMPLETE from L2 */
- "EV_SETUPAK - rxd SETUP ACK", /* incoming SETUP ACK message from L2 */
- "EV_CALLPRC - rxd CALL PROC", /* incoming CALL PROCEEDING from L2 */
- "EV_ALERT - rxd ALERT", /* incoming ALERT message from L2 */
- "EV_CONNECT - rxd CONNECT", /* incoming CONNECT message from L2 */
- "EV_PROGIND - rxd PROG IND", /* incoming Progress IND from L2 */
- "EV_DISCONN - rxd DISC", /* incoming DISCONNECT message from L2 */
- "EV_CONACK - rxd CONN ACK", /* incoming CONNECT ACK message from L2 */
- "EV_STATENQ - rxd STAT ENQ", /* incoming STATUS ENQ message from L2 */
- "EV_INFO - rxd INFO", /* incoming INFO message from L2 */
- "EV_FACILITY - rxd FACILITY", /* incoming FACILITY message */
-
- "EV_T303EXP - T303 timeout", /* Timer T303 expired */
- "EV_T305EXP - T305 timeout", /* Timer T305 expired */
- "EV_T308EXP - T308 timeout", /* Timer T308 expired */
- "EV_T309EXP - T309 timeout", /* Timer T309 expired */
- "EV_T310EXP - T310 timeout", /* Timer T310 expired */
- "EV_T313EXP - T313 timeout", /* Timer T313 expired */
-
- "EV_DLESTIN - L2 DL_Est_Ind", /* dl establish indication from l2 */
- "EV_DLRELIN - L2 DL_Rel_Ind", /* dl release indication from l2 */
- "EV_DLESTCF - L2 DL_Est_Cnf", /* dl establish confirm from l2 */
- "EV_DLRELCF - L2 DL_Rel_Cnf", /* dl release confirm from l2 */
-
- "EV_ILL - Illegal event!!" /* Illegal */
-};
-
-/*---------------------------------------------------------------------------*
- * layer 3 state transition table
- *---------------------------------------------------------------------------*/
-struct l3state_tab {
- void (*func) (call_desc_t *); /* function to execute */
- int newstate; /* next state */
-} l3state_tab[N_EVENTS][N_STATES] = {
-
-/* STATE: ST_U0 ST_U1 ST_U3 ST_U4 ST_U6 ST_U7 ST_U8 ST_U9 ST_U10 ST_U11 ST_U12 ST_U19 ST_IWA ST_IWR ST_OW ST_IWL ST_SUBSET ST_ILL */
-/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
-/*EV_SETUPRQ*/ {{F_00A, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_DISCRQ */ {{F_ILL, ST_ILL}, {F_01B, ST_U11}, {F_DCRQ, ST_U11}, {F_DCRQ, ST_U11}, {F_ILL, ST_ILL}, {F_DCRQ, ST_U11}, {F_DCRQ, ST_U11}, {F_DCRQ, ST_U11}, {F_DCRQ, ST_U11}, {F_ILL, ST_ILL}, {F_NCNA, ST_U12}, {F_ILL, ST_ILL}, {F_DCRQ, ST_U11}, {F_DCRQ, ST_U11}, {F_DCRQ, ST_U11}, {F_DCRQ, ST_U11}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_RELRQ */ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_03C, ST_U19}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_12C, ST_U19}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_ALERTRQ*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_06D, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_09D, ST_U7}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_SETACRS*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_06E, ST_SUSE}, {F_07E, ST_U8}, {F_ILL, ST_ILL}, {F_09E, ST_U8}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_SETRJRS*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_06F, ST_SUSE}, {F_07F, ST_U0}, {F_ILL, ST_ILL}, {F_09F, ST_U0}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_SETDCRS*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_06G, ST_U0}, {F_07G, ST_U0}, {F_ILL, ST_ILL}, {F_09G, ST_U0}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/* STATE: ST_U0 ST_U1 ST_U3 ST_U4 ST_U6 ST_U7 ST_U8 ST_U9 ST_U10 ST_U11 ST_U12 ST_U19 ST_IWA ST_IWR ST_OW ST_IWL ST_SUBSET ST_ILL */
-/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
-/*EV_SETUP */ {{F_00H, ST_U6}, {F_SIGN, ST_U1}, {F_SIGN, ST_U3}, {F_SIGN, ST_U4}, {F_SIGN, ST_U6}, {F_SIGN, ST_U7}, {F_SIGN, ST_U8}, {F_SIGN, ST_U9}, {F_SIGN, ST_U10}, {F_SIGN, ST_U11}, {F_SIGN, ST_U12}, {F_SIGN, ST_U19}, {F_SIGN, ST_IWA}, {F_SIGN, ST_IWR}, {F_SIGN, ST_OW}, {F_SIGN, ST_IWL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_STATUS */ {{F_00I, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_19I, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_STAT, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_RELEASE*/ {{F_00J, ST_U0}, {F_UEM, ST_SUSE}, {F_REL, ST_U0}, {F_REL, ST_U0}, {F_06J, ST_U0}, {F_REL, ST_U0}, {F_REL, ST_U0}, {F_REL, ST_U0}, {F_REL, ST_U0}, {F_11J, ST_U0}, {F_12J, ST_U0}, {F_19J, ST_U0}, {F_REL, ST_U0}, {F_REL, ST_U0}, {F_REL, ST_U0}, {F_REL, ST_U0}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_RELCOMP*/ {{F_NCNA, ST_U0}, {F_01K, ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_19K, ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_RELCP,ST_U0}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_SETUPAK*/ {{F_UEM, ST_SUSE}, {F_01L, ST_U3}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_CALLPRC*/ {{F_UEM, ST_SUSE}, {F_01M, ST_U3}, {F_NCNA, ST_U3}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_ALERT */ {{F_UEM, ST_SUSE}, {F_01N, ST_U4}, {F_03N, ST_U4}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_CONNECT*/ {{F_UEM, ST_SUSE}, {F_01O, ST_U10}, {F_03O, ST_U10}, {F_04O, ST_U10}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_PROGIND*/ {{F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_03P, ST_U3}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_DISCONN*/ {{F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_DISC, ST_U12}, {F_DISC, ST_U12}, {F_06Q, ST_U12}, {F_DISC, ST_U12}, {F_DISC, ST_U12}, {F_DISC, ST_U12}, {F_DISC, ST_U12}, {F_11Q, ST_U19}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_DISC, ST_U12}, {F_DISC, ST_U12}, {F_DISC, ST_U12}, {F_DISC, ST_U12}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_CONACK */ {{F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_08R, ST_U10}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_STATENQ*/ {{F_STENQ,ST_U0}, {F_STENQ,ST_U1}, {F_STENQ,ST_U3}, {F_STENQ,ST_U4}, {F_STENQ,ST_U6}, {F_STENQ,ST_U7}, {F_STENQ,ST_U8}, {F_STENQ,ST_U9}, {F_STENQ,ST_U10}, {F_STENQ,ST_U11}, {F_STENQ,ST_U12}, {F_STENQ,ST_U19}, {F_STENQ,ST_IWA}, {F_STENQ,ST_IWR}, {F_STENQ,ST_OW}, {F_STENQ,ST_OW}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_INFO */ {{F_UEM, ST_SUSE}, {F_UEM, ST_SUSE}, {F_INFO, ST_U3}, {F_INFO, ST_U4}, {F_UEM, ST_SUSE}, {F_INFO, ST_U7}, {F_INFO, ST_U8}, {F_INFO, ST_U9}, {F_INFO, ST_U10}, {F_INFO, ST_U11}, {F_INFO, ST_U12}, {F_UEM, ST_SUSE}, {F_INFO, ST_IWA}, {F_INFO, ST_IWR}, {F_INFO, ST_OW}, {F_INFO, ST_OW}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_FACILITY*/ {{F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_FCTY, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/* STATE: ST_U0 ST_U1 ST_U3 ST_U4 ST_U6 ST_U7 ST_U8 ST_U9 ST_U10 ST_U11 ST_U12 ST_U19 ST_IWA ST_IWR ST_OW ST_IWL ST_SUBSET ST_ILL */
-/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
-/*EV_T303EXP*/ {{F_ILL, ST_ILL}, {F_01U, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_T305EXP*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_11V, ST_U19}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_T308EXP*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_19W, ST_SUSE}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_T309EXP*/ {{F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_309TO,ST_U0}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_T310EXP*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_03Y, ST_U11}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_T313EXP*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_08Z, ST_U11}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/* STATE: ST_U0 ST_U1 ST_U3 ST_U4 ST_U6 ST_U7 ST_U8 ST_U9 ST_U10 ST_U11 ST_U12 ST_U19 ST_IWA ST_IWR ST_OW ST_IWL ST_SUBSET ST_ILL */
-/* ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
-/*EV_DLESTIN*/ {{F_ILL, ST_ILL}, {F_DLEI, ST_U1}, {F_DLEI, ST_U3}, {F_DLEI, ST_U4}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_DLEI, ST_U1}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_DLRELIN*/ {{F_NCNA, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRIA,ST_U10}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_DLRI, ST_U0}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_DLESTCF*/ {{F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF, ST_SUSE}, {F_DECF2,ST_U8}, {F_DECF3,ST_U0}, {F_DECF1,ST_U1}, {F_DECF4,ST_U7}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_DLRELCF*/ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}},
-/*EV_ILL */ {{F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}, {F_ILL, ST_ILL}}
-};
-
-/*---------------------------------------------------------------------------*
- * event handler
- *---------------------------------------------------------------------------*/
-void next_l3state(call_desc_t *cd, int event)
-{
- int currstate, newstate;
-
- if(event > N_EVENTS)
- panic("i4b_l3fsm.c: event > N_EVENTS\n");
-
- currstate = cd->Q931state;
-
- if(currstate > N_STATES)
- panic("i4b_l3fsm.c: currstate > N_STATES\n");
-
- newstate = l3state_tab[event][currstate].newstate;
-
- if(newstate > N_STATES)
- panic("i4b_l3fsm.c: newstate > N_STATES\n");
-
- DBGL3(L3_F_MSG, "next_l3state", ("L3 FSM event [%s]: [%s => %s]\n",
- l3event_text[event],
- l3state_text[currstate],
- l3state_text[newstate]));
-
- /* execute function */
-
- (*l3state_tab[event][currstate].func)(cd);
-
- if(newstate == ST_ILL)
- {
- newstate = currstate;
- DBGL3(L3_F_ERR, "next_l3state", ("FSM illegal state, state = %s, event = %s!\n",
- l3state_text[newstate],
- l3event_text[event]));
- }
-
- if(newstate != ST_SUSE)
- cd->Q931state = newstate;
-}
-
-/*---------------------------------------------------------------------------*
- * resturn pointer to current state description
- *---------------------------------------------------------------------------*/
-char *print_l3state(call_desc_t *cd)
-{
- return((char *) l3state_text[cd->Q931state]);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U0 event L4 setup req
- *---------------------------------------------------------------------------*/
-static void F_00A(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_00A", ("FSM function F_00A executing\n"));
-
- if(i4b_get_dl_stat(cd) == DL_DOWN)
- {
- DL_Est_Req(ctrl_desc[cd->controller].unit);
- cd->Q931state = ST_OW;
- }
- else
- {
- i4b_l3_tx_setup(cd);
- cd->Q931state = ST_U1;
- }
-
- cd->T303_first_to = 1;
- T303_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U0 event SETUP from L2
- *---------------------------------------------------------------------------*/
-static void F_00H(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_00H", ("FSM function F_00H executing\n"));
- i4b_l4_connect_ind(cd); /* tell l4 we have an incoming setup */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U0 event STATUS from L2
- *---------------------------------------------------------------------------*/
-static void F_00I(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_00I", ("FSM function F_00I executing\n"));
-
- if(cd->call_state != 0)
- {
- cd->cause_out = 101;
- i4b_l3_tx_release_complete(cd, 1); /* 1 = send cause */
- }
- cd->Q931state = ST_U0;
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U0 event RELEASE from L2
- *---------------------------------------------------------------------------*/
-static void F_00J(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_00J", ("FSM function F_00J executing\n"));
- i4b_l3_tx_release_complete(cd, 0); /* 0 = don't send cause */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U1 event disconnect req from L4
- *---------------------------------------------------------------------------*/
-static void F_01B(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_01B", ("FSM function F_01B executing\n"));
- /* cause from L4 */
- i4b_l3_tx_disconnect(cd);
- T303_stop(cd);
- T305_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U1 event RELEASE COMPLETE from L2
- *---------------------------------------------------------------------------*/
-static void F_01K(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_01K", ("FSM function F_01K executing\n"));
- T303_stop(cd);
- i4b_l4_disconnect_ind(cd); /* tell l4 we were rejected */
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U1 event SETUP ACK from L2
- *---------------------------------------------------------------------------*/
-static void F_01L(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_01L", ("FSM function F_01L executing\n"));
- T303_stop(cd);
-
- /*
- * since this implementation does NOT support overlap sending,
- * we react here as if we received a CALL PROCEEDING because
- * several PBX's react with a SETUP ACK even if the called
- * number is complete AND we sent a SENDING COMPLETE in the
- * preceeding SETUP message. (-hm)
- */
-
- T310_start(cd);
- i4b_l4_proceeding_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U1 event CALL PROCEEDING from L2
- *---------------------------------------------------------------------------*/
-static void F_01M(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_01M", ("FSM function F_01M executing\n"));
- T303_stop(cd);
- T310_start(cd);
- i4b_l4_proceeding_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U1 event ALERT from L2 (XXX !)
- *---------------------------------------------------------------------------*/
-static void F_01N(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_01N", ("FSM function F_01N executing\n"));
- T303_stop(cd);
- i4b_l4_alert_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U1 event CONNECT from L2 (XXX !)
- *---------------------------------------------------------------------------*/
-static void F_01O(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_01O", ("FSM function F_01O executing\n"));
- T303_stop(cd);
- i4b_l3_tx_connect_ack(cd);
- i4b_l4_connect_active_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U1 event T303 timeout
- *---------------------------------------------------------------------------*/
-static void F_01U(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_01U", ("FSM function F_01U executing\n"));
- if(cd->T303_first_to == 1)
- {
- cd->T303_first_to = 0;
- i4b_l3_tx_setup(cd);
- T303_start(cd);
- cd->Q931state = ST_U1;
- }
- else
- {
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
- cd->Q931state = ST_U0;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U3 event release req from L4
- *---------------------------------------------------------------------------*/
-static void F_03C(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_03C", ("FSM function F_03C executing\n"));
- T310_stop(cd);
- cd->cause_out = 6;
- i4b_l3_tx_release(cd, 1); /* 0 = don't send cause */
- cd->T308_first_to = 1;
- T308_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U3 event ALERT from L2
- *---------------------------------------------------------------------------*/
-static void F_03N(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_03N", ("FSM function F_03N executing\n"));
- T310_stop(cd);
- i4b_l4_alert_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U3 event CONNECT from L2
- *---------------------------------------------------------------------------*/
-static void F_03O(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_03O", ("FSM function F_03O executing\n"));
- T310_stop(cd);
- i4b_l3_tx_connect_ack(cd); /* CONNECT ACK to network */
- i4b_l4_connect_active_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U3 event PROGESS IND from L2
- *---------------------------------------------------------------------------*/
-static void F_03P(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_03P", ("FSM function F_03P executing\n"));
- T310_stop(cd);
-#ifdef NOTDEF
- i4b_l4_progress_ind(cd);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U3 event T310 timeout
- *---------------------------------------------------------------------------*/
-static void F_03Y(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_03Y", ("FSM function F_03Y executing\n"));
- cd->cause_out = 102; /* recovery on timer expiry */
- i4b_l3_tx_disconnect(cd);
- T305_start(cd);
- i4b_l4_disconnect_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U4 event CONNECT from L2
- *---------------------------------------------------------------------------*/
-static void F_04O(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_04O", ("FSM function F_04O executing\n"));
- i4b_l3_tx_connect_ack(cd); /* CONNECT ACK to network */
- i4b_l4_connect_active_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U6 event alert req from L4
- *---------------------------------------------------------------------------*/
-static void F_06D(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_06D", ("FSM function F_06D executing\n"));
-
- if(i4b_get_dl_stat(cd) == DL_DOWN)
- {
- DL_Est_Req(ctrl_desc[cd->controller].unit);
- cd->Q931state = ST_IWL;
- }
- else
- {
- i4b_l3_tx_alert(cd);
- cd->Q931state = ST_U7;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U6 event incoming setup accept from L4
- *---------------------------------------------------------------------------*/
-static void F_06E(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_06E", ("FSM function F_06E executing\n"));
-
- if(i4b_get_dl_stat(cd) == DL_DOWN)
- {
- DL_Est_Req(ctrl_desc[cd->controller].unit);
- cd->Q931state = ST_IWA;
- }
- else
- {
- i4b_l3_tx_connect(cd);
- cd->Q931state = ST_U8;
- }
- T313_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U6 event incoming setup reject from L4
- *---------------------------------------------------------------------------*/
-static void F_06F(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_06F", ("FSM function F_06F executing\n"));
-
- if(i4b_get_dl_stat(cd) == DL_DOWN)
- {
- DL_Est_Req(ctrl_desc[cd->controller].unit);
- cd->Q931state = ST_IWR;
- }
- else
- {
- int s = SPLI4B();
- i4b_l3_tx_release_complete(cd, 1);
- cd->Q931state = ST_U0;
- freecd_by_cd(cd);
- splx(s);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U6 event incoming setup ignore from L4
- *---------------------------------------------------------------------------*/
-static void F_06G(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_06G", ("FSM function F_06G executing\n"));
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U6 event RELEASE from L2
- *---------------------------------------------------------------------------*/
-static void F_06J(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_06J", ("FSM function F_06J executing\n"));
- i4b_l3_tx_release_complete(cd, 0);
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U6 event DISCONNECT from L2
- *---------------------------------------------------------------------------*/
-static void F_06Q(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_06Q", ("FSM function F_06Q executing\n"));
- i4b_l4_disconnect_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U7 event setup response accept from L4
- *---------------------------------------------------------------------------*/
-static void F_07E(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_07E", ("FSM function F_07E executing\n"));
- i4b_l3_tx_connect(cd);
- T313_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U7 event setup response reject from L4
- *---------------------------------------------------------------------------*/
-static void F_07F(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_07F", ("FSM function F_07F executing\n"));
- i4b_l3_tx_release_complete(cd, 1);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U7 event setup response ignore from L4
- *---------------------------------------------------------------------------*/
-static void F_07G(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_07G", ("FSM function F_07G executing\n"));
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U8 event CONNECT ACK from L2
- *---------------------------------------------------------------------------*/
-static void F_08R(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_08R", ("FSM function F_08R executing\n"));
- T313_stop(cd);
- i4b_l4_connect_active_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U8 event T313 timeout
- *---------------------------------------------------------------------------*/
-static void F_08Z(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_08Z", ("FSM function F_08Z executing\n"));
- cd->cause_out = 102; /* recovery on timer expiry */
- i4b_l3_tx_disconnect(cd);
- T305_start(cd);
- i4b_l4_disconnect_ind(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U9 event alert req from L4
- *---------------------------------------------------------------------------*/
-static void F_09D(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_09D", ("FSM function F_09D executing\n"));
- i4b_l3_tx_alert(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U9 event setup response accept from L4
- *---------------------------------------------------------------------------*/
-static void F_09E(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_09E", ("FSM function F_09E executing\n"));
- i4b_l3_tx_connect(cd);
- T313_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U9 event setup response reject from L4
- *---------------------------------------------------------------------------*/
-static void F_09F(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_09F", ("FSM function F_09F executing\n"));
- i4b_l3_tx_release_complete(cd, 1);
- freecd_by_cd(cd);
-}
-/*---------------------------------------------------------------------------*
- * L3 FSM state U9 event setup response ignore from L4
- *---------------------------------------------------------------------------*/
-static void F_09G(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_09G", ("FSM function F_09G executing\n"));
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U11 event RELEASE from L2
- *---------------------------------------------------------------------------*/
-static void F_11J(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_11J", ("FSM function F_11J executing\n"));
- T305_stop(cd);
- i4b_l3_tx_release_complete(cd, 0);
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U11 event DISCONNECT from L2
- *---------------------------------------------------------------------------*/
-static void F_11Q(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_11Q", ("FSM function F_11Q executing\n"));
- T305_stop(cd);
- i4b_l3_tx_release(cd, 0);
- cd->T308_first_to = 1;
- T308_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U11 event T305 timeout
- *---------------------------------------------------------------------------*/
-static void F_11V(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_11V", ("FSM function F_11V executing\n"));
- cd->cause_out = 102;
- i4b_l3_tx_release(cd, 1);
- cd->T308_first_to = 1;
- T308_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U12 event release req from L4
- *---------------------------------------------------------------------------*/
-static void F_12C(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_12C", ("FSM function F_12C executing\n"));
- i4b_l3_tx_release(cd, 1);
- cd->T308_first_to = 1;
- T308_start(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U12 event RELEASE from L2
- *---------------------------------------------------------------------------*/
-static void F_12J(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_12J", ("FSM function F_12J executing\n"));
- i4b_l3_tx_release_complete(cd, 0);
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U19 event STATUS from L2
- *---------------------------------------------------------------------------*/
-static void F_19I(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_19I", ("FSM function F_19I executing\n"));
-
- if(cd->call_state == 0)
- {
- i4b_l4_status_ind(cd);
- freecd_by_cd(cd);
- cd->Q931state = ST_U0;
- }
- else
- {
- cd->Q931state = ST_U19;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U19 event RELEASE from L2
- *---------------------------------------------------------------------------*/
-static void F_19J(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_19J", ("FSM function F_19J executing\n"));
- T308_stop(cd);
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U19 event RELEASE COMPLETE from L2
- *---------------------------------------------------------------------------*/
-static void F_19K(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_19K", ("FSM function F_19K executing\n"));
- T308_stop(cd);
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U19 event T308 timeout
- *---------------------------------------------------------------------------*/
-static void F_19W(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_19W", ("FSM function F_19W executing\n"));
- if(cd->T308_first_to == 0)
- {
- cd->T308_first_to = 1;
- i4b_l3_tx_release(cd, 0);
- T308_start(cd);
- cd->Q931state = ST_U19;
- }
- else
- {
- cd->T308_first_to = 0;
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
- cd->Q931state = ST_U0;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM routine no change no action
- *---------------------------------------------------------------------------*/
-static void F_NCNA(call_desc_t *cd)
-{
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state event STATUS ENQ from L2
- *---------------------------------------------------------------------------*/
-static void F_STENQ(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_STENQ", ("FSM function F_STENQ executing\n"));
- i4b_l3_tx_status(cd, CAUSE_Q850_STENQRSP); /* 30, resonse to stat enq */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state except 0 & 19 event STATUS from L2
- *---------------------------------------------------------------------------*/
-static void F_STAT(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_STAT", ("FSM function F_STAT executing\n"));
- if(cd->call_state == 0)
- {
- i4b_l4_status_ind(cd);
- cd->Q931state = ST_U0;
- freecd_by_cd(cd);
- }
- else
- {
- /* XXX !!!!!!!!!!!!!!!!!! */
-
- i4b_l4_status_ind(cd);
- cd->cause_out = 101; /* message not compatible with call state */
- i4b_l3_tx_disconnect(cd);
- T305_start(cd);
- cd->Q931state = ST_U11;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM some states event INFORMATION from L2
- *---------------------------------------------------------------------------*/
-static void F_INFO(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_INFO", ("FSM function F_INFO executing\n"));
- i4b_l4_info_ind(cd);
- /* remain in current state */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM some states event RELEASE COMPLETE from L2
- *---------------------------------------------------------------------------*/
-static void F_RELCP(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_RELCP", ("FSM function F_RELCP executing\n"));
- i4b_l3_stop_all_timers(cd);
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM some states event RELEASE from L2
- *---------------------------------------------------------------------------*/
-static void F_REL(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_REL", ("FSM function F_REL executing\n"));
- i4b_l3_stop_all_timers(cd);
- i4b_l3_tx_release_complete(cd, 0);
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM some states event DISCONNECT from L2
- *---------------------------------------------------------------------------*/
-static void F_DISC(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DISC", ("FSM function F_DISC executing\n"));
- i4b_l3_stop_all_timers(cd);
-
- /*
- * no disconnect ind to L4, no jump to state U12
- * instead we issue a RELEASE and jump to U19
- */
-
- i4b_l3_tx_release(cd, 0);
- cd->T308_first_to = 1;
- T308_start(cd);
- cd->Q931state = ST_U19;
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM some states event disconnect request from L4
- *---------------------------------------------------------------------------*/
-static void F_DCRQ(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DCRQ", ("FSM function F_DCRQ executing\n"));
- /* cause from L4 */
- i4b_l3_tx_disconnect(cd);
- T305_start(cd);
- cd->Q931state = ST_U11;
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state except 0 event unexpected message from L2
- *---------------------------------------------------------------------------*/
-static void F_UEM(call_desc_t *cd)
-{
- DBGL3(L3_F_ERR, "F_UEM", ("FSM function F_UEM executing, state = %s\n", print_l3state(cd)));
- i4b_l3_tx_status(cd, CAUSE_Q850_MSGNCWCS); /* 101, message not compatible with call state */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state except 0 event SETUP from L2
- *---------------------------------------------------------------------------*/
-static void F_SIGN(call_desc_t *cd)
-{
- DBGL3(L3_F_ERR, "F_SIGN", ("FSM function F_SIGN executing\n"));
-
-/* XXX */ /* freecd_by_cd(cd); ?????????? XXX */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM relevant states event DL ESTABLISH IND from L2
- *---------------------------------------------------------------------------*/
-static void F_DLEI(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DLEI", ("FSM function F_DLEI executing\n"));
-
-/* XXX */
-
- /* remain in current state */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state event illegal event occured
- *---------------------------------------------------------------------------*/
-static void F_ILL(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_ILL", ("FSM function F_ILL executing\n"));
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state event T309 timeout
- *---------------------------------------------------------------------------*/
-static void F_309TO(call_desc_t *cd)
-{
- DBGL3(L3_F_ERR, "F_309TO", ("FSM function F_309TO executing\n"));
-
-/* XXX */
-
-#ifdef NOTDEF
- i4b_l4_dl_fail_ind(cd);
-#endif
-
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state event FACILITY message received
- *---------------------------------------------------------------------------*/
-static void F_FCTY(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_FCTY", ("FSM function F_FCTY executing\n"));
- /* ST_SUSE, no change in state ! */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state ST_OW event DL ESTABLISH CONF from L2
- *---------------------------------------------------------------------------*/
-static void F_DECF1(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DECF1", ("FSM function F_DECF1 executing\n"));
- i4b_l3_tx_setup(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state ST_IWA event DL ESTABLISH CONF from L2
- *---------------------------------------------------------------------------*/
-static void F_DECF2(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DECF2", ("FSM function F_DECF2 executing\n"));
- i4b_l3_tx_connect(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state ST_IWR event DL ESTABLISH CONF from L2
- *---------------------------------------------------------------------------*/
-static void F_DECF3(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DECF3", ("FSM function F_DECF3 executing\n"));
- i4b_l3_tx_release_complete(cd, 1);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state ST_IWL event DL ESTABLISH CONF from L2
- *---------------------------------------------------------------------------*/
-static void F_DECF4(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DECF4", ("FSM function F_DECF4 executing\n"));
- i4b_l3_tx_alert(cd);
-}
-
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state event DL ESTABLISH CONF from L2
- *---------------------------------------------------------------------------*/
-static void F_DECF(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DECF", ("FSM function F_DECF executing\n"));
- T309_stop(cd);
- i4b_l3_tx_status(cd, CAUSE_Q850_NORMUNSP); /* 31, normal unspecified */
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM any state except U10 event DL RELEASE IND from L2
- *---------------------------------------------------------------------------*/
-static void F_DLRI(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DLRI", ("FSM function F_DLRI executing\n"));
- i4b_l3_stop_all_timers(cd);
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * L3 FSM state U10 event DL RELEASE IND from L2
- *---------------------------------------------------------------------------*/
-static void F_DLRIA(call_desc_t *cd)
-{
- DBGL3(L3_F_MSG, "F_DLRIA", ("FSM function F_DLRIA executing\n"));
-
- if(cd->T309 == TIMER_IDLE)
- T309_start(cd);
-
- DL_Est_Req(ctrl_desc[cd->controller].unit);
-}
-
-#endif /* NI4BQ931 > 0 */
diff --git a/sys/i4b/layer3/i4b_l3fsm.h b/sys/i4b/layer3/i4b_l3fsm.h
deleted file mode 100644
index d69b810b45ad1..0000000000000
--- a/sys/i4b/layer3/i4b_l3fsm.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l3fsm.c - layer 3 FSM
- * -------------------------
- *
- * $Id: i4b_l3fsm.h,v 1.5 1998/12/05 18:05:33 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:32:45 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_L3FSM_H_
-#define _I4B_L3FSM_H_
-
-enum Q931_states {
- ST_U0,
- ST_U1,
- ST_U3,
- ST_U4,
- ST_U6,
- ST_U7,
- ST_U8,
- ST_U9,
- ST_U10,
- ST_U11,
- ST_U12,
- ST_U19,
-
- ST_IWA, /* incoming call, wait establish, then accept */
- ST_IWR, /* incoming call, wait establish, then reject */
- ST_OW, /* outgoing call, wait establish */
- ST_IWL, /* incoming call, wait establish, then alert */
-
- ST_SUSE, /* SUBroutine SETs new state on exit */
- ST_ILL, /* Illegal */
-
- N_STATES /* number of states */
-};
-
-enum Q931_events {
-
- EV_SETUPRQ, /* setup request from L4 */
- EV_DISCRQ, /* disconnect request from L4 */
- EV_RELRQ, /* release request from L4 */
- EV_ALERTRQ, /* alerting request from L4 */
- EV_SETACRS, /* setup response accept from l4 */
- EV_SETRJRS, /* setup response reject from l4 */
- EV_SETDCRS, /* setup response dontcare from l4 */
-
- EV_SETUP, /* incoming SETUP message from L2 */
- EV_STATUS, /* incoming STATUS message from L2 */
- EV_RELEASE, /* incoming RELEASE message from L2 */
- EV_RELCOMP, /* incoming RELEASE COMPLETE from L2 */
- EV_SETUPAK, /* incoming SETUP ACK message from L2 */
- EV_CALLPRC, /* incoming CALL PROCEEDING from L2 */
- EV_ALERT, /* incoming ALERT message from L2 */
- EV_CONNECT, /* incoming CONNECT message from L2 */
- EV_PROGIND, /* incoming Progress IND from L2 */
- EV_DISCONN, /* incoming DISCONNECT message from L2 */
- EV_CONACK, /* incoming CONNECT ACK message from L2 */
- EV_STATENQ, /* incoming STATUS ENQ message from L2 */
- EV_INFO, /* incoming INFO message from L2 */
- EV_FACILITY, /* FACILITY message */
-
- EV_T303EXP, /* Timer T303 expired */
- EV_T305EXP, /* Timer T305 expired */
- EV_T308EXP, /* Timer T308 expired */
- EV_T309EXP, /* Timer T309 expired */
- EV_T310EXP, /* Timer T310 expired */
- EV_T313EXP, /* Timer T313 expired */
-
- EV_DLESTIN, /* dl establish indication from l2 */
- EV_DLRELIN, /* dl release indication from l2 */
- EV_DLESTCF, /* dl establish confirm from l2 */
- EV_DLRELCF, /* dl release indication from l2 */
-
- EV_ILL, /* Illegal */
- N_EVENTS
-};
-
-#endif /* _I4B_L3FSM_H_ */
diff --git a/sys/i4b/layer3/i4b_l3timer.c b/sys/i4b/layer3/i4b_l3timer.c
deleted file mode 100644
index 6c1a2d30122b3..0000000000000
--- a/sys/i4b/layer3/i4b_l3timer.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l3timer.c - timer and timeout handling for layer 3
- * ------------------------------------------------------
- *
- * $Id: i4b_l3timer.c,v 1.9 1998/12/05 18:05:35 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:33:00 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq931.h"
-#else
-#define NI4BQ931 1
-#endif
-#if NI4BQ931 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer3/i4b_l3.h>
-#include <i4b/layer3/i4b_l3fsm.h>
-#include <i4b/layer3/i4b_q931.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-/*---------------------------------------------------------------------------*
- * stop all layer 3 timers
- *---------------------------------------------------------------------------*/
-void i4b_l3_stop_all_timers(call_desc_t *cd)
-{
- T303_stop(cd);
- T305_stop(cd);
- T308_stop(cd);
- T309_stop(cd);
- T310_stop(cd);
- T313_stop(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * timer T303 timeout function
- *---------------------------------------------------------------------------*/
-static void
-T303_timeout(call_desc_t *cd)
-{
- DBGL3(L3_T_ERR, "T303_timeout", ("SETUP not answered, cr = %d\n", cd->cr));
- next_l3state(cd, EV_T303EXP);
-}
-
-/*---------------------------------------------------------------------------*
- * timer T303 start
- *---------------------------------------------------------------------------*/
-void
-T303_start(call_desc_t *cd)
-{
- DBGL3(L3_T_MSG, "T303_start", ("cr = %d\n", cd->cr));
- cd->T303 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->T303_callout = timeout((TIMEOUT_FUNC_T)T303_timeout, (void *)cd, T303VAL);
-#else
- timeout((TIMEOUT_FUNC_T)T303_timeout, (void *)cd, T303VAL);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * timer T303 stop
- *---------------------------------------------------------------------------*/
-void
-T303_stop(call_desc_t *cd)
-{
- if(cd->T303 != TIMER_IDLE)
- {
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)T303_timeout, (void *)cd, cd->T303_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)T303_timeout, (void *)cd);
-#endif
- cd->T303 = TIMER_IDLE;
- }
- DBGL3(L3_T_MSG, "T303_stop", ("cr = %d\n", cd->cr));
-}
-
-/*---------------------------------------------------------------------------*
- * timer T305 timeout function
- *---------------------------------------------------------------------------*/
-static void
-T305_timeout(call_desc_t *cd)
-{
- DBGL3(L3_T_ERR, "T305_timeout", ("DISC not answered, cr = %d\n", cd->cr));
- next_l3state(cd, EV_T305EXP);
-}
-
-/*---------------------------------------------------------------------------*
- * timer T305 start
- *---------------------------------------------------------------------------*/
-void
-T305_start(call_desc_t *cd)
-{
- DBGL3(L3_T_MSG, "T305_start", ("cr = %d\n", cd->cr));
- cd->T305 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->T305_callout = timeout((TIMEOUT_FUNC_T)T305_timeout, (void *)cd, T305VAL);
-#else
- timeout((TIMEOUT_FUNC_T)T305_timeout, (void *)cd, T305VAL);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * timer T305 stop
- *---------------------------------------------------------------------------*/
-void
-T305_stop(call_desc_t *cd)
-{
- if(cd->T305 != TIMER_IDLE)
- {
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)T305_timeout, (void *)cd, cd->T305_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)T305_timeout, (void *)cd);
-#endif
- cd->T305 = TIMER_IDLE;
- }
- DBGL3(L3_T_MSG, "T305_stop", ("cr = %d\n", cd->cr));
-}
-
-/*---------------------------------------------------------------------------*
- * timer T308 timeout function
- *---------------------------------------------------------------------------*/
-static void
-T308_timeout(call_desc_t *cd)
-{
- DBGL3(L3_T_ERR, "T308_timeout", ("REL not answered, cr = %d\n", cd->cr));
- next_l3state(cd, EV_T308EXP);
-}
-
-/*---------------------------------------------------------------------------*
- * timer T308 start
- *---------------------------------------------------------------------------*/
-void
-T308_start(call_desc_t *cd)
-{
- DBGL3(L3_T_MSG, "T308_start", ("cr = %d\n", cd->cr));
- cd->T308 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->T308_callout = timeout((TIMEOUT_FUNC_T)T308_timeout, (void *)cd, T308VAL);
-#else
- timeout((TIMEOUT_FUNC_T)T308_timeout, (void *)cd, T308VAL);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * timer T308 stop
- *---------------------------------------------------------------------------*/
-void
-T308_stop(call_desc_t *cd)
-{
- if(cd->T308 != TIMER_IDLE)
- {
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)T308_timeout, (void *)cd, cd->T308_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)T308_timeout, (void *)cd);
-#endif
- cd->T308 = TIMER_IDLE;
- }
- DBGL3(L3_T_MSG, "T308_stop", ("cr = %d\n", cd->cr));
-}
-
-/*---------------------------------------------------------------------------*
- * timer T309 timeout function
- *---------------------------------------------------------------------------*/
-static void
-T309_timeout(call_desc_t *cd)
-{
- DBGL3(L3_T_ERR, "T309_timeout", ("datalink not reconnected, cr = %d\n", cd->cr));
- next_l3state(cd, EV_T309EXP);
-}
-
-/*---------------------------------------------------------------------------*
- * timer T309 start
- *---------------------------------------------------------------------------*/
-void
-T309_start(call_desc_t *cd)
-{
- DBGL3(L3_T_MSG, "T309_start", ("cr = %d\n", cd->cr));
- cd->T309 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->T309_callout = timeout((TIMEOUT_FUNC_T)T309_timeout, (void *)cd, T309VAL);
-#else
- timeout((TIMEOUT_FUNC_T)T309_timeout, (void *)cd, T309VAL);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * timer T309 stop
- *---------------------------------------------------------------------------*/
-void
-T309_stop(call_desc_t *cd)
-{
- if(cd->T309 != TIMER_IDLE)
- {
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)T309_timeout, (void *)cd, cd->T309_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)T309_timeout, (void *)cd);
-#endif
- cd->T309 = TIMER_IDLE;
- }
- DBGL3(L3_T_MSG, "T309_stop", ("cr = %d\n", cd->cr));
-}
-
-/*---------------------------------------------------------------------------*
- * timer T310 timeout function
- *---------------------------------------------------------------------------*/
-static void
-T310_timeout(call_desc_t *cd)
-{
- DBGL3(L3_T_ERR, "T310_timeout", ("CALL PROC timeout, cr = %d\n", cd->cr));
- next_l3state(cd, EV_T310EXP);
-}
-
-/*---------------------------------------------------------------------------*
- * timer T310 start
- *---------------------------------------------------------------------------*/
-void
-T310_start(call_desc_t *cd)
-{
- DBGL3(L3_T_MSG, "T310_start", ("cr = %d\n", cd->cr));
- cd->T310 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->T310_callout = timeout((TIMEOUT_FUNC_T)T310_timeout, (void *)cd, T310VAL);
-#else
- timeout((TIMEOUT_FUNC_T)T310_timeout, (void *)cd, T310VAL);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * timer T310 stop
- *---------------------------------------------------------------------------*/
-void
-T310_stop(call_desc_t *cd)
-{
- if(cd->T310 != TIMER_IDLE)
- {
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)T310_timeout, (void *)cd, cd->T310_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)T310_timeout, (void *)cd);
-#endif
- cd->T310 = TIMER_IDLE;
- }
- DBGL3(L3_T_MSG, "T310_stop", ("cr = %d\n", cd->cr));
-}
-
-/*---------------------------------------------------------------------------*
- * timer T313 timeout function
- *---------------------------------------------------------------------------*/
-static void
-T313_timeout(call_desc_t *cd)
-{
- DBGL3(L3_T_ERR, "T313_timeout", ("CONN ACK not received, cr = %d\n", cd->cr));
- next_l3state(cd, EV_T313EXP);
-}
-
-/*---------------------------------------------------------------------------*
- * timer T313 start
- *---------------------------------------------------------------------------*/
-void
-T313_start(call_desc_t *cd)
-{
- DBGL3(L3_T_MSG, "T313_start", ("cr = %d\n", cd->cr));
- cd->T313 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->T313_callout = timeout((TIMEOUT_FUNC_T)T313_timeout, (void *)cd, T313VAL);
-#else
- timeout((TIMEOUT_FUNC_T)T313_timeout, (void *)cd, T313VAL);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * timer T313 stop
- *---------------------------------------------------------------------------*/
-void
-T313_stop(call_desc_t *cd)
-{
- if(cd->T313 != TIMER_IDLE)
- {
- cd->T313 = TIMER_IDLE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)T313_timeout, (void *)cd, cd->T313_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)T313_timeout, (void *)cd);
-#endif
- }
- DBGL3(L3_T_MSG, "T313_stop", ("cr = %d\n", cd->cr));
-}
-
-#endif /* NI4BQ931 > 0 */
-
diff --git a/sys/i4b/layer3/i4b_l4if.c b/sys/i4b/layer3/i4b_l4if.c
deleted file mode 100644
index 55d9bb9da4455..0000000000000
--- a/sys/i4b/layer3/i4b_l4if.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l4if.c - Layer 3 interface to Layer 4
- * -------------------------------------------
- *
- * $Id: i4b_l4if.c,v 1.17 1998/12/05 18:05:36 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:33:16 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq931.h"
-#else
-#define NI4BQ931 1
-#endif
-#if NI4BQ931 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_cause.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_cause.h>
-#endif
-
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer3/i4b_l3.h>
-#include <i4b/layer3/i4b_l3fsm.h>
-#include <i4b/layer3/i4b_q931.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-extern void isic_settrace(int unit, int val); /*XXX*/
-extern int isic_gettrace(int unit); /*XXX*/
-
-static void n_connect_request(u_int cdid);
-static void n_connect_response(u_int cdid, int response, int cause);
-static void n_disconnect_request(u_int cdid, int cause);
-static void n_alert_request(u_int cdid);
-static void n_mgmt_command(int unit, int cmd, int parm);
-
-/*---------------------------------------------------------------------------*
- * i4b_mdl_status_ind - status indication from lower layers
- *---------------------------------------------------------------------------*/
-int
-i4b_mdl_status_ind(int unit, int status, int parm)
-{
- int sendup;
- int i;
-
- DBGL3(L3_MSG, "i4b_mdl_status_ind", ("unit = %d, status = %d, parm = %d\n", unit, status, parm));
-
- switch(status)
- {
- case STI_ATTACH:
- DBGL3(L3_MSG, "i4b_mdl_status_ind", ("STI_ATTACH: attaching unit %d to controller %d\n", unit, nctrl));
-
- /* init function pointers */
-
- ctrl_desc[nctrl].N_CONNECT_REQUEST = n_connect_request;
- ctrl_desc[nctrl].N_CONNECT_RESPONSE = n_connect_response;
- ctrl_desc[nctrl].N_DISCONNECT_REQUEST = n_disconnect_request;
- ctrl_desc[nctrl].N_ALERT_REQUEST = n_alert_request;
- ctrl_desc[nctrl].N_SET_TRACE = isic_settrace;
- ctrl_desc[nctrl].N_GET_TRACE = isic_gettrace;
- ctrl_desc[nctrl].N_DOWNLOAD = NULL; /* only used by active cards */
- ctrl_desc[nctrl].N_DIAGNOSTICS = NULL; /* only used by active cards */
- ctrl_desc[nctrl].N_MGMT_COMMAND = n_mgmt_command;
-
- /* init type and unit */
-
- ctrl_desc[nctrl].unit = unit;
- ctrl_desc[nctrl].ctrl_type = CTRL_PASSIVE;
- ctrl_desc[nctrl].card_type = parm;
-
- /* state fields */
-
- ctrl_desc[nctrl].dl_est = DL_DOWN;
- ctrl_desc[nctrl].bch_state[CHAN_B1] = BCH_ST_FREE;
- ctrl_desc[nctrl].bch_state[CHAN_B2] = BCH_ST_FREE;
- ctrl_desc[nctrl].tei = -1;
-
- /* init unit to controller table */
-
- utoc_tab[unit] = nctrl;
-
- /* increment no. of controllers */
-
- nctrl++;
-
- break;
-
- case STI_L1STAT:
- i4b_l4_l12stat(unit, 1, parm);
- DBGL3(L3_MSG, "i4b_mdl_status_ind", ("STI_L1STAT: unit %d layer 1 = %s\n", unit, status ? "up" : "down"));
- break;
-
- case STI_L2STAT:
- i4b_l4_l12stat(unit, 2, parm);
- DBGL3(L3_MSG, "i4b_mdl_status_ind", ("STI_L2STAT: unit %d layer 2 = %s\n", unit, status ? "up" : "down"));
- break;
-
- case STI_TEIASG:
- ctrl_desc[unit].tei = parm;
- i4b_l4_teiasg(unit, parm);
- DBGL3(L3_MSG, "i4b_mdl_status_ind", ("STI_TEIASG: unit %d TEI = %d = 0x%02x\n", unit, parm, parm));
- break;
-
- case STI_PDEACT: /* L1 T4 timeout */
- DBGL3(L3_ERR, "i4b_mdl_status_ind", ("STI_PDEACT: unit %d TEI = %d = 0x%02x\n", unit, parm, parm));
-
- sendup = 0;
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if( (ctrl_desc[call_desc[i].controller].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[call_desc[i].controller].unit == unit))
- {
- if(call_desc[i].cdid != CDID_UNUSED)
- sendup++;
- }
- }
-
- ctrl_desc[utoc_tab[unit]].dl_est = DL_DOWN;
- ctrl_desc[utoc_tab[unit]].bch_state[CHAN_B1] = BCH_ST_FREE;
- ctrl_desc[utoc_tab[unit]].bch_state[CHAN_B2] = BCH_ST_FREE;
- ctrl_desc[utoc_tab[unit]].tei = -1;
-
- if(sendup)
- i4b_l4_pdeact(unit, sendup);
- break;
-
- case STI_NOL1ACC: /* no outgoing access to S0 */
- DBGL3(L3_ERR, "i4b_mdl_status_ind", ("STI_NOL1ACC: unit %d no outgoing access to S0\n", unit));
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if( (ctrl_desc[call_desc[i].controller].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[call_desc[i].controller].unit == unit))
- {
- if(call_desc[i].cdid != CDID_UNUSED)
- {
- SET_CAUSE_TYPE(call_desc[i].cause_in, CAUSET_I4B);
- SET_CAUSE_VAL(call_desc[i].cause_in, CAUSE_I4B_L1ERROR);
- i4b_l4_disconnect_ind(&(call_desc[i]));
- }
- }
- }
-
- ctrl_desc[utoc_tab[unit]].dl_est = DL_DOWN;
- ctrl_desc[utoc_tab[unit]].bch_state[CHAN_B1] = BCH_ST_FREE;
- ctrl_desc[utoc_tab[unit]].bch_state[CHAN_B2] = BCH_ST_FREE;
- ctrl_desc[utoc_tab[unit]].tei = -1;
- break;
-
- default:
- DBGL3(L3_ERR, "i4b_mdl_status_ind", ("ERROR, unit %d, unknown status value %d!\n", unit, status));
- break;
- }
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * send command to the lower layers
- *---------------------------------------------------------------------------*/
-static void
-n_mgmt_command(int unit, int cmd, int parm)
-{
- int i;
-
- switch(cmd)
- {
- case CMR_DOPEN:
- DBGL3(L3_MSG, "n_mgmt_command", ("CMR_DOPEN for unit %d\n", unit));
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if( (ctrl_desc[call_desc[i].controller].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[call_desc[i].controller].unit == unit))
- {
- call_desc[i].cdid = CDID_UNUSED;
- }
- }
-
- ctrl_desc[utoc_tab[unit]].dl_est = DL_DOWN;
- ctrl_desc[utoc_tab[unit]].bch_state[CHAN_B1] = BCH_ST_FREE;
- ctrl_desc[utoc_tab[unit]].bch_state[CHAN_B2] = BCH_ST_FREE;
- ctrl_desc[utoc_tab[unit]].tei = -1;
- break;
-
- case CMR_DCLOSE:
- DBGL3(L3_MSG, "n_mgmt_command", ("CMR_DCLOSE for unit %d\n", unit));
- break;
-
- default:
- break;
-
- }
-
- MDL_Command_Req(unit, cmd, parm);
-
-}
-
-/*---------------------------------------------------------------------------*
- * handle connect request message from userland
- *---------------------------------------------------------------------------*/
-static void
-n_connect_request(u_int cdid)
-{
- call_desc_t *cd;
-
- cd = cd_by_cdid(cdid);
-
- next_l3state(cd, EV_SETUPRQ);
-}
-
-/*---------------------------------------------------------------------------*
- * handle setup response message from userland
- *---------------------------------------------------------------------------*/
-static void
-n_connect_response(u_int cdid, int response, int cause)
-{
- call_desc_t *cd;
- int chstate;
-
- cd = cd_by_cdid(cdid);
-
- T400_stop(cd);
-
- cd->response = response;
- cd->cause_out = cause;
-
- switch(response)
- {
- case SETUP_RESP_ACCEPT:
- next_l3state(cd, EV_SETACRS);
- chstate = BCH_ST_USED;
- break;
-
- case SETUP_RESP_REJECT:
- next_l3state(cd, EV_SETRJRS);
- chstate = BCH_ST_FREE;
- break;
-
- case SETUP_RESP_DNTCRE:
- next_l3state(cd, EV_SETDCRS);
- chstate = BCH_ST_FREE;
- break;
-
- default: /* failsafe */
- next_l3state(cd, EV_SETDCRS);
- chstate = BCH_ST_FREE;
- DBGL3(L3_ERR, "n_connect_response", ("unknown response, doing SETUP_RESP_DNTCRE"));
- break;
- }
-
- if((cd->channelid == CHAN_B1) || (cd->channelid == CHAN_B2))
- {
- ctrl_desc[cd->controller].bch_state[cd->channelid] = chstate;
- }
- else
- {
- DBGL3(L3_ERR, "n_connect_response", ("ERROR, invalid channel %d\n", cd->channelid));
- }
-}
-
-/*---------------------------------------------------------------------------*
- * handle disconnect request message from userland
- *---------------------------------------------------------------------------*/
-static void
-n_disconnect_request(u_int cdid, int cause)
-{
- call_desc_t *cd;
-
- cd = cd_by_cdid(cdid);
-
- cd->cause_out = cause;
-
- next_l3state(cd, EV_DISCRQ);
-}
-
-/*---------------------------------------------------------------------------*
- * handle alert request message from userland
- *---------------------------------------------------------------------------*/
-static void
-n_alert_request(u_int cdid)
-{
- call_desc_t *cd;
-
- cd = cd_by_cdid(cdid);
-
- next_l3state(cd, EV_ALERTRQ);
-}
-
-#endif /* NI4BQ931 > 0 */
diff --git a/sys/i4b/layer3/i4b_q931.c b/sys/i4b/layer3/i4b_q931.c
deleted file mode 100644
index 6c111d1012284..0000000000000
--- a/sys/i4b/layer3/i4b_q931.c
+++ /dev/null
@@ -1,624 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_q931.c - Q931 received messages handling
- * --------------------------------------------
- *
- * $Id: i4b_q931.c,v 1.18 1998/12/05 18:05:38 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:33:36 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq931.h"
-#else
-#define NI4BQ931 1
-#endif
-
-#if NI4BQ931 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_cause.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_cause.h>
-#endif
-
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer3/i4b_l3.h>
-#include <i4b/layer3/i4b_l3fsm.h>
-#include <i4b/layer3/i4b_q931.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-#ifndef __FreeBSD__
-#define memcpy(d,s,l) bcopy(s,d,l)
-#endif
-
-unsigned int i4b_l3_debug = L3_DEBUG_DEFAULT;
-
-call_desc_t call_desc[N_CALL_DESC]; /* call descriptor array */
-ctrl_desc_t ctrl_desc[MAX_CONTROLLERS]; /* controller description array */
-int utoc_tab[MAX_CONTROLLERS]; /* unit to controller conversion */
-
-/* protocol independent causes -> Q.931 causes */
-
-unsigned char cause_tab_q931[CAUSE_I4B_MAX] = {
- CAUSE_Q850_NCCLR, /* CAUSE_I4B_NORMAL -> normal call clearing */
- CAUSE_Q850_USRBSY, /* CAUSE_I4B_BUSY -> user busy */
- CAUSE_Q850_NOCAVAIL, /* CAUSE_I4B_NOCHAN -> no circuit/channel available*/
- CAUSE_Q850_INCDEST, /* CAUSE_I4B_INCOMP -> incompatible destination */
- CAUSE_Q850_CALLREJ, /* CAUSE_I4B_REJECT -> call rejected */
- CAUSE_Q850_DSTOOORDR, /* CAUSE_I4B_OOO -> destination out of order */
- CAUSE_Q850_TMPFAIL, /* CAUSE_I4B_TMPFAIL -> temporary failure */
-};
-
-/*---------------------------------------------------------------------------*
- * setup cr ref flag according to direction
- *---------------------------------------------------------------------------*/
-unsigned char
-setup_cr(call_desc_t *cd, unsigned char cr)
-{
- if(cd->crflag == CRF_ORIG)
- return(cr & 0x7f); /* clear cr ref flag */
- else if(cd->crflag == CRF_DEST)
- return(cr | 0x80); /* set cr ref flag */
- else
- panic("setup_cr: invalid crflag!\n");
-}
-
-/*---------------------------------------------------------------------------*
- * decode and process a Q.931 message
- *---------------------------------------------------------------------------*/
-void
-i4b_decode_q931(int unit, int msg_len, u_char *msg_ptr)
-{
- call_desc_t *cd;
- int codeset = CODESET_0;
- int old_codeset = CODESET_0;
- int shift_flag = UNSHIFTED;
- int crlen = 0;
- int crval = 0;
- int crflag = 0;
- int i;
- int offset;
- int s;
-
- /* check protocol discriminator */
-
- if(*msg_ptr != PD_Q931)
- {
- DBGL3(L3_P_ERR, "i4b_decode_q931", ("protocol discriminator 0x%x != Q.931\n", *msg_ptr));
- return;
- }
- msg_ptr++;
- msg_len--;
-
- s = SPLI4B(); /* this has to be protected ! */
-
- /* extract call reference */
-
- crlen = *msg_ptr & CRLENGTH_MASK;
- msg_ptr++;
- msg_len--;
-
- if(crlen != 0)
- {
- crval += *msg_ptr & 0x7f;
- crflag = (*msg_ptr >> 7) & 0x01;
- msg_ptr++;
- msg_len--;
-
- for(i=1; i < crlen; i++)
- {
- crval += *msg_ptr;
- msg_ptr++;
- msg_len--;
- }
- }
- else
- {
- crval = 0;
- crflag = 0;
- }
-
- DBGL3(L3_P_MSG, "i4b_decode_q931", ("Call Ref, len %d, val %d, flag %d\n", crlen, crval, crflag));
-
- /* find or allocate calldescriptor */
-
- if((cd = cd_by_unitcr(unit, crval,
- crflag == CRF_DEST ? CRF_ORIG : CRF_DEST)) == NULL)
- {
- if(*msg_ptr == SETUP)
- {
- /* get and init new calldescriptor */
-
- cd = reserve_cd(); /* cdid filled in */
- cd->controller = utoc_tab[unit];
- cd->cr = crval;
- cd->crflag = CRF_DEST; /* we are the dest side */
- cd->ilt = NULL; /* reset link tab ptrs */
- cd->dlt = NULL;
- }
- else
- {
-/*XXX*/ if(crval != 0) /* ignore global call references */
- {
- DBGL3(L3_P_ERR, "i4b_decode_q931", ("cannot find calldescriptor for cr = 0x%x, crflag = 0x%x, msg = 0x%x, frame = ", crval, crflag, *msg_ptr));
- i4b_print_frame(msg_len, msg_ptr);
- }
- splx(s);
- return;
- }
- }
-
- splx(s);
-
- /* decode and handle message type */
-
- i4b_decode_q931_message(unit, cd, *msg_ptr);
- msg_ptr++;
- msg_len--;
-
- /* process information elements */
-
- while(msg_len > 0)
- {
- /* check for shift codeset IE */
-
- if((*msg_ptr & 0x80) && ((*msg_ptr & 0xf0) == SOIE_SHIFT))
- {
- if(!(*msg_ptr & SHIFT_LOCK))
- shift_flag = SHIFTED;
-
- old_codeset = codeset;
- codeset = *msg_ptr & CODESET_MASK;
-
- if((shift_flag != SHIFTED) &&
- (codeset <= old_codeset))
- {
- DBGL3(L3_P_ERR, "i4b_decode_q931", ("Q.931 lockingshift proc violation, shift %d -> %d\n", old_codeset, codeset));
- codeset = old_codeset;
- }
- msg_len--;
- msg_ptr++;
- }
-
- /* process one IE for selected codeset */
-
- switch(codeset)
- {
- case CODESET_0:
- offset = i4b_decode_q931_cs0_ie(unit, cd, msg_len, msg_ptr);
- msg_len -= offset;
- msg_ptr += offset;
- break;
-
- default:
- DBGL3(L3_P_ERR, "i4b_decode_q931", ("unknown codeset %d, ", codeset));
- i4b_print_frame(msg_len, msg_ptr);
- msg_len = 0;
- break;
- }
-
- /* check for non-locking shifts */
-
- if(shift_flag == SHIFTED)
- {
- shift_flag = UNSHIFTED;
- codeset = old_codeset;
- }
- }
- next_l3state(cd, cd->event);
-}
-
-/*---------------------------------------------------------------------------*
- * decode and process one Q.931 codeset 0 information element
- *---------------------------------------------------------------------------*/
-int
-i4b_decode_q931_cs0_ie(int unit, call_desc_t *cd, int msg_len, u_char *msg_ptr)
-{
- int i, j;
- char *p;
-
- switch(*msg_ptr)
- {
- /* single byte IE's */
-
- case IEI_SENDCOMPL:
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_SENDCOMPL\n"));
- return(1);
- break;
-
- /* multi byte IE's */
-
- case IEI_BEARERCAP: /* bearer capability */
- switch(msg_ptr[2])
- {
- case 0x80: /* speech */
- case 0x89: /* restricted digital info */
- case 0x90: /* 3.1KHz audio */
-/* XXX */ cd->bprot = BPROT_NONE;
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_BEARERCAP - Telephony\n"));
- break;
-
- case 0x88: /* unrestricted digital info */
-/* XXX */ cd->bprot = BPROT_RHDLC;
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_BEARERCAP - Raw HDLC\n"));
- break;
-
- default:
-/* XXX */ cd->bprot = BPROT_NONE;
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_BEARERCAP - No Protocol\n"));
- break;
- }
- break;
-
- case IEI_CAUSE: /* cause */
- if(msg_ptr[2] & 0x80)
- {
- cd->cause_in = msg_ptr[3] & 0x7f;
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_CAUSE = %d\n", msg_ptr[3] & 0x7f));
- }
- else
- {
- cd->cause_in = msg_ptr[4] & 0x7f;
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_CAUSE = %d\n", msg_ptr[4] & 0x7f));
- }
- break;
-
- case IEI_CHANNELID: /* channel id */
- if((msg_ptr[2] & 0xf4) != 0x80)
- {
- cd->channelid = CHAN_NO;
- DBGL3(L3_P_ERR, "i4b_decode_q931_codeset0", ("IEI_CHANNELID, unsupported value 0x%x\n", msg_ptr[2]));
- }
- else
- {
- switch(msg_ptr[2] & 0x03)
- {
- case IE_CHAN_ID_NO:
- cd->channelid = CHAN_NO;
- break;
- case IE_CHAN_ID_B1:
- cd->channelid = CHAN_B1;
- break;
- case IE_CHAN_ID_B2:
- cd->channelid = CHAN_B2;
- break;
- case IE_CHAN_ID_ANY:
- cd->channelid = CHAN_ANY;
- break;
- }
- cd->channelexcl = (msg_ptr[2] & 0x08) >> 3;
-
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_CHANNELID - channel %d, exclusive = %d\n", cd->channelid, cd->channelexcl));
-
- /* if this is a setup message, reserve channel */
-
- if(cd->event == EV_SETUP)
- {
- if((cd->channelid == CHAN_B1) || (cd->channelid == CHAN_B2))
- {
- if(ctrl_desc[cd->controller].bch_state[cd->channelid] == BCH_ST_FREE)
- ctrl_desc[cd->controller].bch_state[cd->channelid] = BCH_ST_RSVD;
- else
- DBGL3(L3_P_ERR, "i4b_decode_q931_codeset0", ("IE ChannelID, Channel NOT free!!\n"));
- }
- else if(cd->channelid == CHAN_NO)
- {
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IE ChannelID, SETUP with channel = No channel (CW)\n"));
- }
- else /* cd->channelid == CHAN_ANY */
- {
- DBGL3(L3_P_ERR, "i4b_decode_q931_codeset0", ("ERROR: IE ChannelID, SETUP with channel = Any channel!\n"));
- }
- }
- }
- break;
-
- case IEI_CALLINGPN: /* calling party no */
- if(msg_ptr[2] & 0x80) /* no presentation/screening indicator ? */
- {
- memcpy(cd->src_telno, &msg_ptr[3], min(TELNO_MAX, msg_ptr[1]-1));
- cd->src_telno[min(TELNO_MAX, msg_ptr[1] - 1)] = '\0';
- cd->scr_ind = SCR_NONE;
- }
- else
- {
- memcpy(cd->src_telno, &msg_ptr[4], min(TELNO_MAX, msg_ptr[1]-2));
- cd->src_telno[min(TELNO_MAX, msg_ptr[1] - 2)] = '\0';
- cd->scr_ind = (msg_ptr[3] & 0x03) + SCR_USR_NOSC;
- }
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_CALLINGPN = %s\n", cd->src_telno));
- break;
-
- case IEI_CALLEDPN: /* called party number */
- memcpy(cd->dst_telno, &msg_ptr[3], min(TELNO_MAX, msg_ptr[1]-1));
- cd->dst_telno[min(TELNO_MAX, msg_ptr [1] - 1)] = '\0';
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_CALLED = %s\n", cd->dst_telno));
- break;
-
- case IEI_CALLSTATE: /* call state */
- cd->call_state = msg_ptr[2] & 0x3f;
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_CALLSTATE = %d\n", cd->call_state));
- break;
-
- case IEI_PROGRESSI: /* progress indicator */
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_PROGRESSINDICATOR\n"));
- break;
-
- case IEI_DISPLAY: /* display */
- /* CHANGED BY <chris@medis.de> */
- memcpy(cd->display, &msg_ptr[2], min(DISPLAY_MAX, msg_ptr[1]));
- cd->display[min(DISPLAY_MAX, msg_ptr[1])] = '\0';
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_DISPLAY = %s\n", cd->display));
- break;
-
- case IEI_DATETIME: /* date/time */
- i = 2;
- j = msg_ptr[1];
- p = &(cd->datetime[0]);
- *p = '\0';
-
- for(j = msg_ptr[1]; j > 0; j--, i++)
- sprintf(p+strlen(p), "%02d", msg_ptr[i]);
-
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_DATETIME = %s\n", cd->datetime));
- break;
-
- case IEI_FACILITY: /* facility */
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_FACILITY\n"));
- if(i4b_aoc(msg_ptr, cd) > -1)
- i4b_l4_charging_ind(cd);
- break;
-
- case IEI_CONCTDNO: /* connected number */
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_CONCTDNO\n"));
- break;
-
- case IEI_NETSPCFAC: /* network specific fac */
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_NETSPCFAC\n"));
- break;
-
- case IEI_LLCOMPAT: /* low layer compat */
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_LLCOMPAT\n"));
- break;
-
- case IEI_HLCOMPAT: /* high layer compat */
- DBGL3(L3_P_MSG, "i4b_decode_q931_codeset0", ("IEI_HLCOMPAT\n"));
- break;
-
- default:
- DBGL3(L3_P_ERR, "i4b_decode_q931_codeset0", ("Unknown IE %d - ", *msg_ptr));
- i4b_print_frame(msg_ptr[1]+2, msg_ptr);
- break;
- }
- return(msg_ptr[1] + 2);
-}
-
-/*---------------------------------------------------------------------------*
- * decode and process one Q.931 codeset 0 information element
- *---------------------------------------------------------------------------*/
-void
-i4b_decode_q931_message(int unit, call_desc_t *cd, u_char message_type)
-{
- cd->event = EV_ILL;
-
- switch(message_type)
- {
- /* call establishment */
-
- case ALERT:
- cd->event = EV_ALERT;
- DBGL3(L3_PRIM, "rx ALERT", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case CALL_PROCEEDING:
- cd->event = EV_CALLPRC;
- DBGL3(L3_PRIM, "rx CALL-PROC", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case PROGRESS:
- cd->event = EV_PROGIND;
- DBGL3(L3_PRIM, "rx PROGRESS", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case SETUP:
- DBGL3(L3_PRIM, "rx SETUP", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->bprot = BPROT_NONE;
- cd->cause_in = 0;
- cd->cause_out = 0;
- cd->dst_telno[0] = '\0';
- cd->src_telno[0] = '\0';
- cd->channelid = CHAN_NO;
- cd->channelexcl = 0;
- cd->display[0] = '\0';
- cd->datetime[0] = '\0';
- cd->event = EV_SETUP;
- break;
-
- case CONNECT:
- DBGL3(L3_PRIM, "rx CONNECT", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->datetime[0] = '\0';
- cd->event = EV_CONNECT;
- break;
-
- case SETUP_ACKNOWLEDGE:
- DBGL3(L3_PRIM, "rx SETUP-ACK", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_SETUPAK;
- break;
-
- case CONNECT_ACKNOWLEDGE:
- DBGL3(L3_PRIM, "rx CONNECT-ACK", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_CONACK;
- break;
-
- /* call information */
-
- case USER_INFORMATION:
- DBGL3(L3_PRIM, "rx USER-INFO", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case SUSPEND_REJECT:
- DBGL3(L3_PRIM, "rx SUSPEND-REJ", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case RESUME_REJECT:
- DBGL3(L3_PRIM, "rx RESUME-REJ", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case HOLD:
- DBGL3(L3_PRIM, "rx HOLD", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case SUSPEND:
- DBGL3(L3_PRIM, "rx SUSPEND", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case RESUME:
- DBGL3(L3_PRIM, "rx RESUME", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case HOLD_ACKNOWLEDGE:
- DBGL3(L3_PRIM, "rx HOLD-ACK", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case SUSPEND_ACKNOWLEDGE:
- DBGL3(L3_PRIM, "rx SUSPEND-ACK", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case RESUME_ACKNOWLEDGE:
- DBGL3(L3_PRIM, "rx RESUME-ACK", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case HOLD_REJECT:
- DBGL3(L3_PRIM, "rx HOLD-REJ", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case RETRIEVE:
- DBGL3(L3_PRIM, "rx RETRIEVE", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case RETRIEVE_ACKNOWLEDGE:
- DBGL3(L3_PRIM, "rx RETRIEVE-ACK", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case RETRIEVE_REJECT:
- DBGL3(L3_PRIM, "rx RETRIEVE-REJ", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- /* call clearing */
-
- case DISCONNECT:
- DBGL3(L3_PRIM, "rx DISCONNECT", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_DISCONN;
- break;
-
- case RESTART:
- DBGL3(L3_PRIM, "rx RESTART", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case RELEASE:
- DBGL3(L3_PRIM, "rx RELEASE", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_RELEASE;
- break;
-
- case RESTART_ACKNOWLEDGE:
- DBGL3(L3_PRIM, "rx RESTART-ACK", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case RELEASE_COMPLETE:
- DBGL3(L3_PRIM, "rx RELEASE-COMPLETE", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_RELCOMP;
- break;
-
- /* misc messages */
-
- case SEGMENT:
- DBGL3(L3_PRIM, "rx SEGMENT", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case FACILITY:
- DBGL3(L3_PRIM, "rx FACILITY", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_FACILITY;
- break;
-
- case REGISTER:
- DBGL3(L3_PRIM, "rx REGISTER", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case NOTIFY:
- DBGL3(L3_PRIM, "rx NOTIFY", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case STATUS_ENQUIRY:
- DBGL3(L3_PRIM, "rx STATUS-ENQ", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_STATENQ;
- break;
-
- case CONGESTION_CONTROL:
- DBGL3(L3_PRIM, "rx CONGESTION-CONTROL", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- break;
-
- case INFORMATION:
- DBGL3(L3_PRIM, "rx INFORMATION", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_INFO;
- break;
-
- case STATUS:
- DBGL3(L3_PRIM, "rx STATUS", ("unit %d, cr = 0x%02x\n", unit, cd->cr));
- cd->event = EV_STATUS;
- break;
-
- default:
- DBGL3(L3_P_ERR, "rx UNKNOWN msg", ("unit %d, cr = 0x%02x, msg = 0x%02x\n", unit, cd->cr, message_type));
- break;
- }
-}
-
-#endif /* NI4BQ931 > 0 */
diff --git a/sys/i4b/layer3/i4b_q931.h b/sys/i4b/layer3/i4b_q931.h
deleted file mode 100644
index cb916b045fd0a..0000000000000
--- a/sys/i4b/layer3/i4b_q931.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_q931.h - Q931 handling header file
- * --------------------------------------
- *
- * $Id: i4b_q931.h,v 1.5 1998/12/05 18:05:39 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:33:53 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_Q931_H_
-#define _I4B_Q931_H_
-
-/* extension bit */
-
-#define EXT_LAST 0x80 /* last octett */
-
-/* reserve space in mbuf */
-
-#define I_FRAME_HDRLEN 4 /* to be added by layer 2 */
-
-/* SHIFT */
-
-#define CODESET_MASK 0x07
-#define UNSHIFTED 0
-#define SHIFTED 1
-#define CRLENGTH_MASK 0x0f
-
-/* CONNECT */
-
-#define MSG_CONNECT_LEN 4 /* length of a connect message */
-
-/* DISCONNECT */
-
-#define MSG_DISCONNECT_LEN 8 /* length of a disconnect message */
-
-/* RELEASE COMPLETE */
-
-#define MSG_RELEASE_COMPLETE_LEN 8 /* length of release complete msg */
-
-/* for outgoing causes */
-
-#define CAUSE_LEN 2
-#define CAUSE_STD_LOC_OUT 0x80 /* std = CCITT, loc = user */
-
-/* SETUP */
-
-#define MSG_SETUP_LEN 18 /* without number strings ! */
-
-#define IEI_BEARERCAP_LEN 2 /* 2 octetts lenght */
-
-#define IT_CAP_SPEECH 0x80 /* BC: information xfer capability */
-#define IT_CAP_UNR_DIG_INFO 0x88 /* BC: information xfer capability */
-
-#define IT_RATE_64K 0x90 /* BC: information xfer rate */
-#define IT_UL1_G711A 0xa3 /* layer1 proto G.711 A-law */
-
-#define IEI_CHANNELID_LEN 0x01 /* length of channel id */
-#define CHANNELID_B1 0x81 /* channel = B1 (outgoing) */
-#define CHANNELID_B2 0x82 /* channel = B2 (outgoing) */
-#define CHANNELID_ANY 0x83 /* channel = any channel (outgoing) */
-
-#define IE_CHAN_ID_NO 0x00 /* no channel (incoming) */
-#define IE_CHAN_ID_B1 0x01 /* B1 channel (incoming) */
-#define IE_CHAN_ID_B2 0x02 /* B2 channel (incoming) */
-#define IE_CHAN_ID_ANY 0x03 /* ANY channel (incoming) */
-
-#define NUMBER_TYPEPLAN 0x81 /* type of number/numbering plan */
-
-#define IEI_CALLINGPN_LEN 1 /* without number string ! */
-
-#define IEI_CALLEDPN_LEN 1 /* without number string ! */
-
-/* CONNECT_ACK */
-
-#define MSG_CONNECT_ACK_LEN 4 /* length of a connect ack message */
-
-/* STATUS */
-
-#define MSG_STATUS_LEN 11
-#define CALLSTATE_LEN 1
-
-/* RELEASE */
-
-#define MSG_RELEASE_LEN 8 /* length of release msg */
-
-/* ALERT */
-
-#define MSG_ALERT_LEN 4 /* length of a alert message */
-
-#endif /* _I4B_Q931_H_ */
diff --git a/sys/i4b/layer3/i4b_q932fac.c b/sys/i4b/layer3/i4b_q932fac.c
deleted file mode 100644
index 487ce004c144c..0000000000000
--- a/sys/i4b/layer3/i4b_q932fac.c
+++ /dev/null
@@ -1,569 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_q932fac.c - Q932 facility handling
- * --------------------------------------
- *
- * $Id: i4b_q932fac.c,v 1.5 1998/12/05 18:05:41 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:34:11 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq931.h"
-#else
-#define NI4BQ931 1
-#endif
-#if NI4BQ931 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer3/i4b_l3.h>
-#include <i4b/layer3/i4b_l3fsm.h>
-#include <i4b/layer3/i4b_q931.h>
-#include <i4b/layer3/i4b_q932fac.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-static int do_component(int length);
-static void next_state(int class, int form, int code, int val);
-
-static int byte_len;
-static unsigned char *byte_buf;
-static int state;
-
-static int units;
-static int operation_value;
-
-/*---------------------------------------------------------------------------*
- * decode Q.931/Q.932 facility info element
- *---------------------------------------------------------------------------*/
-int
-i4b_aoc(unsigned char *buf, call_desc_t *cd)
-{
- int len;
-
- cd->units_type = CHARGE_INVALID;
- cd->units = -1;
-
- buf++; /* length */
-
- len = *buf;
-
- buf++; /* protocol profile */
-
- switch(*buf & 0x1f)
- {
- case FAC_PROTO_ROP:
- break;
-
- case FAC_PROTO_CMIP:
- DBGL3(L3_A_MSG, "i4b_facility", ("CMIP Protocol (Q.941), UNSUPPORTED\n"));
- return(-1);
- break;
-
- case FAC_PROTO_ACSE:
- DBGL3(L3_A_MSG, "i4b_facility", ("ACSE Protocol (X.217/X.227), UNSUPPORTED!\n"));
- return(-1);
- break;
-
- default:
- DBGL3(L3_A_ERR, "i4b_facility", ("Unknown Protocol, UNSUPPORTED!\n"));
- return(-1);
- break;
- }
-
- DBGL3(L3_A_MSG, "i4b_facility", ("Remote Operations Protocol\n"));
-
- /* next byte */
-
- buf++;
- len--;
-
- /* initialize variables for do_component */
-
- byte_len = 0;
- byte_buf = buf;
- state = ST_EXP_COMP_TYP;
-
- /* decode facility */
-
- do_component(len);
-
- switch(operation_value)
- {
- case FAC_OPVAL_AOC_D_CUR:
- cd->units_type = CHARGE_AOCD;
- cd->units = 0;
- return(0);
- break;
-
- case FAC_OPVAL_AOC_D_UNIT:
- cd->units_type = CHARGE_AOCD;
- cd->units = units;
- return(0);
- break;
-
- case FAC_OPVAL_AOC_E_CUR:
- cd->units_type = CHARGE_AOCE;
- cd->units = 0;
- return(0);
- break;
-
- case FAC_OPVAL_AOC_E_UNIT:
- cd->units_type = CHARGE_AOCE;
- cd->units = units;
- return(0);
- break;
-
- default:
- cd->units_type = CHARGE_INVALID;
- cd->units = -1;
- return(-1);
- break;
- }
- return(-1);
-}
-
-/*---------------------------------------------------------------------------*
- * handle a component recursively
- *---------------------------------------------------------------------------*/
-static int
-do_component(int length)
-{
- int comp_tag_class; /* component tag class */
- int comp_tag_form; /* component form: constructor or primitive */
- int comp_tag_code; /* component code depending on class */
- int comp_length = 0; /* component length */
-
-again:
-
- /*----------------------------------------*/
- /* first component element: component tag */
- /*----------------------------------------*/
-
- /* tag class bits */
-
- comp_tag_class = (*byte_buf & 0xc0) >> 6;
-
- switch(comp_tag_class)
- {
- case FAC_TAGCLASS_UNI:
- break;
- case FAC_TAGCLASS_APW:
- break;
- case FAC_TAGCLASS_COS:
- break;
- case FAC_TAGCLASS_PRU:
- break;
- }
-
- /* tag form bit */
-
- comp_tag_form = (*byte_buf & 0x20) > 5;
-
- /* tag code bits */
-
- comp_tag_code = *byte_buf & 0x1f;
-
- if(comp_tag_code == 0x1f)
- {
- comp_tag_code = 0;
-
- byte_buf++;
- byte_len++;
-
- while(*byte_buf & 0x80)
- {
- comp_tag_code += (*byte_buf & 0x7f);
- byte_buf++;
- byte_len++;
- }
- comp_tag_code += (*byte_buf & 0x7f);
- }
- else
- {
- comp_tag_code = (*byte_buf & 0x1f);
- }
-
- byte_buf++;
- byte_len++;
-
- /*--------------------------------------------*/
- /* second component element: component length */
- /*--------------------------------------------*/
-
- comp_length = 0;
-
- if(*byte_buf & 0x80)
- {
- int i = *byte_buf & 0x7f;
-
- byte_len += i;
-
- for(;i > 0;i++)
- {
- byte_buf++;
- comp_length += (*byte_buf * (i*256));
- }
- }
- else
- {
- comp_length = *byte_buf & 0x7f;
- }
-
- next_state(comp_tag_class, comp_tag_form, comp_tag_code, -1);
-
- byte_len++;
- byte_buf++;
-
- /*---------------------------------------------*/
- /* third component element: component contents */
- /*---------------------------------------------*/
-
- if(comp_tag_form) /* == constructor */
- {
- do_component(comp_length);
- }
- else
- {
- int val = 0;
- if(comp_tag_class == FAC_TAGCLASS_UNI)
- {
- switch(comp_tag_code)
- {
- case FAC_CODEUNI_INT:
- case FAC_CODEUNI_ENUM:
- case FAC_CODEUNI_BOOL:
- if(comp_length)
- {
- int i;
-
- for(i = comp_length-1; i >= 0; i--)
- {
- val += (*byte_buf + (i*255));
- byte_buf++;
- byte_len++;
- }
- }
- break;
- default:
- if(comp_length)
- {
- int i;
-
- for(i = comp_length-1; i >= 0; i--)
- {
- byte_buf++;
- byte_len++;
- }
- }
- break;
- }
- }
-
- else /* comp_tag_class != FAC_TAGCLASS_UNI */
- {
- if(comp_length)
- {
- int i;
-
- for(i = comp_length-1; i >= 0; i--)
- {
- val += (*byte_buf + (i*255));
- byte_buf++;
- byte_len++;
- }
- }
- }
- next_state(comp_tag_class, comp_tag_form, comp_tag_code, val);
- }
-
- if(byte_len < length)
- goto again;
-
- return(byte_len);
-}
-
-/*---------------------------------------------------------------------------*
- * invoke component
- *---------------------------------------------------------------------------*/
-static void
-F_1_1(int val)
-{
- if(val == -1)
- {
- state = ST_EXP_INV_ID;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * return result
- *---------------------------------------------------------------------------*/
-static void
-F_1_2(int val)
-{
- if(val == -1)
- state = ST_EXP_NIX;
-}
-/*---------------------------------------------------------------------------*
- * return error
- *---------------------------------------------------------------------------*/
-static void
-F_1_3(int val)
-{
- if(val == -1)
- state = ST_EXP_NIX;
-}
-/*---------------------------------------------------------------------------*
- * reject
- *---------------------------------------------------------------------------*/
-static void
-F_1_4(int val)
-{
- if(val == -1)
- state = ST_EXP_NIX;
-}
-
-/*---------------------------------------------------------------------------*
- * invoke id
- *---------------------------------------------------------------------------*/
-static void
-F_2(int val)
-{
- if(val != -1)
- {
- DBGL3(L3_A_MSG, "i4b_facility", ("Invoke ID = %d\n", val));
- state = ST_EXP_OP_VAL;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * operation value
- *---------------------------------------------------------------------------*/
-static void
-F_3(int val)
-{
- if(val != -1)
- {
- DBGL3(L3_A_MSG, "i4b_facility", ("Operation Value = %d\n", val));
-
- operation_value = val;
-
- if((val == FAC_OPVAL_AOC_D_UNIT) || (val == FAC_OPVAL_AOC_E_UNIT))
- {
- units = 0;
- state = ST_EXP_INFO;
- }
- else
- {
- state = ST_EXP_NIX;
- }
- }
-}
-
-/*---------------------------------------------------------------------------*
- * specific charging units
- *---------------------------------------------------------------------------*/
-static void
-F_4(int val)
-{
- if(val == -1)
- state = ST_EXP_RUL;
-}
-
-/*---------------------------------------------------------------------------*
- * free of charge
- *---------------------------------------------------------------------------*/
-static void
-F_4_1(int val)
-{
- if(val == -1)
- {
- DBGL3(L3_A_MSG, "i4b_facility", ("Free of Charge\n"));
- /* units = 0; XXXX */
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * charge not available
- *---------------------------------------------------------------------------*/
-static void
-F_4_2(int val)
-{
- if(val == -1)
- {
- DBGL3(L3_A_MSG, "i4b_facility", ("Charge not available\n"));
- /* units = -1; XXXXXX ??? */
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * recorded units list
- *---------------------------------------------------------------------------*/
-static void
-F_5(int val)
-{
- if(val == -1)
- state = ST_EXP_RU;
-}
-
-/*---------------------------------------------------------------------------*
- * recorded units
- *---------------------------------------------------------------------------*/
-static void
-F_6(int val)
-{
- if(val == -1)
- state = ST_EXP_RNOU;
-}
-
-/*---------------------------------------------------------------------------*
- * number of units
- *---------------------------------------------------------------------------*/
-static void
-F_7(int val)
-{
- if(val != -1)
- {
- DBGL3(L3_A_MSG, "i4b_facility", ("Number of Units = %d\n", val));
- units = val;
- state = ST_EXP_TOCI;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * subtotal/total
- *---------------------------------------------------------------------------*/
-static void
-F_8(int val)
-{
- if(val != -1)
- {
- DBGL3(L3_A_MSG, "i4b_facility", ("Subtotal/Total = %d\n", val));
- /* type_of_charge = val; */
- state = ST_EXP_DBID;
- }
-}
-
-/*---------------------------------------------------------------------------*
- * billing_id
- *---------------------------------------------------------------------------*/
-static void
-F_9(int val)
-{
- if(val != -1)
- {
- DBGL3(L3_A_MSG, "i4b_facility", ("Billing ID = %d\n", val));
- /* billing_id = val; */
- state = ST_EXP_NIX;
- }
-}
-
-/*---------------------------------------------------------------------------*
- *
- *---------------------------------------------------------------------------*/
-static struct statetab {
- int currstate; /* input: current state we are in */
- int form; /* input: current tag form */
- int class; /* input: current tag class */
- int code; /* input: current tag code */
- void (*func)(int); /* output: func to exec */
-} statetab[] = {
-
-/* current state tag form tag class tag code function */
-/* --------------------- ---------------------- ---------------------- ---------------------- ----------------*/
- {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 1, F_1_1 },
- {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 2, F_1_2 },
- {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 3, F_1_3 },
- {ST_EXP_COMP_TYP, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 4, F_1_4 },
- {ST_EXP_INV_ID, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_2 },
- {ST_EXP_OP_VAL, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_3 },
- {ST_EXP_INFO, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SEQ, F_4 },
- {ST_EXP_INFO, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_NULL, F_4_1 },
- {ST_EXP_INFO, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 1, F_4_2 },
- {ST_EXP_RUL, FAC_TAGFORM_CON, FAC_TAGCLASS_COS, 1, F_5 },
- {ST_EXP_RU, FAC_TAGFORM_CON, FAC_TAGCLASS_UNI, FAC_CODEUNI_SEQ, F_6 },
- {ST_EXP_RNOU, FAC_TAGFORM_PRI, FAC_TAGCLASS_UNI, FAC_CODEUNI_INT, F_7 },
- {ST_EXP_TOCI, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 2, F_8 },
- {ST_EXP_DBID, FAC_TAGFORM_PRI, FAC_TAGCLASS_COS, 3, F_9 },
- {-1, -1, -1, -1, NULL }
-};
-
-/*---------------------------------------------------------------------------*
- * state decode for do_component
- *---------------------------------------------------------------------------*/
-static void
-next_state(int class, int form, int code, int val)
-{
- int i;
-
- for(i=0; ; i++)
- {
- if((statetab[i].currstate > state) ||
- (statetab[i].currstate == -1))
- {
- break;
- }
-
- if((statetab[i].currstate == state) &&
- (statetab[i].form == form) &&
- (statetab[i].class == class) &&
- (statetab[i].code == code))
- {
- (*statetab[i].func)(val);
- break;
- }
- }
-}
-
-#endif /* NI4BQ931 > 0 */
diff --git a/sys/i4b/layer3/i4b_q932fac.h b/sys/i4b/layer3/i4b_q932fac.h
deleted file mode 100644
index d7544a86e0202..0000000000000
--- a/sys/i4b/layer3/i4b_q932fac.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_q932fac.h - Q932 facility handling header file
- * --------------------------------------------------
- *
- * $Id: i4b_q932fac.h,v 1.5 1998/12/18 17:17:57 hm Exp $
- *
- * last edit-date: [Fri Dec 18 18:17:23 1998]
- *
- *---------------------------------------------------------------------------
- *
- * - Q.932 (03/93) Generic Procedures for the Control of
- * ISDN Supplementaty Services
- * - Q.950 (03/93) Supplementary Services Protocols, Structure and
- * General Principles
- * - ETS 300 179 (10/92) Advice Of Charge: charging information during
- * the call (AOC-D) supplementary service Service description
- * - ETS 300 180 (10/92) Advice Of Charge: charging information at the
- * end of call (AOC-E) supplementary service Service description
- * - ETS 300 181 (04/93) Advice Of Charge (AOC) supplementary service
- * Functional capabilities and information flows
- * - ETS 300 182 (04/93) Advice Of Charge (AOC) supplementary service
- * Digital Subscriber Signalling System No. one (DSS1) protocol
- * - X.208 Specification of Abstract Syntax Notation One (ASN.1)
- * - X.209 Specification of Basic Encoding Rules for
- * Abstract Syntax Notation One (ASN.1)
- * - "ASN.1 Abstract Syntax Notation One", Walter Gora, DATACOM-Verlag
- * 1992, 3rd Edition (ISBN 3-89238-062-7) (german !)
- *
- *---------------------------------------------------------------------------*/
-
-/* protocols */
-#define FAC_PROTO_ROP 0x11
-#define FAC_PROTO_CMIP 0x12
-#define FAC_PROTO_ACSE 0x13
-
-/* tag classes */
-#define FAC_TAGCLASS_UNI 0x00
-#define FAC_TAGCLASS_APW 0x01
-#define FAC_TAGCLASS_COS 0x02
-#define FAC_TAGCLASS_PRU 0x03
-
-/* tag forms */
-#define FAC_TAGFORM_PRI 0x00
-#define FAC_TAGFORM_CON 0x01
-
-/* class UNIVERSAL values */
-#define FAC_CODEUNI_BOOL 1
-#define FAC_CODEUNI_INT 2
-#define FAC_CODEUNI_BITS 3
-#define FAC_CODEUNI_OCTS 4
-#define FAC_CODEUNI_NULL 5
-#define FAC_CODEUNI_OBJI 6
-#define FAC_CODEUNI_OBJD 7
-#define FAC_CODEUNI_EXT 8
-#define FAC_CODEUNI_REAL 9
-#define FAC_CODEUNI_ENUM 10
-#define FAC_CODEUNI_R11 11
-#define FAC_CODEUNI_R12 12
-#define FAC_CODEUNI_R13 13
-#define FAC_CODEUNI_R14 14
-#define FAC_CODEUNI_R15 15
-#define FAC_CODEUNI_SEQ 16
-#define FAC_CODEUNI_SET 17
-#define FAC_CODEUNI_NSTR 18
-#define FAC_CODEUNI_PSTR 19
-#define FAC_CODEUNI_TSTR 20
-#define FAC_CODEUNI_VSTR 21
-#define FAC_CODEUNI_ISTR 22
-#define FAC_CODEUNI_UTIME 23
-#define FAC_CODEUNI_GTIME 24
-#define FAC_CODEUNI_GSTR 25
-#define FAC_CODEUNI_VISTR 26
-#define FAC_CODEUNI_GNSTR 27
-
-/* operation values */
-#define FAC_OPVAL_UUS 1
-#define FAC_OPVAL_CUG 2
-#define FAC_OPVAL_MCID 3
-#define FAC_OPVAL_BTPY 4
-#define FAC_OPVAL_ETPY 5
-#define FAC_OPVAL_ECT 6
-
-#define FAC_OPVAL_DIV_ACT 7
-#define FAC_OPVAL_DIV_DEACT 8
-#define FAC_OPVAL_DIV_ACTSN 9
-#define FAC_OPVAL_DIV_DEACTSN 10
-#define FAC_OPVAL_DIV_INTER 11
-#define FAC_OPVAL_DIV_INFO 12
-#define FAC_OPVAL_DIV_CALLDEF 13
-#define FAC_OPVAL_DIV_CALLRER 14
-#define FAC_OPVAL_DIV_LINF2 15
-#define FAC_OPVAL_DIV_INVS 16
-#define FAC_OPVAL_DIV_INTER1 17
-#define FAC_OPVAL_DIV_LINF1 18
-#define FAC_OPVAL_DIV_LINF3 19
-
-#define FAC_OPVAL_ER_CRCO 20
-#define FAC_OPVAL_ER_MGMT 21
-#define FAC_OPVAL_ER_CANC 22
-
-#define FAC_OPVAL_MLPP_QUERY 24
-#define FAC_OPVAL_MLPP_CALLR 25
-#define FAC_OPVAL_MLPP_CALLP 26
-
-#define FAC_OPVAL_AOC_REQ 30
-#define FAC_OPVAL_AOC_S_CUR 31
-#define FAC_OPVAL_AOC_S_SPC 32
-#define FAC_OPVAL_AOC_D_CUR 33
-#define FAC_OPVAL_AOC_D_UNIT 34
-#define FAC_OPVAL_AOC_E_CUR 35
-#define FAC_OPVAL_AOC_E_UNIT 36
-#define FAC_OPVAL_AOC_IDOFCRG 37
-
-#define FAC_OPVAL_CONF_BEG 40
-#define FAC_OPVAL_CONF_ADD 41
-#define FAC_OPVAL_CONF_SPLIT 42
-#define FAC_OPVAL_CONF_DROP 43
-#define FAC_OPVAL_CONF_ISOLATE 44
-#define FAC_OPVAL_CONF_REATT 45
-#define FAC_OPVAL_CONF_PDISC 46
-#define FAC_OPVAL_CONF_FCONF 47
-#define FAC_OPVAL_CONF_END 48
-#define FAC_OPVAL_CONF_IDCFE 49
-
-#define FAC_OPVAL_REVC_REQ 60
-
-enum states {
- ST_EXP_COMP_TYP,
- ST_EXP_INV_ID,
- ST_EXP_OP_VAL,
- ST_EXP_INFO,
- ST_EXP_RUL,
- ST_EXP_RU,
- ST_EXP_RNOU,
- ST_EXP_TOCI,
- ST_EXP_DBID,
-
- ST_EXP_NIX
-};
-
-/* EOF */
-
diff --git a/sys/i4b/layer4/i4b_i4bdrv.c b/sys/i4b/layer4/i4b_i4bdrv.c
deleted file mode 100644
index e48d993496a0b..0000000000000
--- a/sys/i4b/layer4/i4b_i4bdrv.c
+++ /dev/null
@@ -1,832 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_i4bdrv.c - i4b userland interface driver
- * --------------------------------------------
- *
- * $Id: i4b_i4bdrv.c,v 1.1 1998/12/27 21:46:52 phk Exp $
- *
- * last edit-date: [Sat Dec 5 18:35:02 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4b.h"
-#include "i4bipr.h"
-
-#if NI4B > 1
-#error "only 1 (one) i4b device possible!"
-#endif
-
-#if NI4B > 0
-
-#include <sys/param.h>
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-#include <sys/ioccom.h>
-#include <sys/malloc.h>
-#include <sys/uio.h>
-#else
-#include <sys/ioctl.h>
-#endif
-
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/mbuf.h>
-#include <sys/proc.h>
-#include <sys/fcntl.h>
-#include <sys/socket.h>
-#include <sys/select.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include "opt_devfs.h"
-#endif
-
-#ifdef DEVFS
-#include <sys/devfsext.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_cause.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_cause.h>
-#endif
-
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-#if defined(__FreeBSD__) && (!defined(__FreeBSD_version) || __FreeBSD_version < 300001)
-/* do nothing */
-#else
-#include <sys/poll.h>
-#endif
-
-struct selinfo select_rd_info;
-
-static struct ifqueue i4b_rdqueue;
-static int openflag = 0;
-static int selflag = 0;
-static int readflag = 0;
-#ifdef DEVFS
-static void *devfs_token;
-#endif
-
-#ifndef __FreeBSD__
-#define PDEVSTATIC /* - not static - */
-PDEVSTATIC void i4battach __P((void));
-PDEVSTATIC int i4bopen __P((dev_t dev, int flag, int fmt, struct proc *p));
-PDEVSTATIC int i4bclose __P((dev_t dev, int flag, int fmt, struct proc *p));
-PDEVSTATIC int i4bread __P((dev_t dev, struct uio *uio, int ioflag));
-PDEVSTATIC int i4bioctl __P((dev_t dev, int cmd, caddr_t data, int flag, struct proc *p));
-PDEVSTATIC int i4bpoll __P((dev_t dev, int events, struct proc *p));
-
-#if defined (__OpenBSD__)
-PDEVSTATIC int i4bselect(dev_t dev, int rw, struct proc *p);
-#endif
-
-#endif
-
-#if BSD > 199306 && defined(__FreeBSD__)
-#define PDEVSTATIC static
-
-PDEVSTATIC d_open_t i4bopen;
-PDEVSTATIC d_close_t i4bclose;
-PDEVSTATIC d_read_t i4bread;
-PDEVSTATIC d_ioctl_t i4bioctl;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-PDEVSTATIC d_poll_t i4bpoll;
-#else
-PDEVSTATIC d_select_t i4bselect;
-#endif
-
-#define CDEV_MAJOR 60
-static struct cdevsw i4b_cdevsw =
- { i4bopen, i4bclose, i4bread, nowrite,
- i4bioctl, nostop, nullreset, nodevtotty,
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- i4bpoll, nommap, NULL, "i4b", NULL, -1 };
-#else
- i4bselect, nommap, NULL, "i4b", NULL, -1 };
-#endif
-
-PDEVSTATIC void i4battach(void *);
-PSEUDO_SET(i4battach, i4b_i4bdrv);
-
-#endif /* __FreeBSD__ */
-
-/*---------------------------------------------------------------------------*
- * interface attach routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-#ifdef __FreeBSD__
-i4battach(void *dummy)
-#else
-i4battach()
-#endif
-{
-#ifndef HACK_NO_PSEUDO_ATTACH_MSG
- printf("i4b: ISDN call control device attached\n");
-#endif
- i4b_rdqueue.ifq_maxlen = IFQ_MAXLEN;
-#ifdef DEVFS
- devfs_token = devfs_add_devswf(&i4b_cdevsw, 0, DV_CHR,
- UID_ROOT, GID_WHEEL, 0600,
- "i4b");
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * i4bopen - device driver open routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4bopen(dev_t dev, int flag, int fmt, struct proc *p)
-{
- int x;
-
- if(minor(dev))
- return(ENXIO);
-
- if(openflag)
- return(EBUSY);
-
- x = splimp();
- openflag = 1;
- i4b_l4_daemon_attached();
- splx(x);
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * i4bclose - device driver close routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4bclose(dev_t dev, int flag, int fmt, struct proc *p)
-{
- int x = splimp();
- openflag = 0;
- i4b_l4_daemon_detached();
- i4b_Dcleanifq(&i4b_rdqueue);
- splx(x);
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * i4bread - device driver read routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4bread(dev_t dev, struct uio *uio, int ioflag)
-{
- struct mbuf *m;
- int x;
- int error = 0;
-
- if(minor(dev))
- return(ENODEV);
-
- while(IF_QEMPTY(&i4b_rdqueue))
- {
- x = splimp();
- readflag = 1;
- splx(x);
- tsleep((caddr_t) &i4b_rdqueue, (PZERO + 1) | PCATCH, "bird", 0);
- }
-
- x = splimp();
-
- IF_DEQUEUE(&i4b_rdqueue, m);
-
- splx(x);
-
- if(m && m->m_len)
- error = uiomove(m->m_data, m->m_len, uio);
- else
- error = EIO;
-
- if(m)
- i4b_Dfreembuf(m);
-
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * i4bioctl - device driver ioctl routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-#if defined (__FreeBSD_version) && __FreeBSD_version >= 300003
-i4bioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
-#else
-i4bioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
-#endif
-{
- call_desc_t *cd;
- int error = 0;
-
- if(minor(dev))
- return(ENODEV);
-
- switch(cmd)
- {
- /* cdid request, reserve cd and return cdid */
-
- case I4B_CDID_REQ:
- {
- msg_cdid_req_t *mir;
- mir = (msg_cdid_req_t *)data;
- cd = reserve_cd();
- mir->cdid = cd->cdid;
- break;
- }
-
- /* connect request, dial out to remote */
-
- case I4B_CONNECT_REQ:
- {
- msg_connect_req_t *mcr;
- mcr = (msg_connect_req_t *)data; /* setup ptr */
-
- if((cd = cd_by_cdid(mcr->cdid)) == NULL)/* get cd */
- {
- DBGL4(L4_ERR, "i4bioctl", ("I4B_CONNECT_REQ ioctl, cdid not found!\n"));
- error = EINVAL;
- break;
- }
-
- cd->controller = mcr->controller; /* fill cd */
- cd->bprot = mcr->bprot;
- cd->driver = mcr->driver;
- cd->driver_unit = mcr->driver_unit;
- cd->cr = get_rand_cr(ctrl_desc[cd->controller].unit);
-
- cd->unitlen_time = mcr->unitlen_time;
- cd->idle_time = mcr->idle_time;
- cd->earlyhup_time = mcr->earlyhup_time;
-
- cd->last_aocd_time = 0;
- if(mcr->unitlen_method == ULEN_METHOD_DYNAMIC)
- cd->aocd_flag = 1;
- else
- cd->aocd_flag = 0;
-
- cd->cunits = 0;
-
- cd->max_idle_time = 0; /* this is outgoing */
-
- cd->dir = DIR_OUTGOING;
-
- DBGL4(L4_TIMO, "i4bioctl", ("I4B_CONNECT_REQ times, unitlen=%ld idle=%ld earlyhup=%ld\n",
- (long)cd->unitlen_time, (long)cd->idle_time, (long)cd->earlyhup_time));
-
- strcpy(cd->dst_telno, mcr->dst_telno);
- strcpy(cd->src_telno, mcr->src_telno);
- cd->display[0] = '\0';
-
- SET_CAUSE_TYPE(cd->cause_in, CAUSET_I4B);
- SET_CAUSE_VAL(cd->cause_in, CAUSE_I4B_NORMAL);
-
- switch(mcr->channel)
- {
- case CHAN_B1:
- case CHAN_B2:
- if(ctrl_desc[mcr->controller].bch_state[mcr->channel] != BCH_ST_FREE)
- SET_CAUSE_VAL(cd->cause_in, CAUSE_I4B_NOCHAN);
- break;
-
- case CHAN_ANY:
- if((ctrl_desc[mcr->controller].bch_state[CHAN_B1] != BCH_ST_FREE) &&
- (ctrl_desc[mcr->controller].bch_state[CHAN_B2] != BCH_ST_FREE))
- SET_CAUSE_VAL(cd->cause_in, CAUSE_I4B_NOCHAN);
- break;
-
- default:
- SET_CAUSE_VAL(cd->cause_in, CAUSE_I4B_NOCHAN);
- break;
- }
-
- cd->channelid = mcr->channel;
-
- cd->isdntxdelay = mcr->txdelay;
-
- /* check whether we have a pointer. Seems like */
- /* this should be adequate. GJ 19.09.97 */
- if(ctrl_desc[cd->controller].N_CONNECT_REQUEST == NULL)
-/*XXX*/ SET_CAUSE_VAL(cd->cause_in, CAUSE_I4B_NOCHAN);
-
- if((GET_CAUSE_VAL(cd->cause_in)) != CAUSE_I4B_NORMAL)
- {
- i4b_l4_disconnect_ind(cd);
- freecd_by_cd(cd);
- }
- else
- {
- (*ctrl_desc[cd->controller].N_CONNECT_REQUEST)(mcr->cdid);
- }
- break;
- }
-
- /* connect response, accept/reject/ignore incoming call */
-
- case I4B_CONNECT_RESP:
- {
- msg_connect_resp_t *mcrsp;
-
- mcrsp = (msg_connect_resp_t *)data;
-
- if((cd = cd_by_cdid(mcrsp->cdid)) == NULL)/* get cd */
- {
- DBGL4(L4_ERR, "i4bioctl", ("I4B_CONNECT_RESP ioctl, cdid not found!\n"));
- error = EINVAL;
- break;
- }
-
- T400_stop(cd);
-
- cd->driver = mcrsp->driver;
- cd->driver_unit = mcrsp->driver_unit;
- cd->max_idle_time = mcrsp->max_idle_time;
-
- cd->unitlen_time = 0; /* this is incoming */
- cd->idle_time = 0;
- cd->earlyhup_time = 0;
-
- cd->isdntxdelay = mcrsp->txdelay;
-
- DBGL4(L4_TIMO, "i4bioctl", ("I4B_CONNECT_RESP max_idle_time set to %ld seconds\n", (long)cd->max_idle_time));
-
- (*ctrl_desc[cd->controller].N_CONNECT_RESPONSE)(mcrsp->cdid, mcrsp->response, mcrsp->cause);
- break;
- }
-
- /* disconnect request, actively terminate connection */
-
- case I4B_DISCONNECT_REQ:
- {
- msg_discon_req_t *mdr;
-
- mdr = (msg_discon_req_t *)data;
-
- if((cd = cd_by_cdid(mdr->cdid)) == NULL)/* get cd */
- {
- DBGL4(L4_ERR, "i4bioctl", ("I4B_DISCONNECT_REQ ioctl, cdid not found!\n"));
- error = EINVAL;
- break;
- }
-
- /* preset causes with our cause */
- cd->cause_in = cd->cause_out = mdr->cause;
-
- (*ctrl_desc[cd->controller].N_DISCONNECT_REQUEST)(mdr->cdid, mdr->cause);
- break;
- }
-
- /* controller info request */
-
- case I4B_CTRL_INFO_REQ:
- {
- msg_ctrl_info_req_t *mcir;
-
- mcir = (msg_ctrl_info_req_t *)data;
- mcir->ncontroller = nctrl;
-
- if(mcir->controller > nctrl)
- {
- mcir->ctrl_type = -1;
- mcir->card_type = -1;
- }
- else
- {
- mcir->ctrl_type =
- ctrl_desc[mcir->controller].ctrl_type;
- mcir->card_type =
- ctrl_desc[mcir->controller].card_type;
-
- if(ctrl_desc[mcir->controller].ctrl_type == CTRL_PASSIVE)
- mcir->tei = ctrl_desc[mcir->controller].tei;
- else
- mcir->tei = -1;
- }
- break;
- }
-
- /* dial response */
-
- case I4B_DIALOUT_RESP:
- {
- msg_dialout_resp_t *mdrsp;
-
- mdrsp = (msg_dialout_resp_t *)data;
-
-#if NI4BIPR > 0
- if(mdrsp->driver == BDRV_IPR)
- {
- drvr_link_t *dlt;
- dlt = ipr_ret_linktab(mdrsp->driver_unit);
- (*dlt->dial_response)(mdrsp->driver_unit, mdrsp->stat);
- }
-#endif
- break;
- }
-
- /* update timeout value */
-
- case I4B_TIMEOUT_UPD:
- {
- msg_timeout_upd_t *mtu;
- int x;
-
- mtu = (msg_timeout_upd_t *)data;
-
- if((cd = cd_by_cdid(mtu->cdid)) == NULL)/* get cd */
- {
- DBGL4(L4_ERR, "i4bioctl", ("I4B_TIMEOUT_UPD ioctl, cdid not found!\n"));
- error = EINVAL;
- break;
- }
-
- x = SPLI4B();
- cd->unitlen_time = mtu->unitlen_time;
- cd->idle_time = mtu->idle_time;
- cd->earlyhup_time = mtu->earlyhup_time;
- splx(x);
- break;
- }
-
- /* soft enable/disable interface */
-
- case I4B_UPDOWN_IND:
- {
- msg_updown_ind_t *mui;
-
- mui = (msg_updown_ind_t *)data;
-
-#if NI4BIPR > 0
- if(mui->driver == BDRV_IPR)
- {
- drvr_link_t *dlt;
- dlt = ipr_ret_linktab(mui->driver_unit);
- (*dlt->updown_ind)(mui->driver_unit, mui->updown);
- }
-#endif
- break;
- }
-
- /* send ALERT request */
-
- case I4B_ALERT_REQ:
- {
- msg_alert_req_t *mar;
-
- mar = (msg_alert_req_t *)data;
-
- if((cd = cd_by_cdid(mar->cdid)) == NULL)
- {
- DBGL4(L4_ERR, "i4bioctl", ("I4B_ALERT_REQ ioctl, cdid not found!\n"));
- error = EINVAL;
- break;
- }
-
- T400_stop(cd);
-
- (*ctrl_desc[cd->controller].N_ALERT_REQUEST)(mar->cdid);
-
- break;
- }
-
- /* version/release number request */
-
- case I4B_VR_REQ:
- {
- msg_vr_req_t *mvr;
-
- mvr = (msg_vr_req_t *)data;
-
- mvr->version = VERSION;
- mvr->release = REL;
- mvr->step = STEP;
- break;
- }
-
- /* Download request */
-
- case I4B_CTRL_DOWNLOAD:
- {
- struct isdn_dr_prot *prots = NULL, *prots2 = NULL;
- struct isdn_download_request *r =
- (struct isdn_download_request*)data;
- int i;
-
- if(!ctrl_desc[r->controller].N_DOWNLOAD)
- {
- error = ENODEV;
- goto download_done;
- }
-
- prots = malloc(r->numprotos * sizeof(struct isdn_dr_prot),
- M_DEVBUF, M_WAITOK);
-
- prots2 = malloc(r->numprotos * sizeof(struct isdn_dr_prot),
- M_DEVBUF, M_WAITOK);
-
- if(!prots || !prots2)
- {
- error = ENOMEM;
- goto download_done;
- }
-
- copyin(r->protocols, prots, r->numprotos * sizeof(struct isdn_dr_prot));
-
- for(i = 0; i < r->numprotos; i++)
- {
- prots2[i].microcode = malloc(prots[i].bytecount, M_DEVBUF, M_WAITOK);
- copyin(prots[i].microcode, prots2[i].microcode, prots[i].bytecount);
- prots2[i].bytecount = prots[i].bytecount;
- }
-
- error = ctrl_desc[r->controller].N_DOWNLOAD(
- ctrl_desc[r->controller].unit,
- r->numprotos, prots2);
-
-download_done:
- if(prots2)
- {
- for(i = 0; i < r->numprotos; i++)
- {
- if(prots2[i].microcode)
- {
- free(prots2[i].microcode, M_DEVBUF);
- }
- }
- free(prots2, M_DEVBUF);
- }
-
- if(prots)
- {
- free(prots, M_DEVBUF);
- }
- break;
- }
-
- /* Diagnostic request */
-
- case I4B_ACTIVE_DIAGNOSTIC:
- {
- struct isdn_diagnostic_request req, *r =
- (struct isdn_diagnostic_request*)data;
-
- req.in_param = req.out_param = NULL;
-
- if(!ctrl_desc[r->controller].N_DIAGNOSTICS)
- {
- error = ENODEV;
- goto diag_done;
- }
-
- memcpy(&req, r, sizeof(req));
-
- if(req.in_param_len)
- {
- req.in_param = malloc(r->in_param_len, M_DEVBUF, M_WAITOK);
-
- if(!req.in_param)
- {
- error = ENOMEM;
- goto diag_done;
- }
- copyin(r->in_param, req.in_param, req.in_param_len);
- }
-
- if(req.out_param_len)
- {
- req.out_param = malloc(r->out_param_len, M_DEVBUF, M_WAITOK);
-
- if(!req.out_param)
- {
- error = ENOMEM;
- goto diag_done;
- }
- }
-
- error = ctrl_desc[r->controller].N_DIAGNOSTICS(r->controller, &req);
-
- if(!error && req.out_param_len)
- copyout(req.out_param, r->out_param, req.out_param_len);
-
-diag_done:
- if(req.in_param)
- free(req.in_param, M_DEVBUF);
-
- if(req.out_param)
- free(req.out_param, M_DEVBUF);
-
- break;
- }
-
- /* default */
-
- default:
- error = ENOTTY;
- break;
- }
-
- return(error);
-}
-
-#if (defined(__FreeBSD__) && \
- (!defined(__FreeBSD_version) || (__FreeBSD_version < 300001))) \
- || defined (__OpenBSD__)
-
-/*---------------------------------------------------------------------------*
- * i4bselect - device driver select routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4bselect(dev_t dev, int rw, struct proc *p)
-{
- int x;
-
- if(minor(dev))
- return(ENODEV);
-
- switch(rw)
- {
- case FREAD:
- if(!IF_QEMPTY(&i4b_rdqueue))
- return(1);
- x = splimp();
- selrecord(p, &select_rd_info);
- selflag = 1;
- splx(x);
- return(0);
- break;
-
- case FWRITE:
- return(1);
- break;
- }
- return(0);
-}
-
-#else /* NetBSD and FreeBSD -current */
-
-/*---------------------------------------------------------------------------*
- * i4bpoll - device driver poll routine
- *---------------------------------------------------------------------------*/
-PDEVSTATIC int
-i4bpoll(dev_t dev, int events, struct proc *p)
-{
- int x;
-
- if(minor(dev))
- return(ENODEV);
-
- if((events & POLLIN) || (events & POLLRDNORM))
- {
- if(!IF_QEMPTY(&i4b_rdqueue))
- return(1);
-
- x = splimp();
- selrecord(p, &select_rd_info);
- selflag = 1;
- splx(x);
- return(0);
- }
- else if((events & POLLOUT) || (events & POLLWRNORM))
- {
- return(1);
- }
-
- return(0);
-}
-
-#endif /* defined(__FreeBSD__) && __FreeBSD__ < 3 */
-
-/*---------------------------------------------------------------------------*
- * i4bputqueue - put message into queue to userland
- *---------------------------------------------------------------------------*/
-void
-i4bputqueue(struct mbuf *m)
-{
- int x;
-
- if(!openflag)
- {
- i4b_Dfreembuf(m);
- return;
- }
-
- x = splimp();
-
- if(IF_QFULL(&i4b_rdqueue))
- {
- struct mbuf *m1;
- IF_DEQUEUE(&i4b_rdqueue, m1);
- i4b_Dfreembuf(m1);
- DBGL4(L4_ERR, "i4bputqueue", ("ERROR, queue full, removing entry!\n"));
- }
-
- IF_ENQUEUE(&i4b_rdqueue, m);
-
- splx(x);
-
- if(readflag)
- {
- readflag = 0;
- wakeup((caddr_t) &i4b_rdqueue);
- }
-
- if(selflag)
- {
- selflag = 0;
- selwakeup(&select_rd_info);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * i4bputqueue_hipri - put message into front of queue to userland
- *---------------------------------------------------------------------------*/
-void
-i4bputqueue_hipri(struct mbuf *m)
-{
- int x;
-
- if(!openflag)
- {
- i4b_Dfreembuf(m);
- return;
- }
-
- x = splimp();
-
- if(IF_QFULL(&i4b_rdqueue))
- {
- struct mbuf *m1;
- IF_DEQUEUE(&i4b_rdqueue, m1);
- i4b_Dfreembuf(m1);
- DBGL4(L4_ERR, "i4bputqueue", ("ERROR, queue full, removing entry!\n"));
- }
-
- IF_PREPEND(&i4b_rdqueue, m);
-
- splx(x);
-
- if(readflag)
- {
- readflag = 0;
- wakeup((caddr_t) &i4b_rdqueue);
- }
-
- if(selflag)
- {
- selflag = 0;
- selwakeup(&select_rd_info);
- }
-}
-
-#if BSD > 199306 && defined(__FreeBSD__)
-static i4b_devsw_installed = 0;
-
-static void
-i4b_drvinit(void *unused)
-{
- dev_t dev;
-
- if( ! i4b_devsw_installed ) {
- dev = makedev(CDEV_MAJOR,0);
- cdevsw_add(&dev,&i4b_cdevsw,NULL);
- i4b_devsw_installed = 1;
- }
-}
-
-SYSINIT(i4bdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,i4b_drvinit,NULL)
-#endif /* __FreeBSD__ */
-#endif /* NI4B > 0 */
diff --git a/sys/i4b/layer4/i4b_l4.c b/sys/i4b/layer4/i4b_l4.c
deleted file mode 100644
index cecd5f4e2d665..0000000000000
--- a/sys/i4b/layer4/i4b_l4.c
+++ /dev/null
@@ -1,897 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l4.c - kernel interface to userland
- * -----------------------------------------
- *
- * $Id: i4b_l4.c,v 1.33 1998/12/05 18:05:49 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:35:16 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4b.h"
-#include "i4bipr.h"
-#include "i4bisppp.h"
-#include "i4brbch.h"
-#include "i4btel.h"
-
-#if NI4B > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/mbuf.h>
-#include <sys/proc.h>
-#include <sys/fcntl.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_cause.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_cause.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/layer3/i4b_l3.h>
-#include <i4b/layer4/i4b_l4.h>
-
-unsigned int i4b_l4_debug = L4_DEBUG_DEFAULT;
-
-struct ctrl_type_desc ctrl_types[CTRL_NUMTYPES] = { { NULL, NULL} };
-
-static int i4b_link_bchandrvr(call_desc_t *cd);
-static void i4b_unlink_bchandrvr(call_desc_t *cd);
-static void i4b_l4_setup_timeout(call_desc_t *cd);
-
-/*---------------------------------------------------------------------------*
- * send MSG_PDEACT_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_pdeact(int controller, int numactive)
-{
- struct mbuf *m;
- int i;
- call_desc_t *cd;
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if((call_desc[i].cdid != CDID_UNUSED) &&
- (ctrl_desc[call_desc[i].controller].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[call_desc[i].controller].unit == controller))
- {
- cd = &call_desc[i];
-
- if(cd->timeout_active)
- {
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
- untimeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, cd->idle_timeout_handle);
-#else
- untimeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd);
-#endif
- }
-
- if(cd->dlt != NULL)
- {
- (*cd->dlt->line_disconnected)(cd->driver_unit, (void *)cd);
- i4b_unlink_bchandrvr(cd);
- }
-
- if((cd->channelid == CHAN_B1) || (cd->channelid == CHAN_B2))
- {
- ctrl_desc[cd->controller].bch_state[cd->channelid] = BCH_ST_FREE;
- }
-
- cd->cdid = CDID_UNUSED;
- }
- }
-
- if((m = i4b_Dgetmbuf(sizeof(msg_pdeact_ind_t))) != NULL)
- {
- msg_pdeact_ind_t *md = (msg_pdeact_ind_t *)m->m_data;
-
- md->header.type = MSG_PDEACT_IND;
- md->header.cdid = -1;
-
- md->controller = controller;
- md->numactive = numactive;
-
- i4bputqueue_hipri(m); /* URGENT !!! */
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_L12STAT_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_l12stat(int controller, int layer, int state)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_l12stat_ind_t))) != NULL)
- {
- msg_l12stat_ind_t *md = (msg_l12stat_ind_t *)m->m_data;
-
- md->header.type = MSG_L12STAT_IND;
- md->header.cdid = -1;
-
- md->controller = controller;
- md->layer = layer;
- md->state = state;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_TEIASG_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_teiasg(int controller, int tei)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_teiasg_ind_t))) != NULL)
- {
- msg_teiasg_ind_t *md = (msg_teiasg_ind_t *)m->m_data;
-
- md->header.type = MSG_TEIASG_IND;
- md->header.cdid = -1;
-
- md->controller = controller;
- md->tei = ctrl_desc[controller].tei;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_DIALOUT_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_dialout(int driver, int driver_unit)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_dialout_ind_t))) != NULL)
- {
- msg_dialout_ind_t *md = (msg_dialout_ind_t *)m->m_data;
-
- md->header.type = MSG_DIALOUT_IND;
- md->header.cdid = -1;
-
- md->driver = driver;
- md->driver_unit = driver_unit;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_NEGOTIATION_COMPL message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_negcomplete(call_desc_t *cd)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_negcomplete_ind_t))) != NULL)
- {
- msg_negcomplete_ind_t *md = (msg_negcomplete_ind_t *)m->m_data;
-
- md->header.type = MSG_NEGCOMP_IND;
- md->header.cdid = cd->cdid;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_IFSTATE_CHANGED_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_ifstate_changed(call_desc_t *cd, int new_state)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_ifstatechg_ind_t))) != NULL)
- {
- msg_ifstatechg_ind_t *md = (msg_ifstatechg_ind_t *)m->m_data;
-
- md->header.type = MSG_IFSTATE_CHANGED_IND;
- md->header.cdid = cd->cdid;
- md->state = new_state;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_DRVRDISC_REQ message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_drvrdisc(int driver, int driver_unit)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_drvrdisc_req_t))) != NULL)
- {
- msg_drvrdisc_req_t *md = (msg_drvrdisc_req_t *)m->m_data;
-
- md->header.type = MSG_DRVRDISC_REQ;
- md->header.cdid = -1;
-
- md->driver = driver;
- md->driver_unit = driver_unit;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_ACCT_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_accounting(int driver, int driver_unit, int accttype, int ioutbytes,
- int iinbytes, int ro, int ri, int outbytes, int inbytes)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_accounting_ind_t))) != NULL)
- {
- msg_accounting_ind_t *md = (msg_accounting_ind_t *)m->m_data;
-
- md->header.type = MSG_ACCT_IND;
- md->header.cdid = -1;
-
- md->driver = driver;
- md->driver_unit = driver_unit;
-
- md->accttype = accttype;
- md->ioutbytes = ioutbytes;
- md->iinbytes = iinbytes;
- md->outbps = ro;
- md->inbps = ri;
- md->outbytes = outbytes;
- md->inbytes = inbytes;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_CONNECT_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_connect_ind(call_desc_t *cd)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_connect_ind_t))) != NULL)
- {
- msg_connect_ind_t *mp = (msg_connect_ind_t *)m->m_data;
-
- mp->header.type = MSG_CONNECT_IND;
- mp->header.cdid = cd->cdid;
-
- mp->controller = cd->controller;
- mp->channel = cd->channelid;
- mp->bprot = cd->bprot;
-
- cd->dir = DIR_INCOMING;
-
- if(strlen(cd->dst_telno) > 0)
- strcpy(mp->dst_telno, cd->dst_telno);
- else
- strcpy(mp->dst_telno, TELNO_EMPTY);
-
- if(strlen(cd->src_telno) > 0)
- strcpy(mp->src_telno, cd->src_telno);
- else
- strcpy(mp->src_telno, TELNO_EMPTY);
-
- strcpy(mp->display, cd->display);
-
- mp->scr_ind = cd->scr_ind;
-
- T400_start(cd);
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_CONNECT_ACTIVE_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_connect_active_ind(call_desc_t *cd)
-{
- int s;
- struct mbuf *m;
-
- s = SPLI4B();
-
- cd->last_active_time = cd->connect_time = SECOND;
-
- DBGL4(L4_TIMO, "i4b_l4_connect_active_ind", ("last_active/connect_time=%ld\n", (long)cd->connect_time));
-
- i4b_link_bchandrvr(cd);
-
- (*cd->dlt->line_connected)(cd->driver_unit, (void *)cd);
-
- i4b_l4_setup_timeout(cd);
-
- splx(s);
-
- if((m = i4b_Dgetmbuf(sizeof(msg_connect_active_ind_t))) != NULL)
- {
- msg_connect_active_ind_t *mp = (msg_connect_active_ind_t *)m->m_data;
-
- mp->header.type = MSG_CONNECT_ACTIVE_IND;
- mp->header.cdid = cd->cdid;
- mp->controller = cd->controller;
- mp->channel = cd->channelid;
- if(cd->datetime[0] != '\0')
- strcpy(mp->datetime, cd->datetime);
- else
- mp->datetime[0] = '\0';
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_DISCONNECT_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_disconnect_ind(call_desc_t *cd)
-{
- struct mbuf *m;
-
- if(cd->timeout_active)
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, cd->idle_timeout_handle);
-#else
- untimeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd);
-#endif
-
- if(cd->dlt != NULL)
- {
- (*cd->dlt->line_disconnected)(cd->driver_unit, (void *)cd);
- i4b_unlink_bchandrvr(cd);
- }
-
- if((cd->channelid == CHAN_B1) || (cd->channelid == CHAN_B2))
- {
- ctrl_desc[cd->controller].bch_state[cd->channelid] = BCH_ST_FREE;
- }
- else
- {
- /* no error, might be hunting call for callback */
- DBGL4(L4_MSG, "i4b_l4_disconnect_ind", ("channel free not B1/B2 but %d!\n", cd->channelid));
- }
-
- if((m = i4b_Dgetmbuf(sizeof(msg_disconnect_ind_t))) != NULL)
- {
- msg_disconnect_ind_t *mp = (msg_disconnect_ind_t *)m->m_data;
-
- mp->header.type = MSG_DISCONNECT_IND;
- mp->header.cdid = cd->cdid;
- mp->cause = cd->cause_in;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_IDLE_TIMEOUT_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_idle_timeout_ind(call_desc_t *cd)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_idle_timeout_ind_t))) != NULL)
- {
- msg_idle_timeout_ind_t *mp = (msg_idle_timeout_ind_t *)m->m_data;
-
- mp->header.type = MSG_IDLE_TIMEOUT_IND;
- mp->header.cdid = cd->cdid;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_CHARGING_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_charging_ind(call_desc_t *cd)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_charging_ind_t))) != NULL)
- {
- msg_charging_ind_t *mp = (msg_charging_ind_t *)m->m_data;
-
- mp->header.type = MSG_CHARGING_IND;
- mp->header.cdid = cd->cdid;
- mp->units_type = cd->units_type;
-
-/*XXX*/ if(mp->units_type == CHARGE_CALC)
- mp->units = cd->cunits;
- else
- mp->units = cd->units;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_STATUS_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_status_ind(call_desc_t *cd)
-{
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_ALERT_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_alert_ind(call_desc_t *cd)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_alert_ind_t))) != NULL)
- {
- msg_alert_ind_t *mp = (msg_alert_ind_t *)m->m_data;
-
- mp->header.type = MSG_ALERT_IND;
- mp->header.cdid = cd->cdid;
-
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_INFO_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_info_ind(call_desc_t *cd)
-{
-}
-
-/*---------------------------------------------------------------------------*
- * send MSG_INFO_IND message to userland
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_proceeding_ind(call_desc_t *cd)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(sizeof(msg_proceeding_ind_t))) != NULL)
- {
- msg_proceeding_ind_t *mp = (msg_proceeding_ind_t *)m->m_data;
-
- mp->header.type = MSG_PROCEEDING_IND;
- mp->header.cdid = cd->cdid;
- mp->controller = cd->controller;
- mp->channel = cd->channelid;
- i4bputqueue(m);
- }
-}
-
-/*---------------------------------------------------------------------------*
- * link a driver(unit) to a B-channel(controller,unit,channel)
- *---------------------------------------------------------------------------*/
-static int
-i4b_link_bchandrvr(call_desc_t *cd)
-{
- int t = ctrl_desc[cd->controller].ctrl_type;
-
- if(t < 0 || t >= CTRL_NUMTYPES || ctrl_types[t].get_linktab == NULL)
- {
- cd->ilt = NULL;
- }
- else
- {
- cd->ilt = ctrl_types[t].get_linktab(
- ctrl_desc[cd->controller].unit,
- cd->channelid);
- }
-
- switch(cd->driver)
- {
-#if NI4BRBCH > 0
- case BDRV_RBCH:
- cd->dlt = rbch_ret_linktab(cd->driver_unit);
- break;
-#endif
-
-#if NI4BTEL > 0
- case BDRV_TEL:
- cd->dlt = tel_ret_linktab(cd->driver_unit);
- break;
-#endif
-
-#if NI4BIPR > 0
- case BDRV_IPR:
- cd->dlt = ipr_ret_linktab(cd->driver_unit);
- break;
-#endif
-
-#if NI4BISPPP > 0
- case BDRV_ISPPP:
- cd->dlt = i4bisppp_ret_linktab(cd->driver_unit);
- break;
-#endif
-
- default:
- cd->dlt = NULL;
- break;
- }
-
- if(cd->dlt == NULL || cd->ilt == NULL)
- return(-1);
-
- if(t >= 0 && t < CTRL_NUMTYPES && ctrl_types[t].set_linktab != NULL)
- {
- ctrl_types[t].set_linktab(
- ctrl_desc[cd->controller].unit,
- cd->channelid,
- cd->dlt);
- }
-
- switch(cd->driver)
- {
-#if NI4BRBCH > 0
- case BDRV_RBCH:
- rbch_set_linktab(cd->driver_unit, cd->ilt);
- break;
-#endif
-
-#if NI4BTEL > 0
- case BDRV_TEL:
- tel_set_linktab(cd->driver_unit, cd->ilt);
- break;
-#endif
-
-#if NI4BIPR > 0
- case BDRV_IPR:
- ipr_set_linktab(cd->driver_unit, cd->ilt);
- break;
-#endif
-
-#if NI4BISPPP > 0
- case BDRV_ISPPP:
- i4bisppp_set_linktab(cd->driver_unit, cd->ilt);
- break;
-#endif
- default:
- return(0);
- break;
- }
-
- /* activate B channel */
-
- (*cd->ilt->bch_config)(ctrl_desc[cd->controller].unit,
- cd->channelid, cd->bprot, 1);
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * unlink a driver(unit) from a B-channel(controller,unit,channel)
- *---------------------------------------------------------------------------*/
-static void
-i4b_unlink_bchandrvr(call_desc_t *cd)
-{
- int t = ctrl_desc[cd->controller].ctrl_type;
-
- if(t < 0 || t >= CTRL_NUMTYPES || ctrl_types[t].get_linktab == NULL)
- {
- cd->ilt = NULL;
- return;
- }
- else
- {
- cd->ilt = ctrl_types[t].get_linktab(
- ctrl_desc[cd->controller].unit,
- cd->channelid);
- }
-
- /* deactivate B channel */
-
- (*cd->ilt->bch_config)(ctrl_desc[cd->controller].unit,
- cd->channelid, cd->bprot, 0);
-}
-
-/*---------------------------------------------------------------------------
-
- How shorthold mode works for OUTGOING connections
- =================================================
-
- |<---- unchecked-window ------->|<-checkwindow->|<-safetywindow>|
-
-idletime_state: IST_NONCHK IST_CHECK IST_SAFE
-
- | | | |
- time>>+-------------------------------+---------------+---------------+-...
- | | | |
- | |<--idle_time-->|<--earlyhup--->|
- |<-----------------------unitlen------------------------------->|
-
-
- unitlen - specifies the time a charging unit lasts
- idle_time - specifies the thime the line must be idle at the
- end of the unit to be elected for hangup
- earlyhup - is the beginning of a timing safety zone before the
- next charging unit starts
-
- The algorithm works as follows: lets assume the unitlen is 100
- secons, idle_time is 40 seconds and earlyhup is 10 seconds.
- The line then must be idle 50 seconds after the begin of the
- current unit and it must then be quiet for 40 seconds. if it
- has been quiet for this 40 seconds, the line is closed 10
- seconds before the next charging unit starts. In case there was
- any traffic within the idle_time, the line is not closed.
- It does not matter whether there was any traffic between second
- 0 and second 50 or not.
-
-
- How shorthold mode works for INCOMING connections
- =================================================
-
- it is just possible to specify a maximum idle time for incoming
- connections, after this time of no activity on the line the line
- is closed.
-
----------------------------------------------------------------------------*/
-
-/*---------------------------------------------------------------------------*
- * B channel idle check timeout setup
- *---------------------------------------------------------------------------*/
-static void
-i4b_l4_setup_timeout(call_desc_t *cd)
-{
- cd->timeout_active = 0;
- cd->idletime_state = IST_IDLE;
-
- if((cd->dir == DIR_INCOMING) && (cd->max_idle_time > 0))
- {
- /* incoming call: simple max idletime check */
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->idle_timeout_handle =
-#endif
- timeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, hz/2);
- cd->timeout_active = 1;
- DBGL4(L4_TIMO, "i4b_l4_setup_timeout", ("%ld: incoming-call, setup max_idle_time to %ld\n", (long)SECOND, (long)cd->max_idle_time));
- }
- else if((cd->dir == DIR_OUTGOING) && (cd->idle_time > 0))
- {
- /* outgoing call */
-
- if((cd->idle_time > 0) && (cd->unitlen_time == 0))
- {
- /* outgoing call: simple max idletime check */
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->idle_timeout_handle =
-#endif
- timeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, hz/2);
- cd->timeout_active = 1;
- DBGL4(L4_TIMO, "i4b_l4_setup_timeout", ("%ld: outgoing-call, setup idle_time to %ld\n", (long)SECOND, (long)cd->idle_time));
- }
- else if((cd->unitlen_time > 0) && (cd->unitlen_time > (cd->idle_time + cd->earlyhup_time)))
- {
- /* outgoing call: full shorthold mode check */
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->idle_timeout_handle =
-#endif
- timeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, hz*(cd->unitlen_time - (cd->idle_time + cd->earlyhup_time)));
- cd->timeout_active = 1;
- cd->idletime_state = IST_NONCHK;
- DBGL4(L4_TIMO, "i4b_l4_setup_timeout", ("%ld: outgoing-call, start %ld sec nocheck window\n",
- (long)SECOND, (long)(cd->unitlen_time - (cd->idle_time + cd->earlyhup_time))));
-
- if(cd->aocd_flag == 0)
- {
- cd->units_type = CHARGE_CALC;
- cd->cunits++;
- i4b_l4_charging_ind(cd);
- }
- }
- else
- {
- /* parms somehow got wrong .. */
-
- DBGL4(L4_ERR, "i4b_l4_setup_timeout", ("%ld: ERROR: idletime[%ld]+earlyhup[%ld] > unitlength[%ld]!\n",
- (long)SECOND, (long)cd->idle_time, (long)cd->earlyhup_time, (long)cd->unitlen_time));
- }
- }
- else
- {
- DBGL4(L4_TIMO, "i4b_l4_setup_timeout", ("no idle_timeout configured\n"));
- }
-}
-
-/*---------------------------------------------------------------------------*
- * B channel idle check timeout function
- *---------------------------------------------------------------------------*/
-void
-i4b_idle_check(call_desc_t *cd)
-{
- int s;
-
- if(cd->cdid == CDID_UNUSED)
- return;
-
- s = SPLI4B();
-
- /* failsafe */
-
- if(cd->timeout_active == 0)
- {
- DBGL4(L4_ERR, "i4b_idle_check", ("ERROR: timeout_active == 0 !!!\n"));
- }
- else
- {
- cd->timeout_active = 0;
- }
-
- /* incoming connections, simple idletime check */
-
- if(cd->dir == DIR_INCOMING)
- {
- if((cd->last_active_time + cd->max_idle_time) <= SECOND)
- {
- DBGL4(L4_TIMO, "i4b_idle_check", ("%ld: incoming-call, line idle timeout, disconnecting!\n", (long)SECOND));
- (*ctrl_desc[cd->controller].N_DISCONNECT_REQUEST)(cd->cdid,
- (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL);
- i4b_l4_idle_timeout_ind(cd);
- }
- else
- {
- DBGL4(L4_TIMO, "i4b_idle_check", ("%ld: incoming-call, activity, last_active=%ld, max_idle=%ld\n", (long)SECOND, (long)cd->last_active_time, (long)cd->max_idle_time));
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->idle_timeout_handle =
-#endif
- timeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, hz/2);
- cd->timeout_active = 1;
- }
- }
-
- /* outgoing connections */
-
- else if(cd->dir == DIR_OUTGOING)
- {
-
- /* simple idletime calculation */
-
- if((cd->idle_time > 0) && (cd->unitlen_time == 0))
- {
- if((cd->last_active_time + cd->idle_time) <= SECOND)
- {
- DBGL4(L4_TIMO, "i4b_idle_check", ("%ld: outgoing-call-st, idle timeout, disconnecting!\n", (long)SECOND));
- (*ctrl_desc[cd->controller].N_DISCONNECT_REQUEST)(cd->cdid,
- (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL);
- i4b_l4_idle_timeout_ind(cd);
- }
- else
- {
- DBGL4(L4_TIMO, "i4b_idle_check", ("%ld: outgoing-call-st, activity, last_active=%ld, max_idle=%ld\n",
- (long)SECOND, (long)cd->last_active_time, (long)cd->idle_time));
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->idle_timeout_handle =
-#endif
- timeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, hz/2);
- cd->timeout_active = 1;
- }
- }
-
- /* full shorthold mode calculation */
-
- else if((cd->unitlen_time > 0) && (cd->unitlen_time > (cd->idle_time + cd->earlyhup_time)))
- {
- switch(cd->idletime_state)
- {
- case IST_NONCHK: /* end of non-check time */
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->idle_timeout_handle =
-#endif
- timeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, hz*(cd->idle_time));
- cd->idletimechk_start = SECOND;
- cd->idletime_state = IST_CHECK;
- cd->timeout_active = 1;
- DBGL4(L4_TIMO, "i4b_idle_check", ("%ld: outgoing-call, idletime check window reached!\n", (long)SECOND));
- break;
-
- case IST_CHECK: /* end of idletime chk */
- if((cd->last_active_time > cd->idletimechk_start) &&
- (cd->last_active_time <= SECOND))
- { /* activity detected */
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->idle_timeout_handle =
-#endif
- timeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, hz*(cd->earlyhup_time));
- cd->timeout_active = 1;
- cd->idletime_state = IST_SAFE;
- DBGL4(L4_TIMO, "i4b_idle_check", ("%ld: outgoing-call, activity at %ld, wait earlyhup-end\n", (long)SECOND, (long)cd->last_active_time));
- }
- else
- { /* no activity, hangup */
- DBGL4(L4_TIMO, "i4b_idle_check", ("%ld: outgoing-call, idle timeout, last activity at %ld\n", (long)SECOND, (long)cd->last_active_time));
- (*ctrl_desc[cd->controller].N_DISCONNECT_REQUEST)(cd->cdid,
- (CAUSET_I4B << 8) | CAUSE_I4B_NORMAL);
- i4b_l4_idle_timeout_ind(cd);
- cd->idletime_state = IST_IDLE;
- }
- break;
-
- case IST_SAFE: /* end of earlyhup time */
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->idle_timeout_handle =
-#endif
- timeout((TIMEOUT_FUNC_T)i4b_idle_check,(void *)cd, hz*(cd->unitlen_time - (cd->idle_time+cd->earlyhup_time)));
- cd->timeout_active = 1;
- cd->idletime_state = IST_NONCHK;
-
- if(cd->aocd_flag == 0)
- {
- cd->units_type = CHARGE_CALC;
- cd->cunits++;
- i4b_l4_charging_ind(cd);
- }
-
- DBGL4(L4_TIMO, "i4b_idle_check", ("%ld: outgoing-call, earlyhup end, wait for idletime start\n", (long)SECOND));
- break;
-
- default:
- DBGL4(L4_ERR, "i4b_idle_check", ("outgoing-call: invalid idletime_state value!\n"));
- cd->idletime_state = IST_IDLE;
- break;
- }
- }
- }
- splx(s);
-}
-
-#endif /* NI4B > 0 */
diff --git a/sys/i4b/layer4/i4b_l4.h b/sys/i4b/layer4/i4b_l4.h
deleted file mode 100644
index e4ed863f383ab..0000000000000
--- a/sys/i4b/layer4/i4b_l4.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l4.h - kernel interface to userland header file
- * ---------------------------------------------------
- *
- * $Id: i4b_l4.h,v 1.13 1998/12/05 18:05:50 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:35:34 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_L4_H_
-#define _I4B_L4_H_
-
-extern void i4bputqueue ( struct mbuf *m );
-extern void i4bputqueue_hipri(struct mbuf *m);
-extern void i4b_l4_accounting(int, int, int, int, int, int, int, int, int);
-extern void i4b_l4_alert_ind ( call_desc_t *cd );
-extern void i4b_l4_charging_ind( call_desc_t *cd );
-extern void i4b_l4_connect_active_ind ( call_desc_t *cd );
-extern void i4b_l4_connect_ind ( call_desc_t *cd );
-extern void i4b_l4_daemon_attached(void);
-extern void i4b_l4_daemon_detached(void);
-extern void i4b_l4_dialout( int driver, int driver_unit );
-extern void i4b_l4_disconnect_ind ( call_desc_t *cd );
-extern void i4b_l4_drvrdisc (int driver, int driver_unit );
-extern void i4b_l4_negcomplete( call_desc_t *cd );
-extern void i4b_l4_ifstate_changed( call_desc_t *cd, int new_state );
-extern void i4b_l4_idle_timeout_ind( call_desc_t *cd );
-extern void i4b_l4_info_ind ( call_desc_t *cd );
-extern void i4b_l4_l12stat(int controller, int layer, int state);
-extern void i4b_l4_pdeact(int controller, int numactive);
-extern void i4b_l4_teiasg(int controller, int tei);
-extern void i4b_l4_status_ind ( call_desc_t *cd );
-extern void i4b_l4_proceeding_ind ( call_desc_t *cd );
-extern void i4b_idle_check(call_desc_t *cdp);
-extern call_desc_t * cd_by_cdid ( unsigned int cdid );
-extern call_desc_t * cd_by_unitcr ( int unit, int cr, int crf );
-extern void freecd_by_cd ( call_desc_t *cd );
-extern unsigned char get_rand_cr ( int unit );
-extern call_desc_t * reserve_cd ( void );
-extern void T400_start ( call_desc_t *cd );
-extern void T400_stop ( call_desc_t *cd );
-
-#endif /* _I4B_L4_H_ */
diff --git a/sys/i4b/layer4/i4b_l4mgmt.c b/sys/i4b/layer4/i4b_l4mgmt.c
deleted file mode 100644
index e8e1a967a6960..0000000000000
--- a/sys/i4b/layer4/i4b_l4mgmt.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l4mgmt.c - layer 4 calldescriptor management utilites
- * -----------------------------------------------------------
- *
- * $Id: i4b_l4mgmt.c,v 1.23 1998/12/05 18:05:52 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:35:50 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4b.h"
-
-#if NI4B > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-#include <machine/random.h>
-#endif
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_global.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-call_desc_t call_desc[N_CALL_DESC]; /* call descriptor array */
-
-static unsigned int get_cdid(void);
-
-int nctrl; /* number of attached controllers */
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-void init_callout(call_desc_t *);
-#endif
-
-/*---------------------------------------------------------------------------*
- * return a new unique call descriptor id
- * --------------------------------------
- * returns a new calldescriptor id which is used to uniquely identyfy
- * a single call in the communication between kernel and userland.
- * this cdid is then used to associate a calldescriptor with an id.
- *---------------------------------------------------------------------------*/
-static unsigned int
-get_cdid(void)
-{
- static unsigned int cdid_count = 0;
- int i;
- int x;
-
- x = SPLI4B();
-
- /* get next id */
-
- cdid_count++;
-
-again:
- if(cdid_count == CDID_UNUSED) /* zero is invalid */
- cdid_count++;
- else if(cdid_count > CDID_MAX) /* wraparound ? */
- cdid_count = 1;
-
- /* check if id already in use */
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if(call_desc[i].cdid == cdid_count)
- {
- cdid_count++;
- goto again;
- }
- }
-
- splx(x);
-
- return(cdid_count);
-}
-
-/*---------------------------------------------------------------------------*
- * reserve a calldescriptor for later usage
- * ----------------------------------------
- * searches the calldescriptor array until an unused
- * descriptor is found, gets a new calldescriptor id
- * and reserves it by putting the id into the cdid field.
- * returns pointer to the calldescriptor.
- *---------------------------------------------------------------------------*/
-call_desc_t *
-reserve_cd(void)
-{
- call_desc_t *cd;
- int x;
- int i;
-
- x = SPLI4B();
-
- cd = NULL;
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if(call_desc[i].cdid == CDID_UNUSED)
- {
- bzero(&call_desc[i], sizeof(call_desc_t)); /* clear it */
- call_desc[i].cdid = get_cdid(); /* fill in new cdid */
- cd = &(call_desc[i]); /* get pointer to descriptor */
- DBGL4(L4_MSG, "reserve_cd", ("found free cd - index=%d cdid=%u\n",
- i, call_desc[i].cdid));
- break;
- }
- }
-
- splx(x);
-
- if(cd == NULL)
- panic("reserve_cd: no free call descriptor available!");
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- init_callout(cd);
-#endif
-
- return(cd);
-}
-
-/*---------------------------------------------------------------------------*
- * free a calldescriptor
- * ---------------------
- * free a unused calldescriptor by giving address of calldescriptor
- * and writing a 0 into the cdid field marking it as unused.
- *---------------------------------------------------------------------------*/
-void
-freecd_by_cd(call_desc_t *cd)
-{
- int i;
- int x = SPLI4B();
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if( (call_desc[i].cdid != CDID_UNUSED) &&
- (&(call_desc[i]) == cd) )
- {
- DBGL4(L4_MSG, "freecd_by_cd", ("releasing cd - index=%d cdid=%u cr=%d\n",
- i, call_desc[i].cdid, cd->cr));
- call_desc[i].cdid = CDID_UNUSED;
- break;
- }
- }
-
- if(i == N_CALL_DESC)
- panic("freecd_by_cd: ERROR, cd not found, cr = %d\n", cd->cr);
-
- splx(x);
-}
-
-/*---------------------------------------------------------------------------*
- * return pointer to calldescriptor by giving the calldescriptor id
- * ----------------------------------------------------------------
- * lookup a calldescriptor in the calldescriptor array by looking
- * at the cdid field. return pointer to calldescriptor if found,
- * else return NULL if not found.
- *---------------------------------------------------------------------------*/
-call_desc_t *
-cd_by_cdid(unsigned int cdid)
-{
- int i;
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if(call_desc[i].cdid == cdid)
- {
- DBGL4(L4_MSG, "cd_by_cdid", ("found cdid - index=%d cdid=%u cr=%d\n",
- i, call_desc[i].cdid, call_desc[i].cr));
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- init_callout(&call_desc[i]);
-#endif
- return(&(call_desc[i]));
- }
- }
- return(NULL);
-}
-
-/*---------------------------------------------------------------------------*
- * search calldescriptor
- * ---------------------
- * This routine searches for the calldescriptor for a passive controller
- * given by unit number, callreference and callreference flag.
- * It returns a pointer to the calldescriptor if found, else a NULL.
- *---------------------------------------------------------------------------*/
-call_desc_t *
-cd_by_unitcr(int unit, int cr, int crf)
-{
- int i;
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if((call_desc[i].cdid != CDID_UNUSED) &&
- (ctrl_desc[call_desc[i].controller].ctrl_type == CTRL_PASSIVE) &&
- (ctrl_desc[call_desc[i].controller].unit == unit) &&
- (call_desc[i].cr == cr) &&
- (call_desc[i].crflag == crf) )
- {
- DBGL4(L4_MSG, "cd_by_unitcr", ("found cd, index=%d cdid=%u cr=%d\n",
- i, call_desc[i].cdid, call_desc[i].cr));
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- init_callout(&call_desc[i]);
-#endif
- return(&(call_desc[i]));
- }
- }
- return(NULL);
-}
-
-/*---------------------------------------------------------------------------*
- * generate 7 bit "random" number used for outgoing Call Reference
- *---------------------------------------------------------------------------*/
-unsigned char
-get_rand_cr(int unit)
-{
- register int i, j;
- static u_char val, retval;
- static int called = 42;
-
- val += ++called;
-
- for(i=0; i < 50 ; i++, val++)
- {
- int found = 1;
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- read_random((char *)&val, sizeof(val));
-#else
- val |= unit+i;
- val <<= i;
- val ^= (time.tv_sec >> 8) ^ time.tv_usec;
- val <<= i;
- val ^= time.tv_sec ^ (time.tv_usec >> 8);
-#endif
-
- retval = val & 0x7f;
-
- if(retval == 0 || retval == 0x7f)
- continue;
-
- for(j=0; j < N_CALL_DESC; j++)
- {
- if( (call_desc[j].cdid != CDID_UNUSED) &&
- (call_desc[j].cr == retval) )
- {
- found = 0;
- break;
- }
- }
-
- if(found)
- return(retval);
- }
- return(0); /* XXX */
-}
-
-/*---------------------------------------------------------------------------*
- * initialize the callout handles for FreeBSD-current 3.0
- *---------------------------------------------------------------------------*/
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-void
-init_callout(call_desc_t *cd)
-{
- if(cd->callouts_inited == 0)
- {
- callout_handle_init(&cd->idle_timeout_handle);
- callout_handle_init(&cd->T303_callout);
- callout_handle_init(&cd->T305_callout);
- callout_handle_init(&cd->T308_callout);
- callout_handle_init(&cd->T309_callout);
- callout_handle_init(&cd->T310_callout);
- callout_handle_init(&cd->T313_callout);
- callout_handle_init(&cd->T400_callout);
- cd->callouts_inited = 1;
- }
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * daemon is attached
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_daemon_attached(void)
-{
- int i;
-
- int x = SPLI4B();
-
- for(i=0; i < nctrl; i++)
- {
-/*XXX*/ if(ctrl_desc[i].ctrl_type == CTRL_PASSIVE)
- {
- DBGL4(L4_MSG, "i4b_l4_daemon_attached", ("CMR_DOPEN sent to unit %d\n", ctrl_desc[i].unit));
-
- (*ctrl_desc[i].N_MGMT_COMMAND)(ctrl_desc[i].unit, CMR_DOPEN, 0);
- }
- }
- splx(x);
-}
-
-/*---------------------------------------------------------------------------*
- * daemon is detached
- *---------------------------------------------------------------------------*/
-void
-i4b_l4_daemon_detached(void)
-{
- int i;
-
- int x = SPLI4B();
-
- for(i=0; i < nctrl; i++)
- {
-/*XXX*/ if(ctrl_desc[i].ctrl_type == CTRL_PASSIVE)
- {
- DBGL4(L4_MSG, "i4b_l4_daemon_detached", ("CMR_DCLOSE sent to unit %d\n", ctrl_desc[i].unit));
-
- (*ctrl_desc[i].N_MGMT_COMMAND)(ctrl_desc[i].unit, CMR_DCLOSE, 0);
- }
- }
- splx(x);
-}
-
-#ifdef I4B_CD_DEBUG_PRINT
-
-extern char *print_l3state(call_desc_t *cd);
-
-void i4b_print_cdp(call_desc_t *cdp);
-void i4b_print_cdx(int index);
-void i4b_print_cda(void);
-void i4b_print_cdaa(void);
-
-/*---------------------------------------------------------------------------*
- * print a call descriptor by cd-pointer
- *---------------------------------------------------------------------------*/
-void
-i4b_print_cdp(call_desc_t *cdp)
-{
- if((cdp > &(call_desc[N_CALL_DESC])) || (cdp < &(call_desc[0])))
- {
- printf("i4b_print_cd: cdp out of range!\n");
- return;
- }
-
- printf("i4b_print_cd: printing call descriptor %d at 0x%lx:\n", cdp - (&(call_desc[0])), (unsigned long)cdp);
-
- printf(" cdid = %d\n", cdp->cdid);
- printf(" controller = %d (u=%d, dl=%d, b1=%d, b2=%d)\n",
- cdp->controller,
- ctrl_desc[cdp->controller].unit,
- ctrl_desc[cdp->controller].dl_est,
- ctrl_desc[cdp->controller].bch_state[CHAN_B1],
- ctrl_desc[cdp->controller].bch_state[CHAN_B2]);
- printf(" cr = 0x%02x\n", cdp->cr);
- printf(" crflag = %d\n", cdp->crflag);
- printf(" channelid = %d\n", cdp->channelid);
- printf(" bprot = %d\n", cdp->bprot);
- printf(" driver = %d\n", cdp->driver);
- printf(" driver_unit = %d\n", cdp->driver_unit);
- printf(" call_state = %d\n", cdp->call_state);
- printf(" Q931state = %s\n", print_l3state(cdp));
- printf(" event = %d\n", cdp->event);
- printf(" response = %d\n", cdp->response);
- printf(" T303 = %d\n", cdp->T303);
- printf("T303_first_to = %d\n", cdp->T303_first_to);
- printf(" T305 = %d\n", cdp->T305);
- printf(" T308 = %d\n", cdp->T308);
- printf("T308_first_to = %d\n", cdp->T308_first_to);
- printf(" T309 = %d\n", cdp->T309);
- printf(" T310 = %d\n", cdp->T310);
- printf(" T313 = %d\n", cdp->T313);
- printf(" T400 = %d\n", cdp->T400);
- printf(" dir = %s\n", cdp->dir == DIR_OUTGOING ? "out" : "in");
-}
-
-/*---------------------------------------------------------------------------*
- * print a call descriptor by index
- *---------------------------------------------------------------------------*/
-void
-i4b_print_cdx(int index)
-{
- if(index >= N_CALL_DESC)
- {
- printf("i4b_print_cdx: index %d >= N_CALL_DESC %d\n", index, N_CALL_DESC);
- return;
- }
- i4b_print_cdp(&(call_desc[index]));
-}
-
-/*---------------------------------------------------------------------------*
- * print all call descriptors
- *---------------------------------------------------------------------------*/
-void
-i4b_print_cda(void)
-{
- int i;
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- i4b_print_cdp(&(call_desc[i]));
- }
-}
-
-/*---------------------------------------------------------------------------*
- * print all active call descriptors
- *---------------------------------------------------------------------------*/
-void
-i4b_print_cdaa(void)
-{
- int i;
-
- for(i=0; i < N_CALL_DESC; i++)
- {
- if(call_desc[i].cdid != CDID_UNUSED)
- {
- i4b_print_cdp(&(call_desc[i]));
- }
- }
-}
-
-#endif /* I4B_CD_DEBUG_PRINT */
-
-#endif /* NI4BQ931 > 0 */
diff --git a/sys/i4b/layer4/i4b_l4timer.c b/sys/i4b/layer4/i4b_l4timer.c
deleted file mode 100644
index 7a38e13904dd0..0000000000000
--- a/sys/i4b/layer4/i4b_l4timer.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_l4timer.c - timer and timeout handling for layer 4
- * --------------------------------------------------------
- *
- * $Id: i4b_l4timer.c,v 1.10 1998/12/05 18:05:53 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:36:07 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4b.h"
-
-#if NI4B > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l3l4.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-/*---------------------------------------------------------------------------*
- * timer T400 timeout function
- *---------------------------------------------------------------------------*/
-static void
-T400_timeout(call_desc_t *cd)
-{
- DBGL4(L4_ERR, "T400_timeout", ("cr = %d\n", cd->cr));
-}
-
-/*---------------------------------------------------------------------------*
- * timer T400 start
- *---------------------------------------------------------------------------*/
-void
-T400_start(call_desc_t *cd)
-{
- DBGL4(L4_MSG, "T400_start", ("cr = %d\n", cd->cr));
-
- cd->T400 = TIMER_ACTIVE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- cd->T400_callout = timeout((TIMEOUT_FUNC_T)T400_timeout, (void *)cd, T400DEF);
-#else
- timeout((TIMEOUT_FUNC_T)T400_timeout, (void *)cd, T400DEF);
-#endif
-}
-
-/*---------------------------------------------------------------------------*
- * timer T400 stop
- *---------------------------------------------------------------------------*/
-void
-T400_stop(call_desc_t *cd)
-{
- DBGL4(L4_MSG, "T400_stop", ("cr = %d\n", cd->cr));
-
- if(cd->T400 == TIMER_ACTIVE)
- {
- cd->T400 = TIMER_IDLE;
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- untimeout((TIMEOUT_FUNC_T)T400_timeout, (void *)cd, cd->T400_callout);
-#else
- untimeout((TIMEOUT_FUNC_T)T400_timeout, (void *)cd);
-#endif
- }
-}
-
-#endif /* NI4B > 0 */
diff --git a/sys/i4b/tina-dd/README b/sys/i4b/tina-dd/README
deleted file mode 100644
index 6a2386f90bf41..0000000000000
--- a/sys/i4b/tina-dd/README
+++ /dev/null
@@ -1,20 +0,0 @@
-
-THIS DRIVER IS NOT YET WORKING !
-================================
-
-This adds support for the active ISDN card tina-dd manufactured by
-Stollmann E+V GmbH in Hamburg, Germany. This card was also sold by
-MIRO as the Miro P1.
-
-Christian Luehrs and Manfred Jung of Stollmann were very helpful
-giving out docs and sources to support the development of a driver
-for this card.
-
-The card supports many protocols. In order to make the card operable
-you'll need the downloadable firmware which also can be found on the
-www/ftp server, www.stollmann.de / ftp.stollmann.de.
-
-While developing this driver, i used fcdddss1.loc as of April 1994.
-
-The code is based in part on sources and header files written by
-Stollmann for their driver development kit for the tina-dd.
diff --git a/sys/i4b/tina-dd/i4b_tina_dd.c b/sys/i4b/tina-dd/i4b_tina_dd.c
deleted file mode 100644
index e210d001888f5..0000000000000
--- a/sys/i4b/tina-dd/i4b_tina_dd.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * Copyright (c) 1994, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_tina_dd.c - i4b Stollman Tina-dd control device driver
- * ----------------------------------------------------------
- *
- * $Id: i4b_tina_dd.c,v 1.1 1998/12/27 21:46:53 phk Exp $
- *
- * last edit-date: [Sat Dec 5 18:41:38 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "tina.h"
-
-#if NTINA > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/mbuf.h>
-#include <sys/proc.h>
-#include <sys/fcntl.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#include <i386/isa/isa_device.h>
-#else
-#include <machine/bus.h>
-#include <sys/device.h>
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/tina-dd/i4b_tina_ioctl.h>
-
-static int openflag = 0;
-
-int tinaprobe(struct isa_device *dev);
-int tinaattach(struct isa_device *dev);
-void tinaintr(int unit);
-
-struct isa_driver tinadriver = {
- tinaprobe,
- tinaattach,
- "tina",
- 0
-};
-
-static struct tina_softc {
- int sc_unit;
- int sc_iobase;
-} tina_sc[NTINA];
-
-static d_open_t tinaopen;
-static d_close_t tinaclose;
-static d_ioctl_t tinaioctl;
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-static d_poll_t tinapoll;
-#endif
-
-#define CDEV_MAJOR 54
-static struct cdevsw tina_cdevsw =
- { tinaopen, tinaclose, noread, nowrite,
- tinaioctl, nostop, nullreset, nodevtotty,
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
- tinapoll, nommap, NULL, "tina", NULL, -1 };
-#else
- noselect, nommap, NULL, "tina", NULL, -1 };
-#endif
-
-static void setupaddr(unsigned short iobase, unsigned int addr);
-static void readblock(unsigned short iobase, unsigned int addr,
- unsigned char *dst, unsigned int len);
-static void writeblock(unsigned short iobase, unsigned char *src,
- unsigned long addr, int len);
-
-/*---------------------------------------------------------------------------*
- * tina - device driver probe routine
- *---------------------------------------------------------------------------*/
-int
-tinaprobe(struct isa_device *dev)
-{
- u_char byte;
-
-#define SETLOW 0x55
-#define SETMID 0xaa
-#define SETHIGH 0x06
-
- outb((dev->id_iobase + ADDR_CNTL), SETLOW);
-
- if((byte = inb(dev->id_iobase + ADDR_CNTL)) != SETLOW)
- {
- printf("tina%d: probe low failed, 0x%x != 0x%x\n",
- dev->id_unit, byte, SETLOW);
- return(0);
- }
-
- outb((dev->id_iobase + ADDR_CNTM), SETMID);
- if((byte = inb(dev->id_iobase + ADDR_CNTM)) != SETMID)
- {
- printf("tina%d: probe mid failed, 0x%x != 0x%x\n",
- dev->id_unit, byte, SETMID);
- return(0);
- }
-
- outb((dev->id_iobase + ADDR_CNTH), SETHIGH);
- if(((byte = inb(dev->id_iobase + ADDR_CNTH)) & 0x0f) != SETHIGH)
- {
- printf("tina%d: probe high failed, 0x%x != 0x%x\n",
- dev->id_unit, byte, SETHIGH);
- return(0);
- }
-
- printf("tina%d: status register = 0x%x\n",
- dev->id_unit, inb(dev->id_iobase + CTRL_STAT));
-
- return(1); /* board found */
-}
-#undef SETLOW
-#undef SETMID
-#undef SETHIGH
-
-/*---------------------------------------------------------------------------*
- * tina - device driver attach routine
- *---------------------------------------------------------------------------*/
-int
-tinaattach(struct isa_device *dev)
-{
- struct tina_softc *sc = &tina_sc[dev->id_unit];
-
- sc->sc_unit = dev->id_unit;
- sc->sc_iobase = dev->id_iobase;
-
- printf("tina%d: attaching Tina-dd\n", dev->id_unit);
-
- return(1);
-}
-
-/*---------------------------------------------------------------------------*
- * tina - device driver interrupt routine
- *---------------------------------------------------------------------------*/
-void
-tinaintr(int unit)
-{
-}
-
-#if BSD > 199306 && defined(__FreeBSD__)
-/*---------------------------------------------------------------------------*
- * initialization at kernel load time
- *---------------------------------------------------------------------------*/
-static void
-tinainit(void *unused)
-{
- dev_t dev;
-
- dev = makedev(CDEV_MAJOR, 0);
-
- cdevsw_add(&dev, &tina_cdevsw, NULL);
-}
-
-SYSINIT(tinadev, SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR, &tinainit, NULL);
-
-#endif /* BSD > 199306 && defined(__FreeBSD__) */
-
-/*---------------------------------------------------------------------------*
- * tinaopen - device driver open routine
- *---------------------------------------------------------------------------*/
-static int
-tinaopen(dev_t dev, int flag, int fmt, struct proc *p)
-{
- if(minor(dev))
- return (ENXIO);
-
- if(openflag)
- return (EBUSY);
-
- openflag = 1;
-
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * tinaclose - device driver close routine
- *---------------------------------------------------------------------------*/
-static int
-tinaclose(dev_t dev, int flag, int fmt, struct proc *p)
-{
- openflag = 0;
- return(0);
-}
-
-/*---------------------------------------------------------------------------*
- * tinaioctl - device driver ioctl routine
- *---------------------------------------------------------------------------*/
-static int
-tinaioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
-{
- struct tina_softc *sc = &tina_sc[minor(dev)];
- u_short iobase = sc->sc_iobase;
- int error = 0;
- int s;
-
- if(minor(dev))
- return(ENODEV);
-
- s = splimp();
-
- switch(cmd)
- {
- /* hardware layer - control & status register */
-
- case ISDN_GETCSR: /* return control register */
- *(unsigned char *)data = inb(iobase + CTRL_STAT);
- break;
-
- case ISDN_SETCSR: /* set status register */
- outb((iobase + CTRL_STAT), *(unsigned char *)data);
- break;
-
- /* hardware layer - dual ported memory */
-
- case ISDN_GETBLK: /* get block from dual port mem */
- readblock(iobase, (*(struct record *)data).addr,
- (*(struct record *)data).data,
- (*(struct record *)data).length);
- break;
-
- case ISDN_SETBLK: /* write block to dual port mem */
- writeblock(iobase, (*(struct record *)data).data,
- (*(struct record *)data).addr,
- (*(struct record *)data).length);
- break;
-
- default:
- error = ENOTTY;
- break;
- }
- return(error);
-}
-
-/*---------------------------------------------------------------------------*
- * tinapoll - device driver poll routine
- *---------------------------------------------------------------------------*/
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-static int
-tinapoll (dev_t dev, int events, struct proc *p)
-{
- return (ENODEV);
-}
-#endif
-
-/*===========================================================================*
- * tina dual ported memory access
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * setup address for accessing tina-dd ram
- *---------------------------------------------------------------------------*/
-static void
-setupaddr(unsigned short iobase, unsigned int addr)
-{
- outb((iobase + ADDR_CNTL), (unsigned char) addr & 0xff);
- outb((iobase + ADDR_CNTM), (unsigned char) ((addr >> 8) & 0xff));
- outb((iobase + ADDR_CNTH), (unsigned char) ((addr >> 16) & 0xff));
-}
-
-
-/*---------------------------------------------------------------------------*
- * read block from tina-dd dual ported ram
- *---------------------------------------------------------------------------*/
-static void
-readblock(unsigned short iobase, unsigned int addr,
- unsigned char *dst, unsigned int len)
-{
- setupaddr(iobase, addr); /* setup start address */
-
- while(len--) /* tina-dd mem -> pc mem */
- *dst++ = inb(iobase + DATA_LOW_INC);
-}
-
-/*---------------------------------------------------------------------------*
- * write block to tina-dd dual ported ram
- *---------------------------------------------------------------------------*/
-static void
-writeblock(unsigned short iobase, unsigned char *src,
- unsigned long addr, int len)
-{
- setupaddr(iobase, addr); /* setup start address */
-
- while(len--) /* pc mem -> tina-dd mem */
- outb((iobase + DATA_LOW_INC), *src++);
-}
-
-#endif /* NTINA > 0 */
diff --git a/sys/i4b/tina-dd/i4b_tina_ioctl.h b/sys/i4b/tina-dd/i4b_tina_ioctl.h
deleted file mode 100644
index d51f16d731a4a..0000000000000
--- a/sys/i4b/tina-dd/i4b_tina_ioctl.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1994, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Based on code written by Stollmann GmbH, Hamburg. Many thanks to
- * Christian Luehrs and Manfred Jung for docs, sources and answers!
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_tina_ioctl.h - i4b Stollman Tina-dd ioctl header file
- * ---------------------------------------------------------
- *
- * $Id: i4b_tina_ioctl.h,v 1.2 1998/12/05 18:06:20 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:41:51 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifndef _I4B_TINA_IOCTL_H_
-#define _I4B_TINA_IOCTL_H_
-
-#define TINA_IOSIZE 8 /* 8 byte wide iospace occupied */
-
-/*---------------------------------------------------------------------------*
- * register offsets in i/o address space
- *---------------------------------------------------------------------------*/
-
-#define CTRL_STAT 0 /* control & status */
-
-#define ADDR_CNTL 1 /* address pointer low */
-#define ADDR_CNTM 2 /* address pointer mid */
-#define ADDR_CNTH 3 /* address pointer high */
-
-#define DATA_LOW 4 /* data register low */
-#define DATA_HIGH 5 /* data register high */
-
-#define DATA_LOW_INC 6 /* data register low, post inc */
-#define DATA_HIGH_INC 7 /* data register high, post inc */
-
-/*---------------------------------------------------------------------------*
- * status register (CTRL_STAT read access)
- *---------------------------------------------------------------------------*/
-
-#define CR_INTC 0x80 /* irq FROM tina-dd TO pc active */
-#define CR_INTP 0x40 /* irq FROM pc TO tina-dd active */
-#define CR_INTPA 0x20 /* irq FROM pc TO tina-dd active */
-#define CR_NMI 0x10 /* nmi FROM PC TO tina-dd active */
-#define CR_FLASHLD 0x08 /* read of the FLASHLD-bit (n/c) */
-#define CR_S2C 0x04 /* info bit */
-#define CR_S1C 0x02 /* info bit */
-#define CR_S0C 0x01 /* info bit */
-
-/*---------------------------------------------------------------------------*
- * control register (CTRL_STAT write access)
- *---------------------------------------------------------------------------*/
-
-#define CR_CLR_INTC 0x80 /* clear irq on tina-dd */
-#define CR_SET_INTP 0x40 /* trigger irq on tina-dd */
-#define CR_RESET 0x20 /* reset tina-dd */
-#define CR_SET_NMI 0x10 /* trigger nmi on tina-dd */
-#define CR_SET_FLASHLD 0x08 /* activates pin FLASHLD (n/c) */
-#define CR_S2P 0x04 /* info bit (not readable !) */
-#define CR_S1P 0x02 /* info bit (not readable !) */
-#define CR_S0P 0x01 /* info bit (not readable !) */
-
-/*---------------------------------------------------------------------------*
- * misc definitions in dual-ported mem on board of tina-dd
- *---------------------------------------------------------------------------*/
-
-#define FW_SYSCB 0x200 /* address of FW SYSCB / MJ 300392 */
-#define FW_SINFO_NAME 0x220 /* address of general info label */
-
-#define FW_HW_TYPE 0x224 /* address of hardware type byte: */
-#define FW_HW_UNDEF 0x00 /* undefined .. */
-#define FW_HW_TINA_DD 0x10 /* TINA-dd */
-#define FW_HW_TINA_DS 0x20 /* TINA-ds (B channel/ser ?) */
-#define FW_HW_TINA_D 0x30 /* TINA-d (one B channel ?) */
-#define FW_HW_TINA_DDM 0x40 /* TINA-dd with fax module */
-#define FW_HW_TINA_DDS 0x50 /* TINA-dd with fax/voice module */
-#define FW_HW_SICCE 0x80 /* X.25 board */
-#define FW_HW_ASIC 0x01 /* ASIC version bit */
-
-#define FW_STAT 0x228 /* address of firmware status byte */
-#define FW_READY 0x20 /* firmware ready bit */
-#define FW_BOOTPRM_RDY 0x02 /* boot PROM ready */
-#define FW_UNDEF_0 0x00 /* undefined */
-#define FW_UNDEF_1 0xFF /* undefined */
-
-#define FW_SINFO_ID "SYSI" /* general info label for FW > 2.13*/
-#define FW_SINFO_ID_LEN 4
-
-#define FW_ADDR_PROFPTR 0x260 /* addr of ptr to board profile */
-
-/*===========================================================================*
- * Layer 0 - Hardware layer
- *===========================================================================*/
-
-/* control and status register access */
-
-#define ISDN_GETCSR _IOR('I', 1, unsigned char) /* get csr */
-#define ISDN_SETCSR _IOW('I', 2, unsigned char) /* set csr */
-
-/* dual ported ram access */
-
-#define ISDN_GETBLK _IOWR('I', 3, struct record) /* get dpr record */
-#define ISDN_SETBLK _IOW('I', 4, struct record) /* set dpr record */
-
-/*---------------------------------------------------------------------------*
- * record structure for dual ported ram block rd/wr
- *---------------------------------------------------------------------------*/
-struct record {
- unsigned int length; /* length of data block */
- unsigned int addr; /* address of mem on tina-dd board */
- unsigned char *data; /* pointer to the datablock itself */
-};
-
-#endif /* _I4B_TINA_IOCTL_H_ */