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

Annotation of sys/dev/sbus/bereg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: bereg.h,v 1.3 2006/05/29 20:40:03 miod Exp $  */
        !             2: /*     $NetBSD: bereg.h,v 1.4 2000/07/24 04:28:51 mycroft Exp $        */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 1999 The NetBSD Foundation, Inc.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * This code is derived from software contributed to The NetBSD Foundation
        !             9:  * by Paul Kranenburg.
        !            10:  *
        !            11:  * Redistribution and use in source and binary forms, with or without
        !            12:  * modification, are permitted provided that the following conditions
        !            13:  * are met:
        !            14:  * 1. Redistributions of source code must retain the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer.
        !            16:  * 2. Redistributions in binary form must reproduce the above copyright
        !            17:  *    notice, this list of conditions and the following disclaimer in the
        !            18:  *    documentation and/or other materials provided with the distribution.
        !            19:  * 3. All advertising materials mentioning features or use of this software
        !            20:  *    must display the following acknowledgement:
        !            21:  *        This product includes software developed by the NetBSD
        !            22:  *        Foundation, Inc. and its contributors.
        !            23:  * 4. Neither the name of The NetBSD Foundation nor the names of its
        !            24:  *    contributors may be used to endorse or promote products derived
        !            25:  *    from this software without specific prior written permission.
        !            26:  *
        !            27:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
        !            28:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
        !            29:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        !            30:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
        !            31:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        !            32:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        !            33:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        !            34:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        !            35:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            36:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            37:  * POSSIBILITY OF SUCH DAMAGE.
        !            38:  */
        !            39:
        !            40: /*
        !            41:  * Copyright (c) 1998 Theo de Raadt and Jason L. Wright.
        !            42:  * All rights reserved.
        !            43:  *
        !            44:  * Redistribution and use in source and binary forms, with or without
        !            45:  * modification, are permitted provided that the following conditions
        !            46:  * are met:
        !            47:  * 1. Redistributions of source code must retain the above copyright
        !            48:  *    notice, this list of conditions and the following disclaimer.
        !            49:  * 2. Redistributions in binary form must reproduce the above copyright
        !            50:  *    notice, this list of conditions and the following disclaimer in the
        !            51:  *    documentation and/or other materials provided with the distribution.
        !            52:  *
        !            53:  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
        !            54:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            55:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            56:  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            57:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            58:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            59:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            60:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            61:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            62:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            63:  */
        !            64:
        !            65: /*
        !            66:  * BE Global registers
        !            67:  */
        !            68: #if 0
        !            69: struct be_bregs {
        !            70:        u_int32_t xif_cfg;              /* XIF config */
        !            71:        u_int32_t _unused[63];          /* reserved */
        !            72:        u_int32_t stat;                 /* status, clear on read */
        !            73:        u_int32_t imask;                /* interrupt mask */
        !            74:        u_int32_t _unused2[64];         /* reserved */
        !            75:        u_int32_t tx_swreset;           /* tx software reset */
        !            76:        u_int32_t tx_cfg;               /* tx config */
        !            77:        u_int32_t ipkt_gap1;            /* inter-packet gap 1 */
        !            78:        u_int32_t ipkt_gap2;            /* inter-packet gap 2 */
        !            79:        u_int32_t attempt_limit;        /* tx attempt limit */
        !            80:        u_int32_t stime;                /* tx slot time */
        !            81:        u_int32_t preamble_len;         /* size of tx preamble */
        !            82:        u_int32_t preamble_pattern;     /* pattern for tx preamble */
        !            83:        u_int32_t tx_sframe_delim;      /* tx delimiter */
        !            84:        u_int32_t jsize;                /* jam length */
        !            85:        u_int32_t tx_pkt_max;           /* tx max pkt size */
        !            86:        u_int32_t tx_pkt_min;           /* tx min pkt size */
        !            87:        u_int32_t peak_attempt;         /* count of tx peak attempts */
        !            88:        u_int32_t dt_ctr;               /* tx defer timer */
        !            89:        u_int32_t nc_ctr;               /* tx normal collision cntr */
        !            90:        u_int32_t fc_ctr;               /* tx first-collision cntr */
        !            91:        u_int32_t ex_ctr;               /* tx excess-collision cntr */
        !            92:        u_int32_t lt_ctr;               /* tx late-collision cntr */
        !            93:        u_int32_t rand_seed;            /* tx random number seed */
        !            94:        u_int32_t tx_smachine;          /* tx state machine */
        !            95:        u_int32_t _unused3[44];         /* reserved */
        !            96:        u_int32_t rx_swreset;           /* rx software reset */
        !            97:        u_int32_t rx_cfg;               /* rx config register */
        !            98:        u_int32_t rx_pkt_max;           /* rx max pkt size */
        !            99:        u_int32_t rx_pkt_min;           /* rx min pkt size */
        !           100:        u_int32_t mac_addr2;            /* ethernet address 2 (MSB) */
        !           101:        u_int32_t mac_addr1;            /* ethernet address 1 */
        !           102:        u_int32_t mac_addr0;            /* ethernet address 0 (LSB) */
        !           103:        u_int32_t fr_ctr;               /* rx frame receive cntr */
        !           104:        u_int32_t gle_ctr;              /* rx giant-len error cntr */
        !           105:        u_int32_t unale_ctr;            /* rx unaligned error cntr */
        !           106:        u_int32_t rcrce_ctr;            /* rx CRC error cntr */
        !           107:        u_int32_t rx_smachine;          /* rx state machine */
        !           108:        u_int32_t rx_cvalid;            /* rx code violation */
        !           109:        u_int32_t _unused4;             /* reserved */
        !           110:        u_int32_t htable3;              /* hash table 3 */
        !           111:        u_int32_t htable2;              /* hash table 2 */
        !           112:        u_int32_t htable1;              /* hash table 1 */
        !           113:        u_int32_t htable0;              /* hash table 0 */
        !           114:        u_int32_t afilter2;             /* address filter 2 */
        !           115:        u_int32_t afilter1;             /* address filter 1 */
        !           116:        u_int32_t afilter0;             /* address filter 0 */
        !           117:        u_int32_t afilter_mask;         /* address filter mask */
        !           118: };
        !           119: #endif
        !           120: /* register indices: */
        !           121: #define BE_BRI_XIFCFG  (0*4)
        !           122: #define BE_BRI_STAT    (64*4)
        !           123: #define BE_BRI_IMASK   (65*4)
        !           124: #define BE_BRI_TXCFG   (131*4)
        !           125: #define BE_BRI_JSIZE   (139*4)
        !           126: #define BE_BRI_NCCNT   (144*4)
        !           127: #define BE_BRI_FCCNT   (145*4)
        !           128: #define BE_BRI_EXCNT   (146*4)
        !           129: #define BE_BRI_LTCNT   (147*4)
        !           130: #define BE_BRI_RANDSEED        (148*4)
        !           131: #define BE_BRI_RXCFG   (195*4)
        !           132: #define BE_BRI_MACADDR2        (198*4)
        !           133: #define BE_BRI_MACADDR1        (199*4)
        !           134: #define BE_BRI_MACADDR0        (200*4)
        !           135: #define BE_BRI_HASHTAB3        (208*4)
        !           136: #define BE_BRI_HASHTAB2        (209*4)
        !           137: #define BE_BRI_HASHTAB1        (210*4)
        !           138: #define BE_BRI_HASHTAB0        (211*4)
        !           139:
        !           140: /* be_bregs.xif_cfg: XIF config. */
        !           141: #define BE_BR_XCFG_ODENABLE    0x00000001      /* output driver enable */
        !           142: #define BE_BR_XCFG_RESV                0x00000002      /* reserved, write as 1 */
        !           143: #define BE_BR_XCFG_MLBACK      0x00000004      /* loopback-mode mii enable */
        !           144: #define BE_BR_XCFG_SMODE       0x00000008      /* enable serial mode */
        !           145:
        !           146: /* be_bregs.stat: status, clear on read. */
        !           147: #define BE_BR_STAT_GOTFRAME    0x00000001      /* received a frame */
        !           148: #define BE_BR_STAT_RCNTEXP     0x00000002      /* rx frame cntr expired */
        !           149: #define BE_BR_STAT_ACNTEXP     0x00000004      /* align-error cntr expired */
        !           150: #define BE_BR_STAT_CCNTEXP     0x00000008      /* crc-error cntr expired */
        !           151: #define BE_BR_STAT_LCNTEXP     0x00000010      /* length-error cntr expired */
        !           152: #define BE_BR_STAT_RFIFOVF     0x00000020      /* rx fifo overflow */
        !           153: #define BE_BR_STAT_CVCNTEXP    0x00000040      /* code-violation cntr exprd */
        !           154: #define BE_BR_STAT_SENTFRAME   0x00000100      /* transmitted a frame */
        !           155: #define BE_BR_STAT_TFIFO_UND   0x00000200      /* tx fifo underrun */
        !           156: #define BE_BR_STAT_MAXPKTERR   0x00000400      /* max-packet size error */
        !           157: #define BE_BR_STAT_NCNTEXP     0x00000800      /* normal-collision cntr exp */
        !           158: #define BE_BR_STAT_ECNTEXP     0x00001000      /* excess-collision cntr exp */
        !           159: #define BE_BR_STAT_LCCNTEXP    0x00002000      /* late-collision cntr exp */
        !           160: #define BE_BR_STAT_FCNTEXP     0x00004000      /* first-collision cntr exp */
        !           161: #define BE_BR_STAT_DTIMEXP     0x00008000      /* defer-timer expired */
        !           162: #define BE_BR_STAT_BITS                "\020"                          \
        !           163:                        "\01GOTFRAME\02RCNTEXP\03ACNTEXP"               \
        !           164:                        "\04CCNTEXP\05LCNTEXP\06RFIFOVF"                \
        !           165:                        "\07CVCNTEXP\011SENTFRAME\012TFIFO_UND" \
        !           166:                        "\013MAXPKTERR\014NCNTEXP\015ECNTEXP"   \
        !           167:                        "\016LCCNTEXP\017FCNTEXP\020DTIMEXP"
        !           168:
        !           169: /* be_bregs.imask: interrupt mask. */
        !           170: #define BE_BR_IMASK_GOTFRAME   0x00000001      /* received a frame */
        !           171: #define BE_BR_IMASK_RCNTEXP    0x00000002      /* rx frame cntr expired */
        !           172: #define BE_BR_IMASK_ACNTEXP    0x00000004      /* align-error cntr expired */
        !           173: #define BE_BR_IMASK_CCNTEXP    0x00000008      /* crc-error cntr expired */
        !           174: #define BE_BR_IMASK_LCNTEXP    0x00000010      /* length-error cntr expired */
        !           175: #define BE_BR_IMASK_RFIFOVF    0x00000020      /* rx fifo overflow */
        !           176: #define BE_BR_IMASK_CVCNTEXP   0x00000040      /* code-violation cntr exprd */
        !           177: #define BE_BR_IMASK_SENTFRAME  0x00000100      /* transmitted a frame */
        !           178: #define BE_BR_IMASK_TFIFO_UND  0x00000200      /* tx fifo underrun */
        !           179: #define BE_BR_IMASK_MAXPKTERR  0x00000400      /* max-packet size error */
        !           180: #define BE_BR_IMASK_NCNTEXP    0x00000800      /* normal-collision cntr exp */
        !           181: #define BE_BR_IMASK_ECNTEXP    0x00001000      /* excess-collision cntr exp */
        !           182: #define BE_BR_IMASK_LCCNTEXP   0x00002000      /* late-collision cntr exp */
        !           183: #define BE_BR_IMASK_FCNTEXP    0x00004000      /* first-collision cntr exp */
        !           184: #define BE_BR_IMASK_DTIMEXP    0x00008000      /* defer-timer expired */
        !           185:
        !           186: /* be_bregs.tx_cfg: tx config. */
        !           187: #define BE_BR_TXCFG_ENABLE     0x00000001      /* enable the transmitter */
        !           188: #define BE_BR_TXCFG_FIFO       0x00000010      /* default tx fthresh */
        !           189: #define BE_BR_TXCFG_SMODE      0x00000020      /* enable slow transmit mode */
        !           190: #define BE_BR_TXCFG_CIGN       0x00000040      /* ignore tx collisions */
        !           191: #define BE_BR_TXCFG_FCSOFF     0x00000080      /* do not emit fcs */
        !           192: #define BE_BR_TXCFG_DBACKOFF   0x00000100      /* disable backoff */
        !           193: #define BE_BR_TXCFG_FULLDPLX   0x00000200      /* enable full-duplex */
        !           194:
        !           195: /* be_bregs.rx_cfg: rx config. */
        !           196: #define BE_BR_RXCFG_ENABLE     0x00000001      /* enable the receiver */
        !           197: #define BE_BR_RXCFG_FIFO       0x0000000e      /* default rx fthresh */
        !           198: #define BE_BR_RXCFG_PSTRIP     0x00000020      /* pad byte strip enable */
        !           199: #define BE_BR_RXCFG_PMISC      0x00000040      /* enable promiscous mode */
        !           200: #define BE_BR_RXCFG_DERR       0x00000080      /* disable error checking */
        !           201: #define BE_BR_RXCFG_DCRCS      0x00000100      /* disable crc stripping */
        !           202: #define BE_BR_RXCFG_ME         0x00000200      /* receive packets for me */
        !           203: #define BE_BR_RXCFG_PGRP       0x00000400      /* enable promisc group mode */
        !           204: #define BE_BR_RXCFG_HENABLE    0x00000800      /* enable hash filter */
        !           205: #define BE_BR_RXCFG_AENABLE    0x00001000      /* enable address filter */
        !           206:
        !           207: /*
        !           208:  * BE Channel registers
        !           209:  */
        !           210: #if 0
        !           211: struct be_cregs {
        !           212:        u_int32_t ctrl;         /* control */
        !           213:        u_int32_t stat;         /* status */
        !           214:        u_int32_t rxds;         /* rx descriptor ring ptr */
        !           215:        u_int32_t txds;         /* tx descriptor ring ptr */
        !           216:        u_int32_t rimask;       /* rx interrupt mask */
        !           217:        u_int32_t timask;       /* tx interrupt mask */
        !           218:        u_int32_t qmask;        /* qec error interrupt mask */
        !           219:        u_int32_t bmask;        /* be error interrupt mask */
        !           220:        u_int32_t rxwbufptr;    /* local memory rx write ptr */
        !           221:        u_int32_t rxrbufptr;    /* local memory rx read ptr */
        !           222:        u_int32_t txwbufptr;    /* local memory tx write ptr */
        !           223:        u_int32_t txrbufptr;    /* local memory tx read ptr */
        !           224:        u_int32_t ccnt;         /* collision counter */
        !           225: };
        !           226: #endif
        !           227: /* register indices: */
        !           228: #define BE_CRI_CTRL    (0*4)
        !           229: #define BE_CRI_STAT    (1*4)
        !           230: #define BE_CRI_RXDS    (2*4)
        !           231: #define BE_CRI_TXDS    (3*4)
        !           232: #define BE_CRI_RIMASK  (4*4)
        !           233: #define BE_CRI_TIMASK  (5*4)
        !           234: #define BE_CRI_QMASK   (6*4)
        !           235: #define BE_CRI_BMASK   (7*4)
        !           236: #define BE_CRI_RXWBUF  (8*4)
        !           237: #define BE_CRI_RXRBUF  (9*4)
        !           238: #define BE_CRI_TXWBUF  (10*4)
        !           239: #define BE_CRI_TXRBUF  (11*4)
        !           240: #define BE_CRI_CCNT    (12*4)
        !           241:
        !           242: /* be_cregs.ctrl: control. */
        !           243: #define        BE_CR_CTRL_TWAKEUP      0x00000001      /* tx dma wakeup */
        !           244:
        !           245: /* be_cregs.stat: status. */
        !           246: #define BE_CR_STAT_BERROR      0x80000000      /* be error */
        !           247: #define BE_CR_STAT_TXIRQ       0x00200000      /* tx interrupt */
        !           248: #define BE_CR_STAT_TXDERR      0x00080000      /* tx descriptor is bad */
        !           249: #define BE_CR_STAT_TXLERR      0x00040000      /* tx late error */
        !           250: #define BE_CR_STAT_TXPERR      0x00020000      /* tx parity error */
        !           251: #define BE_CR_STAT_TXSERR      0x00010000      /* tx sbus error ack */
        !           252: #define BE_CR_STAT_RXIRQ       0x00000020      /* rx interrupt */
        !           253: #define BE_CR_STAT_RXDROP      0x00000010      /* rx packet dropped */
        !           254: #define BE_CR_STAT_RXSMALL     0x00000008      /* rx buffer too small */
        !           255: #define BE_CR_STAT_RXLERR      0x00000004      /* rx late error */
        !           256: #define BE_CR_STAT_RXPERR      0x00000002      /* rx parity error */
        !           257: #define BE_CR_STAT_RXSERR      0x00000001      /* rx sbus error ack */
        !           258:
        !           259: /* be_cregs.qmask: qec error interrupt mask. */
        !           260: #define BE_CR_QMASK_TXDERR     0x00080000      /* tx descriptor is bad */
        !           261: #define BE_CR_QMASK_TXLERR     0x00040000      /* tx late error */
        !           262: #define BE_CR_QMASK_TXPERR     0x00020000      /* tx parity error */
        !           263: #define BE_CR_QMASK_TXSERR     0x00010000      /* tx sbus error ack */
        !           264: #define BE_CR_QMASK_RXDROP     0x00000010      /* rx packet dropped */
        !           265: #define BE_CR_QMASK_RXSMALL    0x00000008      /* rx buffer too small */
        !           266: #define BE_CR_QMASK_RXLERR     0x00000004      /* rx late error */
        !           267: #define BE_CR_QMASK_RXPERR     0x00000002      /* rx parity error */
        !           268: #define BE_CR_QMASK_RXSERR     0x00000001      /* rx sbus error ack */
        !           269:
        !           270: /*
        !           271:  * BE Transceiver registers
        !           272:  */
        !           273: #if 0
        !           274: struct be_tregs {
        !           275:        u_int32_t       tcvr_pal;       /* transceiver pal */
        !           276:        u_int32_t       mgmt_pal;       /* management pal */
        !           277: };
        !           278: #endif
        !           279: /* register indices: */
        !           280: #define BE_TRI_TCVRPAL 0
        !           281: #define BE_TRI_MGMTPAL 4
        !           282:
        !           283: /* be_tregs.tcvr_pal: transceiver pal */
        !           284: #define        TCVR_PAL_SERIAL         0x00000001      /* serial mode enable */
        !           285: #define TCVR_PAL_EXTLBACK      0x00000002      /* external loopback */
        !           286: #define TCVR_PAL_MSENSE                0x00000004      /* media sense */
        !           287: #define TCVR_PAL_LTENABLE      0x00000008      /* link test enable */
        !           288: #define TCVR_PAL_LTSTATUS      0x00000010      /* link test status: p1 only */
        !           289: #define TCVR_PAL_BITS          "\020"                          \
        !           290:                                "\01SERIAL\02EXTLBACK\03MSENSE" \
        !           291:                                "\04LTENABLE\05LTSTATUS"
        !           292:
        !           293: /* be_tregs.mgmt_pal: management pal */
        !           294: #define MGMT_PAL_DCLOCK                0x00000001      /* data clock strobe */
        !           295: #define MGMT_PAL_OENAB         0x00000002      /* output enable */
        !           296: #define MGMT_PAL_MDIO          0x00000004      /* MDIO data/attached */
        !           297: #define MGMT_PAL_EXT_MDIO      MGMT_PAL_MDIO   /* external mdio */
        !           298: #define MGMT_PAL_EXT_MDIO_SHIFT        2               /* position of ext mdio bit */
        !           299: #define MGMT_PAL_TIMEO         0x00000008      /* tx enable timeout error */
        !           300: #define MGMT_PAL_INT_MDIO      MGMT_PAL_TIMEO  /* internal mdio */
        !           301: #define MGMT_PAL_INT_MDIO_SHIFT        3               /* position of int mdio bit */
        !           302: #define MGMT_PAL_BITS          "\020"                          \
        !           303:                                "\01DLCLOCK\02ENAB\03EXT_MDIO"  \
        !           304:                                "\04INT_MDIO"
        !           305:
        !           306: /* Packet buffer size */
        !           307: #define BE_PKT_BUF_SZ          2048
        !           308:
        !           309: #define        MC_POLY_BE              0x04c11db7UL    /* mcast crc, big endian */
        !           310: #define        MC_POLY_LE              0xedb88320UL    /* mcast crc, little endian */
        !           311:
        !           312: /* PHY addresses */
        !           313: #define BE_PHY_EXTERNAL                0
        !           314: #define BE_PHY_INTERNAL                1

CVSweb