[BACK]Return to midwayvar.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/midwayvar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: midwayvar.h,v 1.12 2003/10/21 18:58:49 jmc Exp $      */
                      2:
                      3: /*
                      4:  *
                      5:  * Copyright (c) 1996 Charles D. Cranor and Washington University.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *      This product includes software developed by Charles D. Cranor and
                     19:  *     Washington University.
                     20:  * 4. The name of the author may not be used to endorse or promote products
                     21:  *    derived from this software without specific prior written permission.
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     24:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     25:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     26:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     27:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     28:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     29:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     30:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     31:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     32:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     33:  */
                     34:
                     35: /*
                     36:  * m i d w a y v a r . h
                     37:  *
                     38:  * we define the en_softc here so that bus specific modules can allocate
                     39:  * it as the first item in their softc.   note that BSD-required
                     40:  * "struct device" is in the mid_softc!
                     41:  *
                     42:  * author: Chuck Cranor <chuck@ccrc.wustl.edu>
                     43:  */
                     44:
                     45: /*
                     46:  * params needed to determine softc size
                     47:  */
                     48:
                     49: #ifndef EN_NTX
                     50: #define EN_NTX          8       /* number of tx bufs to use */
                     51: #endif
                     52: #ifndef EN_TXSZ
                     53: #define EN_TXSZ         32      /* transmit buf size in KB */
                     54: #endif
                     55: #ifndef EN_RXSZ
                     56: #define EN_RXSZ         32      /* recv buf size in KB */
                     57: #endif
                     58: #define EN_MAXNRX       ((2048-(EN_NTX*EN_TXSZ))/EN_RXSZ)
                     59:                                /* largest possible NRX (depends on RAM size) */
                     60:
                     61:
                     62: #if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__)
                     63: #define EN_INTR_TYPE int
                     64: #define EN_INTR_RET(X) return(X)
                     65: #if defined(__NetBSD__) || defined(__OpenBSD__)
                     66: #define EN_IOCTL_CMDT u_long
                     67: #elif defined(__bsdi__)
                     68: #define EN_IOCTL_CMDT int
                     69: #endif
                     70:
                     71: #elif defined(__FreeBSD__)
                     72:
                     73: #define EN_INTR_TYPE void
                     74: #define EN_INTR_RET(X) return
                     75: #define EN_IOCTL_CMDT int
                     76:
                     77: struct device {
                     78:   char dv_xname[IFNAMSIZ];
                     79: };
                     80:
                     81: #define DV_IFNET 1
                     82:
                     83: struct cfdriver {
                     84:   int zero;
                     85:   char *name;
                     86:   int one;
                     87:   int cd_ndevs;
                     88:   void *cd_devs[NEN];
                     89: };
                     90:
                     91: #endif
                     92:
                     93:
                     94: /*
                     95:  * softc
                     96:  */
                     97:
                     98: struct en_softc {
                     99:   /* bsd glue */
                    100:   struct device sc_dev;                /* system device */
                    101:   struct ifnet enif;           /* network ifnet handle */
                    102:
                    103:   /* bus glue */
                    104:   bus_space_tag_t en_memt;     /* for EN_READ/EN_WRITE */
                    105:   bus_space_handle_t en_base;  /* base of en card */
                    106:   bus_size_t en_obmemsz;       /* size of en card (bytes) */
                    107:   void (*en_busreset)(void *); /* bus specific reset function */
                    108:
                    109:   /* serv list */
                    110:   u_int32_t hwslistp;          /* hw pointer to service list (byte offset) */
                    111:   u_int16_t swslist[MID_SL_N]; /* software service list (see en_service()) */
                    112:   u_int16_t swsl_head,                 /* ends of swslist (index into swslist) */
                    113:            swsl_tail;
                    114:   u_int32_t swsl_size;         /* # of items in swsl */
                    115:
                    116:
                    117:   /* xmit dma */
                    118:   u_int32_t dtq[MID_DTQ_N];    /* sw copy of dma q (see ENIDQ macros) */
                    119:   u_int32_t dtq_free;          /* # of dtq's free */
                    120:   u_int32_t dtq_us;            /* software copy of our pointer (byte offset) */
                    121:   u_int32_t dtq_chip;          /* chip's pointer (byte offset) */
                    122:   u_int32_t need_dtqs;         /* true if we ran out of DTQs */
                    123:
                    124:   /* recv dma */
                    125:   u_int32_t drq[MID_DRQ_N];    /* sw copy of dma q (see ENIDQ macros) */
                    126:   u_int32_t drq_free;          /* # of drq's free */
                    127:   u_int32_t drq_us;            /* software copy of our pointer (byte offset) */
                    128:   u_int32_t drq_chip;          /* chip's pointer (byte offset) */
                    129:   u_int32_t need_drqs;         /* true if we ran out of DRQs */
                    130:
                    131:   /* xmit buf ctrl. (per channel) */
                    132:   struct {
                    133:     u_int32_t mbsize;          /* # mbuf bytes we are using (max=TXHIWAT) */
                    134:     u_int32_t bfree;           /* # free bytes in buffer (not dma or xmit) */
                    135:     u_int32_t start, stop;     /* ends of buffer area (byte offset) */
                    136:     u_int32_t cur;             /* next free area (byte offset) */
                    137:     u_int32_t nref;            /* # of VCs using this channel */
                    138:     struct ifqueue indma;      /* mbufs being dma'd now */
                    139:     struct ifqueue q;          /* mbufs waiting for dma now */
                    140:   } txslot[MID_NTX_CH];
                    141:
                    142:   /* xmit vc ctrl. (per vc) */
                    143:   u_int8_t txspeed[MID_N_VC];  /* speed of tx on a VC */
                    144:   u_int8_t txvc2slot[MID_N_VC]; /* map VC to slot */
                    145:
                    146:   /* recv vc ctrl. (per vc).   maps VC number to recv slot */
                    147:   u_int16_t rxvc2slot[MID_N_VC];
                    148:   int en_nrx;                  /* # of active rx slots */
                    149:
                    150:   /* recv buf ctrl. (per recv slot) */
                    151:   struct {
                    152:     void *rxhand;              /* recv. handle if doing direct delivery */
                    153:     u_int32_t mode;            /* saved copy of mode info */
                    154:     u_int32_t start, stop;     /* ends of my buffer area */
                    155:     u_int32_t cur;             /* where I am at */
                    156:     u_int16_t atm_vci;         /* backpointer to VCI */
                    157:     u_int8_t atm_flags;                /* copy of atm_flags from atm_ph */
                    158:     u_int8_t oth_flags;                /* other flags */
                    159:     u_int32_t raw_threshold;   /* for raw mode */
                    160:     struct ifqueue indma;      /* mbufs being dma'd now */
                    161:     struct ifqueue q;          /* mbufs waiting for dma now */
                    162:   } rxslot[EN_MAXNRX];         /* recv info */
                    163:
                    164:   /* stats */
                    165:   u_int32_t vtrash;            /* sw copy of counter */
                    166:   u_int32_t otrash;            /* sw copy of counter */
                    167:   u_int32_t ttrash;            /* # of RBD's with T bit set */
                    168:   u_int32_t mfix;              /* # of times we had to call mfix */
                    169:   u_int32_t mfixfail;          /* # of times mfix failed */
                    170:   u_int32_t headbyte;          /* # of times we used BYTE DMA at front */
                    171:   u_int32_t tailbyte;          /* # of times we used BYTE DMA at end */
                    172:   u_int32_t tailflush;         /* # of times we had to FLUSH out DMA bytes */
                    173:   u_int32_t txmbovr;           /* # of times we dropped due to mbsize */
                    174:   u_int32_t dmaovr;            /* tx dma overflow count */
                    175:   u_int32_t txoutspace;                /* out of space in xmit buffer */
                    176:   u_int32_t txdtqout;          /* out of DTQs */
                    177:   u_int32_t launch;            /* total # of launches */
                    178:   u_int32_t lheader;           /* # of launches without OB header */
                    179:   u_int32_t ltail;             /* # of launches without OB tail */
                    180:   u_int32_t hwpull;            /* # of pulls off hardware service list */
                    181:   u_int32_t swadd;             /* # of pushes on sw service list */
                    182:   u_int32_t rxqnotus;          /* # of times we pull from rx q, but fail */
                    183:   u_int32_t rxqus;             /* # of good pulls from rx q */
                    184:   u_int32_t rxoutboth;         /* # of times out of mbufs and DRQs */
                    185:   u_int32_t rxdrqout;          /* # of times out of DRQs */
                    186:   u_int32_t rxmbufout;         /* # of time out of mbufs */
                    187:
                    188:   /* random stuff */
                    189:   u_int32_t ipl;               /* sbus interrupt lvl (1 on pci?) */
                    190:   u_int8_t bestburstcode;      /* code of best burst we can use */
                    191:   u_int8_t bestburstlen;       /* length of best burst (bytes) */
                    192:   u_int8_t bestburstshift;     /* (x >> shift) == (x / bestburstlen) */
                    193:   u_int8_t bestburstmask;      /* bits to check if not multiple of burst */
                    194:   u_int8_t alburst;            /* align dma bursts? */
                    195:   u_int8_t is_adaptec;         /* adaptec version of midway? */
                    196: };
                    197:
                    198: /*
                    199:  * exported functions
                    200:  */
                    201:
                    202: void   en_attach(struct en_softc *);
                    203: EN_INTR_TYPE   en_intr(void *);
                    204: void   en_reset(struct en_softc *);

CVSweb