summaryrefslogtreecommitdiffstats
path: root/sys/i4b/layer1/iwic/i4b_iwic.h
diff options
context:
space:
mode:
authorhm <hm@FreeBSD.org>2000-10-09 13:29:00 +0000
committerhm <hm@FreeBSD.org>2000-10-09 13:29:00 +0000
commit6a1e8c89a39e745792906a17cdf08fc5bdd384f4 (patch)
tree082a43cf60a2a80e84ca74e4339fda393b01ec06 /sys/i4b/layer1/iwic/i4b_iwic.h
parent9fc2bc8a46f4f09ca71eaf59e5c203b5d61533fb (diff)
downloadFreeBSD-src-6a1e8c89a39e745792906a17cdf08fc5bdd384f4.zip
FreeBSD-src-6a1e8c89a39e745792906a17cdf08fc5bdd384f4.tar.gz
update to i4b version 0.95.04
Diffstat (limited to 'sys/i4b/layer1/iwic/i4b_iwic.h')
-rw-r--r--sys/i4b/layer1/iwic/i4b_iwic.h224
1 files changed, 224 insertions, 0 deletions
diff --git a/sys/i4b/layer1/iwic/i4b_iwic.h b/sys/i4b/layer1/iwic/i4b_iwic.h
new file mode 100644
index 0000000..1da90d7
--- /dev/null
+++ b/sys/i4b/layer1/iwic/i4b_iwic.h
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 1999, 2000 Dave Boyce. 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_iwic - isdn4bsd Winbond W6692 driver
+ * ----------------------------------------
+ *
+ * $Id: i4b_iwic.h,v 1.5 2000/03/13 15:23:43 hm Exp $
+ *
+ * $FreeBSD$
+ *
+ * last edit-date: [Mon Mar 13 16:23:15 2000]
+ *
+ *---------------------------------------------------------------------------*/
+
+#ifndef _I4B_IWIC_H_
+#define _I4B_IWIC_H_
+
+#include <i4b/layer1/iwic/i4b_iwic_ext.h>
+
+/*---------------------------------------------------------------------------*
+ * PCI resources used
+ *---------------------------------------------------------------------------*/
+
+#define INFO_IO_BASES 2
+
+struct i4b_info {
+ struct resource * io_base[INFO_IO_BASES];
+ int io_rid [INFO_IO_BASES];
+ struct resource * irq;
+ int irq_rid;
+ struct resource * mem;
+ int mem_rid;
+};
+
+/*---------------------------------------------------------------------------*
+ * state of a B channel
+ *---------------------------------------------------------------------------*/
+struct iwic_bchan
+{
+ int unit; /* unit number */
+ int channel; /* channel number */
+ int offset; /* offset from iobase */
+ int bprot; /* b channel protocol used */
+ int state; /* transceiver state: */
+#define ST_IDLE 0x00 /* channel idle */
+#define ST_TX_ACTIVE 0x01 /* tx running */
+
+ int sc_trace_bcount;
+
+ /* 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 */
+
+ /* linktab */
+
+ isdn_link_t iwic_isdn_linktab;
+ drvr_link_t *iwic_drvr_linktab;
+};
+
+/*---------------------------------------------------------------------------*
+ * state of a D channel
+ *---------------------------------------------------------------------------*/
+struct iwic_dchan
+{
+ int enabled;
+ int trace_count;
+ struct mbuf *ibuf;
+ u_char *ibuf_ptr; /* Input buffer pointer */
+ int ibuf_len; /* Current length of input buffer */
+ int ibuf_max_len; /* Max length in input buffer */
+ int rx_count;
+
+ int tx_ready; /* Can send next 64 bytes of data. */
+ int tx_count;
+
+ struct mbuf *obuf;
+ int free_obuf;
+ u_char *obuf_ptr;
+ int obuf_len;
+
+ struct mbuf *obuf2;
+ int free_obuf2;
+};
+
+/*---------------------------------------------------------------------------*
+ * state of one iwic unit
+ *---------------------------------------------------------------------------*/
+struct iwic_softc
+{
+ int sc_unit;
+ u_int32_t sc_iobase;
+ int sc_trace;
+ int sc_cardtyp;
+
+ int sc_I430state;
+ int sc_I430T3;
+
+ int enabled;
+
+ struct iwic_dchan sc_dchan;
+ struct iwic_bchan sc_bchan[2];
+
+ struct i4b_info sc_resources;
+};
+
+/*---------------------------------------------------------------------------*
+ * rd/wr register/fifo macros
+ *---------------------------------------------------------------------------*/
+#define IWIC_READ(sc,reg) (inb ((sc)->sc_iobase + (u_int32_t)(reg)))
+#define IWIC_WRITE(sc,reg,val) (outb ((sc)->sc_iobase + (u_int32_t)(reg), (val)))
+#define IWIC_WRDFIFO(sc,p,l) (outsb ((sc)->sc_iobase + D_XFIFO, (p), (l)))
+#define IWIC_RDDFIFO(sc,p,l) (insb ((sc)->sc_iobase + D_RFIFO, (p), (l)))
+#define IWIC_WRBFIFO(sc,b,p,l) (outsb (((sc)->sc_iobase + (b)->offset + B_XFIFO), (p), (l)))
+#define IWIC_RDBFIFO(sc,b,p,l) (insb (((sc)->sc_iobase + (b)->offset + B_RFIFO), (p), (l)))
+
+/*---------------------------------------------------------------------------*
+ * possible I.430 states
+ *---------------------------------------------------------------------------*/
+enum I430states
+{
+ ST_F3N, /* F3 Deactivated, no clock */
+ 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 events
+ *---------------------------------------------------------------------------*/
+enum I430events
+{
+ EV_PHAR, /* PH ACTIVATE REQUEST */
+ EV_CE, /* Clock enabled */
+ 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
+};
+
+/*---------------------------------------------------------------------------*
+ * available commands
+ *---------------------------------------------------------------------------*/
+enum I430commands
+{
+ CMD_ECK, /* Enable clock */
+ CMD_TIM, /* Timing */
+ CMD_RT, /* Reset */
+ CMD_AR8, /* Activation request pri 8 */
+ CMD_AR10, /* Activation request pri 10 */
+ CMD_DIU, /* Deactivate Indication Upstream */
+ CMD_ILL /* Illegal command */
+};
+
+
+extern struct iwic_softc iwic_sc[];
+
+#define iwic_find_sc(unit) (&iwic_sc[(unit)])
+
+extern void iwic_init(struct iwic_softc *);
+extern void iwic_next_state(struct iwic_softc *, int);
+
+extern void iwic_dchan_init(struct iwic_softc *);
+extern void iwic_dchan_xirq(struct iwic_softc *);
+extern void iwic_dchan_xfer_irq(struct iwic_softc *, int);
+extern void iwic_dchan_disable(struct iwic_softc *sc);
+extern int iwic_dchan_data_req(struct iwic_softc *sc, struct mbuf *m, int freeflag);
+extern void iwic_dchan_transmit(struct iwic_softc *sc);
+
+char *iwic_printstate(struct iwic_softc *sc);
+
+void iwic_init_linktab(struct iwic_softc *sc);
+void iwic_bchan_xirq(struct iwic_softc *, int);
+void iwic_bchannel_setup(int unit, int h_chan, int bprot, int activate);
+
+#endif /* _I4B_IWIC_H_ */
OpenPOWER on IntegriCloud