[BACK]Return to hmereg.h CVS log [TXT][DIR] Up to [local] / sys / arch / sparc / dev

Annotation of sys/arch/sparc/dev/hmereg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: hmereg.h,v 1.12 2005/02/22 20:44:26 brad Exp $        */
                      2:
                      3: /*
                      4:  * Copyright (c) 1998 Jason L. Wright (jason@thought.net)
                      5:  * All rights reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  *
                     16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     17:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
                     18:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     19:  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
                     20:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
                     21:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     22:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
                     24:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
                     25:  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     26:  * POSSIBILITY OF SUCH DAMAGE.
                     27:  */
                     28:
                     29: #define HME_DEFAULT_JSIZE      4
                     30: #define HME_DEFAULT_IPKT_GAP0  16
                     31: #define HME_DEFAULT_IPKT_GAP1  8
                     32: #define HME_DEFAULT_IPKT_GAP2  4
                     33:
                     34: /* global registers */
                     35: struct hme_gr {
                     36:        volatile u_int32_t      reset;          /* reset tx/rx */
                     37:        volatile u_int32_t      cfg;            /* config */
                     38:        volatile u_int32_t      _padding[62];   /* unused */
                     39:        volatile u_int32_t      stat;           /* intr status */
                     40:        volatile u_int32_t      imask;          /* intr mask */
                     41: };
                     42:
                     43: /* hme_gr.reset (software reset register) */
                     44: #define GR_RESET_ETX           0x01    /* reset external tx */
                     45: #define GR_RESET_ERX           0x02    /* reset external rx */
                     46: #define GR_RESET_ALL           (GR_RESET_ETX | GR_RESET_ERX)
                     47:
                     48: /* hme_gr.cfg (configuration register) */
                     49: #define GR_CFG_BURSTMSK                0x03    /* burst mask */
                     50: #define GR_CFG_BURST16         0x00    /* 16 byte bursts */
                     51: #define GR_CFG_BURST32         0x01    /* 32 byte bursts */
                     52: #define GR_CFG_BURST64         0x02    /* 32 byte bursts */
                     53: #define GR_CFG_64BIT           0x04
                     54: #define GR_CFG_PARITY          0x08
                     55: #define GR_CFG_RESV            0x10
                     56:
                     57: /* hme_gr.stat (interrupt status register) */
                     58: #define GR_STAT_GOTFRAME       0x00000001 /* frame received */
                     59: #define GR_STAT_RCNTEXP                0x00000002 /* rx frame count expired */
                     60: #define GR_STAT_ACNTEXP                0x00000004 /* align error count expired */
                     61: #define GR_STAT_CCNTEXP                0x00000008 /* crc error count expired */
                     62: #define GR_STAT_LCNTEXP                0x00000010 /* length error count expired */
                     63: #define GR_STAT_RFIFOVF                0x00000020 /* rx fifo overflow */
                     64: #define GR_STAT_CVCNTEXP       0x00000040 /* code violation counter expired */
                     65: #define GR_STAT_STSTERR                0x00000080 /* xif sqe test failed */
                     66: #define GR_STAT_SENTFRAME      0x00000100 /* frame sent */
                     67: #define GR_STAT_TFIFO_UND      0x00000200 /* tx fifo underrun */
                     68: #define GR_STAT_MAXPKTERR      0x00000400 /* max-packet size error */
                     69: #define GR_STAT_NCNTEXP                0x00000800 /* normal collision count expired */
                     70: #define GR_STAT_ECNTEXP                0x00001000 /* excess collision count expired */
                     71: #define GR_STAT_LCCNTEXP       0x00002000 /* late collision count expired */
                     72: #define GR_STAT_FCNTEXP                0x00004000 /* first collision count expired */
                     73: #define GR_STAT_DTIMEXP                0x00008000 /* defer timer expired */
                     74: #define GR_STAT_RXTOHOST       0x00010000 /* pkt moved from rx fifo->memory */
                     75: #define GR_STAT_NORXD          0x00020000 /* out of receive descriptors */
                     76: #define GR_STAT_RXERR          0x00040000 /* rx dma error */
                     77: #define GR_STAT_RXLATERR       0x00080000 /* late error during rx dma */
                     78: #define GR_STAT_RXPERR         0x00100000 /* parity error during rx dma */
                     79: #define GR_STAT_RXTERR         0x00200000 /* tag error during rx dma */
                     80: #define GR_STAT_EOPERR         0x00400000 /* tx descriptor did not set EOP */
                     81: #define GR_STAT_MIFIRQ         0x00800000 /* mif needs attention */
                     82: #define GR_STAT_HOSTTOTX       0x01000000 /* pkt moved from memory->tx fifo */
                     83: #define GR_STAT_TXALL          0x02000000 /* all pkts in fifo transmitted */
                     84: #define GR_STAT_TXEACK         0x04000000 /* error during tx dma */
                     85: #define GR_STAT_TXLERR         0x08000000 /* late error during tx dma */
                     86: #define GR_STAT_TXPERR         0x10000000 /* parity error during tx dma */
                     87: #define GR_STAT_TXTERR         0x20000000 /* tag error durig tx dma */
                     88: #define GR_STAT_SLVERR         0x40000000 /* pio access error */
                     89: #define GR_STAT_SLVPERR                0x80000000 /* pio access parity error */
                     90:
                     91: /* all the errors to worry about */
                     92: #define GR_STAT_ALL_ERRORS     \
                     93:        (GR_STAT_SLVPERR   | GR_STAT_SLVERR  | GR_STAT_TXTERR    | \
                     94:         GR_STAT_TXPERR    | GR_STAT_TXLERR  | GR_STAT_TXEACK    | \
                     95:         GR_STAT_EOPERR    | GR_STAT_RXTERR  | GR_STAT_RXPERR    | \
                     96:         GR_STAT_RXLATERR  | GR_STAT_RXERR   | GR_STAT_NORXD     | \
                     97:         GR_STAT_DTIMEXP   | GR_STAT_FCNTEXP | GR_STAT_LCCNTEXP  | \
                     98:         GR_STAT_ECNTEXP   | GR_STAT_NCNTEXP | GR_STAT_MAXPKTERR | \
                     99:         GR_STAT_TFIFO_UND | GR_STAT_STSTERR | GR_STAT_CVCNTEXP  | \
                    100:         GR_STAT_RFIFOVF   | GR_STAT_LCNTEXP | GR_STAT_CCNTEXP   | \
                    101:         GR_STAT_ACNTEXP)
                    102:
                    103: #define        GR_STAT_BITS    \
                    104:        "\20\1RX\2RCNT\3ACNT\4CCNT\5LCNT\6RFIFO\7CVCNT\10STST" \
                    105:        "\11TX\12TFIFO\13MAXPKT\14NCNT\15ECNT\16LCCNT\17FCNT" \
                    106:        "\20DTIME\21RXHOST\22NORXD\23RXE\24EXLATE\25RXP\26RXT\27EOP" \
                    107:        "\30MIF\31TXHOST\32TXALL\33TXE\34TXL\35TXP\36TXT\37SLV" \
                    108:        "\40SLVP"
                    109:
                    110: /* hme_gr.stat (interrupt status register) */
                    111: #define GR_IMASK_GOTFRAME      0x00000001 /* frame received */
                    112: #define GR_IMASK_RCNTEXP       0x00000002 /* rx frame count expired */
                    113: #define GR_IMASK_ACNTEXP       0x00000004 /* align error count expired */
                    114: #define GR_IMASK_CCNTEXP       0x00000008 /* crc error count expired */
                    115: #define GR_IMASK_LCNTEXP       0x00000010 /* length error count expired */
                    116: #define GR_IMASK_RFIFOVF       0x00000020 /* rx fifo overflow */
                    117: #define GR_IMASK_CVCNTEXP      0x00000040 /* code violation count expired */
                    118: #define GR_IMASK_STSTERR       0x00000080 /* xif sqe test failed */
                    119: #define GR_IMASK_SENTFRAME     0x00000100 /* frame sent */
                    120: #define GR_IMASK_TFIFO_UND     0x00000200 /* tx fifo underrun */
                    121: #define GR_IMASK_MAXPKTERR     0x00000400 /* max-packet size error */
                    122: #define GR_IMASK_NCNTEXP       0x00000800 /* normal collision count expired */
                    123: #define GR_IMASK_ECNTEXP       0x00001000 /* excess collision count expired */
                    124: #define GR_IMASK_LCCNTEXP      0x00002000 /* late collision count expired */
                    125: #define GR_IMASK_FCNTEXP       0x00004000 /* first collision count expired */
                    126: #define GR_IMASK_DTIMEXP       0x00008000 /* defer timer expired */
                    127: #define GR_IMASK_RXTOHOST      0x00010000 /* pkt moved from rx fifo->memory */
                    128: #define GR_IMASK_NORXD         0x00020000 /* out of receive descriptors */
                    129: #define GR_IMASK_RXERR         0x00040000 /* rx dma error */
                    130: #define GR_IMASK_RXLATERR      0x00080000 /* late error during rx dma */
                    131: #define GR_IMASK_RXPERR                0x00100000 /* parity error during rx dma */
                    132: #define GR_IMASK_RXTERR                0x00200000 /* tag error during rx dma */
                    133: #define GR_IMASK_EOPERR                0x00400000 /* tx descriptor did not set EOP */
                    134: #define GR_IMASK_MIFIRQ                0x00800000 /* mif needs attention */
                    135: #define GR_IMASK_HOSTTOTX      0x01000000 /* pkt moved from memory->tx fifo */
                    136: #define GR_IMASK_TXALL         0x02000000 /* all pkts in fifo transmitted */
                    137: #define GR_IMASK_TXEACK                0x04000000 /* error during tx dma */
                    138: #define GR_IMASK_TXLERR                0x08000000 /* late error during tx dma */
                    139: #define GR_IMASK_TXPERR                0x10000000 /* parity error during tx dma */
                    140: #define GR_IMASK_TXTERR                0x20000000 /* tag error during tx dma */
                    141: #define GR_IMASK_SLVERR                0x40000000 /* pio access error */
                    142: #define GR_IMASK_SLVPERR       0x80000000 /* PIO access parity error */
                    143:
                    144: /*
                    145:  * external transmitter registers
                    146:  */
                    147: struct hme_txr {
                    148:        volatile u_int32_t      tx_pnding;      /* tx pending/wakeup */
                    149:         volatile u_int32_t     cfg;            /* tx cfg */
                    150:        volatile u_int32_t      tx_ring;        /* tx ring ptr */
                    151:        volatile u_int32_t      tx_bbase;       /* tx buffer base */
                    152:        volatile u_int32_t      tx_bdisp;       /* tx buffer displacement */
                    153:        volatile u_int32_t      tx_fifo_wptr;   /* tx fifo write pointer */
                    154:        volatile u_int32_t      tx_fifo_swptr;  /* tx fifo write ptr (shadow) */
                    155:        volatile u_int32_t      tx_fifo_rptr;   /* tx fifo read pointer */
                    156:        volatile u_int32_t      tx_fifo_srptr;  /* tx fifo read ptr (shadow) */
                    157:        volatile u_int32_t      tx_fifo_pcnt;   /* tx fifo packet counter */
                    158:        volatile u_int32_t      smachine;       /* tx state machine */
                    159:        volatile u_int32_t      tx_rsize;       /* tx ring size */
                    160:        volatile u_int32_t      tx_bptr;        /* tx buffer pointer */
                    161: };
                    162:
                    163: /* hme_txr.tx_pnding (tx pending/wakeup) */
                    164: #define TXR_TP_DMAWAKEUP       0x00000001      /* Restart transmit dma */
                    165:
                    166: /* hme_txr.tx_cfg (tx configuration) */
                    167: #define TXR_CFG_DMAENABLE      0x00000001 /* enable tx dma */
                    168: #define TXR_CFG_FIFOTHRESH     0x000003fe /* tx fifo threshold */
                    169: #define TXR_CFG_IRQDAFTER      0x00000400 /* intr after tx-fifo empty */
                    170: #define TXR_CFG_IRQDBEFORE     0x00000000 /* intr before tx-fifo empty */
                    171: #define TXR_RSIZE_SHIFT                4
                    172:
                    173: /*
                    174:  * external receiver registers
                    175:  */
                    176: struct hme_rxr {
                    177:        volatile u_int32_t      cfg;            /* rx cfg */
                    178:        volatile u_int32_t      rx_ring;        /* rx ring pointer */
                    179:        volatile u_int32_t      rx_bptr;        /* rx buffer ptr */
                    180:        volatile u_int32_t      rx_fifo_wptr;   /* rx fifo write ptr */
                    181:        volatile u_int32_t      rx_fifo_swptr;  /* rx fifo write ptr (shadow) */
                    182:        volatile u_int32_t      rx_fifo_rptr;   /* rx fifo read ptr */
                    183:        volatile u_int32_t      rx_fifo_srptr;  /* rx fifo read ptr (shadow) */
                    184:        volatile u_int32_t      smachine;       /* rx state machine */
                    185: };
                    186:
                    187: /* hme_rxr.rx_cfg (rx configuration) */
                    188: #define RXR_CFG_DMAENABLE      0x00000001      /* rx dma enable */
                    189: #define RXR_CFG_reserved1      0x00000006      /* reserved bits */
                    190: #define RXR_CFG_BYTEOFFSET     0x00000038      /* rx first byte offset */
                    191: #define RXR_CFG_reserved2      0x000001c0      /* reserved bits */
                    192: #define RXR_CFG_RINGSIZE32     0x00000000      /* rx descptr ring size: 32 */
                    193: #define RXR_CFG_RINGSIZE64     0x00000200      /* rx descptr ring size: 64 */
                    194: #define RXR_CFG_RINGSIZE128    0x00000400      /* rx descptr ring size: 128 */
                    195: #define RXR_CFG_RINGSIZE256    0x00000600      /* rx descptr ring size: 128 */
                    196: #define RXR_CFG_reserved3      0x0000f800      /* reserved bits */
                    197: #define RXR_CFG_CSUMSTART      0x007f0000      /* rx offset of checksum */
                    198: #define RXR_CFG_CSUM_SHIFT     16
                    199:
                    200: /*
                    201:  * configuration registers
                    202:  */
                    203: struct hme_cr {
                    204:         volatile u_int32_t     xif_cfg;        /* xif configuration reg */
                    205:         volatile u_int32_t     _padding[129];  /* reserved */
                    206:         volatile u_int32_t     tx_swreset;     /* tx software reset */
                    207:         volatile u_int32_t     tx_cfg;         /* tx configuration reg */
                    208:         volatile u_int32_t     ipkt_gap1;      /* interpacket gap 1 */
                    209:         volatile u_int32_t     ipkt_gap2;      /* interpacket gap 2 */
                    210:         volatile u_int32_t     attempt_limit;  /* tx attempt limit */
                    211:         volatile u_int32_t     stime;          /* tx slot time */
                    212:         volatile u_int32_t     preamble_len;   /* len of tx preamble */
                    213:         volatile u_int32_t     preamble_patt;  /* tx preamble pattern */
                    214:         volatile u_int32_t     tx_sframedelim; /* tx frame delimiter */
                    215:         volatile u_int32_t     jsize;          /* tx jam size */
                    216:         volatile u_int32_t     tx_pkt_max;     /* tx maximum pkt size */
                    217:         volatile u_int32_t     tx_pkt_min;     /* tx minimum pkt size */
                    218:         volatile u_int32_t     peak_attempt;   /* tx peak counter */
                    219:         volatile u_int32_t     dt_ctr;         /* tx defer counter */
                    220:         volatile u_int32_t     nc_ctr;         /* tx normal collision cntr */
                    221:         volatile u_int32_t     fc_ctr;         /* tx first collision cntr */
                    222:         volatile u_int32_t     ex_ctr;         /* tx execess collision cntr */
                    223:         volatile u_int32_t     lt_ctr;         /* tx late collision cntr */
                    224:         volatile u_int32_t     rand_seed;      /* tx random seed */
                    225:         volatile u_int32_t     tx_smachine;    /* tx state machine */
                    226:         volatile u_int32_t     _padding2[44];  /* reserved */
                    227:         volatile u_int32_t     rx_swreset;     /* rx software reset */
                    228:         volatile u_int32_t     rx_cfg;         /* rx configuration */
                    229:         volatile u_int32_t     rx_pkt_max;     /* rx maximum pkt size */
                    230:         volatile u_int32_t     rx_pkt_min;     /* rx minimum pkt size */
                    231:         volatile u_int32_t     mac_addr2;      /* macaddress register2 (MSB) */
                    232:         volatile u_int32_t     mac_addr1;      /* macaddress register1 */
                    233:         volatile u_int32_t     mac_addr0;      /* macaddress register0 (LSB) */
                    234:         volatile u_int32_t     fr_ctr;         /* rx frame counter */
                    235:         volatile u_int32_t     gle_ctr;        /* rx giant counter */
                    236:         volatile u_int32_t     unale_ctr;      /* rx unaligned error cntr */
                    237:         volatile u_int32_t     rcrce_ctr;      /* rx crc error cntr */
                    238:         volatile u_int32_t     rx_smachine;    /* rx state machine */
                    239:         volatile u_int32_t     rx_cvalid;      /* rx code violation */
                    240:         volatile u_int32_t     _padding3;      /* reserved */
                    241:         volatile u_int32_t     htable3;        /* hash table 3 */
                    242:         volatile u_int32_t     htable2;        /* hash table 2 */
                    243:         volatile u_int32_t     htable1;        /* hash table 1 */
                    244:         volatile u_int32_t     htable0;        /* hash table 0 */
                    245:         volatile u_int32_t     afilter2;       /* address filter 2 */
                    246:         volatile u_int32_t     afilter1;       /* address filter 1 */
                    247:         volatile u_int32_t     afilter0;       /* address filter 0 */
                    248:         volatile u_int32_t     afilter_mask;   /* address filter mask */
                    249: };
                    250:
                    251: /* BigMac XIF config register. */
                    252: #define CR_XCFG_ODENABLE  0x00000001 /* Output driver enable         */
                    253: #define CR_XCFG_XLBACK    0x00000002 /* Loopback-mode XIF enable     */
                    254: #define CR_XCFG_MLBACK    0x00000004 /* Loopback-mode MII enable     */
                    255: #define CR_XCFG_MIIDISAB  0x00000008 /* MII receive buffer disable   */
                    256: #define CR_XCFG_SQENABLE  0x00000010 /* SQE test enable              */
                    257: #define CR_XCFG_SQETWIN   0x000003e0 /* SQE time window              */
                    258: #define CR_XCFG_LANCE     0x00000010 /* Lance mode enable            */
                    259: #define CR_XCFG_LIPG0     0x000003e0 /* Lance mode IPG0              */
                    260:
                    261: /* BigMac transmit config register. */
                    262: #define CR_TXCFG_ENABLE   0x00000001 /* Enable the transmitter       */
                    263: #define CR_TXCFG_SMODE    0x00000020 /* Enable slow transmit mode    */
                    264: #define CR_TXCFG_CIGN     0x00000040 /* Ignore transmit collisions   */
                    265: #define CR_TXCFG_FCSOFF   0x00000080 /* Do not emit FCS              */
                    266: #define CR_TXCFG_DBACKOFF 0x00000100 /* Disable backoff              */
                    267: #define CR_TXCFG_FULLDPLX 0x00000200 /* Enable full-duplex           */
                    268: #define CR_TXCFG_DGIVEUP  0x00000400 /* Don't give up on transmits   */
                    269:
                    270: /* BigMac receive config register. */
                    271: #define CR_RXCFG_ENABLE   0x00000001 /* Enable the receiver             */
                    272: #define CR_RXCFG_PSTRIP   0x00000020 /* Pad byte strip enable           */
                    273: #define CR_RXCFG_PMISC    0x00000040 /* Enable promiscous mode          */
                    274: #define CR_RXCFG_DERR     0x00000080 /* Disable error checking          */
                    275: #define CR_RXCFG_DCRCS    0x00000100 /* Disable CRC stripping           */
                    276: #define CR_RXCFG_ME       0x00000200 /* Receive packets addressed to me */
                    277: #define CR_RXCFG_PGRP     0x00000400 /* Enable promisc group mode       */
                    278: #define CR_RXCFG_HENABLE  0x00000800 /* Enable the hash filter          */
                    279: #define CR_RXCFG_AENABLE  0x00001000 /* Enable the address filter       */
                    280:
                    281: struct hme_tcvr {
                    282:        volatile u_int32_t bb_clock;    /* bit bang clock */
                    283:        volatile u_int32_t bb_data;     /* bit bang data */
                    284:        volatile u_int32_t bb_oenab;    /* bit bang output enable */
                    285:        volatile u_int32_t frame;       /* frame control & data */
                    286:        volatile u_int32_t cfg;         /* MIF configuration */
                    287:        volatile u_int32_t int_mask;    /* MIF interrupt mask */
                    288:        volatile u_int32_t status;      /* MIF status */
                    289:        volatile u_int32_t smachine;    /* MIF state machine */
                    290: };
                    291:
                    292: #define        FRAME_WRITE     0x50020000      /* start a frame write */
                    293: #define        FRAME_READ      0x60020000      /* start a frame read */
                    294: #define        TCVR_FAILURE    0x80000000      /* impossible value */
                    295:
                    296: /* Transceiver config register */
                    297: #define TCVR_CFG_PSELECT           0x00000001  /* select PHY */
                    298: #define TCVR_CFG_PENABLE       0x00000002      /* enable MIF polling */
                    299: #define TCVR_CFG_BENABLE       0x00000004      /* enable bit bang */
                    300: #define TCVR_CFG_PREGADDR      0x000000f8      /* poll register addr */
                    301: #define TCVR_CFG_MDIO0         0x00000100      /* MDIO zero, data/attached */
                    302: #define TCVR_CFG_MDIO1         0x00000200      /* MDIO one,  data/attached */
                    303: #define TCVR_CFG_PDADDR                0x00007c00      /* device phy addr polling */
                    304:
                    305: /* Here are some PHY addresses. */
                    306: #define        TCVR_PHYADDR_ETX                0       /* external transceiver */
                    307: #define        TCVR_PHYADDR_ITX                1       /* internal transceiver */
                    308:
                    309: /* Transceiver status register */
                    310: #define TCVR_STAT_BASIC                0xffff0000      /* The "basic" part */
                    311: #define TCVR_STAT_NORMAL       0x0000ffff      /* The "non-basic" part */
                    312:
                    313: /* hme flags */
                    314: #define        HME_FLAG_POLL           0x00000001      /* polling mif? */
                    315: #define        HME_FLAG_FENABLE        0x00000002      /* MII frame enabled? */
                    316: #define        HME_FLAG_LANCE          0x00000004      /* Lance mode IPG0? */
                    317: #define        HME_FLAG_RXENABLE       0x00000008      /* Receiver enabled? */
                    318: #define        HME_FLAG_AUTO           0x00000010      /* Auto-Neg? 0 = force */
                    319: #define        HME_FLAG_FULL           0x00000020      /* Full duplex enabled? */
                    320: #define        HME_FLAG_MACFULL        0x00000040      /* Full duplex in the MAC? */
                    321: #define        HME_FLAG_POLLENABLE     0x00000080      /* Try MIF polling? */
                    322: #define        HME_FLAG_RXCV           0x00000100      /* RXCV enable - XXX */
                    323: #define        HME_FLAG_INIT           0x00000200      /* Initialized once? */
                    324: #define        HME_FLAG_LINKUP         0x00000400      /* Is link up? */
                    325:
                    326: #define        HME_FLAG_20_21          \
                    327:     (HME_FLAG_POLLENABLE | HME_FLAG_FENABLE)
                    328: #define HME_FLAG_NOT_A0 \
                    329:     (HME_FLAG_POLLENABLE | HME_FLAG_FENABLE | HME_FLAG_LANCE | HME_FLAG_RXCV)
                    330:
                    331: /*
                    332:  * Transceiver type
                    333:  */
                    334: #define HME_TCVR_EXTERNAL      0
                    335: #define HME_TCVR_INTERNAL      1
                    336: #define HME_TCVR_NONE          2
                    337:
                    338: struct hme_rxd {
                    339:        volatile u_int32_t      rx_flags;
                    340:        volatile u_int32_t      rx_addr;
                    341: };
                    342: #define        HME_RXD_OWN             0x80000000      /* desc owner: 1=hw,0=sw */
                    343: #define HME_RXD_OVERFLOW       0x40000000      /* 1 = buffer over flow */
                    344: #define HME_RXD_SIZE           0x3fff0000      /* descriptor size */
                    345: #define HME_RXD_CSUM           0x0000ffff      /* checksum mask */
                    346:
                    347: struct hme_txd {
                    348:        volatile u_int32_t      tx_flags;
                    349:        volatile u_int32_t      tx_addr;
                    350: };
                    351: #define        HME_TXD_OWN             0x80000000      /* desc owner: 1=hw,0=sw */
                    352: #define        HME_TXD_SOP             0x40000000      /* 1 = start of pkt */
                    353: #define        HME_TXD_EOP             0x20000000      /* 1 = end of pkt */
                    354: #define        HME_TXD_CSENABLE        0x10000000      /* 1 = use hw checksums */
                    355: #define        HME_TXD_CSLOCATION      0x0ff00000      /* checksum location mask */
                    356: #define        HME_TXD_CSBUFBEGIN      0x000fc000      /* checksum begin mask */
                    357: #define        HME_TXD_SIZE            0x00003fff      /* pkt size mask */
                    358:
                    359: #define HME_RX_RING_SIZE       32              /* Must be 32,64,128, or 256 */
                    360: #define HME_TX_RING_SIZE       32              /* 16<=x<=256 and div by 16 */
                    361: #define HME_RX_RING_MAX                256             /* maximum ring size: rx */
                    362: #define HME_TX_RING_MAX                256             /* maximum ring size: tx */
                    363: #define HME_RX_PKT_BUF_SZ      2048            /* size of a rx buffer */
                    364: #define HME_RX_OFFSET          2               /* packet offset */
                    365: #define HME_RX_CSUMLOC         0x00            /* checksum location */
                    366: #define HME_TX_PKT_BUF_SZ      1546            /* size of a tx buffer */
                    367: #define HME_RX_ALIGN_SIZE      64              /* XXX rx bufs must align 64 */
                    368: #define HME_RX_ALIGN_MASK      (~(RX_ALIGN_SIZE - 1))
                    369:
                    370: struct hme_desc {
                    371:        struct hme_rxd hme_rxd[HME_RX_RING_MAX];
                    372:        struct hme_txd hme_txd[HME_TX_RING_MAX];
                    373: };
                    374:
                    375: struct hme_bufs {
                    376:        char rx_buf[HME_RX_RING_SIZE][HME_RX_PKT_BUF_SZ];
                    377:        char tx_buf[HME_TX_RING_SIZE][HME_TX_PKT_BUF_SZ];
                    378: };

CVSweb