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

Annotation of sys/dev/pci/if_skreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: if_skreg.h,v 1.44 2007/02/26 20:27:17 kettenis Exp $  */
                      2:
                      3: /*
                      4:  * Copyright (c) 1997, 1998, 1999, 2000
                      5:  *     Bill Paul <wpaul@ctr.columbia.edu>.  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:  * 3. All advertising materials mentioning features or use of this software
                     16:  *    must display the following acknowledgement:
                     17:  *     This product includes software developed by Bill Paul.
                     18:  * 4. Neither the name of the author nor the names of any co-contributors
                     19:  *    may be used to endorse or promote products derived from this software
                     20:  *    without specific prior written permission.
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
                     23:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     24:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     25:  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
                     26:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     27:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     28:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     29:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     30:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     31:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
                     32:  * THE POSSIBILITY OF SUCH DAMAGE.
                     33:  *
                     34:  * $FreeBSD: /c/ncvs/src/sys/pci/if_skreg.h,v 1.9 2000/04/22 02:16:37 wpaul Exp $
                     35:  * $FreeBSD: /c/ncvs/src/sys/pci/xmaciireg.h,v 1.3 2000/04/22 02:16:37 wpaul Exp $
                     36:  */
                     37:
                     38: /*
                     39:  * Copyright (c) 2003 Nathan L. Binkert <binkertn@umich.edu>
                     40:  *
                     41:  * Permission to use, copy, modify, and distribute this software for any
                     42:  * purpose with or without fee is hereby granted, provided that the above
                     43:  * copyright notice and this permission notice appear in all copies.
                     44:  *
                     45:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     46:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     47:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     48:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     49:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     50:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     51:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     52:  */
                     53:
                     54: /*
                     55:  * GEnesis registers. The GEnesis chip has a 256-byte I/O window
                     56:  * but internally it has a 16K register space. This 16K space is
                     57:  * divided into 128-byte blocks. The first 128 bytes of the I/O
                     58:  * window represent the first block, which is permanently mapped
                     59:  * at the start of the window. The other 127 blocks can be mapped
                     60:  * to the second 128 bytes of the I/O window by setting the desired
                     61:  * block value in the RAP register in block 0. Not all of the 127
                     62:  * blocks are actually used. Most registers are 32 bits wide, but
                     63:  * there are a few 16-bit and 8-bit ones as well.
                     64:  */
                     65:
                     66: /* Start of remappable register window. */
                     67: #define SK_WIN_BASE            0x0080
                     68:
                     69: /* Size of a window */
                     70: #define SK_WIN_LEN             0x80
                     71:
                     72: #define SK_WIN_MASK            0x3F80
                     73: #define SK_REG_MASK            0x7F
                     74:
                     75: /* Compute the window of a given register (for the RAP register) */
                     76: #define SK_WIN(reg)            (((reg) & SK_WIN_MASK) / SK_WIN_LEN)
                     77:
                     78: /* Compute the relative offset of a register within the window */
                     79: #define SK_REG(reg)            ((reg) & SK_REG_MASK)
                     80:
                     81: #define SK_PORT_A      0
                     82: #define SK_PORT_B      1
                     83:
                     84: /*
                     85:  * Compute offset of port-specific register. Since there are two
                     86:  * ports, there are two of some GEnesis modules (e.g. two sets of
                     87:  * DMA queues, two sets of FIFO control registers, etc...). Normally,
                     88:  * the block for port 0 is at offset 0x0 and the block for port 1 is
                     89:  * at offset 0x80 (i.e. the next page over). However for the transmit
                     90:  * BMUs and RAMbuffers, there are two blocks for each port: one for
                     91:  * the sync transmit queue and one for the async queue (which we don't
                     92:  * use). However instead of ordering them like this:
                     93:  * TX sync 1 / TX sync 2 / TX async 1 / TX async 2
                     94:  * SysKonnect has instead ordered them like this:
                     95:  * TX sync 1 / TX async 1 / TX sync 2 / TX async 2
                     96:  * This means that when referencing the TX BMU and RAMbuffer registers,
                     97:  * we have to double the block offset (0x80 * 2) in order to reach the
                     98:  * second queue. This prevents us from using the same formula
                     99:  * (sk_port * 0x80) to compute the offsets for all of the port-specific
                    100:  * blocks: we need an extra offset for the BMU and RAMbuffer registers.
                    101:  * The simplest thing is to provide an extra argument to these macros:
                    102:  * the 'skip' parameter. The 'skip' value is the number of extra pages
                    103:  * for skip when computing the port0/port1 offsets. For most registers,
                    104:  * the skip value is 0; for the BMU and RAMbuffer registers, it's 1.
                    105:  */
                    106: #define SK_IF_READ_4(sc_if, skip, reg)         \
                    107:        sk_win_read_4(sc_if->sk_softc, reg +    \
                    108:        ((sc_if->sk_port * (skip + 1)) * SK_WIN_LEN))
                    109: #define SK_IF_READ_2(sc_if, skip, reg)         \
                    110:        sk_win_read_2(sc_if->sk_softc, reg +    \
                    111:        ((sc_if->sk_port * (skip + 1)) * SK_WIN_LEN))
                    112: #define SK_IF_READ_1(sc_if, skip, reg)         \
                    113:        sk_win_read_1(sc_if->sk_softc, reg +    \
                    114:        ((sc_if->sk_port * (skip + 1)) * SK_WIN_LEN))
                    115:
                    116: #define SK_IF_WRITE_4(sc_if, skip, reg, val)   \
                    117:        sk_win_write_4(sc_if->sk_softc,         \
                    118:        reg + ((sc_if->sk_port * (skip + 1)) * SK_WIN_LEN), val)
                    119: #define SK_IF_WRITE_2(sc_if, skip, reg, val)   \
                    120:        sk_win_write_2(sc_if->sk_softc,         \
                    121:        reg + ((sc_if->sk_port * (skip + 1)) * SK_WIN_LEN), val)
                    122: #define SK_IF_WRITE_1(sc_if, skip, reg, val)   \
                    123:        sk_win_write_1(sc_if->sk_softc,         \
                    124:        reg + ((sc_if->sk_port * (skip + 1)) * SK_WIN_LEN), val)
                    125:
                    126: /* Block 0 registers, permanently mapped at iobase. */
                    127: #define SK_RAP         0x0000
                    128: #define SK_CSR         0x0004
                    129: #define SK_LED         0x0006
                    130: #define SK_ISR         0x0008  /* interrupt source */
                    131: #define SK_IMR         0x000C  /* interrupt mask */
                    132: #define SK_IESR                0x0010  /* interrupt hardware error source */
                    133: #define SK_IEMR                0x0014  /* interrupt hardware error mask */
                    134: #define SK_ISSR                0x0018  /* special interrupt source */
                    135: #define SK_Y2_ISSR2    0x001C
                    136: #define SK_Y2_ISSR3    0x0020
                    137: #define SK_Y2_EISR     0x0024
                    138: #define SK_Y2_LISR     0x0028
                    139: #define SK_Y2_ICR      0x002C
                    140: #define SK_XM_IMR0     0x0020
                    141: #define SK_XM_ISR0     0x0028
                    142: #define SK_XM_PHYADDR0 0x0030
                    143: #define SK_XM_PHYDATA0 0x0034
                    144: #define SK_XM_IMR1     0x0040
                    145: #define SK_XM_ISR1     0x0048
                    146: #define SK_XM_PHYADDR1 0x0050
                    147: #define SK_XM_PHYDATA1 0x0054
                    148: #define SK_BMU_RX_CSR0 0x0060
                    149: #define SK_BMU_RX_CSR1 0x0064
                    150: #define SK_BMU_TXS_CSR0        0x0068
                    151: #define SK_BMU_TXA_CSR0        0x006C
                    152: #define SK_BMU_TXS_CSR1        0x0070
                    153: #define SK_BMU_TXA_CSR1        0x0074
                    154:
                    155: /* SK_CSR register */
                    156: #define SK_CSR_SW_RESET                        0x0001
                    157: #define SK_CSR_SW_UNRESET              0x0002
                    158: #define SK_CSR_MASTER_RESET            0x0004
                    159: #define SK_CSR_MASTER_UNRESET          0x0008
                    160: #define SK_CSR_MASTER_STOP             0x0010
                    161: #define SK_CSR_MASTER_DONE             0x0020
                    162: #define SK_CSR_SW_IRQ_CLEAR            0x0040
                    163: #define SK_CSR_SW_IRQ_SET              0x0080
                    164: #define SK_CSR_SLOTSIZE                        0x0100 /* 1 == 64 bits, 0 == 32 */
                    165: #define SK_CSR_BUSCLOCK                        0x0200 /* 1 == 33/66 MHz, = 33 */
                    166: #define SK_CSR_ASF_OFF                 0x1000
                    167: #define SK_CSR_ASF_ON                  0x2000
                    168:
                    169: /* SK_LED register */
                    170: #define SK_LED_GREEN_OFF               0x01
                    171: #define SK_LED_GREEN_ON                        0x02
                    172:
                    173: /* SK_ISR register */
                    174: #define SK_ISR_TX2_AS_CHECK            0x00000001
                    175: #define SK_ISR_TX2_AS_EOF              0x00000002
                    176: #define SK_ISR_TX2_AS_EOB              0x00000004
                    177: #define SK_ISR_TX2_S_CHECK             0x00000008
                    178: #define SK_ISR_TX2_S_EOF               0x00000010
                    179: #define SK_ISR_TX2_S_EOB               0x00000020
                    180: #define SK_ISR_TX1_AS_CHECK            0x00000040
                    181: #define SK_ISR_TX1_AS_EOF              0x00000080
                    182: #define SK_ISR_TX1_AS_EOB              0x00000100
                    183: #define SK_ISR_TX1_S_CHECK             0x00000200
                    184: #define SK_ISR_TX1_S_EOF               0x00000400
                    185: #define SK_ISR_TX1_S_EOB               0x00000800
                    186: #define SK_ISR_RX2_CHECK               0x00001000
                    187: #define SK_ISR_RX2_EOF                 0x00002000
                    188: #define SK_ISR_RX2_EOB                 0x00004000
                    189: #define SK_ISR_RX1_CHECK               0x00008000
                    190: #define SK_ISR_RX1_EOF                 0x00010000
                    191: #define SK_ISR_RX1_EOB                 0x00020000
                    192: #define SK_ISR_LINK2_OFLOW             0x00040000
                    193: #define SK_ISR_MAC2                    0x00080000
                    194: #define SK_ISR_LINK1_OFLOW             0x00100000
                    195: #define SK_ISR_MAC1                    0x00200000
                    196: #define SK_ISR_TIMER                   0x00400000
                    197: #define SK_ISR_EXTERNAL_REG            0x00800000
                    198: #define SK_ISR_SW                      0x01000000
                    199: #define SK_ISR_I2C_RDY                 0x02000000
                    200: #define SK_ISR_TX2_TIMEO               0x04000000
                    201: #define SK_ISR_TX1_TIMEO               0x08000000
                    202: #define SK_ISR_RX2_TIMEO               0x10000000
                    203: #define SK_ISR_RX1_TIMEO               0x20000000
                    204: #define SK_ISR_RSVD                    0x40000000
                    205: #define SK_ISR_HWERR                   0x80000000
                    206:
                    207: /* SK_IMR register */
                    208: #define SK_IMR_TX2_AS_CHECK            0x00000001
                    209: #define SK_IMR_TX2_AS_EOF              0x00000002
                    210: #define SK_IMR_TX2_AS_EOB              0x00000004
                    211: #define SK_IMR_TX2_S_CHECK             0x00000008
                    212: #define SK_IMR_TX2_S_EOF               0x00000010
                    213: #define SK_IMR_TX2_S_EOB               0x00000020
                    214: #define SK_IMR_TX1_AS_CHECK            0x00000040
                    215: #define SK_IMR_TX1_AS_EOF              0x00000080
                    216: #define SK_IMR_TX1_AS_EOB              0x00000100
                    217: #define SK_IMR_TX1_S_CHECK             0x00000200
                    218: #define SK_IMR_TX1_S_EOF               0x00000400
                    219: #define SK_IMR_TX1_S_EOB               0x00000800
                    220: #define SK_IMR_RX2_CHECK               0x00001000
                    221: #define SK_IMR_RX2_EOF                 0x00002000
                    222: #define SK_IMR_RX2_EOB                 0x00004000
                    223: #define SK_IMR_RX1_CHECK               0x00008000
                    224: #define SK_IMR_RX1_EOF                 0x00010000
                    225: #define SK_IMR_RX1_EOB                 0x00020000
                    226: #define SK_IMR_LINK2_OFLOW             0x00040000
                    227: #define SK_IMR_MAC2                    0x00080000
                    228: #define SK_IMR_LINK1_OFLOW             0x00100000
                    229: #define SK_IMR_MAC1                    0x00200000
                    230: #define SK_IMR_TIMER                   0x00400000
                    231: #define SK_IMR_EXTERNAL_REG            0x00800000
                    232: #define SK_IMR_SW                      0x01000000
                    233: #define SK_IMR_I2C_RDY                 0x02000000
                    234: #define SK_IMR_TX2_TIMEO               0x04000000
                    235: #define SK_IMR_TX1_TIMEO               0x08000000
                    236: #define SK_IMR_RX2_TIMEO               0x10000000
                    237: #define SK_IMR_RX1_TIMEO               0x20000000
                    238: #define SK_IMR_RSVD                    0x40000000
                    239: #define SK_IMR_HWERR                   0x80000000
                    240:
                    241: #define SK_INTRS1      \
                    242:        (SK_IMR_RX1_EOF|SK_IMR_TX1_S_EOF|SK_IMR_MAC1)
                    243:
                    244: #define SK_INTRS2      \
                    245:        (SK_IMR_RX2_EOF|SK_IMR_TX2_S_EOF|SK_IMR_MAC2)
                    246:
                    247: #define SK_Y2_IMR_TX1_AS_CHECK         0x00000001
                    248: #define SK_Y2_IMR_TX1_S_CHECK          0x00000002
                    249: #define SK_Y2_IMR_RX1_CHECK            0x00000004
                    250: #define SK_Y2_IMR_MAC1                 0x00000008
                    251: #define SK_Y2_IMR_PHY1                 0x00000010
                    252: #define SK_Y2_IMR_TX2_AS_CHECK         0x00000100
                    253: #define SK_Y2_IMR_TX2_S_CHECK          0x00000200
                    254: #define SK_Y2_IMR_RX2_CHECK            0x00000400
                    255: #define SK_Y2_IMR_MAC2                 0x00000800
                    256: #define SK_Y2_IMR_PHY2                 0x00001000
                    257: #define SK_Y2_IMR_TIMER                        0x01000000
                    258: #define SK_Y2_IMR_SW                   0x02000000
                    259: #define SK_Y2_IMR_ASF                  0x20000000
                    260: #define SK_Y2_IMR_BMU                  0x40000000
                    261: #define SK_Y2_IMR_HWERR                        0x80000000
                    262:
                    263: #define SK_Y2_INTRS1   \
                    264:        (SK_Y2_IMR_RX1_CHECK|SK_Y2_IMR_TX1_AS_CHECK \
                    265:        |SK_Y2_IMR_MAC1|SK_Y2_IMR_PHY1)
                    266:
                    267: #define SK_Y2_INTRS2   \
                    268:        (SK_Y2_IMR_RX2_CHECK|SK_Y2_IMR_TX2_AS_CHECK \
                    269:        |SK_Y2_IMR_MAC2|SK_Y2_IMR_PHY2)
                    270:
                    271: /* SK_IESR register */
                    272: #define SK_IESR_PAR_RX2                        0x00000001
                    273: #define SK_IESR_PAR_RX1                        0x00000002
                    274: #define SK_IESR_PAR_MAC2               0x00000004
                    275: #define SK_IESR_PAR_MAC1               0x00000008
                    276: #define SK_IESR_PAR_WR_RAM             0x00000010
                    277: #define SK_IESR_PAR_RD_RAM             0x00000020
                    278: #define SK_IESR_NO_TSTAMP_MAC2         0x00000040
                    279: #define SK_IESR_NO_TSTAMO_MAC1         0x00000080
                    280: #define SK_IESR_NO_STS_MAC2            0x00000100
                    281: #define SK_IESR_NO_STS_MAC1            0x00000200
                    282: #define SK_IESR_IRQ_STS                        0x00000400
                    283: #define SK_IESR_MASTERERR              0x00000800
                    284:
                    285: /* SK_IEMR register */
                    286: #define SK_IEMR_PAR_RX2                        0x00000001
                    287: #define SK_IEMR_PAR_RX1                        0x00000002
                    288: #define SK_IEMR_PAR_MAC2               0x00000004
                    289: #define SK_IEMR_PAR_MAC1               0x00000008
                    290: #define SK_IEMR_PAR_WR_RAM             0x00000010
                    291: #define SK_IEMR_PAR_RD_RAM             0x00000020
                    292: #define SK_IEMR_NO_TSTAMP_MAC2         0x00000040
                    293: #define SK_IEMR_NO_TSTAMO_MAC1         0x00000080
                    294: #define SK_IEMR_NO_STS_MAC2            0x00000100
                    295: #define SK_IEMR_NO_STS_MAC1            0x00000200
                    296: #define SK_IEMR_IRQ_STS                        0x00000400
                    297: #define SK_IEMR_MASTERERR              0x00000800
                    298:
                    299: /* Block 2 */
                    300: #define SK_MAC0_0      0x0100
                    301: #define SK_MAC0_1      0x0104
                    302: #define SK_MAC1_0      0x0108
                    303: #define SK_MAC1_1      0x010C
                    304: #define SK_MAC2_0      0x0110
                    305: #define SK_MAC2_1      0x0114
                    306: #define SK_CONNTYPE    0x0118
                    307: #define SK_PMDTYPE     0x0119
                    308: #define SK_CONFIG      0x011A
                    309: #define SK_CHIPVER     0x011B
                    310: #define SK_EPROM0      0x011C
                    311: #define SK_EPROM1      0x011D          /* yukon/genesis */
                    312: #define        SK_Y2_CLKGATE   0x011D          /* yukon 2 */
                    313: #define SK_EPROM2      0x011E          /* yukon/genesis */
                    314: #define SK_Y2_HWRES    0x011E          /* yukon 2 */
                    315: #define SK_EPROM3      0x011F
                    316: #define SK_EP_ADDR     0x0120
                    317: #define SK_EP_DATA     0x0124
                    318: #define SK_EP_LOADCTL  0x0128
                    319: #define SK_EP_LOADTST  0x0129
                    320: #define SK_TIMERINIT   0x0130
                    321: #define SK_TIMER       0x0134
                    322: #define SK_TIMERCTL    0x0138
                    323: #define SK_TIMERTST    0x0139
                    324: #define SK_IMTIMERINIT 0x0140
                    325: #define SK_IMTIMER     0x0144
                    326: #define SK_IMTIMERCTL  0x0148
                    327: #define SK_IMTIMERTST  0x0149
                    328: #define SK_IMMR                0x014C
                    329: #define SK_IHWEMR      0x0150
                    330: #define SK_TESTCTL1    0x0158
                    331: #define SK_TESTCTL2    0x0159
                    332: #define SK_GPIO                0x015C
                    333: #define SK_I2CHWCTL    0x0160
                    334: #define SK_I2CHWDATA   0x0164
                    335: #define SK_I2CHWIRQ    0x0168
                    336: #define SK_I2CSW       0x016C
                    337: #define SK_BLNKINIT    0x0170
                    338: #define SK_BLNKCOUNT   0x0174
                    339: #define SK_BLNKCTL     0x0178
                    340: #define SK_BLNKSTS     0x0179
                    341: #define SK_BLNKTST     0x017A
                    342:
                    343: /* Values for SK_CHIPVER */
                    344: #define SK_GENESIS             0x0A
                    345: #define SK_YUKON               0xB0
                    346: #define SK_YUKON_LITE          0xB1
                    347: #define SK_YUKON_LP            0xB2
                    348: #define SK_YUKON_XL            0xB3
                    349: #define SK_YUKON_EC_U          0xB4
                    350: #define SK_YUKON_EX            0xB5
                    351: #define SK_YUKON_EC            0xB6
                    352: #define SK_YUKON_FE            0xB7
                    353:
                    354: #define SK_IS_GENESIS(sc) \
                    355:     ((sc)->sk_type == SK_GENESIS)
                    356: #define SK_IS_YUKON(sc) \
                    357:     ((sc)->sk_type >= SK_YUKON && (sc)->sk_type <= SK_YUKON_LP)
                    358: #define SK_IS_YUKON2(sc) \
                    359:     ((sc)->sk_type >= SK_YUKON_XL && (sc)->sk_type <= SK_YUKON_FE)
                    360:
                    361: /* Known revisions in SK_CONFIG */
                    362: #define SK_YUKON_LITE_REV_A0   0x0 /* invented, see test in skc_attach */
                    363: #define SK_YUKON_LITE_REV_A1   0x3
                    364: #define SK_YUKON_LITE_REV_A3   0x7
                    365:
                    366: #define SK_YUKON_XL_REV_A0     0x0
                    367: #define SK_YUKON_XL_REV_A1     0x1
                    368: #define SK_YUKON_XL_REV_A2     0x2
                    369: #define SK_YUKON_XL_REV_A3     0x3
                    370:
                    371: #define SK_YUKON_EC_REV_A1     0x0
                    372: #define SK_YUKON_EC_REV_A2     0x1
                    373: #define SK_YUKON_EC_REV_A3     0x2
                    374:
                    375: #define SK_YUKON_EC_U_REV_A0   0x1
                    376: #define SK_YUKON_EC_U_REV_A1   0x2
                    377:
                    378: #define SK_IMCTL_IRQ_CLEAR     0x01
                    379: #define SK_IMCTL_STOP          0x02
                    380: #define SK_IMCTL_START         0x04
                    381:
                    382: /* Number of ticks per usec for interrupt moderation */
                    383: #define SK_IMTIMER_TICKS_GENESIS       53
                    384: #define SK_IMTIMER_TICKS_YUKON         78
                    385: #define SK_IMTIMER_TICKS_YUKON_EC      125
                    386: #define SK_IM_USECS(x)         ((x) * imtimer_ticks)
                    387:
                    388: /*
                    389:  * The SK_EPROM0 register contains a byte that describes the
                    390:  * amount of SRAM mounted on the NIC. The value also tells if
                    391:  * the chips are 64K or 128K. This affects the RAMbuffer address
                    392:  * offset that we need to use.
                    393:  */
                    394: #define SK_RAMSIZE_512K_64     0x1
                    395: #define SK_RAMSIZE_1024K_128   0x2
                    396: #define SK_RAMSIZE_1024K_64    0x3
                    397: #define SK_RAMSIZE_2048K_128   0x4
                    398:
                    399: #define SK_RBOFF_0             0x0
                    400: #define SK_RBOFF_80000         0x80000
                    401:
                    402: /*
                    403:  * SK_EEPROM1 contains the PHY type, which may be XMAC for
                    404:  * fiber-based cards or BCOM for 1000baseT cards with a Broadcom
                    405:  * PHY.
                    406:  */
                    407: #define SK_PHYTYPE_XMAC                0       /* integeated XMAC II PHY */
                    408: #define SK_PHYTYPE_BCOM                1       /* Broadcom BCM5400 */
                    409: #define SK_PHYTYPE_LONE                2       /* Level One LXT1000 */
                    410: #define SK_PHYTYPE_NAT         3       /* National DP83891 */
                    411: #define SK_PHYTYPE_MARV_COPPER 4       /* Marvell 88E1011S */
                    412: #define SK_PHYTYPE_MARV_FIBER  5       /* Marvell 88E1011S (fiber) */
                    413:
                    414: /*
                    415:  * PHY addresses.
                    416:  */
                    417: #define SK_PHYADDR_XMAC                0x0
                    418: #define SK_PHYADDR_BCOM                0x1
                    419: #define SK_PHYADDR_LONE                0x3
                    420: #define SK_PHYADDR_NAT         0x0
                    421: #define SK_PHYADDR_MARV                0x0
                    422:
                    423: #define SK_CONFIG_SINGLEMAC    0x01
                    424: #define SK_CONFIG_DIS_DSL_CLK  0x02
                    425:
                    426: #define SK_PMD_1000BASETX_ALT  0x31
                    427: #define SK_PMD_1000BASECX      0x43
                    428: #define SK_PMD_1000BASELX      0x4C
                    429: #define SK_PMD_1000BASESX      0x53
                    430: #define SK_PMD_1000BASETX      0x54
                    431:
                    432: /* GPIO bits */
                    433: #define SK_GPIO_DAT0           0x00000001
                    434: #define SK_GPIO_DAT1           0x00000002
                    435: #define SK_GPIO_DAT2           0x00000004
                    436: #define SK_GPIO_DAT3           0x00000008
                    437: #define SK_GPIO_DAT4           0x00000010
                    438: #define SK_GPIO_DAT5           0x00000020
                    439: #define SK_GPIO_DAT6           0x00000040
                    440: #define SK_GPIO_DAT7           0x00000080
                    441: #define SK_GPIO_DAT8           0x00000100
                    442: #define SK_GPIO_DAT9           0x00000200
                    443: #define SK_GPIO_DIR0           0x00010000
                    444: #define SK_GPIO_DIR1           0x00020000
                    445: #define SK_GPIO_DIR2           0x00040000
                    446: #define SK_GPIO_DIR3           0x00080000
                    447: #define SK_GPIO_DIR4           0x00100000
                    448: #define SK_GPIO_DIR5           0x00200000
                    449: #define SK_GPIO_DIR6           0x00400000
                    450: #define SK_GPIO_DIR7           0x00800000
                    451: #define SK_GPIO_DIR8           0x01000000
                    452: #define SK_GPIO_DIR9           0x02000000
                    453:
                    454: #define        SK_Y2_CLKGATE_LINK2_INACTIVE    0x80    /* port 2 inactive */
                    455: #define        SK_Y2_CLKGATE_LINK2_GATE_DIS    0x40    /* disable clock gate, 2 */
                    456: #define        SK_Y2_CLKGATE_LINK2_CORE_DIS    0x20    /* disable core clock, 2 */
                    457: #define        SK_Y2_CLKGATE_LINK2_PCI_DIS     0x10    /* disable pci clock, 2 */
                    458: #define        SK_Y2_CLKGATE_LINK1_INACTIVE    0x08    /* port 1 inactive */
                    459: #define        SK_Y2_CLKGATE_LINK1_GATE_DIS    0x04    /* disable clock gate, 1 */
                    460: #define        SK_Y2_CLKGATE_LINK1_CORE_DIS    0x02    /* disable core clock, 1 */
                    461: #define        SK_Y2_CLKGATE_LINK1_PCI_DIS     0x01    /* disable pci clock, 1 */
                    462:
                    463: #define        SK_Y2_HWRES_LINK_1      0x01
                    464: #define        SK_Y2_HWRES_LINK_2      0x02
                    465: #define        SK_Y2_HWRES_LINK_MASK   (SK_Y2_HWRES_LINK_1 | SK_Y2_HWRES_LINK_2)
                    466: #define        SK_Y2_HWRES_LINK_DUAL   (SK_Y2_HWRES_LINK_1 | SK_Y2_HWRES_LINK_2)
                    467:
                    468: /* Block 3 Ram interface and MAC arbiter registers */
                    469: #define SK_RAMADDR     0x0180
                    470: #define SK_RAMDATA0    0x0184
                    471: #define SK_RAMDATA1    0x0188
                    472: #define SK_TO0         0x0190
                    473: #define SK_TO1         0x0191
                    474: #define SK_TO2         0x0192
                    475: #define SK_TO3         0x0193
                    476: #define SK_TO4         0x0194
                    477: #define SK_TO5         0x0195
                    478: #define SK_TO6         0x0196
                    479: #define SK_TO7         0x0197
                    480: #define SK_TO8         0x0198
                    481: #define SK_TO9         0x0199
                    482: #define SK_TO10                0x019A
                    483: #define SK_TO11                0x019B
                    484: #define SK_RITIMEO_TMR 0x019C
                    485: #define SK_RAMCTL      0x01A0
                    486: #define SK_RITIMER_TST 0x01A2
                    487:
                    488: #define SK_RAMCTL_RESET                0x0001
                    489: #define SK_RAMCTL_UNRESET      0x0002
                    490: #define SK_RAMCTL_CLR_IRQ_WPAR 0x0100
                    491: #define SK_RAMCTL_CLR_IRQ_RPAR 0x0200
                    492:
                    493: /* Mac arbiter registers */
                    494: #define SK_MINIT_RX1   0x01B0
                    495: #define SK_MINIT_RX2   0x01B1
                    496: #define SK_MINIT_TX1   0x01B2
                    497: #define SK_MINIT_TX2   0x01B3
                    498: #define SK_MTIMEO_RX1  0x01B4
                    499: #define SK_MTIMEO_RX2  0x01B5
                    500: #define SK_MTIMEO_TX1  0x01B6
                    501: #define SK_MTIEMO_TX2  0x01B7
                    502: #define SK_MACARB_CTL  0x01B8
                    503: #define SK_MTIMER_TST  0x01BA
                    504: #define SK_RCINIT_RX1  0x01C0
                    505: #define SK_RCINIT_RX2  0x01C1
                    506: #define SK_RCINIT_TX1  0x01C2
                    507: #define SK_RCINIT_TX2  0x01C3
                    508: #define SK_RCTIMEO_RX1 0x01C4
                    509: #define SK_RCTIMEO_RX2 0x01C5
                    510: #define SK_RCTIMEO_TX1 0x01C6
                    511: #define SK_RCTIMEO_TX2 0x01C7
                    512: #define SK_RECOVERY_CTL        0x01C8
                    513: #define SK_RCTIMER_TST 0x01CA
                    514:
                    515: /* Packet arbiter registers */
                    516: #define SK_RXPA1_TINIT 0x01D0
                    517: #define SK_RXPA2_TINIT 0x01D4
                    518: #define SK_TXPA1_TINIT 0x01D8
                    519: #define SK_TXPA2_TINIT 0x01DC
                    520: #define SK_RXPA1_TIMEO 0x01E0
                    521: #define SK_RXPA2_TIMEO 0x01E4
                    522: #define SK_TXPA1_TIMEO 0x01E8
                    523: #define SK_TXPA2_TIMEO 0x01EC
                    524: #define SK_PKTARB_CTL  0x01F0
                    525: #define SK_PKTATB_TST  0x01F2
                    526:
                    527: #define SK_PKTARB_TIMEOUT      0x2000
                    528:
                    529: #define SK_PKTARBCTL_RESET             0x0001
                    530: #define SK_PKTARBCTL_UNRESET           0x0002
                    531: #define SK_PKTARBCTL_RXTO1_OFF         0x0004
                    532: #define SK_PKTARBCTL_RXTO1_ON          0x0008
                    533: #define SK_PKTARBCTL_RXTO2_OFF         0x0010
                    534: #define SK_PKTARBCTL_RXTO2_ON          0x0020
                    535: #define SK_PKTARBCTL_TXTO1_OFF         0x0040
                    536: #define SK_PKTARBCTL_TXTO1_ON          0x0080
                    537: #define SK_PKTARBCTL_TXTO2_OFF         0x0100
                    538: #define SK_PKTARBCTL_TXTO2_ON          0x0200
                    539: #define SK_PKTARBCTL_CLR_IRQ_RXTO1     0x0400
                    540: #define SK_PKTARBCTL_CLR_IRQ_RXTO2     0x0800
                    541: #define SK_PKTARBCTL_CLR_IRQ_TXTO1     0x1000
                    542: #define SK_PKTARBCTL_CLR_IRQ_TXTO2     0x2000
                    543:
                    544: #define SK_MINIT_XMAC_B2       54
                    545: #define SK_MINIT_XMAC_C1       63
                    546:
                    547: #define SK_MACARBCTL_RESET     0x0001
                    548: #define SK_MACARBCTL_UNRESET   0x0002
                    549: #define SK_MACARBCTL_FASTOE_OFF        0x0004
                    550: #define SK_MACARBCRL_FASTOE_ON 0x0008
                    551:
                    552: #define SK_RCINIT_XMAC_B2      54
                    553: #define SK_RCINIT_XMAC_C1      0
                    554:
                    555: #define SK_RECOVERYCTL_RX1_OFF 0x0001
                    556: #define SK_RECOVERYCTL_RX1_ON  0x0002
                    557: #define SK_RECOVERYCTL_RX2_OFF 0x0004
                    558: #define SK_RECOVERYCTL_RX2_ON  0x0008
                    559: #define SK_RECOVERYCTL_TX1_OFF 0x0010
                    560: #define SK_RECOVERYCTL_TX1_ON  0x0020
                    561: #define SK_RECOVERYCTL_TX2_OFF 0x0040
                    562: #define SK_RECOVERYCTL_TX2_ON  0x0080
                    563:
                    564: #define SK_RECOVERY_XMAC_B2                            \
                    565:        (SK_RECOVERYCTL_RX1_ON|SK_RECOVERYCTL_RX2_ON|   \
                    566:        SK_RECOVERYCTL_TX1_ON|SK_RECOVERYCTL_TX2_ON)
                    567:
                    568: #define SK_RECOVERY_XMAC_C1                            \
                    569:        (SK_RECOVERYCTL_RX1_OFF|SK_RECOVERYCTL_RX2_OFF| \
                    570:        SK_RECOVERYCTL_TX1_OFF|SK_RECOVERYCTL_TX2_OFF)
                    571:
                    572: /* Block 4 -- TX Arbiter MAC 1 */
                    573: #define SK_TXAR1_TIMERINIT     0x0200
                    574: #define SK_TXAR1_TIMERVAL      0x0204
                    575: #define SK_TXAR1_LIMITINIT     0x0208
                    576: #define SK_TXAR1_LIMITCNT      0x020C
                    577: #define SK_TXAR1_COUNTERCTL    0x0210
                    578: #define SK_TXAR1_COUNTERTST    0x0212
                    579: #define SK_TXAR1_COUNTERSTS    0x0212
                    580:
                    581: /* Block 5 -- TX Arbiter MAC 2 */
                    582: #define SK_TXAR2_TIMERINIT     0x0280
                    583: #define SK_TXAR2_TIMERVAL      0x0284
                    584: #define SK_TXAR2_LIMITINIT     0x0288
                    585: #define SK_TXAR2_LIMITCNT      0x028C
                    586: #define SK_TXAR2_COUNTERCTL    0x0290
                    587: #define SK_TXAR2_COUNTERTST    0x0291
                    588: #define SK_TXAR2_COUNTERSTS    0x0292
                    589:
                    590: #define SK_TXARCTL_OFF         0x01
                    591: #define SK_TXARCTL_ON          0x02
                    592: #define SK_TXARCTL_RATECTL_OFF 0x04
                    593: #define SK_TXARCTL_RATECTL_ON  0x08
                    594: #define SK_TXARCTL_ALLOC_OFF   0x10
                    595: #define SK_TXARCTL_ALLOC_ON    0x20
                    596: #define SK_TXARCTL_FSYNC_OFF   0x40
                    597: #define SK_TXARCTL_FSYNC_ON    0x80
                    598:
                    599: /* Block 6 -- External registers */
                    600: #define SK_EXTREG_BASE 0x300
                    601: #define SK_EXTREG_END  0x37C
                    602:
                    603: /* Block 7 -- PCI config registers */
                    604: #define SK_PCI_BASE    0x0380
                    605: #define SK_PCI_END     0x03FC
                    606:
                    607: /* Compute offset of mirrored PCI register */
                    608: #define SK_PCI_REG(reg)                ((reg) + SK_PCI_BASE)
                    609:
                    610: /* Block 8 -- RX queue 1 */
                    611: #define SK_RXQ1_BUFCNT         0x0400
                    612: #define SK_RXQ1_BUFCTL         0x0402
                    613: #define SK_RXQ1_NEXTDESC       0x0404
                    614: #define SK_RXQ1_RXBUF_LO       0x0408
                    615: #define SK_RXQ1_RXBUF_HI       0x040C
                    616: #define SK_RXQ1_RXSTAT         0x0410
                    617: #define SK_RXQ1_TIMESTAMP      0x0414
                    618: #define SK_RXQ1_CSUM1          0x0418
                    619: #define SK_RXQ1_CSUM2          0x041A
                    620: #define SK_RXQ1_CSUM1_START    0x041C
                    621: #define SK_RXQ1_CSUM2_START    0x041E
                    622: #define SK_RXQ1_CURADDR_LO     0x0420
                    623: #define SK_RXQ1_CURADDR_HI     0x0424
                    624: #define SK_RXQ1_CURCNT_LO      0x0428
                    625: #define SK_RXQ1_CURCNT_HI      0x042C
                    626: #define SK_RXQ1_CURBYTES       0x0430
                    627: #define SK_RXQ1_BMU_CSR                0x0434
                    628: #define SK_RXQ1_WATERMARK      0x0438
                    629: #define SK_RXQ1_FLAG           0x043A
                    630: #define SK_RXQ1_TEST1          0x043C
                    631: #define SK_RXQ1_TEST2          0x0440
                    632: #define SK_RXQ1_TEST3          0x0444
                    633: /* yukon-2 only */
                    634: #define SK_RXQ1_Y2_WM          0x0440
                    635: #define SK_RXQ1_Y2_AL          0x0442
                    636: #define SK_RXQ1_Y2_RSP         0x0444
                    637: #define SK_RXQ1_Y2_RSL         0x0446
                    638: #define SK_RXQ1_Y2_RP          0x0448
                    639: #define SK_RXQ1_Y2_RL          0x044A
                    640: #define SK_RXQ1_Y2_WP          0x044C
                    641: #define SK_RXQ1_Y2_WSP         0x044D
                    642: #define SK_RXQ1_Y2_WL          0x044E
                    643: #define SK_RXQ1_Y2_WSL         0x044F
                    644: /* yukon-2 only (prefetch unit) */
                    645: #define SK_RXQ1_Y2_PREF_CSR    0x0450
                    646: #define SK_RXQ1_Y2_PREF_LIDX   0x0454
                    647: #define SK_RXQ1_Y2_PREF_ADDRLO 0x0458
                    648: #define SK_RXQ1_Y2_PREF_ADDRHI 0x045C
                    649: #define SK_RXQ1_Y2_PREF_GETIDX 0x0460
                    650: #define SK_RXQ1_Y2_PREF_PUTIDX 0x0464
                    651: #define SK_RXQ1_Y2_PREF_FIFOWP 0x0470
                    652: #define SK_RXQ1_Y2_PREF_FIFORP 0x0474
                    653: #define SK_RXQ1_Y2_PREF_FIFOWM 0x0478
                    654: #define SK_RXQ1_Y2_PREF_FIFOLV 0x047C
                    655:
                    656: /* Block 9 -- RX queue 2 */
                    657: #define SK_RXQ2_BUFCNT         0x0480
                    658: #define SK_RXQ2_BUFCTL         0x0482
                    659: #define SK_RXQ2_NEXTDESC       0x0484
                    660: #define SK_RXQ2_RXBUF_LO       0x0488
                    661: #define SK_RXQ2_RXBUF_HI       0x048C
                    662: #define SK_RXQ2_RXSTAT         0x0490
                    663: #define SK_RXQ2_TIMESTAMP      0x0494
                    664: #define SK_RXQ2_CSUM1          0x0498
                    665: #define SK_RXQ2_CSUM2          0x049A
                    666: #define SK_RXQ2_CSUM1_START    0x049C
                    667: #define SK_RXQ2_CSUM2_START    0x049E
                    668: #define SK_RXQ2_CURADDR_LO     0x04A0
                    669: #define SK_RXQ2_CURADDR_HI     0x04A4
                    670: #define SK_RXQ2_CURCNT_LO      0x04A8
                    671: #define SK_RXQ2_CURCNT_HI      0x04AC
                    672: #define SK_RXQ2_CURBYTES       0x04B0
                    673: #define SK_RXQ2_BMU_CSR                0x04B4
                    674: #define SK_RXQ2_WATERMARK      0x04B8
                    675: #define SK_RXQ2_FLAG           0x04BA
                    676: #define SK_RXQ2_TEST1          0x04BC
                    677: #define SK_RXQ2_TEST2          0x04C0
                    678: #define SK_RXQ2_TEST3          0x04C4
                    679: /* yukon-2 only */
                    680: #define SK_RXQ2_Y2_WM          0x04C0
                    681: #define SK_RXQ2_Y2_AL          0x04C2
                    682: #define SK_RXQ2_Y2_RSP         0x04C4
                    683: #define SK_RXQ2_Y2_RSL         0x04C6
                    684: #define SK_RXQ2_Y2_RP          0x04C8
                    685: #define SK_RXQ2_Y2_RL          0x04CA
                    686: #define SK_RXQ2_Y2_WP          0x04CC
                    687: #define SK_RXQ2_Y2_WSP         0x04CD
                    688: #define SK_RXQ2_Y2_WL          0x04CE
                    689: #define SK_RXQ2_Y2_WSL         0x04CF
                    690: /* yukon-2 only (prefetch unit) */
                    691: #define SK_RXQ2_Y2_PREF_CSR    0x04D0
                    692: #define SK_RXQ2_Y2_PREF_LIDX   0x04D4
                    693: #define SK_RXQ2_Y2_PREF_ADDRLO 0x04D8
                    694: #define SK_RXQ2_Y2_PREF_ADDRHI 0x04DC
                    695: #define SK_RXQ2_Y2_PREF_GETIDX 0x04E0
                    696: #define SK_RXQ2_Y2_PREF_PUTIDX 0x04E4
                    697: #define SK_RXQ2_Y2_PREF_FIFOWP 0x04F0
                    698: #define SK_RXQ2_Y2_PREF_FIFORP 0x04F4
                    699: #define SK_RXQ2_Y2_PREF_FIFOWM 0x04F8
                    700: #define SK_RXQ2_Y2_PREF_FIFOLV 0x04FC
                    701:
                    702: #define SK_RXBMU_CLR_IRQ_ERR           0x00000001
                    703: #define SK_RXBMU_CLR_IRQ_EOF           0x00000002
                    704: #define SK_RXBMU_CLR_IRQ_EOB           0x00000004
                    705: #define SK_RXBMU_CLR_IRQ_PAR           0x00000008
                    706: #define SK_RXBMU_RX_START              0x00000010
                    707: #define SK_RXBMU_RX_STOP               0x00000020
                    708: #define SK_RXBMU_POLL_OFF              0x00000040
                    709: #define SK_RXBMU_POLL_ON               0x00000080
                    710: #define SK_RXBMU_TRANSFER_SM_RESET     0x00000100
                    711: #define SK_RXBMU_TRANSFER_SM_UNRESET   0x00000200
                    712: #define SK_RXBMU_DESCWR_SM_RESET       0x00000400
                    713: #define SK_RXBMU_DESCWR_SM_UNRESET     0x00000800
                    714: #define SK_RXBMU_DESCRD_SM_RESET       0x00001000
                    715: #define SK_RXBMU_DESCRD_SM_UNRESET     0x00002000
                    716: #define SK_RXBMU_SUPERVISOR_SM_RESET   0x00004000
                    717: #define SK_RXBMU_SUPERVISOR_SM_UNRESET 0x00008000
                    718: #define SK_RXBMU_PFI_SM_RESET          0x00010000
                    719: #define SK_RXBMU_PFI_SM_UNRESET                0x00020000
                    720: #define SK_RXBMU_FIFO_RESET            0x00040000
                    721: #define SK_RXBMU_FIFO_UNRESET          0x00080000
                    722: #define SK_RXBMU_DESC_RESET            0x00100000
                    723: #define SK_RXBMU_DESC_UNRESET          0x00200000
                    724: #define SK_RXBMU_SUPERVISOR_IDLE       0x01000000
                    725:
                    726: #define SK_RXBMU_ONLINE                \
                    727:        (SK_RXBMU_TRANSFER_SM_UNRESET|SK_RXBMU_DESCWR_SM_UNRESET|       \
                    728:        SK_RXBMU_DESCRD_SM_UNRESET|SK_RXBMU_SUPERVISOR_SM_UNRESET|      \
                    729:        SK_RXBMU_PFI_SM_UNRESET|SK_RXBMU_FIFO_UNRESET|                  \
                    730:        SK_RXBMU_DESC_UNRESET)
                    731:
                    732: #define SK_RXBMU_OFFLINE               \
                    733:        (SK_RXBMU_TRANSFER_SM_RESET|SK_RXBMU_DESCWR_SM_RESET|   \
                    734:        SK_RXBMU_DESCRD_SM_RESET|SK_RXBMU_SUPERVISOR_SM_RESET|  \
                    735:        SK_RXBMU_PFI_SM_RESET|SK_RXBMU_FIFO_RESET|              \
                    736:        SK_RXBMU_DESC_RESET)
                    737:
                    738: /* Block 12 -- TX sync queue 1 */
                    739: #define SK_TXQS1_BUFCNT                0x0600
                    740: #define SK_TXQS1_BUFCTL                0x0602
                    741: #define SK_TXQS1_NEXTDESC      0x0604
                    742: #define SK_TXQS1_RXBUF_LO      0x0608
                    743: #define SK_TXQS1_RXBUF_HI      0x060C
                    744: #define SK_TXQS1_RXSTAT                0x0610
                    745: #define SK_TXQS1_CSUM_STARTVAL 0x0614
                    746: #define SK_TXQS1_CSUM_STARTPOS 0x0618
                    747: #define SK_TXQS1_CSUM_WRITEPOS 0x061A
                    748: #define SK_TXQS1_CURADDR_LO    0x0620
                    749: #define SK_TXQS1_CURADDR_HI    0x0624
                    750: #define SK_TXQS1_CURCNT_LO     0x0628
                    751: #define SK_TXQS1_CURCNT_HI     0x062C
                    752: #define SK_TXQS1_CURBYTES      0x0630
                    753: #define SK_TXQS1_BMU_CSR       0x0634
                    754: #define SK_TXQS1_WATERMARK     0x0638
                    755: #define SK_TXQS1_FLAG          0x063A
                    756: #define SK_TXQS1_TEST1         0x063C
                    757: #define SK_TXQS1_TEST2         0x0640
                    758: #define SK_TXQS1_TEST3         0x0644
                    759: /* yukon-2 only */
                    760: #define SK_TXQS1_Y2_WM         0x0640
                    761: #define SK_TXQS1_Y2_AL         0x0642
                    762: #define SK_TXQS1_Y2_RSP                0x0644
                    763: #define SK_TXQS1_Y2_RSL                0x0646
                    764: #define SK_TXQS1_Y2_RP         0x0648
                    765: #define SK_TXQS1_Y2_RL         0x064A
                    766: #define SK_TXQS1_Y2_WP         0x064C
                    767: #define SK_TXQS1_Y2_WSP                0x064D
                    768: #define SK_TXQS1_Y2_WL         0x064E
                    769: #define SK_TXQS1_Y2_WSL                0x064F
                    770: /* yukon-2 only (prefetch unit) */
                    771: #define SK_TXQS1_Y2_PREF_CSR   0x0650
                    772: #define SK_TXQS1_Y2_PREF_LIDX  0x0654
                    773: #define SK_TXQS1_Y2_PREF_ADDRLO        0x0658
                    774: #define SK_TXQS1_Y2_PREF_ADDRHI        0x065C
                    775: #define SK_TXQS1_Y2_PREF_GETIDX        0x0660
                    776: #define SK_TXQS1_Y2_PREF_PUTIDX        0x0664
                    777: #define SK_TXQS1_Y2_PREF_FIFOWP        0x0670
                    778: #define SK_TXQS1_Y2_PREF_FIFORP        0x0674
                    779: #define SK_TXQS1_Y2_PREF_FIFOWM        0x0678
                    780: #define SK_TXQS1_Y2_PREF_FIFOLV        0x067C
                    781:
                    782: /* Block 13 -- TX async queue 1 */
                    783: #define SK_TXQA1_BUFCNT                0x0680
                    784: #define SK_TXQA1_BUFCTL                0x0682
                    785: #define SK_TXQA1_NEXTDESC      0x0684
                    786: #define SK_TXQA1_RXBUF_LO      0x0688
                    787: #define SK_TXQA1_RXBUF_HI      0x068C
                    788: #define SK_TXQA1_RXSTAT                0x0690
                    789: #define SK_TXQA1_CSUM_STARTVAL 0x0694
                    790: #define SK_TXQA1_CSUM_STARTPOS 0x0698
                    791: #define SK_TXQA1_CSUM_WRITEPOS 0x069A
                    792: #define SK_TXQA1_CURADDR_LO    0x06A0
                    793: #define SK_TXQA1_CURADDR_HI    0x06A4
                    794: #define SK_TXQA1_CURCNT_LO     0x06A8
                    795: #define SK_TXQA1_CURCNT_HI     0x06AC
                    796: #define SK_TXQA1_CURBYTES      0x06B0
                    797: #define SK_TXQA1_BMU_CSR       0x06B4
                    798: #define SK_TXQA1_WATERMARK     0x06B8
                    799: #define SK_TXQA1_FLAG          0x06BA
                    800: #define SK_TXQA1_TEST1         0x06BC
                    801: #define SK_TXQA1_TEST2         0x06C0
                    802: #define SK_TXQA1_TEST3         0x06C4
                    803: /* yukon-2 only */
                    804: #define SK_TXQA1_Y2_WM         0x06C0
                    805: #define SK_TXQA1_Y2_AL         0x06C2
                    806: #define SK_TXQA1_Y2_RSP                0x06C4
                    807: #define SK_TXQA1_Y2_RSL                0x06C6
                    808: #define SK_TXQA1_Y2_RP         0x06C8
                    809: #define SK_TXQA1_Y2_RL         0x06CA
                    810: #define SK_TXQA1_Y2_WP         0x06CC
                    811: #define SK_TXQA1_Y2_WSP                0x06CD
                    812: #define SK_TXQA1_Y2_WL         0x06CE
                    813: #define SK_TXQA1_Y2_WSL                0x06CF
                    814: /* yukon-2 only (prefetch unit) */
                    815: #define SK_TXQA1_Y2_PREF_CSR   0x06D0
                    816: #define SK_TXQA1_Y2_PREF_LIDX  0x06D4
                    817: #define SK_TXQA1_Y2_PREF_ADDRLO        0x06D8
                    818: #define SK_TXQA1_Y2_PREF_ADDRHI        0x06DC
                    819: #define SK_TXQA1_Y2_PREF_GETIDX        0x06E0
                    820: #define SK_TXQA1_Y2_PREF_PUTIDX        0x06E4
                    821: #define SK_TXQA1_Y2_PREF_FIFOWP        0x06F0
                    822: #define SK_TXQA1_Y2_PREF_FIFORP        0x06F4
                    823: #define SK_TXQA1_Y2_PREF_FIFOWM        0x06F8
                    824: #define SK_TXQA1_Y2_PREF_FIFOLV        0x06FC
                    825:
                    826: /* Block 14 -- TX sync queue 2 */
                    827: #define SK_TXQS2_BUFCNT                0x0700
                    828: #define SK_TXQS2_BUFCTL                0x0702
                    829: #define SK_TXQS2_NEXTDESC      0x0704
                    830: #define SK_TXQS2_RXBUF_LO      0x0708
                    831: #define SK_TXQS2_RXBUF_HI      0x070C
                    832: #define SK_TXQS2_RXSTAT                0x0710
                    833: #define SK_TXQS2_CSUM_STARTVAL 0x0714
                    834: #define SK_TXQS2_CSUM_STARTPOS 0x0718
                    835: #define SK_TXQS2_CSUM_WRITEPOS 0x071A
                    836: #define SK_TXQS2_CURADDR_LO    0x0720
                    837: #define SK_TXQS2_CURADDR_HI    0x0724
                    838: #define SK_TXQS2_CURCNT_LO     0x0728
                    839: #define SK_TXQS2_CURCNT_HI     0x072C
                    840: #define SK_TXQS2_CURBYTES      0x0730
                    841: #define SK_TXQS2_BMU_CSR       0x0734
                    842: #define SK_TXQS2_WATERMARK     0x0738
                    843: #define SK_TXQS2_FLAG          0x073A
                    844: #define SK_TXQS2_TEST1         0x073C
                    845: #define SK_TXQS2_TEST2         0x0740
                    846: #define SK_TXQS2_TEST3         0x0744
                    847: /* yukon-2 only */
                    848: #define SK_TXQS2_Y2_WM         0x0740
                    849: #define SK_TXQS2_Y2_AL         0x0742
                    850: #define SK_TXQS2_Y2_RSP                0x0744
                    851: #define SK_TXQS2_Y2_RSL                0x0746
                    852: #define SK_TXQS2_Y2_RP         0x0748
                    853: #define SK_TXQS2_Y2_RL         0x074A
                    854: #define SK_TXQS2_Y2_WP         0x074C
                    855: #define SK_TXQS2_Y2_WSP                0x074D
                    856: #define SK_TXQS2_Y2_WL         0x074E
                    857: #define SK_TXQS2_Y2_WSL                0x074F
                    858: /* yukon-2 only (prefetch unit) */
                    859: #define SK_TXQS2_Y2_PREF_CSR   0x0750
                    860: #define SK_TXQS2_Y2_PREF_LIDX  0x0754
                    861: #define SK_TXQS2_Y2_PREF_ADDRLO        0x0758
                    862: #define SK_TXQS2_Y2_PREF_ADDRHI        0x075C
                    863: #define SK_TXQS2_Y2_PREF_GETIDX        0x0760
                    864: #define SK_TXQS2_Y2_PREF_PUTIDX        0x0764
                    865: #define SK_TXQS2_Y2_PREF_FIFOWP        0x0770
                    866: #define SK_TXQS2_Y2_PREF_FIFORP        0x0774
                    867: #define SK_TXQS2_Y2_PREF_FIFOWM        0x0778
                    868: #define SK_TXQS2_Y2_PREF_FIFOLV        0x077C
                    869:
                    870: /* Block 15 -- TX async queue 2 */
                    871: #define SK_TXQA2_BUFCNT                0x0780
                    872: #define SK_TXQA2_BUFCTL                0x0782
                    873: #define SK_TXQA2_NEXTDESC      0x0784
                    874: #define SK_TXQA2_RXBUF_LO      0x0788
                    875: #define SK_TXQA2_RXBUF_HI      0x078C
                    876: #define SK_TXQA2_RXSTAT                0x0790
                    877: #define SK_TXQA2_CSUM_STARTVAL 0x0794
                    878: #define SK_TXQA2_CSUM_STARTPOS 0x0798
                    879: #define SK_TXQA2_CSUM_WRITEPOS 0x079A
                    880: #define SK_TXQA2_CURADDR_LO    0x07A0
                    881: #define SK_TXQA2_CURADDR_HI    0x07A4
                    882: #define SK_TXQA2_CURCNT_LO     0x07A8
                    883: #define SK_TXQA2_CURCNT_HI     0x07AC
                    884: #define SK_TXQA2_CURBYTES      0x07B0
                    885: #define SK_TXQA2_BMU_CSR       0x07B4
                    886: #define SK_TXQA2_WATERMARK     0x07B8
                    887: #define SK_TXQA2_FLAG          0x07BA
                    888: #define SK_TXQA2_TEST1         0x07BC
                    889: #define SK_TXQA2_TEST2         0x07C0
                    890: #define SK_TXQA2_TEST3         0x07C4
                    891: /* yukon-2 only */
                    892: #define SK_TXQA2_Y2_WM         0x07C0
                    893: #define SK_TXQA2_Y2_AL         0x07C2
                    894: #define SK_TXQA2_Y2_RSP                0x07C4
                    895: #define SK_TXQA2_Y2_RSL                0x07C6
                    896: #define SK_TXQA2_Y2_RP         0x07C8
                    897: #define SK_TXQA2_Y2_RL         0x07CA
                    898: #define SK_TXQA2_Y2_WP         0x07CC
                    899: #define SK_TXQA2_Y2_WSP                0x07CD
                    900: #define SK_TXQA2_Y2_WL         0x07CE
                    901: #define SK_TXQA2_Y2_WSL                0x07CF
                    902: /* yukon-2 only (prefetch unit) */
                    903: #define SK_TXQA2_Y2_PREF_CSR   0x07D0
                    904: #define SK_TXQA2_Y2_PREF_LIDX  0x07D4
                    905: #define SK_TXQA2_Y2_PREF_ADDRLO        0x07D8
                    906: #define SK_TXQA2_Y2_PREF_ADDRHI        0x07DC
                    907: #define SK_TXQA2_Y2_PREF_GETIDX        0x07E0
                    908: #define SK_TXQA2_Y2_PREF_PUTIDX        0x07E4
                    909: #define SK_TXQA2_Y2_PREF_FIFOWP        0x07F0
                    910: #define SK_TXQA2_Y2_PREF_FIFORP        0x07F4
                    911: #define SK_TXQA2_Y2_PREF_FIFOWM        0x07F8
                    912: #define SK_TXQA2_Y2_PREF_FIFOLV        0x07FC
                    913:
                    914: #define SK_TXBMU_CLR_IRQ_ERR           0x00000001
                    915: #define SK_TXBMU_CLR_IRQ_EOF           0x00000002
                    916: #define SK_TXBMU_CLR_IRQ_EOB           0x00000004
                    917: #define SK_TXBMU_TX_START              0x00000010
                    918: #define SK_TXBMU_TX_STOP               0x00000020
                    919: #define SK_TXBMU_POLL_OFF              0x00000040
                    920: #define SK_TXBMU_POLL_ON               0x00000080
                    921: #define SK_TXBMU_TRANSFER_SM_RESET     0x00000100
                    922: #define SK_TXBMU_TRANSFER_SM_UNRESET   0x00000200
                    923: #define SK_TXBMU_DESCWR_SM_RESET       0x00000400
                    924: #define SK_TXBMU_DESCWR_SM_UNRESET     0x00000800
                    925: #define SK_TXBMU_DESCRD_SM_RESET       0x00001000
                    926: #define SK_TXBMU_DESCRD_SM_UNRESET     0x00002000
                    927: #define SK_TXBMU_SUPERVISOR_SM_RESET   0x00004000
                    928: #define SK_TXBMU_SUPERVISOR_SM_UNRESET 0x00008000
                    929: #define SK_TXBMU_PFI_SM_RESET          0x00010000
                    930: #define SK_TXBMU_PFI_SM_UNRESET                0x00020000
                    931: #define SK_TXBMU_FIFO_RESET            0x00040000
                    932: #define SK_TXBMU_FIFO_UNRESET          0x00080000
                    933: #define SK_TXBMU_DESC_RESET            0x00100000
                    934: #define SK_TXBMU_DESC_UNRESET          0x00200000
                    935: #define SK_TXBMU_SUPERVISOR_IDLE       0x01000000
                    936:
                    937: #define SK_TXBMU_ONLINE                \
                    938:        (SK_TXBMU_TRANSFER_SM_UNRESET|SK_TXBMU_DESCWR_SM_UNRESET|       \
                    939:        SK_TXBMU_DESCRD_SM_UNRESET|SK_TXBMU_SUPERVISOR_SM_UNRESET|      \
                    940:        SK_TXBMU_PFI_SM_UNRESET|SK_TXBMU_FIFO_UNRESET|                  \
                    941:        SK_TXBMU_DESC_UNRESET|SK_TXBMU_POLL_ON)
                    942:
                    943: #define SK_TXBMU_OFFLINE               \
                    944:        (SK_TXBMU_TRANSFER_SM_RESET|SK_TXBMU_DESCWR_SM_RESET|   \
                    945:        SK_TXBMU_DESCRD_SM_RESET|SK_TXBMU_SUPERVISOR_SM_RESET|  \
                    946:        SK_TXBMU_PFI_SM_RESET|SK_TXBMU_FIFO_RESET|              \
                    947:        SK_TXBMU_DESC_RESET|SK_TXBMU_POLL_OFF)
                    948:
                    949: /* Block 16 -- Receive RAMbuffer 1 */
                    950: #define SK_RXRB1_START         0x0800
                    951: #define SK_RXRB1_END           0x0804
                    952: #define SK_RXRB1_WR_PTR                0x0808
                    953: #define SK_RXRB1_RD_PTR                0x080C
                    954: #define SK_RXRB1_UTHR_PAUSE    0x0810
                    955: #define SK_RXRB1_LTHR_PAUSE    0x0814
                    956: #define SK_RXRB1_UTHR_HIPRIO   0x0818
                    957: #define SK_RXRB1_UTHR_LOPRIO   0x081C
                    958: #define SK_RXRB1_PKTCNT                0x0820
                    959: #define SK_RXRB1_LVL           0x0824
                    960: #define SK_RXRB1_CTLTST                0x0828
                    961:
                    962: /* Block 17 -- Receive RAMbuffer 2 */
                    963: #define SK_RXRB2_START         0x0880
                    964: #define SK_RXRB2_END           0x0884
                    965: #define SK_RXRB2_WR_PTR                0x0888
                    966: #define SK_RXRB2_RD_PTR                0x088C
                    967: #define SK_RXRB2_UTHR_PAUSE    0x0890
                    968: #define SK_RXRB2_LTHR_PAUSE    0x0894
                    969: #define SK_RXRB2_UTHR_HIPRIO   0x0898
                    970: #define SK_RXRB2_UTHR_LOPRIO   0x089C
                    971: #define SK_RXRB2_PKTCNT                0x08A0
                    972: #define SK_RXRB2_LVL           0x08A4
                    973: #define SK_RXRB2_CTLTST                0x08A8
                    974:
                    975: /* Block 20 -- Sync. Transmit RAMbuffer 1 */
                    976: #define SK_TXRBS1_START                0x0A00
                    977: #define SK_TXRBS1_END          0x0A04
                    978: #define SK_TXRBS1_WR_PTR       0x0A08
                    979: #define SK_TXRBS1_RD_PTR       0x0A0C
                    980: #define SK_TXRBS1_PKTCNT       0x0A20
                    981: #define SK_TXRBS1_LVL          0x0A24
                    982: #define SK_TXRBS1_CTLTST       0x0A28
                    983:
                    984: /* Block 21 -- Async. Transmit RAMbuffer 1 */
                    985: #define SK_TXRBA1_START                0x0A80
                    986: #define SK_TXRBA1_END          0x0A84
                    987: #define SK_TXRBA1_WR_PTR       0x0A88
                    988: #define SK_TXRBA1_RD_PTR       0x0A8C
                    989: #define SK_TXRBA1_PKTCNT       0x0AA0
                    990: #define SK_TXRBA1_LVL          0x0AA4
                    991: #define SK_TXRBA1_CTLTST       0x0AA8
                    992:
                    993: /* Block 22 -- Sync. Transmit RAMbuffer 2 */
                    994: #define SK_TXRBS2_START                0x0B00
                    995: #define SK_TXRBS2_END          0x0B04
                    996: #define SK_TXRBS2_WR_PTR       0x0B08
                    997: #define SK_TXRBS2_RD_PTR       0x0B0C
                    998: #define SK_TXRBS2_PKTCNT       0x0B20
                    999: #define SK_TXRBS2_LVL          0x0B24
                   1000: #define SK_TXRBS2_CTLTST       0x0B28
                   1001:
                   1002: /* Block 23 -- Async. Transmit RAMbuffer 2 */
                   1003: #define SK_TXRBA2_START                0x0B80
                   1004: #define SK_TXRBA2_END          0x0B84
                   1005: #define SK_TXRBA2_WR_PTR       0x0B88
                   1006: #define SK_TXRBA2_RD_PTR       0x0B8C
                   1007: #define SK_TXRBA2_PKTCNT       0x0BA0
                   1008: #define SK_TXRBA2_LVL          0x0BA4
                   1009: #define SK_TXRBA2_CTLTST       0x0BA8
                   1010:
                   1011: #define SK_RBCTL_RESET         0x00000001
                   1012: #define SK_RBCTL_UNRESET       0x00000002
                   1013: #define SK_RBCTL_OFF           0x00000004
                   1014: #define SK_RBCTL_ON            0x00000008
                   1015: #define SK_RBCTL_STORENFWD_OFF 0x00000010
                   1016: #define SK_RBCTL_STORENFWD_ON  0x00000020
                   1017:
                   1018: /* Block 24 -- RX MAC FIFO 1 regisrers and LINK_SYNC counter */
                   1019: #define SK_RXF1_END            0x0C00
                   1020: #define SK_RXF1_WPTR           0x0C04
                   1021: #define SK_RXF1_RPTR           0x0C0C
                   1022: #define SK_RXF1_PKTCNT         0x0C10
                   1023: #define SK_RXF1_LVL            0x0C14
                   1024: #define SK_RXF1_MACCTL         0x0C18
                   1025: #define SK_RXF1_CTL            0x0C1C
                   1026: #define SK_RXLED1_CNTINIT      0x0C20
                   1027: #define SK_RXLED1_COUNTER      0x0C24
                   1028: #define SK_RXLED1_CTL          0x0C28
                   1029: #define SK_RXLED1_TST          0x0C29
                   1030: #define SK_LINK_SYNC1_CINIT    0x0C30
                   1031: #define SK_LINK_SYNC1_COUNTER  0x0C34
                   1032: #define SK_LINK_SYNC1_CTL      0x0C38
                   1033: #define SK_LINK_SYNC1_TST      0x0C39
                   1034: #define SK_LINKLED1_CTL                0x0C3C
                   1035:
                   1036: #define SK_FIFO_END            0x3F
                   1037:
                   1038: /* Receive MAC FIFO 1 (Yukon Only) */
                   1039: #define SK_RXMF1_END           0x0C40
                   1040: #define SK_RXMF1_THRESHOLD     0x0C44
                   1041: #define SK_RXMF1_CTRL_TEST     0x0C48
                   1042: #define SK_RXMF1_FLUSH_MASK    0x0C4C
                   1043: #define SK_RXMF1_FLUSH_THRESHOLD       0x0C50
                   1044: #define SK_RXMF1_WRITE_PTR     0x0C60
                   1045: #define SK_RXMF1_WRITE_LEVEL   0x0C68
                   1046: #define SK_RXMF1_READ_PTR      0x0C70
                   1047: #define SK_RXMF1_READ_LEVEL    0x0C78
                   1048:
                   1049: /* Receive MAC FIFO 1 Control/Test */
                   1050: #define SK_RFCTL_WR_PTR_TST_ON 0x00004000      /* Write pointer test on*/
                   1051: #define SK_RFCTL_WR_PTR_TST_OFF        0x00002000      /* Write pointer test off */
                   1052: #define SK_RFCTL_WR_PTR_STEP   0x00001000      /* Write pointer increment */
                   1053: #define SK_RFCTL_RD_PTR_TST_ON 0x00000400      /* Read pointer test on */
                   1054: #define SK_RFCTL_RD_PTR_TST_OFF        0x00000200      /* Read pointer test off */
                   1055: #define SK_RFCTL_RD_PTR_STEP   0x00000100      /* Read pointer increment */
                   1056: #define SK_RFCTL_FIFO_FLUSH_ON 0x00000080      /* RX FIFO Flush mode on */
                   1057: #define SK_RFCTL_FIFO_FLUSH_OFF        0x00000040      /* RX FIFO Flush mode off */
                   1058: #define SK_RFCTL_RX_FIFO_OVER  0x00000020      /* Clear IRQ RX FIFO Overrun */
                   1059: #define SK_RFCTL_FRAME_RX_DONE 0x00000010      /* Clear IRQ Frame RX Done */
                   1060: #define SK_RFCTL_OPERATION_ON  0x00000008      /* Operational mode on */
                   1061: #define SK_RFCTL_OPERATION_OFF 0x00000004      /* Operational mode off */
                   1062: #define SK_RFCTL_RESET_CLEAR   0x00000002      /* MAC FIFO Reset Clear */
                   1063: #define SK_RFCTL_RESET_SET     0x00000001      /* MAC FIFO Reset Set */
                   1064:
                   1065: #define SK_RFCTL_FIFO_THRESHOLD        0x0a    /* flush threshold (default) */
                   1066:
                   1067: /* Block 25 -- RX MAC FIFO 2 regisrers and LINK_SYNC counter */
                   1068: #define SK_RXF2_END            0x0C80
                   1069: #define SK_RXF2_WPTR           0x0C84
                   1070: #define SK_RXF2_RPTR           0x0C8C
                   1071: #define SK_RXF2_PKTCNT         0x0C90
                   1072: #define SK_RXF2_LVL            0x0C94
                   1073: #define SK_RXF2_MACCTL         0x0C98
                   1074: #define SK_RXF2_CTL            0x0C9C
                   1075: #define SK_RXLED2_CNTINIT      0x0CA0
                   1076: #define SK_RXLED2_COUNTER      0x0CA4
                   1077: #define SK_RXLED2_CTL          0x0CA8
                   1078: #define SK_RXLED2_TST          0x0CA9
                   1079: #define SK_LINK_SYNC2_CINIT    0x0CB0
                   1080: #define SK_LINK_SYNC2_COUNTER  0x0CB4
                   1081: #define SK_LINK_SYNC2_CTL      0x0CB8
                   1082: #define SK_LINK_SYNC2_TST      0x0CB9
                   1083: #define SK_LINKLED2_CTL                0x0CBC
                   1084:
                   1085: #define SK_RXMACCTL_CLR_IRQ_NOSTS      0x00000001
                   1086: #define SK_RXMACCTL_CLR_IRQ_NOTSTAMP   0x00000002
                   1087: #define SK_RXMACCTL_TSTAMP_OFF         0x00000004
                   1088: #define SK_RXMACCTL_RSTAMP_ON          0x00000008
                   1089: #define SK_RXMACCTL_FLUSH_OFF          0x00000010
                   1090: #define SK_RXMACCTL_FLUSH_ON           0x00000020
                   1091: #define SK_RXMACCTL_PAUSE_OFF          0x00000040
                   1092: #define SK_RXMACCTL_PAUSE_ON           0x00000080
                   1093: #define SK_RXMACCTL_AFULL_OFF          0x00000100
                   1094: #define SK_RXMACCTL_AFULL_ON           0x00000200
                   1095: #define SK_RXMACCTL_VALIDTIME_PATCH_OFF        0x00000400
                   1096: #define SK_RXMACCTL_VALIDTIME_PATCH_ON 0x00000800
                   1097: #define SK_RXMACCTL_RXRDY_PATCH_OFF    0x00001000
                   1098: #define SK_RXMACCTL_RXRDY_PATCH_ON     0x00002000
                   1099: #define SK_RXMACCTL_STS_TIMEO          0x00FF0000
                   1100: #define SK_RXMACCTL_TSTAMP_TIMEO       0xFF000000
                   1101:
                   1102: #define SK_RXLEDCTL_ENABLE             0x0001
                   1103: #define SK_RXLEDCTL_COUNTER_STOP       0x0002
                   1104: #define SK_RXLEDCTL_COUNTER_START      0x0004
                   1105:
                   1106: #define SK_LINKLED_OFF                 0x0001
                   1107: #define SK_LINKLED_ON                  0x0002
                   1108: #define SK_LINKLED_LINKSYNC_OFF                0x0004
                   1109: #define SK_LINKLED_LINKSYNC_ON         0x0008
                   1110: #define SK_LINKLED_BLINK_OFF           0x0010
                   1111: #define SK_LINKLED_BLINK_ON            0x0020
                   1112:
                   1113: /* Block 26 -- TX MAC FIFO 1 regisrers  */
                   1114: #define SK_TXF1_END            0x0D00
                   1115: #define SK_TXF1_WPTR           0x0D04
                   1116: #define SK_TXF1_RPTR           0x0D0C
                   1117: #define SK_TXF1_PKTCNT         0x0D10
                   1118: #define SK_TXF1_LVL            0x0D14
                   1119: #define SK_TXF1_MACCTL         0x0D18
                   1120: #define SK_TXF1_CTL            0x0D1C
                   1121: #define SK_TXLED1_CNTINIT      0x0D20
                   1122: #define SK_TXLED1_COUNTER      0x0D24
                   1123: #define SK_TXLED1_CTL          0x0D28
                   1124: #define SK_TXLED1_TST          0x0D29
                   1125:
                   1126: /* Transmit MAC FIFO 1 (Yukon Only) */
                   1127: #define SK_TXMF1_END           0x0D40
                   1128: #define SK_TXMF1_THRESHOLD     0x0D44
                   1129: #define SK_TXMF1_CTRL_TEST     0x0D48
                   1130: #define SK_TXMF1_WRITE_PTR     0x0D60
                   1131: #define SK_TXMF1_WRITE_SHADOW  0x0D64
                   1132: #define SK_TXMF1_WRITE_LEVEL   0x0D68
                   1133: #define SK_TXMF1_READ_PTR      0x0D70
                   1134: #define SK_TXMF1_RESTART_PTR   0x0D74
                   1135: #define SK_TXMF1_READ_LEVEL    0x0D78
                   1136:
                   1137: /* Transmit MAC FIFO Control/Test */
                   1138: #define SK_TFCTL_WR_PTR_TST_ON 0x00004000      /* Write pointer test on*/
                   1139: #define SK_TFCTL_WR_PTR_TST_OFF        0x00002000      /* Write pointer test off */
                   1140: #define SK_TFCTL_WR_PTR_STEP   0x00001000      /* Write pointer increment */
                   1141: #define SK_TFCTL_RD_PTR_TST_ON 0x00000400      /* Read pointer test on */
                   1142: #define SK_TFCTL_RD_PTR_TST_OFF        0x00000200      /* Read pointer test off */
                   1143: #define SK_TFCTL_RD_PTR_STEP   0x00000100      /* Read pointer increment */
                   1144: #define SK_TFCTL_TX_FIFO_UNDER 0x00000040      /* Clear IRQ TX FIFO Under */
                   1145: #define SK_TFCTL_FRAME_TX_DONE 0x00000020      /* Clear IRQ Frame TX Done */
                   1146: #define SK_TFCTL_IRQ_PARITY_ER 0x00000010      /* Clear IRQ Parity Error */
                   1147: #define SK_TFCTL_OPERATION_ON  0x00000008      /* Operational mode on */
                   1148: #define SK_TFCTL_OPERATION_OFF 0x00000004      /* Operational mode off */
                   1149: #define SK_TFCTL_RESET_CLEAR   0x00000002      /* MAC FIFO Reset Clear */
                   1150: #define SK_TFCTL_RESET_SET     0x00000001      /* MAC FIFO Reset Set */
                   1151:
                   1152: /* Block 27 -- TX MAC FIFO 2 regisrers  */
                   1153: #define SK_TXF2_END            0x0D80
                   1154: #define SK_TXF2_WPTR           0x0D84
                   1155: #define SK_TXF2_RPTR           0x0D8C
                   1156: #define SK_TXF2_PKTCNT         0x0D90
                   1157: #define SK_TXF2_LVL            0x0D94
                   1158: #define SK_TXF2_MACCTL         0x0D98
                   1159: #define SK_TXF2_CTL            0x0D9C
                   1160: #define SK_TXLED2_CNTINIT      0x0DA0
                   1161: #define SK_TXLED2_COUNTER      0x0DA4
                   1162: #define SK_TXLED2_CTL          0x0DA8
                   1163: #define SK_TXLED2_TST          0x0DA9
                   1164:
                   1165: #define SK_TXMACCTL_XMAC_RESET         0x00000001
                   1166: #define SK_TXMACCTL_XMAC_UNRESET       0x00000002
                   1167: #define SK_TXMACCTL_LOOP_OFF           0x00000004
                   1168: #define SK_TXMACCTL_LOOP_ON            0x00000008
                   1169: #define SK_TXMACCTL_FLUSH_OFF          0x00000010
                   1170: #define SK_TXMACCTL_FLUSH_ON           0x00000020
                   1171: #define SK_TXMACCTL_WAITEMPTY_OFF      0x00000040
                   1172: #define SK_TXMACCTL_WAITEMPTY_ON       0x00000080
                   1173: #define SK_TXMACCTL_AFULL_OFF          0x00000100
                   1174: #define SK_TXMACCTL_AFULL_ON           0x00000200
                   1175: #define SK_TXMACCTL_TXRDY_PATCH_OFF    0x00000400
                   1176: #define SK_TXMACCTL_RXRDY_PATCH_ON     0x00000800
                   1177: #define SK_TXMACCTL_PKT_RECOVERY_OFF   0x00001000
                   1178: #define SK_TXMACCTL_PKT_RECOVERY_ON    0x00002000
                   1179: #define SK_TXMACCTL_CLR_IRQ_PERR       0x00008000
                   1180: #define SK_TXMACCTL_WAITAFTERFLUSH     0x00010000
                   1181:
                   1182: #define SK_TXLEDCTL_ENABLE             0x0001
                   1183: #define SK_TXLEDCTL_COUNTER_STOP       0x0002
                   1184: #define SK_TXLEDCTL_COUNTER_START      0x0004
                   1185:
                   1186: #define SK_FIFO_RESET          0x00000001
                   1187: #define SK_FIFO_UNRESET                0x00000002
                   1188: #define SK_FIFO_OFF            0x00000004
                   1189: #define SK_FIFO_ON             0x00000008
                   1190:
                   1191: /* Block 28 -- Descriptor Poll Timer */
                   1192: #define SK_DPT_INIT            0x0e00  /* Initial value 24 bits */
                   1193: #define SK_DPT_TIMER           0x0e04  /* Mul of 78.12MHz clk (24b) */
                   1194:
                   1195: #define SK_DPT_TIMER_MAX       0x00ffffffff    /* 214.75ms at 78.125MHz */
                   1196:
                   1197: #define SK_DPT_TIMER_CTRL      0x0e08  /* Timer Control 16 bits */
                   1198: #define SK_DPT_TCTL_STOP       0x0001  /* Stop Timer */
                   1199: #define SK_DPT_TCTL_START      0x0002  /* Start Timer */
                   1200:
                   1201: #define SK_DPT_TIMER_TEST      0x0e0a  /* Timer Test 16 bits */
                   1202: #define SK_DPT_TTEST_STEP      0x0001  /* Timer Decrement */
                   1203: #define SK_DPT_TTEST_OFF       0x0002  /* Test Mode Off */
                   1204: #define SK_DPT_TTEST_ON                0x0004  /* Test Mode On */
                   1205:
                   1206: #define SK_TSTAMP_COUNT                0x0e14
                   1207: #define SK_TSTAMP_CTL          0x0e18
                   1208:
                   1209: #define SK_TSTAMP_IRQ_CLEAR    0x01
                   1210: #define SK_TSTAMP_STOP         0x02
                   1211: #define SK_TSTAMP_START                0x04
                   1212:
                   1213: #define SK_Y2_ASF_CSR          0x0e68
                   1214:
                   1215: #define SK_Y2_ASF_RESET                0x08
                   1216:
                   1217: #define SK_Y2_LEV_ITIMERINIT   0x0eb0
                   1218: #define SK_Y2_LEV_ITIMERCTL    0x0eb8
                   1219: #define SK_Y2_TX_ITIMERINIT    0x0ec0
                   1220: #define SK_Y2_TX_ITIMERCTL     0x0ec8
                   1221: #define SK_Y2_ISR_ITIMERINIT   0x0ed0
                   1222: #define SK_Y2_ISR_ITIMERCTL    0x0ed8
                   1223:
                   1224: /* Block 29 -- Status BMU (Yukon-2 only) */
                   1225: #define SK_STAT_BMU_CSR                0x0e80
                   1226: #define SK_STAT_BMU_LIDX       0x0e84
                   1227: #define SK_STAT_BMU_ADDRLO     0x0e88
                   1228: #define SK_STAT_BMU_ADDRHI     0x0e8c
                   1229: #define SK_STAT_BMU_TXA1_RIDX  0x0e90
                   1230: #define SK_STAT_BMU_TXS1_RIDX  0x0e92
                   1231: #define SK_STAT_BMU_TXA2_RIDX  0x0e94
                   1232: #define SK_STAT_BMU_TXS2_RIDX  0x0e96
                   1233: #define SK_STAT_BMU_TX_THRESH  0x0e98
                   1234: #define SK_STAT_BMU_PUTIDX     0x0e9c
                   1235: #define SK_STAT_BMU_FIFOWP     0x0ea0
                   1236: #define SK_STAT_BMU_FIFORP     0x0ea4
                   1237: #define SK_STAT_BMU_FIFORSP    0x0ea6
                   1238: #define SK_STAT_BMU_FIFOLV     0x0ea8
                   1239: #define SK_STAT_BMU_FIFOSLV    0x0eaa
                   1240: #define SK_STAT_BMU_FIFOWM     0x0eac
                   1241: #define SK_STAT_BMU_FIFOIWM    0x0ead
                   1242:
                   1243: #define SK_STAT_BMU_RESET      0x00000001
                   1244: #define SK_STAT_BMU_UNRESET    0x00000002
                   1245: #define SK_STAT_BMU_OFF                0x00000004
                   1246: #define SK_STAT_BMU_ON         0x00000008
                   1247: #define SK_STAT_BMU_IRQ_CLEAR  0x00000010
                   1248:
                   1249: /* Block 30 -- GMAC/GPHY Control Registers (Yukon Only)*/
                   1250: #define SK_GMAC_CTRL           0x0f00  /* GMAC Control Register */
                   1251: #define SK_GPHY_CTRL           0x0f04  /* GPHY Control Register */
                   1252: #define SK_GMAC_ISR            0x0f08  /* GMAC Interrupt Source Register */
                   1253: #define SK_GMAC_IMR            0x0f0c  /* GMAC Interrupt Mask Register */
                   1254: #define SK_LINK_CTRL           0x0f10  /* Link Control Register (LCR) */
                   1255: #define SK_WOL_CTRL            0x0f20  /* Wake on LAN Control Register */
                   1256: #define SK_MAC_ADDR_LOW                0x0f24  /* Mack Address Registers LOW */
                   1257: #define SK_MAC_ADDR_HIGH       0x0f28  /* Mack Address Registers HIGH */
                   1258: #define SK_PAT_READ_PTR                0x0f2c  /* Pattern Read Pointer Register */
                   1259: #define SK_PAT_LEN_REG0                0x0f30  /* Pattern Length Register 0 */
                   1260: #define SK_PAT_LEN0            0x0f30  /* Pattern Length 0 */
                   1261: #define SK_PAT_LEN1            0x0f31  /* Pattern Length 1 */
                   1262: #define SK_PAT_LEN2            0x0f32  /* Pattern Length 2 */
                   1263: #define SK_PAT_LEN3            0x0f33  /* Pattern Length 3 */
                   1264: #define SK_PAT_LEN_REG1                0x0f34  /* Pattern Length Register 1 */
                   1265: #define SK_PAT_LEN4            0x0f34  /* Pattern Length 4 */
                   1266: #define SK_PAT_LEN5            0x0f35  /* Pattern Length 5 */
                   1267: #define SK_PAT_LEN6            0x0f36  /* Pattern Length 6 */
                   1268: #define SK_PAT_LEN7            0x0f37  /* Pattern Length 7 */
                   1269: #define SK_PAT_CTR_REG0                0x0f38  /* Pattern Counter Register 0 */
                   1270: #define SK_PAT_CTR0            0x0f38  /* Pattern Counter 0 */
                   1271: #define SK_PAT_CTR1            0x0f39  /* Pattern Counter 1 */
                   1272: #define SK_PAT_CTR2            0x0f3a  /* Pattern Counter 2 */
                   1273: #define SK_PAT_CTR3            0x0f3b  /* Pattern Counter 3 */
                   1274: #define SK_PAT_CTR_REG1                0x0f3c  /* Pattern Counter Register 1 */
                   1275: #define SK_PAT_CTR4            0x0f3c  /* Pattern Counter 4 */
                   1276: #define SK_PAT_CTR5            0x0f3d  /* Pattern Counter 5 */
                   1277: #define SK_PAT_CTR6            0x0f3e  /* Pattern Counter 6 */
                   1278: #define SK_PAT_CTR7            0x0f3f  /* Pattern Counter 7 */
                   1279:
                   1280: #define SK_GMAC_LOOP_ON                0x00000020      /* Loopback mode for testing */
                   1281: #define SK_GMAC_LOOP_OFF       0x00000010      /* purposes */
                   1282: #define SK_GMAC_PAUSE_ON       0x00000008      /* enable forward of pause */
                   1283: #define SK_GMAC_PAUSE_OFF      0x00000004      /* signal to GMAC */
                   1284: #define SK_GMAC_RESET_CLEAR    0x00000002      /* Clear GMAC Reset */
                   1285: #define SK_GMAC_RESET_SET      0x00000001      /* Set GMAC Reset */
                   1286:
                   1287: #define SK_GPHY_SEL_BDT                0x10000000      /* Select Bidirectional xfer */
                   1288: #define SK_GPHY_INT_POL_HI     0x08000000      /* IRQ Polarity Active */
                   1289: #define SK_GPHY_75_OHM         0x04000000      /* Use 75 Ohm Termination */
                   1290: #define SK_GPHY_DIS_FC         0x02000000      /* Disable Auto Fiber/Copper */
                   1291: #define SK_GPHY_DIS_SLEEP      0x01000000      /* Disable Energy Detect */
                   1292: #define SK_GPHY_HWCFG_M_3      0x00800000      /* HWCFG_MODE[3] */
                   1293: #define SK_GPHY_HWCFG_M_2      0x00400000      /* HWCFG_MODE[2] */
                   1294: #define SK_GPHY_HWCFG_M_1      0x00200000      /* HWCFG_MODE[1] */
                   1295: #define SK_GPHY_HWCFG_M_0      0x00100000      /* HWCFG_MODE[0] */
                   1296: #define SK_GPHY_ANEG_0         0x00080000      /* ANEG[0] */
                   1297: #define SK_GPHY_ENA_XC         0x00040000      /* Enable MDI Crossover */
                   1298: #define SK_GPHY_DIS_125                0x00020000      /* Disable 125MHz Clock */
                   1299: #define SK_GPHY_ANEG_3         0x00010000      /* ANEG[3] */
                   1300: #define SK_GPHY_ANEG_2         0x00008000      /* ANEG[2] */
                   1301: #define SK_GPHY_ANEG_1         0x00004000      /* ANEG[1] */
                   1302: #define SK_GPHY_ENA_PAUSE      0x00002000      /* Enable Pause */
                   1303: #define SK_GPHY_PHYADDR_4      0x00001000      /* Bit 4 of Phy Addr */
                   1304: #define SK_GPHY_PHYADDR_3      0x00000800      /* Bit 3 of Phy Addr */
                   1305: #define SK_GPHY_PHYADDR_2      0x00000400      /* Bit 2 of Phy Addr */
                   1306: #define SK_GPHY_PHYADDR_1      0x00000200      /* Bit 1 of Phy Addr */
                   1307: #define SK_GPHY_PHYADDR_0      0x00000100      /* Bit 0 of Phy Addr */
                   1308: #define SK_GPHY_RESET_CLEAR    0x00000002      /* Clear GPHY Reset */
                   1309: #define SK_GPHY_RESET_SET      0x00000001      /* Set GPHY Reset */
                   1310:
                   1311: #define SK_GPHY_COPPER         (SK_GPHY_HWCFG_M_0 | SK_GPHY_HWCFG_M_1 | \
                   1312:                                 SK_GPHY_HWCFG_M_2 | SK_GPHY_HWCFG_M_3 )
                   1313: #define SK_GPHY_FIBER          (SK_GPHY_HWCFG_M_0 | SK_GPHY_HWCFG_M_1 | \
                   1314:                                 SK_GPHY_HWCFG_M_2 )
                   1315: #define SK_GPHY_ANEG_ALL       (SK_GPHY_ANEG_0 | SK_GPHY_ANEG_1 | \
                   1316:                                 SK_GPHY_ANEG_2 | SK_GPHY_ANEG_3 )
                   1317:
                   1318: #define SK_GMAC_INT_TX_OFLOW   0x20    /* Transmit Counter Overflow */
                   1319: #define SK_GMAC_INT_RX_OFLOW   0x10    /* Receiver Overflow */
                   1320: #define SK_GMAC_INT_TX_UNDER   0x08    /* Transmit FIFO Underrun */
                   1321: #define SK_GMAC_INT_TX_DONE    0x04    /* Transmit Complete */
                   1322: #define SK_GMAC_INT_RX_OVER    0x02    /* Receive FIFO Overrun */
                   1323: #define SK_GMAC_INT_RX_DONE    0x01    /* Receive Complete */
                   1324:
                   1325: #define SK_LINK_RESET_CLEAR    0x0002  /* Link Reset Clear */
                   1326: #define SK_LINK_RESET_SET      0x0001  /* Link Reset Set */
                   1327:
                   1328: /* Block 31 -- reserved */
                   1329:
                   1330: /* Block 32-33 -- Pattern Ram */
                   1331: #define SK_WOL_PRAM            0x1000
                   1332:
                   1333: /* Block 0x22 - 0x37 -- reserved */
                   1334:
                   1335: /* Block 0x38 -- Y2 PCI config registers */
                   1336: #define SK_Y2_PCI_BASE         0x1c00
                   1337:
                   1338: /* Compute offset of mirrored PCI register */
                   1339: #define SK_Y2_PCI_REG(reg)     ((reg) + SK_Y2_PCI_BASE)
                   1340:
                   1341: /* Block 0x39 - 0x3f -- reserved */
                   1342:
                   1343: /* Block 0x40 to 0x4F -- XMAC 1 registers */
                   1344: #define SK_XMAC1_BASE  0x2000
                   1345:
                   1346: /* Block 0x50 to 0x5F -- MARV 1 registers */
                   1347: #define SK_MARV1_BASE  0x2800
                   1348:
                   1349: /* Block 0x60 to 0x6F -- XMAC 2 registers */
                   1350: #define SK_XMAC2_BASE  0x3000
                   1351:
                   1352: /* Block 0x70 to 0x7F -- MARV 2 registers */
                   1353: #define SK_MARV2_BASE  0x3800
                   1354:
                   1355: /* Compute relative offset of an XMAC register in the XMAC window(s). */
                   1356: #define SK_XMAC_REG(sc, reg)   (((reg) * 2) + SK_XMAC1_BASE + \
                   1357:        (((sc)->sk_port) * (SK_XMAC2_BASE - SK_XMAC1_BASE)))
                   1358:
                   1359: #if 0
                   1360: #define SK_XM_READ_4(sc, reg)                                          \
                   1361:        ((sk_win_read_2(sc->sk_softc,                                   \
                   1362:              SK_XMAC_REG(sc, reg)) & 0xFFFF) |         \
                   1363:         ((sk_win_read_2(sc->sk_softc,                                  \
                   1364:              SK_XMAC_REG(sc, reg + 2)) & 0xFFFF) << 16))
                   1365:
                   1366: #define SK_XM_WRITE_4(sc, reg, val)                                    \
                   1367:        sk_win_write_2(sc->sk_softc, SK_XMAC_REG(sc, reg),              \
                   1368:                       ((val) & 0xFFFF));                               \
                   1369:        sk_win_write_2(sc->sk_softc, SK_XMAC_REG(sc, reg + 2),          \
                   1370:                       ((val) >> 16) & 0xFFFF)
                   1371: #else
                   1372: #define SK_XM_READ_4(sc, reg)          \
                   1373:        sk_win_read_4(sc->sk_softc, SK_XMAC_REG(sc, reg))
                   1374:
                   1375: #define SK_XM_WRITE_4(sc, reg, val)    \
                   1376:        sk_win_write_4(sc->sk_softc, SK_XMAC_REG(sc, reg), (val))
                   1377: #endif
                   1378:
                   1379: #define SK_XM_READ_2(sc, reg)          \
                   1380:        sk_win_read_2(sc->sk_softc, SK_XMAC_REG(sc, reg))
                   1381:
                   1382: #define SK_XM_WRITE_2(sc, reg, val)    \
                   1383:        sk_win_write_2(sc->sk_softc, SK_XMAC_REG(sc, reg), val)
                   1384:
                   1385: #define SK_XM_SETBIT_4(sc, reg, x)     \
                   1386:        SK_XM_WRITE_4(sc, reg, (SK_XM_READ_4(sc, reg)) | (x))
                   1387:
                   1388: #define SK_XM_CLRBIT_4(sc, reg, x)     \
                   1389:        SK_XM_WRITE_4(sc, reg, (SK_XM_READ_4(sc, reg)) & ~(x))
                   1390:
                   1391: #define SK_XM_SETBIT_2(sc, reg, x)     \
                   1392:        SK_XM_WRITE_2(sc, reg, (SK_XM_READ_2(sc, reg)) | (x))
                   1393:
                   1394: #define SK_XM_CLRBIT_2(sc, reg, x)     \
                   1395:        SK_XM_WRITE_2(sc, reg, (SK_XM_READ_2(sc, reg)) & ~(x))
                   1396:
                   1397: /* Compute relative offset of an MARV register in the MARV window(s). */
                   1398: #define SK_YU_REG(sc, reg) \
                   1399:        ((reg) + SK_MARV1_BASE + \
                   1400:        (((sc)->sk_port) * (SK_MARV2_BASE - SK_MARV1_BASE)))
                   1401:
                   1402: #define SK_YU_READ_4(sc, reg)          \
                   1403:        sk_win_read_4((sc)->sk_softc, SK_YU_REG((sc), (reg)))
                   1404:
                   1405: #define SK_YU_READ_2(sc, reg)          \
                   1406:        sk_win_read_2((sc)->sk_softc, SK_YU_REG((sc), (reg)))
                   1407:
                   1408: #define SK_YU_WRITE_4(sc, reg, val)    \
                   1409:        sk_win_write_4((sc)->sk_softc, SK_YU_REG((sc), (reg)), (val))
                   1410:
                   1411: #define SK_YU_WRITE_2(sc, reg, val)    \
                   1412:        sk_win_write_2((sc)->sk_softc, SK_YU_REG((sc), (reg)), (val))
                   1413:
                   1414: #define SK_YU_SETBIT_4(sc, reg, x)     \
                   1415:        SK_YU_WRITE_4(sc, reg, (SK_YU_READ_4(sc, reg)) | (x))
                   1416:
                   1417: #define SK_YU_CLRBIT_4(sc, reg, x)     \
                   1418:        SK_YU_WRITE_4(sc, reg, (SK_YU_READ_4(sc, reg)) & ~(x))
                   1419:
                   1420: #define SK_YU_SETBIT_2(sc, reg, x)     \
                   1421:        SK_YU_WRITE_2(sc, reg, (SK_YU_READ_2(sc, reg)) | (x))
                   1422:
                   1423: #define SK_YU_CLRBIT_2(sc, reg, x)     \
                   1424:        SK_YU_WRITE_2(sc, reg, (SK_YU_READ_2(sc, reg)) & ~(x))
                   1425:
                   1426: /*
                   1427:  * The default FIFO threshold on the XMAC II is 4 bytes. On
                   1428:  * dual port NICs, this often leads to transmit underruns, so we
                   1429:  * bump the threshold a little.
                   1430:  */
                   1431: #define SK_XM_TX_FIFOTHRESH    512
                   1432:
                   1433: #define SK_PCI_VENDOR_ID       0x0000
                   1434: #define SK_PCI_DEVICE_ID       0x0002
                   1435: #define SK_PCI_COMMAND         0x0004
                   1436: #define SK_PCI_STATUS          0x0006
                   1437: #define SK_PCI_REVID           0x0008
                   1438: #define SK_PCI_CLASSCODE       0x0009
                   1439: #define SK_PCI_CACHELEN                0x000C
                   1440: #define SK_PCI_LATENCY_TIMER   0x000D
                   1441: #define SK_PCI_HEADER_TYPE     0x000E
                   1442: #define SK_PCI_LOMEM           0x0010
                   1443: #define SK_PCI_LOIO            0x0014
                   1444: #define SK_PCI_SUBVEN_ID       0x002C
                   1445: #define SK_PCI_SYBSYS_ID       0x002E
                   1446: #define SK_PCI_BIOSROM         0x0030
                   1447: #define SK_PCI_INTLINE         0x003C
                   1448: #define SK_PCI_INTPIN          0x003D
                   1449: #define SK_PCI_MINGNT          0x003E
                   1450: #define SK_PCI_MINLAT          0x003F
                   1451:
                   1452: /* device specific PCI registers */
                   1453: #define SK_PCI_OURREG1         0x0040
                   1454: #define SK_PCI_OURREG2         0x0044
                   1455: #define SK_PCI_CAPID           0x0048 /* 8 bits */
                   1456: #define SK_PCI_NEXTPTR         0x0049 /* 8 bits */
                   1457: #define SK_PCI_PWRMGMTCAP      0x004A /* 16 bits */
                   1458: #define SK_PCI_PWRMGMTCTRL     0x004C /* 16 bits */
                   1459: #define SK_PCI_PME_EVENT       0x004F
                   1460:
                   1461: #define SK_Y2_REG1_PHY1_COMA   0x10000000
                   1462: #define SK_Y2_REG1_PHY2_COMA   0x20000000
                   1463:
                   1464: #define SK_PSTATE_MASK         0x0003
                   1465: #define SK_PSTATE_D0           0x0000
                   1466: #define SK_PSTATE_D1           0x0001
                   1467: #define SK_PSTATE_D2           0x0002
                   1468: #define SK_PSTATE_D3           0x0003
                   1469: #define SK_PME_EN              0x0010
                   1470: #define SK_PME_STATUS          0x8000
                   1471:
                   1472: #define CSR_WRITE_4(sc, reg, val) \
                   1473:        bus_space_write_4((sc)->sk_btag, (sc)->sk_bhandle, (reg), (val))
                   1474: #define CSR_WRITE_2(sc, reg, val) \
                   1475:        bus_space_write_2((sc)->sk_btag, (sc)->sk_bhandle, (reg), (val))
                   1476: #define CSR_WRITE_1(sc, reg, val) \
                   1477:        bus_space_write_1((sc)->sk_btag, (sc)->sk_bhandle, (reg), (val))
                   1478:
                   1479: #define CSR_READ_4(sc, reg) \
                   1480:        bus_space_read_4((sc)->sk_btag, (sc)->sk_bhandle, (reg))
                   1481: #define CSR_READ_2(sc, reg) \
                   1482:        bus_space_read_2((sc)->sk_btag, (sc)->sk_bhandle, (reg))
                   1483: #define CSR_READ_1(sc, reg) \
                   1484:        bus_space_read_1((sc)->sk_btag, (sc)->sk_bhandle, (reg))
                   1485:
                   1486: struct sk_type {
                   1487:        u_int16_t               sk_vid;
                   1488:        u_int16_t               sk_did;
                   1489:        char                    *sk_name;
                   1490: };
                   1491:
                   1492: #define SK_ADDR_LO(x)  ((u_int64_t) (x) & 0xffffffff)
                   1493: #define SK_ADDR_HI(x)  ((u_int64_t) (x) >> 32)
                   1494:
                   1495: #define SK_RING_ALIGN  64
                   1496:
                   1497: /* RX queue descriptor data structure */
                   1498: struct sk_rx_desc {
                   1499:        u_int32_t               sk_ctl;
                   1500:        u_int32_t               sk_next;
                   1501:        u_int32_t               sk_data_lo;
                   1502:        u_int32_t               sk_data_hi;
                   1503:        u_int32_t               sk_xmac_rxstat;
                   1504:        u_int32_t               sk_timestamp;
                   1505:        u_int16_t               sk_csum2;
                   1506:        u_int16_t               sk_csum1;
                   1507:        u_int16_t               sk_csum2_start;
                   1508:        u_int16_t               sk_csum1_start;
                   1509: };
                   1510:
                   1511: #define SK_OPCODE_DEFAULT      0x00550000
                   1512: #define SK_OPCODE_CSUM         0x00560000
                   1513:
                   1514: #define SK_RXCTL_LEN           0x0000FFFF
                   1515: #define SK_RXCTL_OPCODE                0x00FF0000
                   1516: #define SK_RXCTL_TSTAMP_VALID  0x01000000
                   1517: #define SK_RXCTL_STATUS_VALID  0x02000000
                   1518: #define SK_RXCTL_DEV0          0x04000000
                   1519: #define SK_RXCTL_EOF_INTR      0x08000000
                   1520: #define SK_RXCTL_EOB_INTR      0x10000000
                   1521: #define SK_RXCTL_LASTFRAG      0x20000000
                   1522: #define SK_RXCTL_FIRSTFRAG     0x40000000
                   1523: #define SK_RXCTL_OWN           0x80000000
                   1524:
                   1525: #define SK_RXSTAT      \
                   1526:        (SK_OPCODE_DEFAULT|SK_RXCTL_EOF_INTR|SK_RXCTL_LASTFRAG| \
                   1527:         SK_RXCTL_FIRSTFRAG|SK_RXCTL_OWN)
                   1528:
                   1529: struct sk_tx_desc {
                   1530:        u_int32_t               sk_ctl;
                   1531:        u_int32_t               sk_next;
                   1532:        u_int32_t               sk_data_lo;
                   1533:        u_int32_t               sk_data_hi;
                   1534:        u_int32_t               sk_xmac_txstat;
                   1535:        u_int16_t               sk_rsvd0;
                   1536:        u_int16_t               sk_csum_startval;
                   1537:        u_int16_t               sk_csum_startpos;
                   1538:        u_int16_t               sk_csum_writepos;
                   1539:        u_int32_t               sk_rsvd1;
                   1540: };
                   1541:
                   1542: #define SK_TXCTL_LEN           0x0000FFFF
                   1543: #define SK_TXCTL_OPCODE                0x00FF0000
                   1544: #define SK_TXCTL_SW            0x01000000
                   1545: #define SK_TXCTL_NOCRC         0x02000000
                   1546: #define SK_TXCTL_STORENFWD     0x04000000
                   1547: #define SK_TXCTL_EOF_INTR      0x08000000
                   1548: #define SK_TXCTL_EOB_INTR      0x10000000
                   1549: #define SK_TXCTL_LASTFRAG      0x20000000
                   1550: #define SK_TXCTL_FIRSTFRAG     0x40000000
                   1551: #define SK_TXCTL_OWN           0x80000000
                   1552:
                   1553: #define SK_TXSTAT      \
                   1554:        (SK_OPCODE_DEFAULT|SK_TXCTL_EOF_INTR|SK_TXCTL_LASTFRAG|SK_TXCTL_OWN)
                   1555:
                   1556: #define SK_RXBYTES(x)          ((x) & 0x0000FFFF);
                   1557: #define SK_TXBYTES             SK_RXBYTES
                   1558:
                   1559: #define SK_TX_RING_CNT         512
                   1560: #define SK_RX_RING_CNT         256
                   1561:
                   1562: struct msk_rx_desc {
                   1563:        u_int32_t               sk_addr;
                   1564:        u_int16_t               sk_len;
                   1565:        u_int8_t                sk_ctl;
                   1566:        u_int8_t                sk_opcode;
                   1567: } __packed;
                   1568:
                   1569: #define SK_Y2_RXOPC_BUFFER     0x40
                   1570: #define SK_Y2_RXOPC_PACKET     0x41
                   1571: #define SK_Y2_RXOPC_OWN                0x80
                   1572:
                   1573: struct msk_tx_desc {
                   1574:        u_int32_t               sk_addr;
                   1575:        u_int16_t               sk_len;
                   1576:        u_int8_t                sk_ctl;
                   1577:        u_int8_t                sk_opcode;
                   1578: } __packed;
                   1579:
                   1580: #define SK_Y2_TXCTL_LASTFRAG   0x80
                   1581:
                   1582: #define SK_Y2_TXOPC_BUFFER     0x40
                   1583: #define SK_Y2_TXOPC_PACKET     0x41
                   1584: #define SK_Y2_TXOPC_OWN                0x80
                   1585:
                   1586: struct msk_status_desc {
                   1587:        u_int32_t               sk_status;
                   1588:        u_int16_t               sk_len;
                   1589:        u_int8_t                sk_link;
                   1590:        u_int8_t                sk_opcode;
                   1591: } __packed;
                   1592:
                   1593: #define SK_Y2_STOPC_RXSTAT     0x60
                   1594: #define SK_Y2_STOPC_TXSTAT     0x68
                   1595: #define SK_Y2_STOPC_OWN                0x80
                   1596:
                   1597: #define MSK_TX_RING_CNT                512
                   1598: #define MSK_RX_RING_CNT                512
                   1599: #define MSK_STATUS_RING_CNT    2048
                   1600:
                   1601: /*
                   1602:  * Jumbo buffer stuff. Note that we must allocate more jumbo
                   1603:  * buffers than there are descriptors in the receive ring. This
                   1604:  * is because we don't know how long it will take for a packet
                   1605:  * to be released after we hand it off to the upper protocol
                   1606:  * layers. To be safe, we allocate 1.5 times the number of
                   1607:  * receive descriptors.
                   1608:  */
                   1609: #define SK_JUMBO_FRAMELEN      9018
                   1610: #define SK_JUMBO_MTU           (SK_JUMBO_FRAMELEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
                   1611: #define SK_MIN_FRAMELEN                (ETHER_MIN_LEN - ETHER_CRC_LEN)
                   1612: #define SK_JSLOTS              ((SK_RX_RING_CNT / 2) * 3)
                   1613:
                   1614: #define SK_JRAWLEN     (SK_JUMBO_FRAMELEN + ETHER_ALIGN)
                   1615: #define SK_JLEN                SK_JRAWLEN
                   1616: #define SK_MCLBYTES    SK_JLEN
                   1617: #define SK_JPAGESZ     PAGE_SIZE
                   1618: #define SK_RESID       (SK_JPAGESZ - (SK_JLEN * SK_JSLOTS) % SK_JPAGESZ)
                   1619: #define SK_JMEM                ((SK_JLEN * SK_JSLOTS) + SK_RESID)
                   1620:
                   1621: #define MSK_JSLOTS             ((MSK_RX_RING_CNT / 2) * 3)
                   1622:
                   1623: #define MSK_RESID      (SK_JPAGESZ - (SK_JLEN * MSK_JSLOTS) % SK_JPAGESZ)
                   1624: #define MSK_JMEM       ((SK_JLEN * MSK_JSLOTS) + MSK_RESID)
                   1625:
                   1626: #define SK_MAXUNIT     256
                   1627: #define SK_TIMEOUT     1000
                   1628:
                   1629: /* YUKON registers */
                   1630:
                   1631: /* General Purpose Status Register (GPSR) */
                   1632: #define YUKON_GPSR             0x0000
                   1633:
                   1634: #define YU_GPSR_SPEED          0x8000  /* speed 0 - 10Mbps, 1 - 100Mbps */
                   1635: #define YU_GPSR_DUPLEX         0x4000  /* 0 - half duplex, 1 - full duplex */
                   1636: #define YU_GPSR_FCTL_TX                0x2000  /* Tx flow control, 1 - disabled */
                   1637: #define YU_GPSR_LINK           0x1000  /* link status (down/up) */
                   1638: #define YU_GPSR_PAUSE          0x0800  /* flow control enable/disable */
                   1639: #define YU_GPSR_TX_IN_PROG     0x0400  /* transmit in progress */
                   1640: #define YU_GPSR_EXCESS_COL     0x0200  /* excessive collisions occurred */
                   1641: #define YU_GPSR_LATE_COL       0x0100  /* late collision occurred */
                   1642: #define YU_GPSR_MII_PHY_STC    0x0020  /* MII PHY status change */
                   1643: #define YU_GPSR_GIG_SPEED      0x0010  /* Gigabit Speed (0 - use speed bit) */
                   1644: #define YU_GPSR_PARTITION      0x0008  /* partition mode */
                   1645: #define YU_GPSR_FCTL_RX                0x0004  /* Rx flow control, 1 - disabled  */
                   1646: #define YU_GPSR_PROMS_EN       0x0002  /* promiscuous mode, 1 - enabled */
                   1647:
                   1648: /* General Purpose Control Register (GPCR) */
                   1649: #define YUKON_GPCR             0x0004
                   1650:
                   1651: #define YU_GPCR_FCTL_TX_DIS    0x2000  /* Disable Tx flow control 802.3x */
                   1652: #define YU_GPCR_TXEN           0x1000  /* Transmit Enable */
                   1653: #define YU_GPCR_RXEN           0x0800  /* Receive Enable */
                   1654: #define YU_GPCR_BURSTEN                0x0400  /* Burst Mode Enable */
                   1655: #define YU_GPCR_LPBK           0x0200  /* MAC Loopback Enable */
                   1656: #define YU_GPCR_PAR            0x0100  /* Partition Enable */
                   1657: #define YU_GPCR_GIG            0x0080  /* Gigabit Speed 1000Mbps */
                   1658: #define YU_GPCR_FLP            0x0040  /* Force Link Pass */
                   1659: #define YU_GPCR_DUPLEX         0x0020  /* Duplex Enable */
                   1660: #define YU_GPCR_FCTL_RX_DIS    0x0010  /* Disable Rx flow control 802.3x */
                   1661: #define YU_GPCR_SPEED          0x0008  /* Port Speed 100Mbps */
                   1662: #define YU_GPCR_DPLX_DIS       0x0004  /* Disable Auto-Update for duplex */
                   1663: #define YU_GPCR_FCTL_DIS       0x0002  /* Disable Auto-Update for 802.3x */
                   1664: #define YU_GPCR_SPEED_DIS      0x0001  /* Disable Auto-Update for speed */
                   1665:
                   1666: /* Transmit Control Register (TCR) */
                   1667: #define YUKON_TCR              0x0008
                   1668:
                   1669: #define YU_TCR_FJ              0x8000  /* force jam / flow control */
                   1670: #define YU_TCR_CRCD            0x4000  /* insert CRC (0 - enable) */
                   1671: #define YU_TCR_PADD            0x2000  /* pad packets to 64b (0 - enable) */
                   1672: #define YU_TCR_COLTH           0x1c00  /* collision threshold */
                   1673:
                   1674: /* Receive Control Register (RCR) */
                   1675: #define YUKON_RCR              0x000c
                   1676:
                   1677: #define YU_RCR_UFLEN           0x8000  /* unicast filter enable */
                   1678: #define YU_RCR_MUFLEN          0x4000  /* multicast filter enable */
                   1679: #define YU_RCR_CRCR            0x2000  /* remove CRC */
                   1680: #define YU_RCR_PASSFC          0x1000  /* pass flow control packets */
                   1681:
                   1682: /* Transmit Flow Control Register (TFCR) */
                   1683: #define YUKON_TFCR             0x0010  /* Pause Time */
                   1684:
                   1685: /* Transmit Parameter Register (TPR) */
                   1686: #define YUKON_TPR              0x0014
                   1687:
                   1688: #define YU_TPR_JAM_LEN(x)      (((x) & 0x3) << 14)
                   1689: #define YU_TPR_JAM_IPG(x)      (((x) & 0x1f) << 9)
                   1690: #define YU_TPR_JAM2DATA_IPG(x) (((x) & 0x1f) << 4)
                   1691:
                   1692: /* Serial Mode Register (SMR) */
                   1693: #define YUKON_SMR              0x0018
                   1694:
                   1695: #define YU_SMR_DATA_BLIND(x)   (((x) & 0x1f) << 11)
                   1696: #define YU_SMR_LIMIT4          0x0400  /* reset after 16 / 4 collisions */
                   1697: #define YU_SMR_MFL_JUMBO       0x0100  /* max frame length for jumbo frames */
                   1698: #define YU_SMR_MFL_VLAN                0x0200  /* max frame length + vlan tag */
                   1699: #define YU_SMR_IPG_DATA(x)     ((x) & 0x1f)
                   1700:
                   1701: /* Source Address Low #1 (SAL1) */
                   1702: #define YUKON_SAL1             0x001c  /* SA1[15:0] */
                   1703:
                   1704: /* Source Address Middle #1 (SAM1) */
                   1705: #define YUKON_SAM1             0x0020  /* SA1[31:16] */
                   1706:
                   1707: /* Source Address High #1 (SAH1) */
                   1708: #define YUKON_SAH1             0x0024  /* SA1[47:32] */
                   1709:
                   1710: /* Source Address Low #2 (SAL2) */
                   1711: #define YUKON_SAL2             0x0028  /* SA2[15:0] */
                   1712:
                   1713: /* Source Address Middle #2 (SAM2) */
                   1714: #define YUKON_SAM2             0x002c  /* SA2[31:16] */
                   1715:
                   1716: /* Source Address High #2 (SAH2) */
                   1717: #define YUKON_SAH2             0x0030  /* SA2[47:32] */
                   1718:
                   1719: /* Multicatst Address Hash Register 1 (MCAH1) */
                   1720: #define YUKON_MCAH1            0x0034
                   1721:
                   1722: /* Multicatst Address Hash Register 2 (MCAH2) */
                   1723: #define YUKON_MCAH2            0x0038
                   1724:
                   1725: /* Multicatst Address Hash Register 3 (MCAH3) */
                   1726: #define YUKON_MCAH3            0x003c
                   1727:
                   1728: /* Multicatst Address Hash Register 4 (MCAH4) */
                   1729: #define YUKON_MCAH4            0x0040
                   1730:
                   1731: /* Transmit Interrupt Register (TIR) */
                   1732: #define YUKON_TIR              0x0044
                   1733:
                   1734: #define YU_TIR_OUT_UNICAST     0x0001  /* Num Unicast Packets Transmitted */
                   1735: #define YU_TIR_OUT_BROADCAST   0x0002  /* Num Broadcast Packets Transmitted */
                   1736: #define YU_TIR_OUT_PAUSE       0x0004  /* Num Pause Packets Transmitted */
                   1737: #define YU_TIR_OUT_MULTICAST   0x0008  /* Num Multicast Packets Transmitted */
                   1738: #define YU_TIR_OUT_OCTETS      0x0030  /* Num Bytes Transmitted */
                   1739: #define YU_TIR_OUT_64_OCTETS   0x0000  /* Num Packets Transmitted */
                   1740: #define YU_TIR_OUT_127_OCTETS  0x0000  /* Num Packets Transmitted */
                   1741: #define YU_TIR_OUT_255_OCTETS  0x0000  /* Num Packets Transmitted */
                   1742: #define YU_TIR_OUT_511_OCTETS  0x0000  /* Num Packets Transmitted */
                   1743: #define YU_TIR_OUT_1023_OCTETS 0x0000  /* Num Packets Transmitted */
                   1744: #define YU_TIR_OUT_1518_OCTETS 0x0000  /* Num Packets Transmitted */
                   1745: #define YU_TIR_OUT_MAX_OCTETS  0x0000  /* Num Packets Transmitted */
                   1746: #define YU_TIR_OUT_SPARE       0x0000  /* Num Packets Transmitted */
                   1747: #define YU_TIR_OUT_COLLISIONS  0x0000  /* Num Packets Transmitted */
                   1748: #define YU_TIR_OUT_LATE                0x0000  /* Num Packets Transmitted */
                   1749:
                   1750: /* Receive Interrupt Register (RIR) */
                   1751: #define YUKON_RIR              0x0048
                   1752:
                   1753: /* Transmit and Receive Interrupt Register (TRIR) */
                   1754: #define YUKON_TRIR             0x004c
                   1755:
                   1756: /* Transmit Interrupt Mask Register (TIMR) */
                   1757: #define YUKON_TIMR             0x0050
                   1758:
                   1759: /* Receive Interrupt Mask Register (RIMR) */
                   1760: #define YUKON_RIMR             0x0054
                   1761:
                   1762: /* Transmit and Receive Interrupt Mask Register (TRIMR) */
                   1763: #define YUKON_TRIMR            0x0058
                   1764:
                   1765: /* SMI Control Register (SMICR) */
                   1766: #define YUKON_SMICR            0x0080
                   1767:
                   1768: #define YU_SMICR_PHYAD(x)      (((x) & 0x1f) << 11)
                   1769: #define YU_SMICR_REGAD(x)      (((x) & 0x1f) << 6)
                   1770: #define YU_SMICR_OPCODE                0x0020  /* opcode (0 - write, 1 - read) */
                   1771: #define YU_SMICR_OP_READ       0x0020  /* opcode read */
                   1772: #define YU_SMICR_OP_WRITE      0x0000  /* opcode write */
                   1773: #define YU_SMICR_READ_VALID    0x0010  /* read valid */
                   1774: #define YU_SMICR_BUSY          0x0008  /* busy (writing) */
                   1775:
                   1776: /* SMI Data Register (SMIDR) */
                   1777: #define YUKON_SMIDR            0x0084
                   1778:
                   1779: /* PHY Addres Register (PAR) */
                   1780: #define YUKON_PAR              0x0088
                   1781:
                   1782: #define YU_PAR_MIB_CLR         0x0020  /* MIB Counters Clear Mode */
                   1783: #define YU_PAR_LOAD_TSTCNT     0x0010  /* Load count 0xfffffff0 into cntr */
                   1784:
                   1785: /* Receive status */
                   1786: #define YU_RXSTAT_FOFL         0x00000001      /* Rx FIFO overflow */
                   1787: #define YU_RXSTAT_CRCERR       0x00000002      /* CRC error */
                   1788: #define YU_RXSTAT_FRAGMENT     0x00000008      /* fragment */
                   1789: #define YU_RXSTAT_LONGERR      0x00000010      /* too long packet */
                   1790: #define YU_RXSTAT_MIIERR       0x00000020      /* MII error */
                   1791: #define YU_RXSTAT_BADFC                0x00000040      /* bad flow-control packet */
                   1792: #define YU_RXSTAT_GOODFC       0x00000080      /* good flow-control packet */
                   1793: #define YU_RXSTAT_RXOK         0x00000100      /* receice OK (Good packet) */
                   1794: #define YU_RXSTAT_BROADCAST    0x00000200      /* broadcast packet */
                   1795: #define YU_RXSTAT_MULTICAST    0x00000400      /* multicast packet */
                   1796: #define YU_RXSTAT_RUNT         0x00000800      /* undersize packet */
                   1797: #define YU_RXSTAT_JABBER       0x00001000      /* jabber packet */
                   1798: #define YU_RXSTAT_VLAN         0x00002000      /* VLAN packet */
                   1799: #define YU_RXSTAT_LENSHIFT     16
                   1800:
                   1801: #define        YU_RXSTAT_BYTES(x)      ((x) >> YU_RXSTAT_LENSHIFT)
                   1802:
                   1803: /*
                   1804:  * Registers and data structures for the XaQti Corporation XMAC II
                   1805:  * Gigabit Ethernet MAC. Datasheet is available from http://www.xaqti.com.
                   1806:  * The XMAC can be programmed for 16-bit or 32-bit register access modes.
                   1807:  * The SysKonnect gigabit ethernet adapters use 16-bit mode, so that's
                   1808:  * how the registers are laid out here.
                   1809:  */
                   1810:
                   1811: #define XM_DEVICEID            0x00E0AE20
                   1812: #define XM_XAQTI_OUI           0x00E0AE
                   1813:
                   1814: #define XM_XMAC_REV(x)         (((x) & 0x000000E0) >> 5)
                   1815:
                   1816: #define XM_XMAC_REV_B2         0x0
                   1817: #define XM_XMAC_REV_C1         0x1
                   1818:
                   1819: #define XM_MMUCMD              0x0000
                   1820: #define XM_POFF                        0x0008
                   1821: #define XM_BURST               0x000C
                   1822: #define XM_VLAN_TAGLEV1                0x0010
                   1823: #define XM_VLAN_TAGLEV2                0x0014
                   1824: #define XM_TXCMD               0x0020
                   1825: #define XM_TX_RETRYLIMIT       0x0024
                   1826: #define XM_TX_SLOTTIME         0x0028
                   1827: #define XM_TX_IPG              0x003C
                   1828: #define XM_RXCMD               0x0030
                   1829: #define XM_PHY_ADDR            0x0034
                   1830: #define XM_PHY_DATA            0x0038
                   1831: #define XM_GPIO                        0x0040
                   1832: #define XM_IMR                 0x0044
                   1833: #define XM_ISR                 0x0048
                   1834: #define XM_HWCFG               0x004C
                   1835: #define XM_TX_LOWAT            0x0060
                   1836: #define XM_TX_HIWAT            0x0062
                   1837: #define XM_TX_REQTHRESH_LO     0x0064
                   1838: #define XM_TX_REQTHRESH_HI     0x0066
                   1839: #define XM_TX_REQTHRESH                XM_TX_REQTHRESH_LO
                   1840: #define XM_PAUSEDST0           0x0068
                   1841: #define XM_PAUSEDST1           0x006A
                   1842: #define XM_PAUSEDST2           0x006C
                   1843: #define XM_CTLPARM_LO          0x0070
                   1844: #define XM_CTLPARM_HI          0x0072
                   1845: #define XM_CTLPARM             XM_CTLPARM_LO
                   1846: #define XM_OPCODE_PAUSE_TIMER  0x0074
                   1847: #define XM_TXSTAT_LIFO         0x0078
                   1848:
                   1849: /*
                   1850:  * Perfect filter registers. The XMAC has a table of 16 perfect
                   1851:  * filter entries, spaced 8 bytes apart. This is in addition to
                   1852:  * the station address registers, which appear below.
                   1853:  */
                   1854: #define XM_RXFILT_BASE         0x0080
                   1855: #define XM_RXFILT_END          0x0107
                   1856: #define XM_RXFILT_MAX          16
                   1857: #define XM_RXFILT_ENTRY(ent)           (XM_RXFILT_BASE + ((ent * 8)))
                   1858:
                   1859: /* Primary station address. */
                   1860: #define XM_PAR0                        0x0108
                   1861: #define XM_PAR1                        0x010A
                   1862: #define XM_PAR2                        0x010C
                   1863:
                   1864: /* 64-bit multicast hash table registers */
                   1865: #define XM_MAR0                        0x0110
                   1866: #define XM_MAR1                        0x0112
                   1867: #define XM_MAR2                        0x0114
                   1868: #define XM_MAR3                        0x0116
                   1869: #define XM_RX_LOWAT            0x0118
                   1870: #define XM_RX_HIWAT            0x011A
                   1871: #define XM_RX_REQTHRESH_LO     0x011C
                   1872: #define XM_RX_REQTHRESH_HI     0x011E
                   1873: #define XM_RX_REQTHRESH                XM_RX_REQTHRESH_LO
                   1874: #define XM_DEVID_LO            0x0120
                   1875: #define XM_DEVID_HI            0x0122
                   1876: #define XM_DEVID               XM_DEVID_LO
                   1877: #define XM_MODE_LO             0x0124
                   1878: #define XM_MODE_HI             0x0126
                   1879: #define XM_MODE                        XM_MODE_LO
                   1880: #define XM_LASTSRC0            0x0128
                   1881: #define XM_LASTSRC1            0x012A
                   1882: #define XM_LASTSRC2            0x012C
                   1883: #define XM_TSTAMP_READ         0x0130
                   1884: #define XM_TSTAMP_LOAD         0x0134
                   1885: #define XM_STATS_CMD           0x0200
                   1886: #define XM_RXCNT_EVENT_LO      0x0204
                   1887: #define XM_RXCNT_EVENT_HI      0x0206
                   1888: #define XM_RXCNT_EVENT         XM_RXCNT_EVENT_LO
                   1889: #define XM_TXCNT_EVENT_LO      0x0208
                   1890: #define XM_TXCNT_EVENT_HI      0x020A
                   1891: #define XM_TXCNT_EVENT         XM_TXCNT_EVENT_LO
                   1892: #define XM_RXCNT_EVMASK_LO     0x020C
                   1893: #define XM_RXCNT_EVMASK_HI     0x020E
                   1894: #define XM_RXCNT_EVMASK                XM_RXCNT_EVMASK_LO
                   1895: #define XM_TXCNT_EVMASK_LO     0x0210
                   1896: #define XM_TXCNT_EVMASK_HI     0x0212
                   1897: #define XM_TXCNT_EVMASK                XM_TXCNT_EVMASK_LO
                   1898:
                   1899: /* Statistics command register */
                   1900: #define XM_STATCMD_CLR_TX      0x0001
                   1901: #define XM_STATCMD_CLR_RX      0x0002
                   1902: #define XM_STATCMD_COPY_TX     0x0004
                   1903: #define XM_STATCMD_COPY_RX     0x0008
                   1904: #define XM_STATCMD_SNAP_TX     0x0010
                   1905: #define XM_STATCMD_SNAP_RX     0x0020
                   1906:
                   1907: /* TX statistics registers */
                   1908: #define XM_TXSTATS_PKTSOK      0x280
                   1909: #define XM_TXSTATS_BYTESOK_HI  0x284
                   1910: #define XM_TXSTATS_BYTESOK_LO  0x288
                   1911: #define XM_TXSTATS_BCASTSOK    0x28C
                   1912: #define XM_TXSTATS_MCASTSOK    0x290
                   1913: #define XM_TXSTATS_UCASTSOK    0x294
                   1914: #define XM_TXSTATS_GIANTS      0x298
                   1915: #define XM_TXSTATS_BURSTCNT    0x29C
                   1916: #define XM_TXSTATS_PAUSEPKTS   0x2A0
                   1917: #define XM_TXSTATS_MACCTLPKTS  0x2A4
                   1918: #define XM_TXSTATS_SINGLECOLS  0x2A8
                   1919: #define XM_TXSTATS_MULTICOLS   0x2AC
                   1920: #define XM_TXSTATS_EXCESSCOLS  0x2B0
                   1921: #define XM_TXSTATS_LATECOLS    0x2B4
                   1922: #define XM_TXSTATS_DEFER       0x2B8
                   1923: #define XM_TXSTATS_EXCESSDEFER 0x2BC
                   1924: #define XM_TXSTATS_UNDERRUN    0x2C0
                   1925: #define XM_TXSTATS_CARRIERSENSE        0x2C4
                   1926: #define XM_TXSTATS_UTILIZATION 0x2C8
                   1927: #define XM_TXSTATS_64          0x2D0
                   1928: #define XM_TXSTATS_65_127      0x2D4
                   1929: #define XM_TXSTATS_128_255     0x2D8
                   1930: #define XM_TXSTATS_256_511     0x2DC
                   1931: #define XM_TXSTATS_512_1023    0x2E0
                   1932: #define XM_TXSTATS_1024_MAX    0x2E4
                   1933:
                   1934: /* RX statistics registers */
                   1935: #define XM_RXSTATS_PKTSOK      0x300
                   1936: #define XM_RXSTATS_BYTESOK_HI  0x304
                   1937: #define XM_RXSTATS_BYTESOK_LO  0x308
                   1938: #define XM_RXSTATS_BCASTSOK    0x30C
                   1939: #define XM_RXSTATS_MCASTSOK    0x310
                   1940: #define XM_RXSTATS_UCASTSOK    0x314
                   1941: #define XM_RXSTATS_PAUSEPKTS   0x318
                   1942: #define XM_RXSTATS_MACCTLPKTS  0x31C
                   1943: #define XM_RXSTATS_BADPAUSEPKTS        0x320
                   1944: #define XM_RXSTATS_BADMACCTLPKTS       0x324
                   1945: #define XM_RXSTATS_BURSTCNT    0x328
                   1946: #define XM_RXSTATS_MISSEDPKTS  0x32C
                   1947: #define XM_RXSTATS_FRAMEERRS   0x330
                   1948: #define XM_RXSTATS_OVERRUN     0x334
                   1949: #define XM_RXSTATS_JABBER      0x338
                   1950: #define XM_RXSTATS_CARRLOSS    0x33C
                   1951: #define XM_RXSTATS_INRNGLENERR 0x340
                   1952: #define XM_RXSTATS_SYMERR      0x344
                   1953: #define XM_RXSTATS_SHORTEVENT  0x348
                   1954: #define XM_RXSTATS_RUNTS       0x34C
                   1955: #define XM_RXSTATS_GIANTS      0x350
                   1956: #define XM_RXSTATS_CRCERRS     0x354
                   1957: #define XM_RXSTATS_CEXTERRS    0x35C
                   1958: #define XM_RXSTATS_UTILIZATION 0x360
                   1959: #define XM_RXSTATS_64          0x368
                   1960: #define XM_RXSTATS_65_127      0x36C
                   1961: #define XM_RXSTATS_128_255     0x370
                   1962: #define XM_RXSTATS_256_511     0x374
                   1963: #define XM_RXSTATS_512_1023    0x378
                   1964: #define XM_RXSTATS_1024_MAX    0x37C
                   1965:
                   1966: #define XM_MMUCMD_TX_ENB       0x0001
                   1967: #define XM_MMUCMD_RX_ENB       0x0002
                   1968: #define XM_MMUCMD_GMIILOOP     0x0004
                   1969: #define XM_MMUCMD_RATECTL      0x0008
                   1970: #define XM_MMUCMD_GMIIFDX      0x0010
                   1971: #define XM_MMUCMD_NO_MGMT_PRMB 0x0020
                   1972: #define XM_MMUCMD_SIMCOL       0x0040
                   1973: #define XM_MMUCMD_FORCETX      0x0080
                   1974: #define XM_MMUCMD_LOOPENB      0x0200
                   1975: #define XM_MMUCMD_IGNPAUSE     0x0400
                   1976: #define XM_MMUCMD_PHYBUSY      0x0800
                   1977: #define XM_MMUCMD_PHYDATARDY   0x1000
                   1978:
                   1979: #define XM_TXCMD_AUTOPAD       0x0001
                   1980: #define XM_TXCMD_NOCRC         0x0002
                   1981: #define XM_TXCMD_NOPREAMBLE    0x0004
                   1982: #define XM_TXCMD_NOGIGAMODE    0x0008
                   1983: #define XM_TXCMD_SAMPLELINE    0x0010
                   1984: #define XM_TXCMD_ENCBYPASS     0x0020
                   1985: #define XM_TXCMD_XMITBK2BK     0x0040
                   1986: #define XM_TXCMD_FAIRSHARE     0x0080
                   1987:
                   1988: #define XM_RXCMD_DISABLE_CEXT  0x0001
                   1989: #define XM_RXCMD_STRIPPAD      0x0002
                   1990: #define XM_RXCMD_SAMPLELINE    0x0004
                   1991: #define XM_RXCMD_SELFRX                0x0008
                   1992: #define XM_RXCMD_STRIPFCS      0x0010
                   1993: #define XM_RXCMD_TRANSPARENT   0x0020
                   1994: #define XM_RXCMD_IPGCAPTURE    0x0040
                   1995: #define XM_RXCMD_BIGPKTOK      0x0080
                   1996: #define XM_RXCMD_LENERROK      0x0100
                   1997:
                   1998: #define XM_GPIO_GP0_SET                0x0001
                   1999: #define XM_GPIO_RESETSTATS     0x0004
                   2000: #define XM_GPIO_RESETMAC       0x0008
                   2001: #define XM_GPIO_FORCEINT       0x0020
                   2002: #define XM_GPIO_ANEGINPROG     0x0040
                   2003:
                   2004: #define XM_IMR_RX_EOF          0x0001
                   2005: #define XM_IMR_TX_EOF          0x0002
                   2006: #define XM_IMR_TX_UNDERRUN     0x0004
                   2007: #define XM_IMR_RX_OVERRUN      0x0008
                   2008: #define XM_IMR_TX_STATS_OFLOW  0x0010
                   2009: #define XM_IMR_RX_STATS_OFLOW  0x0020
                   2010: #define XM_IMR_TSTAMP_OFLOW    0x0040
                   2011: #define XM_IMR_AUTONEG_DONE    0x0080
                   2012: #define XM_IMR_NEXTPAGE_RDY    0x0100
                   2013: #define XM_IMR_PAGE_RECEIVED   0x0200
                   2014: #define XM_IMR_LP_REQCFG       0x0400
                   2015: #define XM_IMR_GP0_SET         0x0800
                   2016: #define XM_IMR_FORCEINTR       0x1000
                   2017: #define XM_IMR_TX_ABORT                0x2000
                   2018: #define XM_IMR_LINKEVENT       0x4000
                   2019:
                   2020: #define XM_INTRS       \
                   2021:        (~(XM_IMR_GP0_SET|XM_IMR_AUTONEG_DONE|XM_IMR_TX_UNDERRUN))
                   2022:
                   2023: #define XM_ISR_RX_EOF          0x0001
                   2024: #define XM_ISR_TX_EOF          0x0002
                   2025: #define XM_ISR_TX_UNDERRUN     0x0004
                   2026: #define XM_ISR_RX_OVERRUN      0x0008
                   2027: #define XM_ISR_TX_STATS_OFLOW  0x0010
                   2028: #define XM_ISR_RX_STATS_OFLOW  0x0020
                   2029: #define XM_ISR_TSTAMP_OFLOW    0x0040
                   2030: #define XM_ISR_AUTONEG_DONE    0x0080
                   2031: #define XM_ISR_NEXTPAGE_RDY    0x0100
                   2032: #define XM_ISR_PAGE_RECEIVED   0x0200
                   2033: #define XM_ISR_LP_REQCFG       0x0400
                   2034: #define XM_ISR_GP0_SET         0x0800
                   2035: #define XM_ISR_FORCEINTR       0x1000
                   2036: #define XM_ISR_TX_ABORT                0x2000
                   2037: #define XM_ISR_LINKEVENT       0x4000
                   2038:
                   2039: #define XM_HWCFG_GENEOP                0x0008
                   2040: #define XM_HWCFG_SIGSTATCKH    0x0004
                   2041: #define XM_HWCFG_GMIIMODE      0x0001
                   2042:
                   2043: #define XM_MODE_FLUSH_RXFIFO   0x00000001
                   2044: #define XM_MODE_FLUSH_TXFIFO   0x00000002
                   2045: #define XM_MODE_BIGENDIAN      0x00000004
                   2046: #define XM_MODE_RX_PROMISC     0x00000008
                   2047: #define XM_MODE_RX_NOBROAD     0x00000010
                   2048: #define XM_MODE_RX_NOMULTI     0x00000020
                   2049: #define XM_MODE_RX_NOUNI       0x00000040
                   2050: #define XM_MODE_RX_BADFRAMES   0x00000080
                   2051: #define XM_MODE_RX_CRCERRS     0x00000100
                   2052: #define XM_MODE_RX_GIANTS      0x00000200
                   2053: #define XM_MODE_RX_INRANGELEN  0x00000400
                   2054: #define XM_MODE_RX_RUNTS       0x00000800
                   2055: #define XM_MODE_RX_MACCTL      0x00001000
                   2056: #define XM_MODE_RX_USE_PERFECT 0x00002000
                   2057: #define XM_MODE_RX_USE_STATION 0x00004000
                   2058: #define XM_MODE_RX_USE_HASH    0x00008000
                   2059: #define XM_MODE_RX_ADDRPAIR    0x00010000
                   2060: #define XM_MODE_PAUSEONHI      0x00020000
                   2061: #define XM_MODE_PAUSEONLO      0x00040000
                   2062: #define XM_MODE_TIMESTAMP      0x00080000
                   2063: #define XM_MODE_SENDPAUSE      0x00100000
                   2064: #define XM_MODE_SENDCONTINUOUS 0x00200000
                   2065: #define XM_MODE_LE_STATUSWORD  0x00400000
                   2066: #define XM_MODE_AUTOFIFOPAUSE  0x00800000
                   2067: #define XM_MODE_EXPAUSEGEN     0x02000000
                   2068: #define XM_MODE_RX_INVERSE     0x04000000
                   2069:
                   2070: #define XM_RXSTAT_MACCTL       0x00000001
                   2071: #define XM_RXSTAT_ERRFRAME     0x00000002
                   2072: #define XM_RXSTAT_CRCERR       0x00000004
                   2073: #define XM_RXSTAT_GIANT                0x00000008
                   2074: #define XM_RXSTAT_RUNT         0x00000010
                   2075: #define XM_RXSTAT_FRAMEERR     0x00000020
                   2076: #define XM_RXSTAT_INRANGEERR   0x00000040
                   2077: #define XM_RXSTAT_CARRIERERR   0x00000080
                   2078: #define XM_RXSTAT_COLLERR      0x00000100
                   2079: #define XM_RXSTAT_802_3                0x00000200
                   2080: #define XM_RXSTAT_CARREXTERR   0x00000400
                   2081: #define XM_RXSTAT_BURSTMODE    0x00000800
                   2082: #define XM_RXSTAT_UNICAST      0x00002000
                   2083: #define XM_RXSTAT_MULTICAST    0x00004000
                   2084: #define XM_RXSTAT_BROADCAST    0x00008000
                   2085: #define XM_RXSTAT_VLAN_LEV1    0x00010000
                   2086: #define XM_RXSTAT_VLAN_LEV2    0x00020000
                   2087: #define XM_RXSTAT_LEN          0xFFFC0000
                   2088: #define XM_RXSTAT_LENSHIFT     18
                   2089:
                   2090: #define XM_RXSTAT_BYTES(x)     ((x) >> XM_RXSTAT_LENSHIFT)
                   2091:
                   2092: /*
                   2093:  * XMAC PHY registers, indirectly accessed through
                   2094:  * XM_PHY_ADDR and XM_PHY_REG.
                   2095:  */
                   2096:
                   2097: #define XM_PHY_BMCR            0x0000  /* control */
                   2098: #define XM_PHY_BMSR            0x0001  /* status */
                   2099: #define XM_PHY_VENID           0x0002  /* vendor id */
                   2100: #define XM_PHY_DEVID           0x0003  /* device id */
                   2101: #define XM_PHY_ANAR            0x0004  /* autoneg advertisenemt */
                   2102: #define XM_PHY_LPAR            0x0005  /* link partner ability */
                   2103: #define XM_PHY_ANEXP           0x0006  /* autoneg expansion */
                   2104: #define XM_PHY_NEXTP           0x0007  /* nextpage */
                   2105: #define XM_PHY_LPNEXTP         0x0008  /* link partner's nextpage */
                   2106: #define XM_PHY_EXTSTS          0x000F  /* extented status */
                   2107: #define XM_PHY_RESAB           0x0010  /* resolved ability */
                   2108:
                   2109: #define XM_BMCR_DUPLEX         0x0100
                   2110: #define XM_BMCR_RENEGOTIATE    0x0200
                   2111: #define XM_BMCR_AUTONEGENBL    0x1000
                   2112: #define XM_BMCR_LOOPBACK       0x4000
                   2113: #define XM_BMCR_RESET          0x8000
                   2114:
                   2115: #define XM_BMSR_EXTCAP         0x0001
                   2116: #define XM_BMSR_LINKSTAT       0x0004
                   2117: #define XM_BMSR_AUTONEGABLE    0x0008
                   2118: #define XM_BMSR_REMFAULT       0x0010
                   2119: #define XM_BMSR_AUTONEGDONE    0x0020
                   2120: #define XM_BMSR_EXTSTAT                0x0100
                   2121:
                   2122: #define XM_VENID_XAQTI         0xD14C
                   2123: #define XM_DEVID_XMAC          0x0002
                   2124:
                   2125: #define XM_ANAR_FULLDUPLEX     0x0020
                   2126: #define XM_ANAR_HALFDUPLEX     0x0040
                   2127: #define XM_ANAR_PAUSEBITS      0x0180
                   2128: #define XM_ANAR_REMFAULTBITS   0x1800
                   2129: #define XM_ANAR_ACK            0x4000
                   2130: #define XM_ANAR_NEXTPAGE       0x8000
                   2131:
                   2132: #define XM_LPAR_FULLDUPLEX     0x0020
                   2133: #define XM_LPAR_HALFDUPLEX     0x0040
                   2134: #define XM_LPAR_PAUSEBITS      0x0180
                   2135: #define XM_LPAR_REMFAULTBITS   0x1800
                   2136: #define XM_LPAR_ACK            0x4000
                   2137: #define XM_LPAR_NEXTPAGE       0x8000
                   2138:
                   2139: #define XM_PAUSE_NOPAUSE       0x0000
                   2140: #define XM_PAUSE_SYMPAUSE      0x0080
                   2141: #define XM_PAUSE_ASYMPAUSE     0x0100
                   2142: #define XM_PAUSE_BOTH          0x0180
                   2143:
                   2144: #define XM_REMFAULT_LINKOK     0x0000
                   2145: #define XM_REMFAULT_LINKFAIL   0x0800
                   2146: #define XM_REMFAULT_OFFLINE    0x1000
                   2147: #define XM_REMFAULT_ANEGERR    0x1800
                   2148:
                   2149: #define XM_ANEXP_GOTPAGE       0x0002
                   2150: #define XM_ANEXP_NEXTPAGE_SELF 0x0004
                   2151: #define XM_ANEXP_NEXTPAGE_LP   0x0008
                   2152:
                   2153: #define XM_NEXTP_MESSAGE       0x07FF
                   2154: #define XM_NEXTP_TOGGLE                0x0800
                   2155: #define XM_NEXTP_ACK2          0x1000
                   2156: #define XM_NEXTP_MPAGE         0x2000
                   2157: #define XM_NEXTP_ACK1          0x4000
                   2158: #define XM_NEXTP_NPAGE         0x8000
                   2159:
                   2160: #define XM_LPNEXTP_MESSAGE     0x07FF
                   2161: #define XM_LPNEXTP_TOGGLE      0x0800
                   2162: #define XM_LPNEXTP_ACK2                0x1000
                   2163: #define XM_LPNEXTP_MPAGE       0x2000
                   2164: #define XM_LPNEXTP_ACK1                0x4000
                   2165: #define XM_LPNEXTP_NPAGE       0x8000
                   2166:
                   2167: #define XM_EXTSTS_HALFDUPLEX   0x4000
                   2168: #define XM_EXTSTS_FULLDUPLEX   0x8000
                   2169:
                   2170: #define XM_RESAB_PAUSEMISMATCH 0x0008
                   2171: #define XM_RESAB_ABLMISMATCH   0x0010
                   2172: #define XM_RESAB_FDMODESEL     0x0020
                   2173: #define XM_RESAB_HDMODESEL     0x0040
                   2174: #define XM_RESAB_PAUSEBITS     0x0180
                   2175:
                   2176: #define SK_HASH_BITS           6

CVSweb