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

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

1.1       nbrk        1: /*     $OpenBSD: bereg.h,v 1.12 2003/06/02 18:40:59 jason Exp $        */
                      2:
                      3: /*
                      4:  * Copyright (c) 1998 Theo de Raadt and Jason L. Wright.
                      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 AUTHORS ``AS IS'' AND ANY EXPRESS OR
                     17:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     18:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     19:  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
                     20:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     21:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     22:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     23:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     24:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     25:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     26:  */
                     27:
                     28: /*
                     29:  * BE Global registers
                     30:  */
                     31: struct be_bregs {
                     32:        volatile u_int32_t xif_cfg;             /* XIF config */
                     33:        volatile u_int32_t _unused[63];         /* reserved */
                     34:        volatile u_int32_t stat;                /* status, clear on read */
                     35:        volatile u_int32_t imask;               /* interrupt mask */
                     36:        volatile u_int32_t _unused2[64];        /* reserved */
                     37:        volatile u_int32_t tx_swreset;          /* tx software reset */
                     38:        volatile u_int32_t tx_cfg;              /* tx config */
                     39:        volatile u_int32_t ipkt_gap1;           /* inter-packet gap 1 */
                     40:        volatile u_int32_t ipkt_gap2;           /* inter-packet gap 2 */
                     41:        volatile u_int32_t attempt_limit;       /* tx attempt limit */
                     42:        volatile u_int32_t stime;               /* tx slot time */
                     43:        volatile u_int32_t preamble_len;        /* size of tx preamble */
                     44:        volatile u_int32_t preamble_pattern;    /* pattern for tx preamble */
                     45:        volatile u_int32_t tx_sframe_delim;     /* tx delimiter */
                     46:        volatile u_int32_t jsize;               /* jam length */
                     47:        volatile u_int32_t tx_pkt_max;          /* tx max pkt size */
                     48:        volatile u_int32_t tx_pkt_min;          /* tx min pkt size */
                     49:        volatile u_int32_t peak_attempt;        /* count of tx peak attempts */
                     50:        volatile u_int32_t dt_ctr;              /* tx defer timer */
                     51:        volatile u_int32_t nc_ctr;              /* tx normal collision cntr */
                     52:        volatile u_int32_t fc_ctr;              /* tx first-collision cntr */
                     53:        volatile u_int32_t ex_ctr;              /* tx excess-collision cntr */
                     54:        volatile u_int32_t lt_ctr;              /* tx late-collision cntr */
                     55:        volatile u_int32_t rand_seed;           /* tx random number seed */
                     56:        volatile u_int32_t tx_smachine;         /* tx state machine */
                     57:        volatile u_int32_t _unused3[44];        /* reserved */
                     58:        volatile u_int32_t rx_swreset;          /* rx software reset */
                     59:        volatile u_int32_t rx_cfg;              /* rx config register */
                     60:        volatile u_int32_t rx_pkt_max;          /* rx max pkt size */
                     61:        volatile u_int32_t rx_pkt_min;          /* rx min pkt size */
                     62:        volatile u_int32_t mac_addr2;           /* ethernet address 2 (MSB) */
                     63:        volatile u_int32_t mac_addr1;           /* ethernet address 1 */
                     64:        volatile u_int32_t mac_addr0;           /* ethernet address 0 (LSB) */
                     65:        volatile u_int32_t fr_ctr;              /* rx frame receive cntr */
                     66:        volatile u_int32_t gle_ctr;             /* rx giant-len error cntr */
                     67:        volatile u_int32_t unale_ctr;           /* rx unaligned error cntr */
                     68:        volatile u_int32_t rcrce_ctr;           /* rx CRC error cntr */
                     69:        volatile u_int32_t rx_smachine;         /* rx state machine */
                     70:        volatile u_int32_t rx_cvalid;           /* rx code violation */
                     71:        volatile u_int32_t _unused4;            /* reserved */
                     72:        volatile u_int32_t htable3;             /* hash table 3 */
                     73:        volatile u_int32_t htable2;             /* hash table 2 */
                     74:        volatile u_int32_t htable1;             /* hash table 1 */
                     75:        volatile u_int32_t htable0;             /* hash table 0 */
                     76:        volatile u_int32_t afilter2;            /* address filter 2 */
                     77:        volatile u_int32_t afilter1;            /* address filter 1 */
                     78:        volatile u_int32_t afilter0;            /* address filter 0 */
                     79:        volatile u_int32_t afilter_mask;        /* address filter mask */
                     80: };
                     81:
                     82: /* be_bregs.xif_cfg: XIF config. */
                     83: #define BE_BR_XCFG_ODENABLE    0x00000001      /* output driver enable */
                     84: #define BE_BR_XCFG_RESV                0x00000002      /* reserved, write as 1 */
                     85: #define BE_BR_XCFG_MLBACK      0x00000004      /* loopback-mode mii enable */
                     86: #define BE_BR_XCFG_SMODE       0x00000008      /* enable serial mode */
                     87:
                     88: /* be_bregs.stat: status, clear on read. */
                     89: #define BE_BR_STAT_GOTFRAME    0x00000001      /* received a frame */
                     90: #define BE_BR_STAT_RCNTEXP     0x00000002      /* rx frame cntr expired */
                     91: #define BE_BR_STAT_ACNTEXP     0x00000004      /* align-error cntr expired */
                     92: #define BE_BR_STAT_CCNTEXP     0x00000008      /* crc-error cntr expired */
                     93: #define BE_BR_STAT_LCNTEXP     0x00000010      /* length-error cntr expired */
                     94: #define BE_BR_STAT_RFIFOVF     0x00000020      /* rx fifo overflow */
                     95: #define BE_BR_STAT_CVCNTEXP    0x00000040      /* code-violation cntr exprd */
                     96: #define BE_BR_STAT_SENTFRAME   0x00000100      /* transmitted a frame */
                     97: #define BE_BR_STAT_TFIFO_UND   0x00000200      /* tx fifo underrun */
                     98: #define BE_BR_STAT_MAXPKTERR   0x00000400      /* max-packet size error */
                     99: #define BE_BR_STAT_NCNTEXP     0x00000800      /* normal-collision cntr exp */
                    100: #define BE_BR_STAT_ECNTEXP     0x00001000      /* excess-collision cntr exp */
                    101: #define BE_BR_STAT_LCCNTEXP    0x00002000      /* late-collision cntr exp */
                    102: #define BE_BR_STAT_FCNTEXP     0x00004000      /* first-collision cntr exp */
                    103: #define BE_BR_STAT_DTIMEXP     0x00008000      /* defer-timer expired */
                    104:
                    105: #define BE_BR_STAT_BITS                "\20\1RX\2RCNT\3ACNT\4CCNT\5LCNT\6RFIFO\7CVCNT\11TX\12TFIFO\13TMAXPKT\14NCNT\15ECNT\16LCCNT\17ECNT\20DTIME"
                    106:
                    107: /* be_bregs.imask: interrupt mask. */
                    108: #define BE_BR_IMASK_GOTFRAME   0x00000001      /* received a frame */
                    109: #define BE_BR_IMASK_RCNTEXP    0x00000002      /* rx frame cntr expired */
                    110: #define BE_BR_IMASK_ACNTEXP    0x00000004      /* align-error cntr expired */
                    111: #define BE_BR_IMASK_CCNTEXP    0x00000008      /* crc-error cntr expired */
                    112: #define BE_BR_IMASK_LCNTEXP    0x00000010      /* length-error cntr expired */
                    113: #define BE_BR_IMASK_RFIFOVF    0x00000020      /* rx fifo overflow */
                    114: #define BE_BR_IMASK_CVCNTEXP   0x00000040      /* code-violation cntr exprd */
                    115: #define BE_BR_IMASK_SENTFRAME  0x00000100      /* transmitted a frame */
                    116: #define BE_BR_IMASK_TFIFO_UND  0x00000200      /* tx fifo underrun */
                    117: #define BE_BR_IMASK_MAXPKTERR  0x00000400      /* max-packet size error */
                    118: #define BE_BR_IMASK_NCNTEXP    0x00000800      /* normal-collision cntr exp */
                    119: #define BE_BR_IMASK_ECNTEXP    0x00001000      /* excess-collision cntr exp */
                    120: #define BE_BR_IMASK_LCCNTEXP   0x00002000      /* late-collision cntr exp */
                    121: #define BE_BR_IMASK_FCNTEXP    0x00004000      /* first-collision cntr exp */
                    122: #define BE_BR_IMASK_DTIMEXP    0x00008000      /* defer-timer expired */
                    123:
                    124: /* be_bregs.tx_cfg: tx config. */
                    125: #define BE_BR_TXCFG_ENABLE     0x00000001      /* enable the transmitter */
                    126: #define BE_BR_TXCFG_FIFO       0x00000010      /* default tx fthresh */
                    127: #define BE_BR_TXCFG_SMODE      0x00000020      /* enable slow transmit mode */
                    128: #define BE_BR_TXCFG_CIGN       0x00000040      /* ignore tx collisions */
                    129: #define BE_BR_TXCFG_FCSOFF     0x00000080      /* do not emit fcs */
                    130: #define BE_BR_TXCFG_DBACKOFF   0x00000100      /* disable backoff */
                    131: #define BE_BR_TXCFG_FULLDPLX   0x00000200      /* enable full-duplex */
                    132:
                    133: /* be_bregs.rx_cfg: rx config. */
                    134: #define BE_BR_RXCFG_ENABLE     0x00000001      /* enable the receiver */
                    135: #define BE_BR_RXCFG_FIFO       0x0000000e      /* default rx fthresh */
                    136: #define BE_BR_RXCFG_PSTRIP     0x00000020      /* pad byte strip enable */
                    137: #define BE_BR_RXCFG_PMISC      0x00000040      /* enable promiscous mode */
                    138: #define BE_BR_RXCFG_DERR       0x00000080      /* disable error checking */
                    139: #define BE_BR_RXCFG_DCRCS      0x00000100      /* disable crc stripping */
                    140: #define BE_BR_RXCFG_ME         0x00000200      /* receive packets for me */
                    141: #define BE_BR_RXCFG_PGRP       0x00000400      /* enable promisc group mode */
                    142: #define BE_BR_RXCFG_HENABLE    0x00000800      /* enable hash filter */
                    143: #define BE_BR_RXCFG_AENABLE    0x00001000      /* enable address filter */
                    144:
                    145: /*
                    146:  * BE Channel registers
                    147:  */
                    148: struct be_cregs {
                    149:        volatile u_int32_t ctrl;                /* control */
                    150:        volatile u_int32_t stat;                /* status */
                    151:        volatile u_int32_t rxds;                /* rx descriptor ring ptr */
                    152:        volatile u_int32_t txds;                /* tx descriptor ring ptr */
                    153:        volatile u_int32_t rimask;              /* rx interrupt mask */
                    154:        volatile u_int32_t timask;              /* tx interrupt mask */
                    155:        volatile u_int32_t qmask;               /* qec error interrupt mask */
                    156:        volatile u_int32_t bmask;               /* be error interrupt mask */
                    157:        volatile u_int32_t rxwbufptr;           /* local memory rx write ptr */
                    158:        volatile u_int32_t rxrbufptr;           /* local memory rx read ptr */
                    159:        volatile u_int32_t txwbufptr;           /* local memory tx write ptr */
                    160:        volatile u_int32_t txrbufptr;           /* local memory tx read ptr */
                    161:        volatile u_int32_t ccnt;                /* collision counter */
                    162: };
                    163:
                    164: /* be_cregs.ctrl: control. */
                    165: #define        BE_CR_CTRL_TWAKEUP      0x00000001      /* tx dma wakeup */
                    166:
                    167: /* be_cregs.stat: status. */
                    168: #define BE_CR_STAT_BERROR      0x80000000      /* be error */
                    169: #define BE_CR_STAT_TXIRQ       0x00200000      /* tx interrupt */
                    170: #define BE_CR_STAT_TXDERR      0x00080000      /* tx descriptor is bad */
                    171: #define BE_CR_STAT_TXLERR      0x00040000      /* tx late error */
                    172: #define BE_CR_STAT_TXPERR      0x00020000      /* tx parity error */
                    173: #define BE_CR_STAT_TXSERR      0x00010000      /* tx sbus error ack */
                    174: #define BE_CR_STAT_RXIRQ       0x00000020      /* rx interrupt */
                    175: #define BE_CR_STAT_RXDROP      0x00000010      /* rx packet dropped */
                    176: #define BE_CR_STAT_RXSMALL     0x00000008      /* rx buffer too small */
                    177: #define BE_CR_STAT_RXLERR      0x00000004      /* rx late error */
                    178: #define BE_CR_STAT_RXPERR      0x00000002      /* rx parity error */
                    179: #define BE_CR_STAT_RXSERR      0x00000001      /* rx sbus error ack */
                    180:
                    181: /*
                    182:  * All bits except rxirq/txirq
                    183:  */
                    184: #define        BE_CR_STAT_ERRORS       \
                    185:                        (BE_CR_STAT_BERROR |                            \
                    186:                         BE_CR_STAT_TXDERR | BE_CR_STAT_TXLERR |        \
                    187:                         BE_CR_STAT_TXPERR | BE_CR_STAT_TXSERR |        \
                    188:                         BE_CR_STAT_RXDROP | BE_CR_STAT_RXSMALL |       \
                    189:                         BE_CR_STAT_RXLERR | BE_CR_STAT_RXPERR |        \
                    190:                         BE_CR_STAT_RXSERR)
                    191:
                    192: #define        BE_CR_STAT_BITS         \
                    193:     "\20\1RXS\2RXP\3RXL\4RXSMALL\5RXDROP\6RX\21TXS\22TXP\23TXL\24TXD\26TX\40BE"
                    194:
                    195: /* be_cregs.qmask: qec error interrupt mask. */
                    196: #define BE_CR_QMASK_TXDERR     0x00080000      /* tx descriptor is bad */
                    197: #define BE_CR_QMASK_TXLERR     0x00040000      /* tx late error */
                    198: #define BE_CR_QMASK_TXPERR     0x00020000      /* tx parity error */
                    199: #define BE_CR_QMASK_TXSERR     0x00010000      /* tx sbus error ack */
                    200: #define BE_CR_QMASK_RXDROP     0x00000010      /* rx packet dropped */
                    201: #define BE_CR_QMASK_RXSMALL    0x00000008      /* rx buffer too small */
                    202: #define BE_CR_QMASK_RXLERR     0x00000004      /* rx late error */
                    203: #define BE_CR_QMASK_RXPERR     0x00000002      /* rx parity error */
                    204: #define BE_CR_QMASK_RXSERR     0x00000001      /* rx sbus error ack */
                    205:
                    206: /*
                    207:  * BE Transceiver registers
                    208:  */
                    209: struct be_tregs {
                    210:        volatile u_int32_t      tcvr_pal;       /* transceiver pal */
                    211:        volatile u_int32_t      mgmt_pal;       /* management pal */
                    212: };
                    213:
                    214: /* be_tregs.tcvr_pal: transceiver pal */
                    215: #define        TCVR_PAL_SERIAL         0x00000001      /* serial mode enable */
                    216: #define TCVR_PAL_EXTLBACK      0x00000002      /* external loopback */
                    217: #define TCVR_PAL_MSENSE                0x00000004      /* media sense */
                    218: #define TCVR_PAL_LTENABLE      0x00000008      /* link test enable */
                    219: #define TCVR_PAL_LTSTATUS      0x00000010      /* link test status: p1 only */
                    220:
                    221: /* be_tregs.mgmt_pal: management pal */
                    222: #define MGMT_PAL_DCLOCK                0x00000001      /* data clock strobe */
                    223: #define MGMT_PAL_OENAB         0x00000002      /* output enable */
                    224: #define MGMT_PAL_MDIO          0x00000004      /* MDIO data/attached */
                    225: #define MGMT_PAL_EXT_MDIO      MGMT_PAL_MDIO   /* external mdio */
                    226: #define MGMT_PAL_TIMEO         0x00000008      /* tx enable timeout error */
                    227: #define MGMT_PAL_INT_MDIO      MGMT_PAL_TIMEO  /* internal mdio */
                    228:
                    229: /*
                    230:  * BE receive descriptor
                    231:  */
                    232: struct be_rxd {
                    233:        volatile u_int32_t rx_flags;            /* rx descriptor flags */
                    234:        volatile u_int32_t rx_addr;             /* rx buffer address */
                    235: };
                    236:
                    237: #define BE_RXD_OWN             0x80000000      /* ownership: 1=hw, 0=sw */
                    238: #define BE_RXD_UPDATE          0x10000000      /* being updated? */
                    239: #define BE_RXD_LENGTH          0x00001fff      /* packet length */
                    240:
                    241: /*
                    242:  * BE transmit descriptor
                    243:  */
                    244: struct be_txd {
                    245:        volatile u_int32_t tx_flags;            /* tx descriptor flags */
                    246:        volatile u_int32_t tx_addr;             /* tx buffer address */
                    247: };
                    248:
                    249: #define BE_TXD_OWN             0x80000000      /* ownership: 1=hw, 0=sw */
                    250: #define BE_TXD_SOP             0x40000000      /* start of packet marker */
                    251: #define BE_TXD_EOP             0x20000000      /* end of packet marker */
                    252: #define BE_TXD_UPDATE          0x10000000      /* being updated? */
                    253: #define BE_TXD_LENGTH          0x00001fff      /* packet length */
                    254:
                    255: /* Buffer and Ring sizes: fixed ring size */
                    256: #define BE_TX_RING_MAXSIZE     256             /* maximum tx ring size */
                    257: #define BE_RX_RING_MAXSIZE     256             /* maximum rx ring size */
                    258: #define BE_TX_RING_SIZE                32              /* power of 2, <= MAXSIZE */
                    259: #define BE_RX_RING_SIZE                32              /* power of 2, <= MAXSIZE */
                    260: #define BE_PKT_BUF_SZ          2048
                    261: #define        BE_TX_HIGH_WATER        27              /* enable tx interrupt */
                    262: #define        BE_TX_LOW_WATER         5               /* disable tx interrupt */
                    263:
                    264: #define        BE_TX_RING_MAXMASK      (BE_TX_RING_MAXSIZE-1)
                    265: #define        BE_RX_RING_MAXMASK      (BE_RX_RING_MAXSIZE-1)
                    266: #define        BE_TX_RING_MASK         (BE_TX_RING_SIZE-1)
                    267: #define        BE_RX_RING_MASK         (BE_RX_RING_SIZE-1)
                    268:
                    269: /*
                    270:  * BE descriptor rings
                    271:  */
                    272: struct be_desc {
                    273:        struct be_rxd be_rxd[BE_RX_RING_MAXSIZE];
                    274:        struct be_txd be_txd[BE_TX_RING_MAXSIZE];
                    275: };
                    276:
                    277: /*
                    278:  * BE packet buffers
                    279:  */
                    280: struct be_bufs {
                    281:        char    rx_buf[BE_RX_RING_SIZE][BE_PKT_BUF_SZ];
                    282:        char    tx_buf[BE_TX_RING_SIZE][BE_PKT_BUF_SZ];
                    283: };
                    284:
                    285: #define        MC_POLY_BE              0x04c11db7UL    /* mcast crc, big endian */
                    286: #define        MC_POLY_LE              0xedb88320UL    /* mcast crc, little endian */
                    287:
                    288: /* PHY addresses */
                    289: #define BE_PHY_EXTERNAL                0
                    290: #define BE_PHY_INTERNAL                1
                    291:
                    292: /* Transceiver types */
                    293: #define BE_TCVR_NONE           0
                    294: #define BE_TCVR_INTERNAL       1
                    295: #define BE_TCVR_EXTERNAL       2
                    296:
                    297: #define BE_TCVR_READ_INVALID   0xff000000
                    298:
                    299: #define BE_NEGOTIATE_MAXTICKS  16
                    300:
                    301: #define PHY_BMCR               0x00    /* Basic Mode Control Register */
                    302: #define PHY_BMSR               0x01    /* Basic Mode Status Register */
                    303:
                    304: /*
                    305:  * Basic Mode Control Register (BMCR)
                    306:  */
                    307: #define PHY_BMCR_RESET         0x8000  /* Software reset               */
                    308: #define PHY_BMCR_LOOPBACK      0x4000  /* Lookback enable              */
                    309: #define PHY_BMCR_SPEED         0x2000  /* 1=100Mb, 0=10Mb              */
                    310: #define PHY_BMCR_ANE           0x1000  /* Auto-Negiation enable        */
                    311: #define PHY_BMCR_PDOWN         0x0800  /* power down the chip          */
                    312: #define PHY_BMCR_ISOLATE       0x0400  /* Isolate the chip             */
                    313: #define PHY_BMCR_RAN           0x0200  /* Restart autonegotiation      */
                    314: #define PHY_BMCR_DUPLEX                0x0100  /* 1=full, 0=half               */
                    315: #define PHY_BMCR_COLLISONTEST  0x0080  /* Create collisions on TX      */
                    316:
                    317: /*
                    318:  * Basic Mode Status Register (BMSR)
                    319:  */
                    320: #define PHY_BMSR_100BASET4     0x8000  /* 100BaseT4 capable?           */
                    321: #define PHY_BMSR_100BASETX_FULL        0x4000  /* 100BaseTX full duplex cap?   */
                    322: #define PHY_BMSR_100BASETX_HALF        0x2000  /* 100BaseTX half duplex cap?   */
                    323: #define PHY_BMSR_10BASET_FULL  0x1000  /* 10BaseT full duplex cap?     */
                    324: #define PHY_BMSR_10BASET_HALF  0x0800  /* 10BaseT half duplex cap?     */
                    325: #define PHY_BMSR_ANCOMPLETE    0x0020  /* auto-negotiation complete?   */
                    326: #define PHY_BMSR_REMOTEFAULT   0x0010  /* Fault condition seen?        */
                    327: #define PHY_BMSR_ANC           0x0008  /* Can auto-negotiate?          */
                    328: #define PHY_BMSR_LINKSTATUS    0x0004  /* Link established?            */
                    329: #define PHY_BMSR_JABBER                0x0002  /* Jabber detected?             */
                    330: #define PHY_BMSR_EXTENDED      0x0001  /* Extended registers?          */

CVSweb