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

Annotation of sys/dev/pci/if_bgereg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: if_bgereg.h,v 1.72 2007/02/10 01:23:19 krw Exp $      */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 2001 Wind River Systems
        !             5:  * Copyright (c) 1997, 1998, 1999, 2001
        !             6:  *     Bill Paul <wpaul@windriver.com>.  All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  * 3. All advertising materials mentioning features or use of this software
        !            17:  *    must display the following acknowledgement:
        !            18:  *     This product includes software developed by Bill Paul.
        !            19:  * 4. Neither the name of the author nor the names of any co-contributors
        !            20:  *    may be used to endorse or promote products derived from this software
        !            21:  *    without specific prior written permission.
        !            22:  *
        !            23:  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
        !            24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            26:  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
        !            27:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        !            28:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        !            29:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        !            30:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        !            31:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            32:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
        !            33:  * THE POSSIBILITY OF SUCH DAMAGE.
        !            34:  *
        !            35:  * $FreeBSD: if_bgereg.h,v 1.11 2002/11/14 23:54:50 sam Exp $
        !            36:  */
        !            37:
        !            38: /*
        !            39:  * BCM570x memory map. The internal memory layout varies somewhat
        !            40:  * depending on whether or not we have external SSRAM attached.
        !            41:  * The BCM5700 can have up to 16MB of external memory. The BCM5701
        !            42:  * is apparently not designed to use external SSRAM. The mappings
        !            43:  * up to the first 4 send rings are the same for both internal and
        !            44:  * external memory configurations. Note that mini RX ring space is
        !            45:  * only available with external SSRAM configurations, which means
        !            46:  * the mini RX ring is not supported on the BCM5701.
        !            47:  *
        !            48:  * The NIC's memory can be accessed by the host in one of 3 ways:
        !            49:  *
        !            50:  * 1) Indirect register access. The MEMWIN_BASEADDR and MEMWIN_DATA
        !            51:  *    registers in PCI config space can be used to read any 32-bit
        !            52:  *    address within the NIC's memory.
        !            53:  *
        !            54:  * 2) Memory window access. The MEMWIN_BASEADDR register in PCI config
        !            55:  *    space can be used in conjunction with the memory window in the
        !            56:  *    device register space at offset 0x8000 to read any 32K chunk
        !            57:  *    of NIC memory.
        !            58:  *
        !            59:  * 3) Flat mode. If the 'flat mode' bit in the PCI state register is
        !            60:  *    set, the device I/O mapping consumes 32MB of host address space,
        !            61:  *    allowing all of the registers and internal NIC memory to be
        !            62:  *    accessed directly. NIC memory addresses are offset by 0x01000000.
        !            63:  *    Flat mode consumes so much host address space that it is not
        !            64:  *    recommended.
        !            65:  */
        !            66: #define BGE_PAGE_ZERO                  0x00000000
        !            67: #define BGE_PAGE_ZERO_END              0x000000FF
        !            68: #define BGE_SEND_RING_RCB              0x00000100
        !            69: #define BGE_SEND_RING_RCB_END          0x000001FF
        !            70: #define BGE_RX_RETURN_RING_RCB         0x00000200
        !            71: #define BGE_RX_RETURN_RING_RCB_END     0x000002FF
        !            72: #define BGE_STATS_BLOCK                        0x00000300
        !            73: #define BGE_STATS_BLOCK_END            0x00000AFF
        !            74: #define BGE_STATUS_BLOCK               0x00000B00
        !            75: #define BGE_STATUS_BLOCK_END           0x00000B4F
        !            76: #define BGE_SOFTWARE_GENCOMM           0x00000B50
        !            77: #define BGE_SOFTWARE_GENCOMM_SIG       0x00000B54
        !            78: #define BGE_SOFTWARE_GENCOMM_NICCFG    0x00000B58
        !            79: #define BGE_SOFTWARE_GENCOMM_FW                0x00000B78
        !            80: #define    BGE_FW_PAUSE                        0x00000002
        !            81: #define BGE_SOFTWARE_GENCOMM_END       0x00000FFF
        !            82: #define BGE_UNMAPPED                   0x00001000
        !            83: #define BGE_UNMAPPED_END               0x00001FFF
        !            84: #define BGE_DMA_DESCRIPTORS            0x00002000
        !            85: #define BGE_DMA_DESCRIPTORS_END                0x00003FFF
        !            86: #define BGE_SEND_RING_1_TO_4           0x00004000
        !            87: #define BGE_SEND_RING_1_TO_4_END       0x00005FFF
        !            88:
        !            89: /* Mappings for internal memory configuration */
        !            90: #define BGE_STD_RX_RINGS               0x00006000
        !            91: #define BGE_STD_RX_RINGS_END           0x00006FFF
        !            92: #define BGE_JUMBO_RX_RINGS             0x00007000
        !            93: #define BGE_JUMBO_RX_RINGS_END         0x00007FFF
        !            94: #define BGE_BUFFPOOL_1                 0x00008000
        !            95: #define BGE_BUFFPOOL_1_END             0x0000FFFF
        !            96: #define BGE_BUFFPOOL_2                 0x00010000 /* or expansion ROM */
        !            97: #define BGE_BUFFPOOL_2_END             0x00017FFF
        !            98: #define BGE_BUFFPOOL_3                 0x00018000 /* or expansion ROM */
        !            99: #define BGE_BUFFPOOL_3_END             0x0001FFFF
        !           100:
        !           101: /* Mappings for external SSRAM configurations */
        !           102: #define BGE_SEND_RING_5_TO_6           0x00006000
        !           103: #define BGE_SEND_RING_5_TO_6_END       0x00006FFF
        !           104: #define BGE_SEND_RING_7_TO_8           0x00007000
        !           105: #define BGE_SEND_RING_7_TO_8_END       0x00007FFF
        !           106: #define BGE_SEND_RING_9_TO_16          0x00008000
        !           107: #define BGE_SEND_RING_9_TO_16_END      0x0000BFFF
        !           108: #define BGE_EXT_STD_RX_RINGS           0x0000C000
        !           109: #define BGE_EXT_STD_RX_RINGS_END       0x0000CFFF
        !           110: #define BGE_EXT_JUMBO_RX_RINGS         0x0000D000
        !           111: #define BGE_EXT_JUMBO_RX_RINGS_END     0x0000DFFF
        !           112: #define BGE_MINI_RX_RINGS              0x0000E000
        !           113: #define BGE_MINI_RX_RINGS_END          0x0000FFFF
        !           114: #define BGE_AVAIL_REGION1              0x00010000 /* or expansion ROM */
        !           115: #define BGE_AVAIL_REGION1_END          0x00017FFF
        !           116: #define BGE_AVAIL_REGION2              0x00018000 /* or expansion ROM */
        !           117: #define BGE_AVAIL_REGION2_END          0x0001FFFF
        !           118: #define BGE_EXT_SSRAM                  0x00020000
        !           119: #define BGE_EXT_SSRAM_END              0x000FFFFF
        !           120:
        !           121:
        !           122: /*
        !           123:  * BCM570x register offsets. These are memory mapped registers
        !           124:  * which can be accessed with the CSR_READ_4()/CSR_WRITE_4() macros.
        !           125:  * Each register must be accessed using 32 bit operations.
        !           126:  *
        !           127:  * All registers are accessed through a 32K shared memory block.
        !           128:  * The first group of registers are actually copies of the PCI
        !           129:  * configuration space registers.
        !           130:  */
        !           131:
        !           132: /*
        !           133:  * PCI registers defined in the PCI 2.2 spec.
        !           134:  */
        !           135: #define BGE_PCI_VID                    0x00
        !           136: #define BGE_PCI_DID                    0x02
        !           137: #define BGE_PCI_CMD                    0x04
        !           138: #define BGE_PCI_STS                    0x06
        !           139: #define BGE_PCI_REV                    0x08
        !           140: #define BGE_PCI_CLASS                  0x09
        !           141: #define BGE_PCI_CACHESZ                        0x0C
        !           142: #define BGE_PCI_LATTIMER               0x0D
        !           143: #define BGE_PCI_HDRTYPE                        0x0E
        !           144: #define BGE_PCI_BIST                   0x0F
        !           145: #define BGE_PCI_BAR0                   0x10
        !           146: #define BGE_PCI_BAR1                   0x14
        !           147: #define BGE_PCI_SUBSYS                 0x2C
        !           148: #define BGE_PCI_SUBVID                 0x2E
        !           149: #define BGE_PCI_ROMBASE                        0x30
        !           150: #define BGE_PCI_CAPPTR                 0x34
        !           151: #define BGE_PCI_INTLINE                        0x3C
        !           152: #define BGE_PCI_INTPIN                 0x3D
        !           153: #define BGE_PCI_MINGNT                 0x3E
        !           154: #define BGE_PCI_MAXLAT                 0x3F
        !           155: #define BGE_PCI_PCIXCAP                        0x40
        !           156: #define BGE_PCI_NEXTPTR_PM             0x41
        !           157: #define BGE_PCI_PCIX_CMD               0x42
        !           158: #define BGE_PCI_PCIX_STS               0x44
        !           159: #define BGE_PCI_PWRMGMT_CAPID          0x48
        !           160: #define BGE_PCI_NEXTPTR_VPD            0x49
        !           161: #define BGE_PCI_PWRMGMT_CAPS           0x4A
        !           162: #define BGE_PCI_PWRMGMT_CMD            0x4C
        !           163: #define BGE_PCI_PWRMGMT_STS            0x4D
        !           164: #define BGE_PCI_PWRMGMT_DATA           0x4F
        !           165: #define BGE_PCI_VPD_CAPID              0x50
        !           166: #define BGE_PCI_NEXTPTR_MSI            0x51
        !           167: #define BGE_PCI_VPD_ADDR               0x52
        !           168: #define BGE_PCI_VPD_DATA               0x54
        !           169: #define BGE_PCI_MSI_CAPID              0x58
        !           170: #define BGE_PCI_NEXTPTR_NONE           0x59
        !           171: #define BGE_PCI_MSI_CTL                        0x5A
        !           172: #define BGE_PCI_MSI_ADDR_HI            0x5C
        !           173: #define BGE_PCI_MSI_ADDR_LO            0x60
        !           174: #define BGE_PCI_MSI_DATA               0x64
        !           175:
        !           176: /* PCI MSI. ??? */
        !           177: #define BGE_PCIE_CAPID_REG             0xD0
        !           178: #define BGE_PCIE_CAPID                 0x10
        !           179:
        !           180: /*
        !           181:  * PCI registers specific to the BCM570x family.
        !           182:  */
        !           183: #define BGE_PCI_MISC_CTL               0x68
        !           184: #define BGE_PCI_DMA_RW_CTL             0x6C
        !           185: #define BGE_PCI_PCISTATE               0x70
        !           186: #define BGE_PCI_CLKCTL                 0x74
        !           187: #define BGE_PCI_REG_BASEADDR           0x78
        !           188: #define BGE_PCI_MEMWIN_BASEADDR                0x7C
        !           189: #define BGE_PCI_REG_DATA               0x80
        !           190: #define BGE_PCI_MEMWIN_DATA            0x84
        !           191: #define BGE_PCI_MODECTL                        0x88
        !           192: #define BGE_PCI_MISC_CFG               0x8C
        !           193: #define BGE_PCI_MISC_LOCALCTL          0x90
        !           194: #define BGE_PCI_UNDI_RX_STD_PRODIDX_HI 0x98
        !           195: #define BGE_PCI_UNDI_RX_STD_PRODIDX_LO 0x9C
        !           196: #define BGE_PCI_UNDI_RX_RTN_CONSIDX_HI 0xA0
        !           197: #define BGE_PCI_UNDI_RX_RTN_CONSIDX_LO 0xA4
        !           198: #define BGE_PCI_UNDI_TX_BD_PRODIDX_HI  0xA8
        !           199: #define BGE_PCI_UNDI_TX_BD_PRODIDX_LO  0xAC
        !           200: #define BGE_PCI_ISR_MBX_HI             0xB0
        !           201: #define BGE_PCI_ISR_MBX_LO             0xB4
        !           202:
        !           203: /* XXX:
        !           204:  * Used in PCI-Express code for 575x chips.
        !           205:  * Should be replaced with checking for a PCI config-space
        !           206:  * capability for PCI-Express, and PCI-Express standard
        !           207:  * offsets into that capability block.
        !           208:  */
        !           209: #define BGE_PCI_CONF_DEV_CTRL          0xD8
        !           210: #define BGE_PCI_CONF_DEV_STUS          0xDA
        !           211:
        !           212: /* PCI Misc. Host control register */
        !           213: #define BGE_PCIMISCCTL_CLEAR_INTA      0x00000001
        !           214: #define BGE_PCIMISCCTL_MASK_PCI_INTR   0x00000002
        !           215: #define BGE_PCIMISCCTL_ENDIAN_BYTESWAP 0x00000004
        !           216: #define BGE_PCIMISCCTL_ENDIAN_WORDSWAP 0x00000008
        !           217: #define BGE_PCIMISCCTL_PCISTATE_RW     0x00000010
        !           218: #define BGE_PCIMISCCTL_CLOCKCTL_RW     0x00000020
        !           219: #define BGE_PCIMISCCTL_REG_WORDSWAP    0x00000040
        !           220: #define BGE_PCIMISCCTL_INDIRECT_ACCESS 0x00000080
        !           221: #define BGE_PCIMISCCTL_ASICREV         0xFFFF0000
        !           222:
        !           223: #if BYTE_ORDER == LITTLE_ENDIAN
        !           224: #define BGE_DMA_SWAP_OPTIONS \
        !           225:        BGE_MODECTL_WORDSWAP_NONFRAME| \
        !           226:        BGE_MODECTL_BYTESWAP_DATA|BGE_MODECTL_WORDSWAP_DATA
        !           227: #else
        !           228: #define BGE_DMA_SWAP_OPTIONS \
        !           229:        BGE_MODECTL_WORDSWAP_NONFRAME|BGE_MODECTL_BYTESWAP_NONFRAME| \
        !           230:        BGE_MODECTL_BYTESWAP_DATA|BGE_MODECTL_WORDSWAP_DATA
        !           231: #endif
        !           232:
        !           233: #define BGE_INIT \
        !           234:        (BGE_PCIMISCCTL_ENDIAN_WORDSWAP|BGE_PCIMISCCTL_CLEAR_INTA| \
        !           235:         BGE_PCIMISCCTL_MASK_PCI_INTR|BGE_PCIMISCCTL_INDIRECT_ACCESS)
        !           236:
        !           237: #define BGE_CHIPID_BCM5700_A0          0x70000000
        !           238: #define BGE_CHIPID_BCM5700_A1          0x70010000
        !           239: #define BGE_CHIPID_BCM5700_B0          0x71000000
        !           240: #define BGE_CHIPID_BCM5700_B1          0x71010000
        !           241: #define BGE_CHIPID_BCM5700_B2          0x71020000
        !           242: #define BGE_CHIPID_BCM5700_B3          0x71030000
        !           243: #define BGE_CHIPID_BCM5700_ALTIMA      0x71040000
        !           244: #define BGE_CHIPID_BCM5700_C0          0x72000000
        !           245: #define BGE_CHIPID_BCM5701_A0          0x00000000      /* grrrr */
        !           246: #define BGE_CHIPID_BCM5701_B0          0x01000000
        !           247: #define BGE_CHIPID_BCM5701_B2          0x01020000
        !           248: #define BGE_CHIPID_BCM5701_B5          0x01050000
        !           249: #define BGE_CHIPID_BCM5703_A0          0x10000000
        !           250: #define BGE_CHIPID_BCM5703_A1          0x10010000
        !           251: #define BGE_CHIPID_BCM5703_A2          0x10020000
        !           252: #define BGE_CHIPID_BCM5703_A3          0x10030000
        !           253: #define BGE_CHIPID_BCM5703_B0          0x11000000
        !           254: #define BGE_CHIPID_BCM5704_A0          0x20000000
        !           255: #define BGE_CHIPID_BCM5704_A1          0x20010000
        !           256: #define BGE_CHIPID_BCM5704_A2          0x20020000
        !           257: #define BGE_CHIPID_BCM5704_A3          0x20030000
        !           258: #define BGE_CHIPID_BCM5704_B0          0x21000000
        !           259: #define BGE_CHIPID_BCM5705_A0          0x30000000
        !           260: #define BGE_CHIPID_BCM5705_A1          0x30010000
        !           261: #define BGE_CHIPID_BCM5705_A2          0x30020000
        !           262: #define BGE_CHIPID_BCM5705_A3          0x30030000
        !           263: #define BGE_CHIPID_BCM5750_A0          0x40000000
        !           264: #define BGE_CHIPID_BCM5750_A1          0x40010000
        !           265: #define BGE_CHIPID_BCM5750_A3          0x40030000
        !           266: #define BGE_CHIPID_BCM5750_B0          0x40100000
        !           267: #define BGE_CHIPID_BCM5750_B1          0x41010000
        !           268: #define BGE_CHIPID_BCM5750_C0          0x42000000
        !           269: #define BGE_CHIPID_BCM5750_C1          0x42010000
        !           270: #define BGE_CHIPID_BCM5750_C2          0x42020000
        !           271: #define BGE_CHIPID_BCM5714_A0          0x50000000
        !           272: #define BGE_CHIPID_BCM5752_A0          0x60000000
        !           273: #define BGE_CHIPID_BCM5752_A1          0x60010000
        !           274: #define BGE_CHIPID_BCM5752_A2          0x60020000
        !           275: #define BGE_CHIPID_BCM5714_B0          0x80000000
        !           276: #define BGE_CHIPID_BCM5714_B3          0x80030000
        !           277: #define BGE_CHIPID_BCM5715_A0          0x90000000
        !           278: #define BGE_CHIPID_BCM5715_A1          0x90010000
        !           279: #define BGE_CHIPID_BCM5715_A3          0x90030000
        !           280: #define BGE_CHIPID_BCM5755_A0          0xa0000000
        !           281: #define BGE_CHIPID_BCM5755_A1          0xa0010000
        !           282: #define BGE_CHIPID_BCM5755_A2          0xa0020000
        !           283: #define BGE_CHIPID_BCM5787_A0          0xb0000000
        !           284: #define BGE_CHIPID_BCM5787_A1          0xb0010000
        !           285: #define BGE_CHIPID_BCM5787_A2          0xb0020000
        !           286: #define BGE_CHIPID_BCM5906_A1          0xc0010000
        !           287:
        !           288: /* shorthand one */
        !           289: #define BGE_ASICREV(x)                 ((x) >> 28)
        !           290: #define BGE_ASICREV_BCM5700            0x07
        !           291: #define BGE_ASICREV_BCM5701            0x00
        !           292: #define BGE_ASICREV_BCM5703            0x01
        !           293: #define BGE_ASICREV_BCM5704            0x02
        !           294: #define BGE_ASICREV_BCM5705            0x03
        !           295: #define BGE_ASICREV_BCM5750            0x04
        !           296: #define BGE_ASICREV_BCM5714_A0         0x05    /* 5714, 5715 */
        !           297: #define BGE_ASICREV_BCM5752            0x06
        !           298: #define BGE_ASICREV_BCM5780            0x08
        !           299: #define BGE_ASICREV_BCM5714            0x09    /* 5714, 5715 */
        !           300: #define BGE_ASICREV_BCM5755            0x0a
        !           301: #define BGE_ASICREV_BCM5787            0x0b
        !           302: #define BGE_ASICREV_BCM5906            0x0c
        !           303:
        !           304: /* chip revisions */
        !           305: #define BGE_CHIPREV(x)                 ((x) >> 24)
        !           306: #define BGE_CHIPREV_5700_AX            0x70
        !           307: #define BGE_CHIPREV_5700_BX            0x71
        !           308: #define BGE_CHIPREV_5700_CX            0x72
        !           309: #define BGE_CHIPREV_5701_AX            0x00
        !           310: #define BGE_CHIPREV_5703_AX            0x10
        !           311: #define BGE_CHIPREV_5704_AX            0x20
        !           312: #define BGE_CHIPREV_5704_BX            0x21
        !           313: #define BGE_CHIPREV_5750_AX            0x40
        !           314: #define BGE_CHIPREV_5750_BX            0x41
        !           315:
        !           316: /* PCI DMA Read/Write Control register */
        !           317: #define BGE_PCIDMARWCTL_MINDMA         0x000000FF
        !           318: #define BGE_PCIDMARWCTL_RDADRR_BNDRY   0x00000700
        !           319: #define BGE_PCIDMARWCTL_WRADDR_BNDRY   0x00003800
        !           320: #define BGE_PCIDMARWCTL_ONEDMA_ATONCE  0x00004000
        !           321: #define BGE_PCIDMARWCTL_RD_WAT         0x00070000
        !           322: #define BGE_PCIDMARWCTL_RD_WAT_SHIFT   16
        !           323: #define BGE_PCIDMARWCTL_WR_WAT         0x00380000
        !           324: #define BGE_PCIDMARWCTL_WR_WAT_SHIFT   19
        !           325: #define BGE_PCIDMARWCTL_USE_MRM                0x00400000
        !           326: #define BGE_PCIDMARWCTL_ASRT_ALL_BE    0x00800000
        !           327: #define BGE_PCIDMARWCTL_DFLT_PCI_RD_CMD        0x0F000000
        !           328: #define BGE_PCIDMARWCTL_DFLT_PCI_RD_CMD_SHIFT  24
        !           329: #define BGE_PCIDMARWCTL_DFLT_PCI_WR_CMD        0xF0000000
        !           330: #define BGE_PCIDMARWCTL_DFLT_PCI_WR_CMD_SHIFT  28
        !           331:
        !           332: /* PCI DMA Read/Write Control register, alternate usage for PCI-Express */
        !           333: #define BGE_PCIDMA_RWCTL_PCIE_WRITE_WATRMARK_128       0x00180000
        !           334: #define BGE_PCIDMA_RWCTL_PCIE_WRITE_WATRMARK_256       0x00380000
        !           335:
        !           336: #define BGE_PCI_READ_BNDRY_DISABLE     0x00000000
        !           337: #define BGE_PCI_READ_BNDRY_16BYTES     0x00000100
        !           338: #define BGE_PCI_READ_BNDRY_32BYTES     0x00000200
        !           339: #define BGE_PCI_READ_BNDRY_64BYTES     0x00000300
        !           340: #define BGE_PCI_READ_BNDRY_128BYTES    0x00000400
        !           341: #define BGE_PCI_READ_BNDRY_256BYTES    0x00000500
        !           342: #define BGE_PCI_READ_BNDRY_512BYTES    0x00000600
        !           343: #define BGE_PCI_READ_BNDRY_1024BYTES   0x00000700
        !           344:
        !           345: #define BGE_PCI_WRITE_BNDRY_DISABLE    0x00000000
        !           346: #define BGE_PCI_WRITE_BNDRY_16BYTES    0x00000800
        !           347: #define BGE_PCI_WRITE_BNDRY_32BYTES    0x00001000
        !           348: #define BGE_PCI_WRITE_BNDRY_64BYTES    0x00001800
        !           349: #define BGE_PCI_WRITE_BNDRY_128BYTES   0x00002000
        !           350: #define BGE_PCI_WRITE_BNDRY_256BYTES   0x00002800
        !           351: #define BGE_PCI_WRITE_BNDRY_512BYTES   0x00003000
        !           352: #define BGE_PCI_WRITE_BNDRY_1024BYTES  0x00003800
        !           353:
        !           354: /*
        !           355:  * PCI state register -- note, this register is read only
        !           356:  * unless the PCISTATE_WR bit of the PCI Misc. Host Control
        !           357:  * register is set.
        !           358:  */
        !           359: #define BGE_PCISTATE_FORCE_RESET       0x00000001
        !           360: #define BGE_PCISTATE_INTR_NOT_ACTIVE   0x00000002
        !           361: #define BGE_PCISTATE_PCI_BUSMODE       0x00000004 /* 1 = PCI, 0 = PCI-X */
        !           362: #define BGE_PCISTATE_PCI_BUSSPEED      0x00000008 /* 1 = 33/66, 0 = 66/133 */
        !           363: #define BGE_PCISTATE_32BIT_BUS         0x00000010 /* 1 = 32bit, 0 = 64bit */
        !           364: #define BGE_PCISTATE_WANT_EXPROM       0x00000020
        !           365: #define BGE_PCISTATE_EXPROM_RETRY      0x00000040
        !           366: #define BGE_PCISTATE_FLATVIEW_MODE     0x00000100
        !           367: #define BGE_PCISTATE_PCI_TGT_RETRY_MAX 0x00000E00
        !           368:
        !           369: /*
        !           370:  * The following bits in PCI state register are reserved.
        !           371:  * If we check that the register values reverts on reset,
        !           372:  * do not check these bits. On some 5704C (rev A3) and some
        !           373:  * Altima chips, these bits do not revert until much later
        !           374:  * in the bge driver's bge_reset() chip-reset state machine.
        !           375:  */
        !           376: #define BGE_PCISTATE_RESERVED  ((1 << 12) + (1 <<7))
        !           377:
        !           378: /*
        !           379:  * PCI Clock Control register -- note, this register is read only
        !           380:  * unless the CLOCKCTL_RW bit of the PCI Misc. Host Control
        !           381:  * register is set.
        !           382:  */
        !           383: #define BGE_PCICLOCKCTL_DETECTED_SPEED 0x0000000F
        !           384: #define BGE_PCICLOCKCTL_M66EN          0x00000080
        !           385: #define BGE_PCICLOCKCTL_LOWPWR_CLKMODE 0x00000200
        !           386: #define BGE_PCICLOCKCTL_RXCPU_CLK_DIS  0x00000400
        !           387: #define BGE_PCICLOCKCTL_TXCPU_CLK_DIS  0x00000800
        !           388: #define BGE_PCICLOCKCTL_ALTCLK         0x00001000
        !           389: #define BGE_PCICLOCKCTL_ALTCLK_SRC     0x00002000
        !           390: #define BGE_PCICLOCKCTL_PCIPLL_DISABLE 0x00004000
        !           391: #define BGE_PCICLOCKCTL_SYSPLL_DISABLE 0x00008000
        !           392: #define BGE_PCICLOCKCTL_BIST_ENABLE    0x00010000
        !           393:
        !           394: /*
        !           395:  * High priority mailbox registers
        !           396:  * Each mailbox is 64-bits wide, though we only use the
        !           397:  * lower 32 bits. To write a 64-bit value, write the upper 32 bits
        !           398:  * first. The NIC will load the mailbox after the lower 32 bit word
        !           399:  * has been updated.
        !           400:  */
        !           401: #define BGE_MBX_IRQ0_HI                        0x0200
        !           402: #define BGE_MBX_IRQ0_LO                        0x0204
        !           403: #define BGE_MBX_IRQ1_HI                        0x0208
        !           404: #define BGE_MBX_IRQ1_LO                        0x020C
        !           405: #define BGE_MBX_IRQ2_HI                        0x0210
        !           406: #define BGE_MBX_IRQ2_LO                        0x0214
        !           407: #define BGE_MBX_IRQ3_HI                        0x0218
        !           408: #define BGE_MBX_IRQ3_LO                        0x021C
        !           409: #define BGE_MBX_GEN0_HI                        0x0220
        !           410: #define BGE_MBX_GEN0_LO                        0x0224
        !           411: #define BGE_MBX_GEN1_HI                        0x0228
        !           412: #define BGE_MBX_GEN1_LO                        0x022C
        !           413: #define BGE_MBX_GEN2_HI                        0x0230
        !           414: #define BGE_MBX_GEN2_LO                        0x0234
        !           415: #define BGE_MBX_GEN3_HI                        0x0228
        !           416: #define BGE_MBX_GEN3_LO                        0x022C
        !           417: #define BGE_MBX_GEN4_HI                        0x0240
        !           418: #define BGE_MBX_GEN4_LO                        0x0244
        !           419: #define BGE_MBX_GEN5_HI                        0x0248
        !           420: #define BGE_MBX_GEN5_LO                        0x024C
        !           421: #define BGE_MBX_GEN6_HI                        0x0250
        !           422: #define BGE_MBX_GEN6_LO                        0x0254
        !           423: #define BGE_MBX_GEN7_HI                        0x0258
        !           424: #define BGE_MBX_GEN7_LO                        0x025C
        !           425: #define BGE_MBX_RELOAD_STATS_HI                0x0260
        !           426: #define BGE_MBX_RELOAD_STATS_LO                0x0264
        !           427: #define BGE_MBX_RX_STD_PROD_HI         0x0268
        !           428: #define BGE_MBX_RX_STD_PROD_LO         0x026C
        !           429: #define BGE_MBX_RX_JUMBO_PROD_HI       0x0270
        !           430: #define BGE_MBX_RX_JUMBO_PROD_LO       0x0274
        !           431: #define BGE_MBX_RX_MINI_PROD_HI                0x0278
        !           432: #define BGE_MBX_RX_MINI_PROD_LO                0x027C
        !           433: #define BGE_MBX_RX_CONS0_HI            0x0280
        !           434: #define BGE_MBX_RX_CONS0_LO            0x0284
        !           435: #define BGE_MBX_RX_CONS1_HI            0x0288
        !           436: #define BGE_MBX_RX_CONS1_LO            0x028C
        !           437: #define BGE_MBX_RX_CONS2_HI            0x0290
        !           438: #define BGE_MBX_RX_CONS2_LO            0x0294
        !           439: #define BGE_MBX_RX_CONS3_HI            0x0298
        !           440: #define BGE_MBX_RX_CONS3_LO            0x029C
        !           441: #define BGE_MBX_RX_CONS4_HI            0x02A0
        !           442: #define BGE_MBX_RX_CONS4_LO            0x02A4
        !           443: #define BGE_MBX_RX_CONS5_HI            0x02A8
        !           444: #define BGE_MBX_RX_CONS5_LO            0x02AC
        !           445: #define BGE_MBX_RX_CONS6_HI            0x02B0
        !           446: #define BGE_MBX_RX_CONS6_LO            0x02B4
        !           447: #define BGE_MBX_RX_CONS7_HI            0x02B8
        !           448: #define BGE_MBX_RX_CONS7_LO            0x02BC
        !           449: #define BGE_MBX_RX_CONS8_HI            0x02C0
        !           450: #define BGE_MBX_RX_CONS8_LO            0x02C4
        !           451: #define BGE_MBX_RX_CONS9_HI            0x02C8
        !           452: #define BGE_MBX_RX_CONS9_LO            0x02CC
        !           453: #define BGE_MBX_RX_CONS10_HI           0x02D0
        !           454: #define BGE_MBX_RX_CONS10_LO           0x02D4
        !           455: #define BGE_MBX_RX_CONS11_HI           0x02D8
        !           456: #define BGE_MBX_RX_CONS11_LO           0x02DC
        !           457: #define BGE_MBX_RX_CONS12_HI           0x02E0
        !           458: #define BGE_MBX_RX_CONS12_LO           0x02E4
        !           459: #define BGE_MBX_RX_CONS13_HI           0x02E8
        !           460: #define BGE_MBX_RX_CONS13_LO           0x02EC
        !           461: #define BGE_MBX_RX_CONS14_HI           0x02F0
        !           462: #define BGE_MBX_RX_CONS14_LO           0x02F4
        !           463: #define BGE_MBX_RX_CONS15_HI           0x02F8
        !           464: #define BGE_MBX_RX_CONS15_LO           0x02FC
        !           465: #define BGE_MBX_TX_HOST_PROD0_HI       0x0300
        !           466: #define BGE_MBX_TX_HOST_PROD0_LO       0x0304
        !           467: #define BGE_MBX_TX_HOST_PROD1_HI       0x0308
        !           468: #define BGE_MBX_TX_HOST_PROD1_LO       0x030C
        !           469: #define BGE_MBX_TX_HOST_PROD2_HI       0x0310
        !           470: #define BGE_MBX_TX_HOST_PROD2_LO       0x0314
        !           471: #define BGE_MBX_TX_HOST_PROD3_HI       0x0318
        !           472: #define BGE_MBX_TX_HOST_PROD3_LO       0x031C
        !           473: #define BGE_MBX_TX_HOST_PROD4_HI       0x0320
        !           474: #define BGE_MBX_TX_HOST_PROD4_LO       0x0324
        !           475: #define BGE_MBX_TX_HOST_PROD5_HI       0x0328
        !           476: #define BGE_MBX_TX_HOST_PROD5_LO       0x032C
        !           477: #define BGE_MBX_TX_HOST_PROD6_HI       0x0330
        !           478: #define BGE_MBX_TX_HOST_PROD6_LO       0x0334
        !           479: #define BGE_MBX_TX_HOST_PROD7_HI       0x0338
        !           480: #define BGE_MBX_TX_HOST_PROD7_LO       0x033C
        !           481: #define BGE_MBX_TX_HOST_PROD8_HI       0x0340
        !           482: #define BGE_MBX_TX_HOST_PROD8_LO       0x0344
        !           483: #define BGE_MBX_TX_HOST_PROD9_HI       0x0348
        !           484: #define BGE_MBX_TX_HOST_PROD9_LO       0x034C
        !           485: #define BGE_MBX_TX_HOST_PROD10_HI      0x0350
        !           486: #define BGE_MBX_TX_HOST_PROD10_LO      0x0354
        !           487: #define BGE_MBX_TX_HOST_PROD11_HI      0x0358
        !           488: #define BGE_MBX_TX_HOST_PROD11_LO      0x035C
        !           489: #define BGE_MBX_TX_HOST_PROD12_HI      0x0360
        !           490: #define BGE_MBX_TX_HOST_PROD12_LO      0x0364
        !           491: #define BGE_MBX_TX_HOST_PROD13_HI      0x0368
        !           492: #define BGE_MBX_TX_HOST_PROD13_LO      0x036C
        !           493: #define BGE_MBX_TX_HOST_PROD14_HI      0x0370
        !           494: #define BGE_MBX_TX_HOST_PROD14_LO      0x0374
        !           495: #define BGE_MBX_TX_HOST_PROD15_HI      0x0378
        !           496: #define BGE_MBX_TX_HOST_PROD15_LO      0x037C
        !           497: #define BGE_MBX_TX_NIC_PROD0_HI                0x0380
        !           498: #define BGE_MBX_TX_NIC_PROD0_LO                0x0384
        !           499: #define BGE_MBX_TX_NIC_PROD1_HI                0x0388
        !           500: #define BGE_MBX_TX_NIC_PROD1_LO                0x038C
        !           501: #define BGE_MBX_TX_NIC_PROD2_HI                0x0390
        !           502: #define BGE_MBX_TX_NIC_PROD2_LO                0x0394
        !           503: #define BGE_MBX_TX_NIC_PROD3_HI                0x0398
        !           504: #define BGE_MBX_TX_NIC_PROD3_LO                0x039C
        !           505: #define BGE_MBX_TX_NIC_PROD4_HI                0x03A0
        !           506: #define BGE_MBX_TX_NIC_PROD4_LO                0x03A4
        !           507: #define BGE_MBX_TX_NIC_PROD5_HI                0x03A8
        !           508: #define BGE_MBX_TX_NIC_PROD5_LO                0x03AC
        !           509: #define BGE_MBX_TX_NIC_PROD6_HI                0x03B0
        !           510: #define BGE_MBX_TX_NIC_PROD6_LO                0x03B4
        !           511: #define BGE_MBX_TX_NIC_PROD7_HI                0x03B8
        !           512: #define BGE_MBX_TX_NIC_PROD7_LO                0x03BC
        !           513: #define BGE_MBX_TX_NIC_PROD8_HI                0x03C0
        !           514: #define BGE_MBX_TX_NIC_PROD8_LO                0x03C4
        !           515: #define BGE_MBX_TX_NIC_PROD9_HI                0x03C8
        !           516: #define BGE_MBX_TX_NIC_PROD9_LO                0x03CC
        !           517: #define BGE_MBX_TX_NIC_PROD10_HI       0x03D0
        !           518: #define BGE_MBX_TX_NIC_PROD10_LO       0x03D4
        !           519: #define BGE_MBX_TX_NIC_PROD11_HI       0x03D8
        !           520: #define BGE_MBX_TX_NIC_PROD11_LO       0x03DC
        !           521: #define BGE_MBX_TX_NIC_PROD12_HI       0x03E0
        !           522: #define BGE_MBX_TX_NIC_PROD12_LO       0x03E4
        !           523: #define BGE_MBX_TX_NIC_PROD13_HI       0x03E8
        !           524: #define BGE_MBX_TX_NIC_PROD13_LO       0x03EC
        !           525: #define BGE_MBX_TX_NIC_PROD14_HI       0x03F0
        !           526: #define BGE_MBX_TX_NIC_PROD14_LO       0x03F4
        !           527: #define BGE_MBX_TX_NIC_PROD15_HI       0x03F8
        !           528: #define BGE_MBX_TX_NIC_PROD15_LO       0x03FC
        !           529:
        !           530: #define BGE_TX_RINGS_MAX               4
        !           531: #define BGE_TX_RINGS_EXTSSRAM_MAX      16
        !           532: #define BGE_RX_RINGS_MAX               16
        !           533:
        !           534: /* Ethernet MAC control registers */
        !           535: #define BGE_MAC_MODE                   0x0400
        !           536: #define BGE_MAC_STS                    0x0404
        !           537: #define BGE_MAC_EVT_ENB                        0x0408
        !           538: #define BGE_MAC_LED_CTL                        0x040C
        !           539: #define BGE_MAC_ADDR1_LO               0x0410
        !           540: #define BGE_MAC_ADDR1_HI               0x0414
        !           541: #define BGE_MAC_ADDR2_LO               0x0418
        !           542: #define BGE_MAC_ADDR2_HI               0x041C
        !           543: #define BGE_MAC_ADDR3_LO               0x0420
        !           544: #define BGE_MAC_ADDR3_HI               0x0424
        !           545: #define BGE_MAC_ADDR4_LO               0x0428
        !           546: #define BGE_MAC_ADDR4_HI               0x042C
        !           547: #define BGE_WOL_PATPTR                 0x0430
        !           548: #define BGE_WOL_PATCFG                 0x0434
        !           549: #define BGE_TX_RANDOM_BACKOFF          0x0438
        !           550: #define BGE_RX_MTU                     0x043C
        !           551: #define BGE_GBIT_PCS_TEST              0x0440
        !           552: #define BGE_TX_TBI_AUTONEG             0x0444
        !           553: #define BGE_RX_TBI_AUTONEG             0x0448
        !           554: #define BGE_MI_COMM                    0x044C
        !           555: #define BGE_MI_STS                     0x0450
        !           556: #define BGE_MI_MODE                    0x0454
        !           557: #define BGE_AUTOPOLL_STS               0x0458
        !           558: #define BGE_TX_MODE                    0x045C
        !           559: #define BGE_TX_STS                     0x0460
        !           560: #define BGE_TX_LENGTHS                 0x0464
        !           561: #define BGE_RX_MODE                    0x0468
        !           562: #define BGE_RX_STS                     0x046C
        !           563: #define BGE_MAR0                       0x0470
        !           564: #define BGE_MAR1                       0x0474
        !           565: #define BGE_MAR2                       0x0478
        !           566: #define BGE_MAR3                       0x047C
        !           567: #define BGE_RX_BD_RULES_CTL0           0x0480
        !           568: #define BGE_RX_BD_RULES_MASKVAL0       0x0484
        !           569: #define BGE_RX_BD_RULES_CTL1           0x0488
        !           570: #define BGE_RX_BD_RULES_MASKVAL1       0x048C
        !           571: #define BGE_RX_BD_RULES_CTL2           0x0490
        !           572: #define BGE_RX_BD_RULES_MASKVAL2       0x0494
        !           573: #define BGE_RX_BD_RULES_CTL3           0x0498
        !           574: #define BGE_RX_BD_RULES_MASKVAL3       0x049C
        !           575: #define BGE_RX_BD_RULES_CTL4           0x04A0
        !           576: #define BGE_RX_BD_RULES_MASKVAL4       0x04A4
        !           577: #define BGE_RX_BD_RULES_CTL5           0x04A8
        !           578: #define BGE_RX_BD_RULES_MASKVAL5       0x04AC
        !           579: #define BGE_RX_BD_RULES_CTL6           0x04B0
        !           580: #define BGE_RX_BD_RULES_MASKVAL6       0x04B4
        !           581: #define BGE_RX_BD_RULES_CTL7           0x04B8
        !           582: #define BGE_RX_BD_RULES_MASKVAL7       0x04BC
        !           583: #define BGE_RX_BD_RULES_CTL8           0x04C0
        !           584: #define BGE_RX_BD_RULES_MASKVAL8       0x04C4
        !           585: #define BGE_RX_BD_RULES_CTL9           0x04C8
        !           586: #define BGE_RX_BD_RULES_MASKVAL9       0x04CC
        !           587: #define BGE_RX_BD_RULES_CTL10          0x04D0
        !           588: #define BGE_RX_BD_RULES_MASKVAL10      0x04D4
        !           589: #define BGE_RX_BD_RULES_CTL11          0x04D8
        !           590: #define BGE_RX_BD_RULES_MASKVAL11      0x04DC
        !           591: #define BGE_RX_BD_RULES_CTL12          0x04E0
        !           592: #define BGE_RX_BD_RULES_MASKVAL12      0x04E4
        !           593: #define BGE_RX_BD_RULES_CTL13          0x04E8
        !           594: #define BGE_RX_BD_RULES_MASKVAL13      0x04EC
        !           595: #define BGE_RX_BD_RULES_CTL14          0x04F0
        !           596: #define BGE_RX_BD_RULES_MASKVAL14      0x04F4
        !           597: #define BGE_RX_BD_RULES_CTL15          0x04F8
        !           598: #define BGE_RX_BD_RULES_MASKVAL15      0x04FC
        !           599: #define BGE_RX_RULES_CFG               0x0500
        !           600: #define BGE_MAX_RX_FRAME_LOWAT         0x0504
        !           601: #define BGE_SERDES_CFG                 0x0590
        !           602: #define BGE_SERDES_STS                 0x0594
        !           603: #define BGE_SGDIG_CFG                  0x05B0
        !           604: #define BGE_SGDIG_STS                  0x05B4
        !           605: #define BGE_RX_STATS                   0x0800
        !           606: #define BGE_TX_STATS                   0x0880
        !           607:
        !           608: /* Ethernet MAC Mode register */
        !           609: #define BGE_MACMODE_RESET              0x00000001
        !           610: #define BGE_MACMODE_HALF_DUPLEX                0x00000002
        !           611: #define BGE_MACMODE_PORTMODE           0x0000000C
        !           612: #define BGE_MACMODE_LOOPBACK           0x00000010
        !           613: #define BGE_MACMODE_RX_TAGGEDPKT       0x00000080
        !           614: #define BGE_MACMODE_TX_BURST_ENB       0x00000100
        !           615: #define BGE_MACMODE_MAX_DEFER          0x00000200
        !           616: #define BGE_MACMODE_LINK_POLARITY      0x00000400
        !           617: #define BGE_MACMODE_RX_STATS_ENB       0x00000800
        !           618: #define BGE_MACMODE_RX_STATS_CLEAR     0x00001000
        !           619: #define BGE_MACMODE_RX_STATS_FLUSH     0x00002000
        !           620: #define BGE_MACMODE_TX_STATS_ENB       0x00004000
        !           621: #define BGE_MACMODE_TX_STATS_CLEAR     0x00008000
        !           622: #define BGE_MACMODE_TX_STATS_FLUSH     0x00010000
        !           623: #define BGE_MACMODE_TBI_SEND_CFGS      0x00020000
        !           624: #define BGE_MACMODE_MAGIC_PKT_ENB      0x00040000
        !           625: #define BGE_MACMODE_ACPI_PWRON_ENB     0x00080000
        !           626: #define BGE_MACMODE_MIP_ENB            0x00100000
        !           627: #define BGE_MACMODE_TXDMA_ENB          0x00200000
        !           628: #define BGE_MACMODE_RXDMA_ENB          0x00400000
        !           629: #define BGE_MACMODE_FRMHDR_DMA_ENB     0x00800000
        !           630:
        !           631: #define BGE_PORTMODE_NONE              0x00000000
        !           632: #define BGE_PORTMODE_MII               0x00000004
        !           633: #define BGE_PORTMODE_GMII              0x00000008
        !           634: #define BGE_PORTMODE_TBI               0x0000000C
        !           635:
        !           636: /* MAC Status register */
        !           637: #define BGE_MACSTAT_TBI_PCS_SYNCHED    0x00000001
        !           638: #define BGE_MACSTAT_TBI_SIGNAL_DETECT  0x00000002
        !           639: #define BGE_MACSTAT_RX_CFG             0x00000004
        !           640: #define BGE_MACSTAT_CFG_CHANGED                0x00000008
        !           641: #define BGE_MACSTAT_SYNC_CHANGED       0x00000010
        !           642: #define BGE_MACSTAT_PORT_DECODE_ERROR  0x00000400
        !           643: #define BGE_MACSTAT_LINK_CHANGED       0x00001000
        !           644: #define BGE_MACSTAT_MI_COMPLETE                0x00400000
        !           645: #define BGE_MACSTAT_MI_INTERRUPT       0x00800000
        !           646: #define BGE_MACSTAT_AUTOPOLL_ERROR     0x01000000
        !           647: #define BGE_MACSTAT_ODI_ERROR          0x02000000
        !           648: #define BGE_MACSTAT_RXSTAT_OFLOW       0x04000000
        !           649: #define BGE_MACSTAT_TXSTAT_OFLOW       0x08000000
        !           650:
        !           651: /* MAC Event Enable Register */
        !           652: #define BGE_EVTENB_PORT_DECODE_ERROR   0x00000400
        !           653: #define BGE_EVTENB_LINK_CHANGED                0x00001000
        !           654: #define BGE_EVTENB_MI_COMPLETE         0x00400000
        !           655: #define BGE_EVTENB_MI_INTERRUPT                0x00800000
        !           656: #define BGE_EVTENB_AUTOPOLL_ERROR      0x01000000
        !           657: #define BGE_EVTENB_ODI_ERROR           0x02000000
        !           658: #define BGE_EVTENB_RXSTAT_OFLOW                0x04000000
        !           659: #define BGE_EVTENB_TXSTAT_OFLOW                0x08000000
        !           660:
        !           661: /* LED Control Register */
        !           662: #define BGE_LEDCTL_LINKLED_OVERRIDE    0x00000001
        !           663: #define BGE_LEDCTL_1000MBPS_LED                0x00000002
        !           664: #define BGE_LEDCTL_100MBPS_LED         0x00000004
        !           665: #define BGE_LEDCTL_10MBPS_LED          0x00000008
        !           666: #define BGE_LEDCTL_TRAFLED_OVERRIDE    0x00000010
        !           667: #define BGE_LEDCTL_TRAFLED_BLINK       0x00000020
        !           668: #define BGE_LEDCTL_TREFLED_BLINK_2     0x00000040
        !           669: #define BGE_LEDCTL_1000MBPS_STS                0x00000080
        !           670: #define BGE_LEDCTL_100MBPS_STS         0x00000100
        !           671: #define BGE_LEDCTL_10MBPS_STS          0x00000200
        !           672: #define BGE_LEDCTL_TRADLED_STS         0x00000400
        !           673: #define BGE_LEDCTL_BLINKPERIOD         0x7FF80000
        !           674: #define BGE_LEDCTL_BLINKPERIOD_OVERRIDE        0x80000000
        !           675:
        !           676: /* TX backoff seed register */
        !           677: #define BGE_TX_BACKOFF_SEED_MASK       0x3F
        !           678:
        !           679: /* Autopoll status register */
        !           680: #define BGE_AUTOPOLLSTS_ERROR          0x00000001
        !           681:
        !           682: /* Transmit MAC mode register */
        !           683: #define BGE_TXMODE_RESET               0x00000001
        !           684: #define BGE_TXMODE_ENABLE              0x00000002
        !           685: #define BGE_TXMODE_FLOWCTL_ENABLE      0x00000010
        !           686: #define BGE_TXMODE_BIGBACKOFF_ENABLE   0x00000020
        !           687: #define BGE_TXMODE_LONGPAUSE_ENABLE    0x00000040
        !           688:
        !           689: /* Transmit MAC status register */
        !           690: #define BGE_TXSTAT_RX_XOFFED           0x00000001
        !           691: #define BGE_TXSTAT_SENT_XOFF           0x00000002
        !           692: #define BGE_TXSTAT_SENT_XON            0x00000004
        !           693: #define BGE_TXSTAT_LINK_UP             0x00000008
        !           694: #define BGE_TXSTAT_ODI_UFLOW           0x00000010
        !           695: #define BGE_TXSTAT_ODI_OFLOW           0x00000020
        !           696:
        !           697: /* Transmit MAC lengths register */
        !           698: #define BGE_TXLEN_SLOTTIME             0x000000FF
        !           699: #define BGE_TXLEN_IPG                  0x00000F00
        !           700: #define BGE_TXLEN_CRS                  0x00003000
        !           701:
        !           702: /* Receive MAC mode register */
        !           703: #define BGE_RXMODE_RESET               0x00000001
        !           704: #define BGE_RXMODE_ENABLE              0x00000002
        !           705: #define BGE_RXMODE_FLOWCTL_ENABLE      0x00000004
        !           706: #define BGE_RXMODE_RX_GIANTS           0x00000020
        !           707: #define BGE_RXMODE_RX_RUNTS            0x00000040
        !           708: #define BGE_RXMODE_8022_LENCHECK       0x00000080
        !           709: #define BGE_RXMODE_RX_PROMISC          0x00000100
        !           710: #define BGE_RXMODE_RX_NO_CRC_CHECK     0x00000200
        !           711: #define BGE_RXMODE_RX_KEEP_VLAN_DIAG   0x00000400
        !           712:
        !           713: /* Receive MAC status register */
        !           714: #define BGE_RXSTAT_REMOTE_XOFFED       0x00000001
        !           715: #define BGE_RXSTAT_RCVD_XOFF           0x00000002
        !           716: #define BGE_RXSTAT_RCVD_XON            0x00000004
        !           717:
        !           718: /* Receive Rules Control register */
        !           719: #define BGE_RXRULECTL_OFFSET           0x000000FF
        !           720: #define BGE_RXRULECTL_CLASS            0x00001F00
        !           721: #define BGE_RXRULECTL_HDRTYPE          0x0000E000
        !           722: #define BGE_RXRULECTL_COMPARE_OP       0x00030000
        !           723: #define BGE_RXRULECTL_MAP              0x01000000
        !           724: #define BGE_RXRULECTL_DISCARD          0x02000000
        !           725: #define BGE_RXRULECTL_MASK             0x04000000
        !           726: #define BGE_RXRULECTL_ACTIVATE_PROC3   0x08000000
        !           727: #define BGE_RXRULECTL_ACTIVATE_PROC2   0x10000000
        !           728: #define BGE_RXRULECTL_ACTIVATE_PROC1   0x20000000
        !           729: #define BGE_RXRULECTL_ANDWITHNEXT      0x40000000
        !           730:
        !           731: /* Receive Rules Mask register */
        !           732: #define BGE_RXRULEMASK_VALUE           0x0000FFFF
        !           733: #define BGE_RXRULEMASK_MASKVAL         0xFFFF0000
        !           734:
        !           735: /* SERDES configuration register */
        !           736: #define BGE_SERDESCFG_RXR              0x00000007 /* phase interpolator */
        !           737: #define BGE_SERDESCFG_RXG              0x00000018 /* rx gain setting */
        !           738: #define BGE_SERDESCFG_RXEDGESEL                0x00000040 /* rising/falling egde */
        !           739: #define BGE_SERDESCFG_TX_BIAS          0x00000380 /* TXDAC bias setting */
        !           740: #define BGE_SERDESCFG_IBMAX            0x00000400 /* bias current +25% */
        !           741: #define BGE_SERDESCFG_IBMIN            0x00000800 /* bias current -25% */
        !           742: #define BGE_SERDESCFG_TXMODE           0x00001000
        !           743: #define BGE_SERDESCFG_TXEDGESEL                0x00002000 /* rising/falling edge */
        !           744: #define BGE_SERDESCFG_MODE             0x00004000 /* TXCP/TXCN disabled */
        !           745: #define BGE_SERDESCFG_PLLTEST          0x00008000 /* PLL test mode */
        !           746: #define BGE_SERDESCFG_CDET             0x00010000 /* comma detect enable */
        !           747: #define BGE_SERDESCFG_TBILOOP          0x00020000 /* local loopback */
        !           748: #define BGE_SERDESCFG_REMLOOP          0x00040000 /* remote loopback */
        !           749: #define BGE_SERDESCFG_INVPHASE         0x00080000 /* Reverse 125MHz clock */
        !           750: #define BGE_SERDESCFG_12REGCTL         0x00300000 /* 1.2v regulator ctl */
        !           751: #define BGE_SERDESCFG_REGCTL           0x00C00000 /* regulator ctl (2.5v) */
        !           752:
        !           753: /* SERDES status register */
        !           754: #define BGE_SERDESSTS_RXSTAT           0x0000000F /* receive status bits */
        !           755: #define BGE_SERDESSTS_CDET             0x00000010 /* comma code detected */
        !           756:
        !           757: /* SGDIG config (not documented) */
        !           758: #define BGE_SGDIGCFG_PAUSE_CAP         0x00000800
        !           759: #define BGE_SGDIGCFG_ASYM_PAUSE                0x00001000
        !           760: #define BGE_SGDIGCFG_SEND              0x40000000
        !           761: #define BGE_SGDIGCFG_AUTO              0x80000000
        !           762:
        !           763: /* SGDIG status (not documented) */
        !           764: #define BGE_SGDIGSTS_PAUSE_CAP         0x00080000
        !           765: #define BGE_SGDIGSTS_ASYM_PAUSE                0x00100000
        !           766: #define BGE_SGDIGSTS_DONE              0x00000002
        !           767:
        !           768: /* MI communication register */
        !           769: #define BGE_MICOMM_DATA                        0x0000FFFF
        !           770: #define BGE_MICOMM_REG                 0x001F0000
        !           771: #define BGE_MICOMM_PHY                 0x03E00000
        !           772: #define BGE_MICOMM_CMD                 0x0C000000
        !           773: #define BGE_MICOMM_READFAIL            0x10000000
        !           774: #define BGE_MICOMM_BUSY                        0x20000000
        !           775:
        !           776: #define BGE_MIREG(x)   ((x & 0x1F) << 16)
        !           777: #define BGE_MIPHY(x)   ((x & 0x1F) << 21)
        !           778: #define BGE_MICMD_WRITE                        0x04000000
        !           779: #define BGE_MICMD_READ                 0x08000000
        !           780:
        !           781: /* MI status register */
        !           782: #define BGE_MISTS_LINK                 0x00000001
        !           783: #define BGE_MISTS_10MBPS               0x00000002
        !           784:
        !           785: #define BGE_MIMODE_SHORTPREAMBLE       0x00000002
        !           786: #define BGE_MIMODE_AUTOPOLL            0x00000010
        !           787: #define BGE_MIMODE_CLKCNT              0x001F0000
        !           788:
        !           789:
        !           790: /*
        !           791:  * Send data initiator control registers.
        !           792:  */
        !           793: #define BGE_SDI_MODE                   0x0C00
        !           794: #define BGE_SDI_STATUS                 0x0C04
        !           795: #define BGE_SDI_STATS_CTL              0x0C08
        !           796: #define BGE_SDI_STATS_ENABLE_MASK      0x0C0C
        !           797: #define BGE_SDI_STATS_INCREMENT_MASK   0x0C10
        !           798: #define BGE_LOCSTATS_COS0              0x0C80
        !           799: #define BGE_LOCSTATS_COS1              0x0C84
        !           800: #define BGE_LOCSTATS_COS2              0x0C88
        !           801: #define BGE_LOCSTATS_COS3              0x0C8C
        !           802: #define BGE_LOCSTATS_COS4              0x0C90
        !           803: #define BGE_LOCSTATS_COS5              0x0C84
        !           804: #define BGE_LOCSTATS_COS6              0x0C98
        !           805: #define BGE_LOCSTATS_COS7              0x0C9C
        !           806: #define BGE_LOCSTATS_COS8              0x0CA0
        !           807: #define BGE_LOCSTATS_COS9              0x0CA4
        !           808: #define BGE_LOCSTATS_COS10             0x0CA8
        !           809: #define BGE_LOCSTATS_COS11             0x0CAC
        !           810: #define BGE_LOCSTATS_COS12             0x0CB0
        !           811: #define BGE_LOCSTATS_COS13             0x0CB4
        !           812: #define BGE_LOCSTATS_COS14             0x0CB8
        !           813: #define BGE_LOCSTATS_COS15             0x0CBC
        !           814: #define BGE_LOCSTATS_DMA_RQ_FULL       0x0CC0
        !           815: #define BGE_LOCSTATS_DMA_HIPRIO_RQ_FULL        0x0CC4
        !           816: #define BGE_LOCSTATS_SDC_QUEUE_FULL    0x0CC8
        !           817: #define BGE_LOCSTATS_NIC_SENDPROD_SET  0x0CCC
        !           818: #define BGE_LOCSTATS_STATS_UPDATED     0x0CD0
        !           819: #define BGE_LOCSTATS_IRQS              0x0CD4
        !           820: #define BGE_LOCSTATS_AVOIDED_IRQS      0x0CD8
        !           821: #define BGE_LOCSTATS_TX_THRESH_HIT     0x0CDC
        !           822:
        !           823: /* Send Data Initiator mode register */
        !           824: #define BGE_SDIMODE_RESET              0x00000001
        !           825: #define BGE_SDIMODE_ENABLE             0x00000002
        !           826: #define BGE_SDIMODE_STATS_OFLOW_ATTN   0x00000004
        !           827:
        !           828: /* Send Data Initiator stats register */
        !           829: #define BGE_SDISTAT_STATS_OFLOW_ATTN   0x00000004
        !           830:
        !           831: /* Send Data Initiator stats control register */
        !           832: #define BGE_SDISTATSCTL_ENABLE         0x00000001
        !           833: #define BGE_SDISTATSCTL_FASTER         0x00000002
        !           834: #define BGE_SDISTATSCTL_CLEAR          0x00000004
        !           835: #define BGE_SDISTATSCTL_FORCEFLUSH     0x00000008
        !           836: #define BGE_SDISTATSCTL_FORCEZERO      0x00000010
        !           837:
        !           838: /*
        !           839:  * Send Data Completion Control registers
        !           840:  */
        !           841: #define BGE_SDC_MODE                   0x1000
        !           842: #define BGE_SDC_STATUS                 0x1004
        !           843:
        !           844: /* Send Data completion mode register */
        !           845: #define BGE_SDCMODE_RESET              0x00000001
        !           846: #define BGE_SDCMODE_ENABLE             0x00000002
        !           847: #define BGE_SDCMODE_ATTN               0x00000004
        !           848:
        !           849: /* Send Data completion status register */
        !           850: #define BGE_SDCSTAT_ATTN               0x00000004
        !           851:
        !           852: /*
        !           853:  * Send BD Ring Selector Control registers
        !           854:  */
        !           855: #define BGE_SRS_MODE                   0x1400
        !           856: #define BGE_SRS_STATUS                 0x1404
        !           857: #define BGE_SRS_HWDIAG                 0x1408
        !           858: #define BGE_SRS_LOC_NIC_CONS0          0x1440
        !           859: #define BGE_SRS_LOC_NIC_CONS1          0x1444
        !           860: #define BGE_SRS_LOC_NIC_CONS2          0x1448
        !           861: #define BGE_SRS_LOC_NIC_CONS3          0x144C
        !           862: #define BGE_SRS_LOC_NIC_CONS4          0x1450
        !           863: #define BGE_SRS_LOC_NIC_CONS5          0x1454
        !           864: #define BGE_SRS_LOC_NIC_CONS6          0x1458
        !           865: #define BGE_SRS_LOC_NIC_CONS7          0x145C
        !           866: #define BGE_SRS_LOC_NIC_CONS8          0x1460
        !           867: #define BGE_SRS_LOC_NIC_CONS9          0x1464
        !           868: #define BGE_SRS_LOC_NIC_CONS10         0x1468
        !           869: #define BGE_SRS_LOC_NIC_CONS11         0x146C
        !           870: #define BGE_SRS_LOC_NIC_CONS12         0x1470
        !           871: #define BGE_SRS_LOC_NIC_CONS13         0x1474
        !           872: #define BGE_SRS_LOC_NIC_CONS14         0x1478
        !           873: #define BGE_SRS_LOC_NIC_CONS15         0x147C
        !           874:
        !           875: /* Send BD Ring Selector Mode register */
        !           876: #define BGE_SRSMODE_RESET              0x00000001
        !           877: #define BGE_SRSMODE_ENABLE             0x00000002
        !           878: #define BGE_SRSMODE_ATTN               0x00000004
        !           879:
        !           880: /* Send BD Ring Selector Status register */
        !           881: #define BGE_SRSSTAT_ERROR              0x00000004
        !           882:
        !           883: /* Send BD Ring Selector HW Diagnostics register */
        !           884: #define BGE_SRSHWDIAG_STATE            0x0000000F
        !           885: #define BGE_SRSHWDIAG_CURRINGNUM       0x000000F0
        !           886: #define BGE_SRSHWDIAG_STAGEDRINGNUM    0x00000F00
        !           887: #define BGE_SRSHWDIAG_RINGNUM_IN_MBX   0x0000F000
        !           888:
        !           889: /*
        !           890:  * Send BD Initiator Selector Control registers
        !           891:  */
        !           892: #define BGE_SBDI_MODE                  0x1800
        !           893: #define BGE_SBDI_STATUS                        0x1804
        !           894: #define BGE_SBDI_LOC_NIC_PROD0         0x1808
        !           895: #define BGE_SBDI_LOC_NIC_PROD1         0x180C
        !           896: #define BGE_SBDI_LOC_NIC_PROD2         0x1810
        !           897: #define BGE_SBDI_LOC_NIC_PROD3         0x1814
        !           898: #define BGE_SBDI_LOC_NIC_PROD4         0x1818
        !           899: #define BGE_SBDI_LOC_NIC_PROD5         0x181C
        !           900: #define BGE_SBDI_LOC_NIC_PROD6         0x1820
        !           901: #define BGE_SBDI_LOC_NIC_PROD7         0x1824
        !           902: #define BGE_SBDI_LOC_NIC_PROD8         0x1828
        !           903: #define BGE_SBDI_LOC_NIC_PROD9         0x182C
        !           904: #define BGE_SBDI_LOC_NIC_PROD10                0x1830
        !           905: #define BGE_SBDI_LOC_NIC_PROD11                0x1834
        !           906: #define BGE_SBDI_LOC_NIC_PROD12                0x1838
        !           907: #define BGE_SBDI_LOC_NIC_PROD13                0x183C
        !           908: #define BGE_SBDI_LOC_NIC_PROD14                0x1840
        !           909: #define BGE_SBDI_LOC_NIC_PROD15                0x1844
        !           910:
        !           911: /* Send BD Initiator Mode register */
        !           912: #define BGE_SBDIMODE_RESET             0x00000001
        !           913: #define BGE_SBDIMODE_ENABLE            0x00000002
        !           914: #define BGE_SBDIMODE_ATTN              0x00000004
        !           915:
        !           916: /* Send BD Initiator Status register */
        !           917: #define BGE_SBDISTAT_ERROR             0x00000004
        !           918:
        !           919: /*
        !           920:  * Send BD Completion Control registers
        !           921:  */
        !           922: #define BGE_SBDC_MODE                  0x1C00
        !           923: #define BGE_SBDC_STATUS                        0x1C04
        !           924:
        !           925: /* Send BD Completion Control Mode register */
        !           926: #define BGE_SBDCMODE_RESET             0x00000001
        !           927: #define BGE_SBDCMODE_ENABLE            0x00000002
        !           928: #define BGE_SBDCMODE_ATTN              0x00000004
        !           929:
        !           930: /* Send BD Completion Control Status register */
        !           931: #define BGE_SBDCSTAT_ATTN              0x00000004
        !           932:
        !           933: /*
        !           934:  * Receive List Placement Control registers
        !           935:  */
        !           936: #define BGE_RXLP_MODE                  0x2000
        !           937: #define BGE_RXLP_STATUS                        0x2004
        !           938: #define BGE_RXLP_SEL_LIST_LOCK         0x2008
        !           939: #define BGE_RXLP_SEL_NON_EMPTY_BITS    0x200C
        !           940: #define BGE_RXLP_CFG                   0x2010
        !           941: #define BGE_RXLP_STATS_CTL             0x2014
        !           942: #define BGE_RXLP_STATS_ENABLE_MASK     0x2018
        !           943: #define BGE_RXLP_STATS_INCREMENT_MASK  0x201C
        !           944: #define BGE_RXLP_HEAD0                 0x2100
        !           945: #define BGE_RXLP_TAIL0                 0x2104
        !           946: #define BGE_RXLP_COUNT0                        0x2108
        !           947: #define BGE_RXLP_HEAD1                 0x2110
        !           948: #define BGE_RXLP_TAIL1                 0x2114
        !           949: #define BGE_RXLP_COUNT1                        0x2118
        !           950: #define BGE_RXLP_HEAD2                 0x2120
        !           951: #define BGE_RXLP_TAIL2                 0x2124
        !           952: #define BGE_RXLP_COUNT2                        0x2128
        !           953: #define BGE_RXLP_HEAD3                 0x2130
        !           954: #define BGE_RXLP_TAIL3                 0x2134
        !           955: #define BGE_RXLP_COUNT3                        0x2138
        !           956: #define BGE_RXLP_HEAD4                 0x2140
        !           957: #define BGE_RXLP_TAIL4                 0x2144
        !           958: #define BGE_RXLP_COUNT4                        0x2148
        !           959: #define BGE_RXLP_HEAD5                 0x2150
        !           960: #define BGE_RXLP_TAIL5                 0x2154
        !           961: #define BGE_RXLP_COUNT5                        0x2158
        !           962: #define BGE_RXLP_HEAD6                 0x2160
        !           963: #define BGE_RXLP_TAIL6                 0x2164
        !           964: #define BGE_RXLP_COUNT6                        0x2168
        !           965: #define BGE_RXLP_HEAD7                 0x2170
        !           966: #define BGE_RXLP_TAIL7                 0x2174
        !           967: #define BGE_RXLP_COUNT7                        0x2178
        !           968: #define BGE_RXLP_HEAD8                 0x2180
        !           969: #define BGE_RXLP_TAIL8                 0x2184
        !           970: #define BGE_RXLP_COUNT8                        0x2188
        !           971: #define BGE_RXLP_HEAD9                 0x2190
        !           972: #define BGE_RXLP_TAIL9                 0x2194
        !           973: #define BGE_RXLP_COUNT9                        0x2198
        !           974: #define BGE_RXLP_HEAD10                        0x21A0
        !           975: #define BGE_RXLP_TAIL10                        0x21A4
        !           976: #define BGE_RXLP_COUNT10               0x21A8
        !           977: #define BGE_RXLP_HEAD11                        0x21B0
        !           978: #define BGE_RXLP_TAIL11                        0x21B4
        !           979: #define BGE_RXLP_COUNT11               0x21B8
        !           980: #define BGE_RXLP_HEAD12                        0x21C0
        !           981: #define BGE_RXLP_TAIL12                        0x21C4
        !           982: #define BGE_RXLP_COUNT12               0x21C8
        !           983: #define BGE_RXLP_HEAD13                        0x21D0
        !           984: #define BGE_RXLP_TAIL13                        0x21D4
        !           985: #define BGE_RXLP_COUNT13               0x21D8
        !           986: #define BGE_RXLP_HEAD14                        0x21E0
        !           987: #define BGE_RXLP_TAIL14                        0x21E4
        !           988: #define BGE_RXLP_COUNT14               0x21E8
        !           989: #define BGE_RXLP_HEAD15                        0x21F0
        !           990: #define BGE_RXLP_TAIL15                        0x21F4
        !           991: #define BGE_RXLP_COUNT15               0x21F8
        !           992: #define BGE_RXLP_LOCSTAT_COS0          0x2200
        !           993: #define BGE_RXLP_LOCSTAT_COS1          0x2204
        !           994: #define BGE_RXLP_LOCSTAT_COS2          0x2208
        !           995: #define BGE_RXLP_LOCSTAT_COS3          0x220C
        !           996: #define BGE_RXLP_LOCSTAT_COS4          0x2210
        !           997: #define BGE_RXLP_LOCSTAT_COS5          0x2214
        !           998: #define BGE_RXLP_LOCSTAT_COS6          0x2218
        !           999: #define BGE_RXLP_LOCSTAT_COS7          0x221C
        !          1000: #define BGE_RXLP_LOCSTAT_COS8          0x2220
        !          1001: #define BGE_RXLP_LOCSTAT_COS9          0x2224
        !          1002: #define BGE_RXLP_LOCSTAT_COS10         0x2228
        !          1003: #define BGE_RXLP_LOCSTAT_COS11         0x222C
        !          1004: #define BGE_RXLP_LOCSTAT_COS12         0x2230
        !          1005: #define BGE_RXLP_LOCSTAT_COS13         0x2234
        !          1006: #define BGE_RXLP_LOCSTAT_COS14         0x2238
        !          1007: #define BGE_RXLP_LOCSTAT_COS15         0x223C
        !          1008: #define BGE_RXLP_LOCSTAT_FILTDROP      0x2240
        !          1009: #define BGE_RXLP_LOCSTAT_DMA_WRQ_FULL  0x2244
        !          1010: #define BGE_RXLP_LOCSTAT_DMA_HPWRQ_FULL        0x2248
        !          1011: #define BGE_RXLP_LOCSTAT_OUT_OF_BDS    0x224C
        !          1012: #define BGE_RXLP_LOCSTAT_IFIN_DROPS    0x2250
        !          1013: #define BGE_RXLP_LOCSTAT_IFIN_ERRORS   0x2254
        !          1014: #define BGE_RXLP_LOCSTAT_RXTHRESH_HIT  0x2258
        !          1015:
        !          1016:
        !          1017: /* Receive List Placement mode register */
        !          1018: #define BGE_RXLPMODE_RESET             0x00000001
        !          1019: #define BGE_RXLPMODE_ENABLE            0x00000002
        !          1020: #define BGE_RXLPMODE_CLASS0_ATTN       0x00000004
        !          1021: #define BGE_RXLPMODE_MAPOUTRANGE_ATTN  0x00000008
        !          1022: #define BGE_RXLPMODE_STATSOFLOW_ATTN   0x00000010
        !          1023:
        !          1024: /* Receive List Placement Status register */
        !          1025: #define BGE_RXLPSTAT_CLASS0_ATTN       0x00000004
        !          1026: #define BGE_RXLPSTAT_MAPOUTRANGE_ATTN  0x00000008
        !          1027: #define BGE_RXLPSTAT_STATSOFLOW_ATTN   0x00000010
        !          1028:
        !          1029: /*
        !          1030:  * Receive Data and Receive BD Initiator Control Registers
        !          1031:  */
        !          1032: #define BGE_RDBDI_MODE                 0x2400
        !          1033: #define BGE_RDBDI_STATUS               0x2404
        !          1034: #define BGE_RX_JUMBO_RCB_HADDR_HI      0x2440
        !          1035: #define BGE_RX_JUMBO_RCB_HADDR_LO      0x2444
        !          1036: #define BGE_RX_JUMBO_RCB_MAXLEN_FLAGS  0x2448
        !          1037: #define BGE_RX_JUMBO_RCB_NICADDR       0x244C
        !          1038: #define BGE_RX_STD_RCB_HADDR_HI                0x2450
        !          1039: #define BGE_RX_STD_RCB_HADDR_LO                0x2454
        !          1040: #define BGE_RX_STD_RCB_MAXLEN_FLAGS    0x2458
        !          1041: #define BGE_RX_STD_RCB_NICADDR         0x245C
        !          1042: #define BGE_RX_MINI_RCB_HADDR_HI       0x2460
        !          1043: #define BGE_RX_MINI_RCB_HADDR_LO       0x2464
        !          1044: #define BGE_RX_MINI_RCB_MAXLEN_FLAGS   0x2468
        !          1045: #define BGE_RX_MINI_RCB_NICADDR                0x246C
        !          1046: #define BGE_RDBDI_JUMBO_RX_CONS                0x2470
        !          1047: #define BGE_RDBDI_STD_RX_CONS          0x2474
        !          1048: #define BGE_RDBDI_MINI_RX_CONS         0x2478
        !          1049: #define BGE_RDBDI_RETURN_PROD0         0x2480
        !          1050: #define BGE_RDBDI_RETURN_PROD1         0x2484
        !          1051: #define BGE_RDBDI_RETURN_PROD2         0x2488
        !          1052: #define BGE_RDBDI_RETURN_PROD3         0x248C
        !          1053: #define BGE_RDBDI_RETURN_PROD4         0x2490
        !          1054: #define BGE_RDBDI_RETURN_PROD5         0x2494
        !          1055: #define BGE_RDBDI_RETURN_PROD6         0x2498
        !          1056: #define BGE_RDBDI_RETURN_PROD7         0x249C
        !          1057: #define BGE_RDBDI_RETURN_PROD8         0x24A0
        !          1058: #define BGE_RDBDI_RETURN_PROD9         0x24A4
        !          1059: #define BGE_RDBDI_RETURN_PROD10                0x24A8
        !          1060: #define BGE_RDBDI_RETURN_PROD11                0x24AC
        !          1061: #define BGE_RDBDI_RETURN_PROD12                0x24B0
        !          1062: #define BGE_RDBDI_RETURN_PROD13                0x24B4
        !          1063: #define BGE_RDBDI_RETURN_PROD14                0x24B8
        !          1064: #define BGE_RDBDI_RETURN_PROD15                0x24BC
        !          1065: #define BGE_RDBDI_HWDIAG               0x24C0
        !          1066:
        !          1067:
        !          1068: /* Receive Data and Receive BD Initiator Mode register */
        !          1069: #define BGE_RDBDIMODE_RESET            0x00000001
        !          1070: #define BGE_RDBDIMODE_ENABLE           0x00000002
        !          1071: #define BGE_RDBDIMODE_JUMBO_ATTN       0x00000004
        !          1072: #define BGE_RDBDIMODE_GIANT_ATTN       0x00000008
        !          1073: #define BGE_RDBDIMODE_BADRINGSZ_ATTN   0x00000010
        !          1074:
        !          1075: /* Receive Data and Receive BD Initiator Status register */
        !          1076: #define BGE_RDBDISTAT_JUMBO_ATTN       0x00000004
        !          1077: #define BGE_RDBDISTAT_GIANT_ATTN       0x00000008
        !          1078: #define BGE_RDBDISTAT_BADRINGSZ_ATTN   0x00000010
        !          1079:
        !          1080:
        !          1081: /*
        !          1082:  * Receive Data Completion Control registers
        !          1083:  */
        !          1084: #define BGE_RDC_MODE                   0x2800
        !          1085:
        !          1086: /* Receive Data Completion Mode register */
        !          1087: #define BGE_RDCMODE_RESET              0x00000001
        !          1088: #define BGE_RDCMODE_ENABLE             0x00000002
        !          1089: #define BGE_RDCMODE_ATTN               0x00000004
        !          1090:
        !          1091: /*
        !          1092:  * Receive BD Initiator Control registers
        !          1093:  */
        !          1094: #define BGE_RBDI_MODE                  0x2C00
        !          1095: #define BGE_RBDI_STATUS                        0x2C04
        !          1096: #define BGE_RBDI_NIC_JUMBO_BD_PROD     0x2C08
        !          1097: #define BGE_RBDI_NIC_STD_BD_PROD       0x2C0C
        !          1098: #define BGE_RBDI_NIC_MINI_BD_PROD      0x2C10
        !          1099: #define BGE_RBDI_MINI_REPL_THRESH      0x2C14
        !          1100: #define BGE_RBDI_STD_REPL_THRESH       0x2C18
        !          1101: #define BGE_RBDI_JUMBO_REPL_THRESH     0x2C1C
        !          1102:
        !          1103: /* Receive BD Initiator Mode register */
        !          1104: #define BGE_RBDIMODE_RESET             0x00000001
        !          1105: #define BGE_RBDIMODE_ENABLE            0x00000002
        !          1106: #define BGE_RBDIMODE_ATTN              0x00000004
        !          1107:
        !          1108: /* Receive BD Initiator Status register */
        !          1109: #define BGE_RBDISTAT_ATTN              0x00000004
        !          1110:
        !          1111: /*
        !          1112:  * Receive BD Completion Control registers
        !          1113:  */
        !          1114: #define BGE_RBDC_MODE                  0x3000
        !          1115: #define BGE_RBDC_STATUS                        0x3004
        !          1116: #define BGE_RBDC_JUMBO_BD_PROD         0x3008
        !          1117: #define BGE_RBDC_STD_BD_PROD           0x300C
        !          1118: #define BGE_RBDC_MINI_BD_PROD          0x3010
        !          1119:
        !          1120: /* Receive BD completion mode register */
        !          1121: #define BGE_RBDCMODE_RESET             0x00000001
        !          1122: #define BGE_RBDCMODE_ENABLE            0x00000002
        !          1123: #define BGE_RBDCMODE_ATTN              0x00000004
        !          1124:
        !          1125: /* Receive BD completion status register */
        !          1126: #define BGE_RBDCSTAT_ERROR             0x00000004
        !          1127:
        !          1128: /*
        !          1129:  * Receive List Selector Control registers
        !          1130:  */
        !          1131: #define BGE_RXLS_MODE                  0x3400
        !          1132: #define BGE_RXLS_STATUS                        0x3404
        !          1133:
        !          1134: /* Receive List Selector Mode register */
        !          1135: #define BGE_RXLSMODE_RESET             0x00000001
        !          1136: #define BGE_RXLSMODE_ENABLE            0x00000002
        !          1137: #define BGE_RXLSMODE_ATTN              0x00000004
        !          1138:
        !          1139: /* Receive List Selector Status register */
        !          1140: #define BGE_RXLSSTAT_ERROR             0x00000004
        !          1141:
        !          1142: /*
        !          1143:  * Mbuf Cluster Free registers (has nothing to do with BSD mbufs)
        !          1144:  */
        !          1145: #define BGE_MBCF_MODE                  0x3800
        !          1146: #define BGE_MBCF_STATUS                        0x3804
        !          1147:
        !          1148: /* Mbuf Cluster Free mode register */
        !          1149: #define BGE_MBCFMODE_RESET             0x00000001
        !          1150: #define BGE_MBCFMODE_ENABLE            0x00000002
        !          1151: #define BGE_MBCFMODE_ATTN              0x00000004
        !          1152:
        !          1153: /* Mbuf Cluster Free status register */
        !          1154: #define BGE_MBCFSTAT_ERROR             0x00000004
        !          1155:
        !          1156: /*
        !          1157:  * Host Coalescing Control registers
        !          1158:  */
        !          1159: #define BGE_HCC_MODE                   0x3C00
        !          1160: #define BGE_HCC_STATUS                 0x3C04
        !          1161: #define BGE_HCC_RX_COAL_TICKS          0x3C08
        !          1162: #define BGE_HCC_TX_COAL_TICKS          0x3C0C
        !          1163: #define BGE_HCC_RX_MAX_COAL_BDS                0x3C10
        !          1164: #define BGE_HCC_TX_MAX_COAL_BDS                0x3C14
        !          1165: #define BGE_HCC_RX_COAL_TICKS_INT      0x3C18 /* ticks during interrupt */
        !          1166: #define BGE_HCC_TX_COAL_TICKS_INT      0x3C1C /* ticks during interrupt */
        !          1167: #define BGE_HCC_RX_MAX_COAL_BDS_INT    0x3C20 /* BDs during interrupt */
        !          1168: #define BGE_HCC_TX_MAX_COAL_BDS_INT    0x3C24 /* BDs during interrupt */
        !          1169: #define BGE_HCC_STATS_TICKS            0x3C28
        !          1170: #define BGE_HCC_STATS_ADDR_HI          0x3C30
        !          1171: #define BGE_HCC_STATS_ADDR_LO          0x3C34
        !          1172: #define BGE_HCC_STATUSBLK_ADDR_HI      0x3C38
        !          1173: #define BGE_HCC_STATUSBLK_ADDR_LO      0x3C3C
        !          1174: #define BGE_HCC_STATS_BASEADDR         0x3C40 /* address in NIC memory */
        !          1175: #define BGE_HCC_STATUSBLK_BASEADDR     0x3C44 /* address in NIC memory */
        !          1176: #define BGE_FLOW_ATTN                  0x3C48
        !          1177: #define BGE_HCC_JUMBO_BD_CONS          0x3C50
        !          1178: #define BGE_HCC_STD_BD_CONS            0x3C54
        !          1179: #define BGE_HCC_MINI_BD_CONS           0x3C58
        !          1180: #define BGE_HCC_RX_RETURN_PROD0                0x3C80
        !          1181: #define BGE_HCC_RX_RETURN_PROD1                0x3C84
        !          1182: #define BGE_HCC_RX_RETURN_PROD2                0x3C88
        !          1183: #define BGE_HCC_RX_RETURN_PROD3                0x3C8C
        !          1184: #define BGE_HCC_RX_RETURN_PROD4                0x3C90
        !          1185: #define BGE_HCC_RX_RETURN_PROD5                0x3C94
        !          1186: #define BGE_HCC_RX_RETURN_PROD6                0x3C98
        !          1187: #define BGE_HCC_RX_RETURN_PROD7                0x3C9C
        !          1188: #define BGE_HCC_RX_RETURN_PROD8                0x3CA0
        !          1189: #define BGE_HCC_RX_RETURN_PROD9                0x3CA4
        !          1190: #define BGE_HCC_RX_RETURN_PROD10       0x3CA8
        !          1191: #define BGE_HCC_RX_RETURN_PROD11       0x3CAC
        !          1192: #define BGE_HCC_RX_RETURN_PROD12       0x3CB0
        !          1193: #define BGE_HCC_RX_RETURN_PROD13       0x3CB4
        !          1194: #define BGE_HCC_RX_RETURN_PROD14       0x3CB8
        !          1195: #define BGE_HCC_RX_RETURN_PROD15       0x3CBC
        !          1196: #define BGE_HCC_TX_BD_CONS0            0x3CC0
        !          1197: #define BGE_HCC_TX_BD_CONS1            0x3CC4
        !          1198: #define BGE_HCC_TX_BD_CONS2            0x3CC8
        !          1199: #define BGE_HCC_TX_BD_CONS3            0x3CCC
        !          1200: #define BGE_HCC_TX_BD_CONS4            0x3CD0
        !          1201: #define BGE_HCC_TX_BD_CONS5            0x3CD4
        !          1202: #define BGE_HCC_TX_BD_CONS6            0x3CD8
        !          1203: #define BGE_HCC_TX_BD_CONS7            0x3CDC
        !          1204: #define BGE_HCC_TX_BD_CONS8            0x3CE0
        !          1205: #define BGE_HCC_TX_BD_CONS9            0x3CE4
        !          1206: #define BGE_HCC_TX_BD_CONS10           0x3CE8
        !          1207: #define BGE_HCC_TX_BD_CONS11           0x3CEC
        !          1208: #define BGE_HCC_TX_BD_CONS12           0x3CF0
        !          1209: #define BGE_HCC_TX_BD_CONS13           0x3CF4
        !          1210: #define BGE_HCC_TX_BD_CONS14           0x3CF8
        !          1211: #define BGE_HCC_TX_BD_CONS15           0x3CFC
        !          1212:
        !          1213:
        !          1214: /* Host coalescing mode register */
        !          1215: #define BGE_HCCMODE_RESET              0x00000001
        !          1216: #define BGE_HCCMODE_ENABLE             0x00000002
        !          1217: #define BGE_HCCMODE_ATTN               0x00000004
        !          1218: #define BGE_HCCMODE_COAL_NOW           0x00000008
        !          1219: #define BGE_HCCMODE_MSI_BITS           0x00000070
        !          1220: #define BGE_HCCMODE_STATBLK_SIZE       0x00000180
        !          1221:
        !          1222: #define BGE_STATBLKSZ_FULL             0x00000000
        !          1223: #define BGE_STATBLKSZ_64BYTE           0x00000080
        !          1224: #define BGE_STATBLKSZ_32BYTE           0x00000100
        !          1225:
        !          1226: /* Host coalescing status register */
        !          1227: #define BGE_HCCSTAT_ERROR              0x00000004
        !          1228:
        !          1229: /* Flow attention register */
        !          1230: #define BGE_FLOWATTN_MB_LOWAT          0x00000040
        !          1231: #define BGE_FLOWATTN_MEMARB            0x00000080
        !          1232: #define BGE_FLOWATTN_HOSTCOAL          0x00008000
        !          1233: #define BGE_FLOWATTN_DMADONE_DISCARD   0x00010000
        !          1234: #define BGE_FLOWATTN_RCB_INVAL         0x00020000
        !          1235: #define BGE_FLOWATTN_RXDATA_CORRUPT    0x00040000
        !          1236: #define BGE_FLOWATTN_RDBDI             0x00080000
        !          1237: #define BGE_FLOWATTN_RXLS              0x00100000
        !          1238: #define BGE_FLOWATTN_RXLP              0x00200000
        !          1239: #define BGE_FLOWATTN_RBDC              0x00400000
        !          1240: #define BGE_FLOWATTN_RBDI              0x00800000
        !          1241: #define BGE_FLOWATTN_SDC               0x08000000
        !          1242: #define BGE_FLOWATTN_SDI               0x10000000
        !          1243: #define BGE_FLOWATTN_SRS               0x20000000
        !          1244: #define BGE_FLOWATTN_SBDC              0x40000000
        !          1245: #define BGE_FLOWATTN_SBDI              0x80000000
        !          1246:
        !          1247: /*
        !          1248:  * Memory arbiter registers
        !          1249:  */
        !          1250: #define BGE_MARB_MODE                  0x4000
        !          1251: #define BGE_MARB_STATUS                        0x4004
        !          1252: #define BGE_MARB_TRAPADDR_HI           0x4008
        !          1253: #define BGE_MARB_TRAPADDR_LO           0x400C
        !          1254:
        !          1255: /* Memory arbiter mode register */
        !          1256: #define BGE_MARBMODE_RESET             0x00000001
        !          1257: #define BGE_MARBMODE_ENABLE            0x00000002
        !          1258: #define BGE_MARBMODE_TX_ADDR_TRAP      0x00000004
        !          1259: #define BGE_MARBMODE_RX_ADDR_TRAP      0x00000008
        !          1260: #define BGE_MARBMODE_DMAW1_TRAP                0x00000010
        !          1261: #define BGE_MARBMODE_DMAR1_TRAP                0x00000020
        !          1262: #define BGE_MARBMODE_RXRISC_TRAP       0x00000040
        !          1263: #define BGE_MARBMODE_TXRISC_TRAP       0x00000080
        !          1264: #define BGE_MARBMODE_PCI_TRAP          0x00000100
        !          1265: #define BGE_MARBMODE_DMAR2_TRAP                0x00000200
        !          1266: #define BGE_MARBMODE_RXQ_TRAP          0x00000400
        !          1267: #define BGE_MARBMODE_RXDI1_TRAP                0x00000800
        !          1268: #define BGE_MARBMODE_RXDI2_TRAP                0x00001000
        !          1269: #define BGE_MARBMODE_DC_GRPMEM_TRAP    0x00002000
        !          1270: #define BGE_MARBMODE_HCOAL_TRAP                0x00004000
        !          1271: #define BGE_MARBMODE_MBUF_TRAP         0x00008000
        !          1272: #define BGE_MARBMODE_TXDI_TRAP         0x00010000
        !          1273: #define BGE_MARBMODE_SDC_DMAC_TRAP     0x00020000
        !          1274: #define BGE_MARBMODE_TXBD_TRAP         0x00040000
        !          1275: #define BGE_MARBMODE_BUFFMAN_TRAP      0x00080000
        !          1276: #define BGE_MARBMODE_DMAW2_TRAP                0x00100000
        !          1277: #define BGE_MARBMODE_XTSSRAM_ROFLO_TRAP        0x00200000
        !          1278: #define BGE_MARBMODE_XTSSRAM_RUFLO_TRAP 0x00400000
        !          1279: #define BGE_MARBMODE_XTSSRAM_WOFLO_TRAP        0x00800000
        !          1280: #define BGE_MARBMODE_XTSSRAM_WUFLO_TRAP        0x01000000
        !          1281: #define BGE_MARBMODE_XTSSRAM_PERR_TRAP 0x02000000
        !          1282:
        !          1283: /* Memory arbiter status register */
        !          1284: #define BGE_MARBSTAT_TX_ADDR_TRAP      0x00000004
        !          1285: #define BGE_MARBSTAT_RX_ADDR_TRAP      0x00000008
        !          1286: #define BGE_MARBSTAT_DMAW1_TRAP                0x00000010
        !          1287: #define BGE_MARBSTAT_DMAR1_TRAP                0x00000020
        !          1288: #define BGE_MARBSTAT_RXRISC_TRAP       0x00000040
        !          1289: #define BGE_MARBSTAT_TXRISC_TRAP       0x00000080
        !          1290: #define BGE_MARBSTAT_PCI_TRAP          0x00000100
        !          1291: #define BGE_MARBSTAT_DMAR2_TRAP                0x00000200
        !          1292: #define BGE_MARBSTAT_RXQ_TRAP          0x00000400
        !          1293: #define BGE_MARBSTAT_RXDI1_TRAP                0x00000800
        !          1294: #define BGE_MARBSTAT_RXDI2_TRAP                0x00001000
        !          1295: #define BGE_MARBSTAT_DC_GRPMEM_TRAP    0x00002000
        !          1296: #define BGE_MARBSTAT_HCOAL_TRAP                0x00004000
        !          1297: #define BGE_MARBSTAT_MBUF_TRAP         0x00008000
        !          1298: #define BGE_MARBSTAT_TXDI_TRAP         0x00010000
        !          1299: #define BGE_MARBSTAT_SDC_DMAC_TRAP     0x00020000
        !          1300: #define BGE_MARBSTAT_TXBD_TRAP         0x00040000
        !          1301: #define BGE_MARBSTAT_BUFFMAN_TRAP      0x00080000
        !          1302: #define BGE_MARBSTAT_DMAW2_TRAP                0x00100000
        !          1303: #define BGE_MARBSTAT_XTSSRAM_ROFLO_TRAP        0x00200000
        !          1304: #define BGE_MARBSTAT_XTSSRAM_RUFLO_TRAP 0x00400000
        !          1305: #define BGE_MARBSTAT_XTSSRAM_WOFLO_TRAP        0x00800000
        !          1306: #define BGE_MARBSTAT_XTSSRAM_WUFLO_TRAP        0x01000000
        !          1307: #define BGE_MARBSTAT_XTSSRAM_PERR_TRAP 0x02000000
        !          1308:
        !          1309: /*
        !          1310:  * Buffer manager control registers
        !          1311:  */
        !          1312: #define BGE_BMAN_MODE                  0x4400
        !          1313: #define BGE_BMAN_STATUS                        0x4404
        !          1314: #define BGE_BMAN_MBUFPOOL_BASEADDR     0x4408
        !          1315: #define BGE_BMAN_MBUFPOOL_LEN          0x440C
        !          1316: #define BGE_BMAN_MBUFPOOL_READDMA_LOWAT        0x4410
        !          1317: #define BGE_BMAN_MBUFPOOL_MACRX_LOWAT  0x4414
        !          1318: #define BGE_BMAN_MBUFPOOL_HIWAT                0x4418
        !          1319: #define BGE_BMAN_RXCPU_MBALLOC_REQ     0x441C
        !          1320: #define BGE_BMAN_RXCPU_MBALLOC_RESP    0x4420
        !          1321: #define BGE_BMAN_TXCPU_MBALLOC_REQ     0x4424
        !          1322: #define BGE_BMAN_TXCPU_MBALLOC_RESP    0x4428
        !          1323: #define BGE_BMAN_DMA_DESCPOOL_BASEADDR 0x442C
        !          1324: #define BGE_BMAN_DMA_DESCPOOL_LEN      0x4430
        !          1325: #define BGE_BMAN_DMA_DESCPOOL_LOWAT    0x4434
        !          1326: #define BGE_BMAN_DMA_DESCPOOL_HIWAT    0x4438
        !          1327: #define BGE_BMAN_RXCPU_DMAALLOC_REQ    0x443C
        !          1328: #define BGE_BMAN_RXCPU_DMAALLOC_RESP   0x4440
        !          1329: #define BGE_BMAN_TXCPU_DMAALLOC_REQ    0x4444
        !          1330: #define BGE_BMAN_TXCPU_DMALLLOC_RESP   0x4448
        !          1331: #define BGE_BMAN_HWDIAG_1              0x444C
        !          1332: #define BGE_BMAN_HWDIAG_2              0x4450
        !          1333: #define BGE_BMAN_HWDIAG_3              0x4454
        !          1334:
        !          1335: /* Buffer manager mode register */
        !          1336: #define BGE_BMANMODE_RESET             0x00000001
        !          1337: #define BGE_BMANMODE_ENABLE            0x00000002
        !          1338: #define BGE_BMANMODE_ATTN              0x00000004
        !          1339: #define BGE_BMANMODE_TESTMODE          0x00000008
        !          1340: #define BGE_BMANMODE_LOMBUF_ATTN       0x00000010
        !          1341:
        !          1342: /* Buffer manager status register */
        !          1343: #define BGE_BMANSTAT_ERRO              0x00000004
        !          1344: #define BGE_BMANSTAT_LOWMBUF_ERROR     0x00000010
        !          1345:
        !          1346:
        !          1347: /*
        !          1348:  * Read DMA Control registers
        !          1349:  */
        !          1350: #define BGE_RDMA_MODE                  0x4800
        !          1351: #define BGE_RDMA_STATUS                        0x4804
        !          1352:
        !          1353: /* Read DMA mode register */
        !          1354: #define BGE_RDMAMODE_RESET             0x00000001
        !          1355: #define BGE_RDMAMODE_ENABLE            0x00000002
        !          1356: #define BGE_RDMAMODE_PCI_TGT_ABRT_ATTN 0x00000004
        !          1357: #define BGE_RDMAMODE_PCI_MSTR_ABRT_ATTN        0x00000008
        !          1358: #define BGE_RDMAMODE_PCI_PERR_ATTN     0x00000010
        !          1359: #define BGE_RDMAMODE_PCI_ADDROFLOW_ATTN        0x00000020
        !          1360: #define BGE_RDMAMODE_PCI_FIFOOFLOW_ATTN        0x00000040
        !          1361: #define BGE_RDMAMODE_PCI_FIFOUFLOW_ATTN        0x00000080
        !          1362: #define BGE_RDMAMODE_PCI_FIFOOREAD_ATTN        0x00000100
        !          1363: #define BGE_RDMAMODE_LOCWRITE_TOOBIG   0x00000200
        !          1364: #define BGE_RDMAMODE_ALL_ATTNS         0x000003FC
        !          1365:
        !          1366: /* Alternate encodings for PCI-Express, from Broadcom-supplied Linux driver */
        !          1367: #define BGE_RDMA_MODE_FIFO_LONG_BURST  ((1<<17) || (1 << 16))
        !          1368: #define BGE_RDMA_MODE_FIFO_SIZE_128     (1 << 17)
        !          1369:
        !          1370: /* Read DMA status register */
        !          1371: #define BGE_RDMASTAT_PCI_TGT_ABRT_ATTN 0x00000004
        !          1372: #define BGE_RDMASTAT_PCI_MSTR_ABRT_ATTN        0x00000008
        !          1373: #define BGE_RDMASTAT_PCI_PERR_ATTN     0x00000010
        !          1374: #define BGE_RDMASTAT_PCI_ADDROFLOW_ATTN        0x00000020
        !          1375: #define BGE_RDMASTAT_PCI_FIFOOFLOW_ATTN        0x00000040
        !          1376: #define BGE_RDMASTAT_PCI_FIFOUFLOW_ATTN        0x00000080
        !          1377: #define BGE_RDMASTAT_PCI_FIFOOREAD_ATTN        0x00000100
        !          1378: #define BGE_RDMASTAT_LOCWRITE_TOOBIG   0x00000200
        !          1379:
        !          1380: /*
        !          1381:  * Write DMA control registers
        !          1382:  */
        !          1383: #define BGE_WDMA_MODE                  0x4C00
        !          1384: #define BGE_WDMA_STATUS                        0x4C04
        !          1385:
        !          1386: /* Write DMA mode register */
        !          1387: #define BGE_WDMAMODE_RESET             0x00000001
        !          1388: #define BGE_WDMAMODE_ENABLE            0x00000002
        !          1389: #define BGE_WDMAMODE_PCI_TGT_ABRT_ATTN 0x00000004
        !          1390: #define BGE_WDMAMODE_PCI_MSTR_ABRT_ATTN        0x00000008
        !          1391: #define BGE_WDMAMODE_PCI_PERR_ATTN     0x00000010
        !          1392: #define BGE_WDMAMODE_PCI_ADDROFLOW_ATTN        0x00000020
        !          1393: #define BGE_WDMAMODE_PCI_FIFOOFLOW_ATTN        0x00000040
        !          1394: #define BGE_WDMAMODE_PCI_FIFOUFLOW_ATTN        0x00000080
        !          1395: #define BGE_WDMAMODE_PCI_FIFOOREAD_ATTN        0x00000100
        !          1396: #define BGE_WDMAMODE_LOCREAD_TOOBIG    0x00000200
        !          1397: #define BGE_WDMAMODE_ALL_ATTNS         0x000003FC
        !          1398:
        !          1399: /* Write DMA status register */
        !          1400: #define BGE_WDMASTAT_PCI_TGT_ABRT_ATTN 0x00000004
        !          1401: #define BGE_WDMASTAT_PCI_MSTR_ABRT_ATTN        0x00000008
        !          1402: #define BGE_WDMASTAT_PCI_PERR_ATTN     0x00000010
        !          1403: #define BGE_WDMASTAT_PCI_ADDROFLOW_ATTN        0x00000020
        !          1404: #define BGE_WDMASTAT_PCI_FIFOOFLOW_ATTN        0x00000040
        !          1405: #define BGE_WDMASTAT_PCI_FIFOUFLOW_ATTN        0x00000080
        !          1406: #define BGE_WDMASTAT_PCI_FIFOOREAD_ATTN        0x00000100
        !          1407: #define BGE_WDMASTAT_LOCREAD_TOOBIG    0x00000200
        !          1408:
        !          1409:
        !          1410: /*
        !          1411:  * RX CPU registers
        !          1412:  */
        !          1413: #define BGE_RXCPU_MODE                 0x5000
        !          1414: #define BGE_RXCPU_STATUS               0x5004
        !          1415: #define BGE_RXCPU_PC                   0x501C
        !          1416:
        !          1417: /* RX CPU mode register */
        !          1418: #define BGE_RXCPUMODE_RESET            0x00000001
        !          1419: #define BGE_RXCPUMODE_SINGLESTEP       0x00000002
        !          1420: #define BGE_RXCPUMODE_P0_DATAHLT_ENB   0x00000004
        !          1421: #define BGE_RXCPUMODE_P0_INSTRHLT_ENB  0x00000008
        !          1422: #define BGE_RXCPUMODE_WR_POSTBUF_ENB   0x00000010
        !          1423: #define BGE_RXCPUMODE_DATACACHE_ENB    0x00000020
        !          1424: #define BGE_RXCPUMODE_ROMFAIL          0x00000040
        !          1425: #define BGE_RXCPUMODE_WATCHDOG_ENB     0x00000080
        !          1426: #define BGE_RXCPUMODE_INSTRCACHE_PRF   0x00000100
        !          1427: #define BGE_RXCPUMODE_INSTRCACHE_FLUSH 0x00000200
        !          1428: #define BGE_RXCPUMODE_HALTCPU          0x00000400
        !          1429: #define BGE_RXCPUMODE_INVDATAHLT_ENB   0x00000800
        !          1430: #define BGE_RXCPUMODE_MADDRTRAPHLT_ENB 0x00001000
        !          1431: #define BGE_RXCPUMODE_RADDRTRAPHLT_ENB 0x00002000
        !          1432:
        !          1433: /* RX CPU status register */
        !          1434: #define BGE_RXCPUSTAT_HW_BREAKPOINT    0x00000001
        !          1435: #define BGE_RXCPUSTAT_HLTINSTR_EXECUTED        0x00000002
        !          1436: #define BGE_RXCPUSTAT_INVALID_INSTR    0x00000004
        !          1437: #define BGE_RXCPUSTAT_P0_DATAREF       0x00000008
        !          1438: #define BGE_RXCPUSTAT_P0_INSTRREF      0x00000010
        !          1439: #define BGE_RXCPUSTAT_INVALID_DATAACC  0x00000020
        !          1440: #define BGE_RXCPUSTAT_INVALID_INSTRFTCH        0x00000040
        !          1441: #define BGE_RXCPUSTAT_BAD_MEMALIGN     0x00000080
        !          1442: #define BGE_RXCPUSTAT_MADDR_TRAP       0x00000100
        !          1443: #define BGE_RXCPUSTAT_REGADDR_TRAP     0x00000200
        !          1444: #define BGE_RXCPUSTAT_DATAACC_STALL    0x00001000
        !          1445: #define BGE_RXCPUSTAT_INSTRFETCH_STALL 0x00002000
        !          1446: #define BGE_RXCPUSTAT_MA_WR_FIFOOFLOW  0x08000000
        !          1447: #define BGE_RXCPUSTAT_MA_RD_FIFOOFLOW  0x10000000
        !          1448: #define BGE_RXCPUSTAT_MA_DATAMASK_OFLOW        0x20000000
        !          1449: #define BGE_RXCPUSTAT_MA_REQ_FIFOOFLOW 0x40000000
        !          1450: #define BGE_RXCPUSTAT_BLOCKING_READ    0x80000000
        !          1451:
        !          1452:
        !          1453: /*
        !          1454:  * TX CPU registers
        !          1455:  */
        !          1456: #define BGE_TXCPU_MODE                 0x5400
        !          1457: #define BGE_TXCPU_STATUS               0x5404
        !          1458: #define BGE_TXCPU_PC                   0x541C
        !          1459:
        !          1460: /* TX CPU mode register */
        !          1461: #define BGE_TXCPUMODE_RESET            0x00000001
        !          1462: #define BGE_TXCPUMODE_SINGLESTEP       0x00000002
        !          1463: #define BGE_TXCPUMODE_P0_DATAHLT_ENB   0x00000004
        !          1464: #define BGE_TXCPUMODE_P0_INSTRHLT_ENB  0x00000008
        !          1465: #define BGE_TXCPUMODE_WR_POSTBUF_ENB   0x00000010
        !          1466: #define BGE_TXCPUMODE_DATACACHE_ENB    0x00000020
        !          1467: #define BGE_TXCPUMODE_ROMFAIL          0x00000040
        !          1468: #define BGE_TXCPUMODE_WATCHDOG_ENB     0x00000080
        !          1469: #define BGE_TXCPUMODE_INSTRCACHE_PRF   0x00000100
        !          1470: #define BGE_TXCPUMODE_INSTRCACHE_FLUSH 0x00000200
        !          1471: #define BGE_TXCPUMODE_HALTCPU          0x00000400
        !          1472: #define BGE_TXCPUMODE_INVDATAHLT_ENB   0x00000800
        !          1473: #define BGE_TXCPUMODE_MADDRTRAPHLT_ENB 0x00001000
        !          1474:
        !          1475: /* TX CPU status register */
        !          1476: #define BGE_TXCPUSTAT_HW_BREAKPOINT    0x00000001
        !          1477: #define BGE_TXCPUSTAT_HLTINSTR_EXECUTED        0x00000002
        !          1478: #define BGE_TXCPUSTAT_INVALID_INSTR    0x00000004
        !          1479: #define BGE_TXCPUSTAT_P0_DATAREF       0x00000008
        !          1480: #define BGE_TXCPUSTAT_P0_INSTRREF      0x00000010
        !          1481: #define BGE_TXCPUSTAT_INVALID_DATAACC  0x00000020
        !          1482: #define BGE_TXCPUSTAT_INVALID_INSTRFTCH        0x00000040
        !          1483: #define BGE_TXCPUSTAT_BAD_MEMALIGN     0x00000080
        !          1484: #define BGE_TXCPUSTAT_MADDR_TRAP       0x00000100
        !          1485: #define BGE_TXCPUSTAT_REGADDR_TRAP     0x00000200
        !          1486: #define BGE_TXCPUSTAT_DATAACC_STALL    0x00001000
        !          1487: #define BGE_TXCPUSTAT_INSTRFETCH_STALL 0x00002000
        !          1488: #define BGE_TXCPUSTAT_MA_WR_FIFOOFLOW  0x08000000
        !          1489: #define BGE_TXCPUSTAT_MA_RD_FIFOOFLOW  0x10000000
        !          1490: #define BGE_TXCPUSTAT_MA_DATAMASK_OFLOW        0x20000000
        !          1491: #define BGE_TXCPUSTAT_MA_REQ_FIFOOFLOW 0x40000000
        !          1492: #define BGE_TXCPUSTAT_BLOCKING_READ    0x80000000
        !          1493:
        !          1494:
        !          1495: /*
        !          1496:  * Low priority mailbox registers
        !          1497:  */
        !          1498: #define BGE_LPMBX_IRQ0_HI              0x5800
        !          1499: #define BGE_LPMBX_IRQ0_LO              0x5804
        !          1500: #define BGE_LPMBX_IRQ1_HI              0x5808
        !          1501: #define BGE_LPMBX_IRQ1_LO              0x580C
        !          1502: #define BGE_LPMBX_IRQ2_HI              0x5810
        !          1503: #define BGE_LPMBX_IRQ2_LO              0x5814
        !          1504: #define BGE_LPMBX_IRQ3_HI              0x5818
        !          1505: #define BGE_LPMBX_IRQ3_LO              0x581C
        !          1506: #define BGE_LPMBX_GEN0_HI              0x5820
        !          1507: #define BGE_LPMBX_GEN0_LO              0x5824
        !          1508: #define BGE_LPMBX_GEN1_HI              0x5828
        !          1509: #define BGE_LPMBX_GEN1_LO              0x582C
        !          1510: #define BGE_LPMBX_GEN2_HI              0x5830
        !          1511: #define BGE_LPMBX_GEN2_LO              0x5834
        !          1512: #define BGE_LPMBX_GEN3_HI              0x5828
        !          1513: #define BGE_LPMBX_GEN3_LO              0x582C
        !          1514: #define BGE_LPMBX_GEN4_HI              0x5840
        !          1515: #define BGE_LPMBX_GEN4_LO              0x5844
        !          1516: #define BGE_LPMBX_GEN5_HI              0x5848
        !          1517: #define BGE_LPMBX_GEN5_LO              0x584C
        !          1518: #define BGE_LPMBX_GEN6_HI              0x5850
        !          1519: #define BGE_LPMBX_GEN6_LO              0x5854
        !          1520: #define BGE_LPMBX_GEN7_HI              0x5858
        !          1521: #define BGE_LPMBX_GEN7_LO              0x585C
        !          1522: #define BGE_LPMBX_RELOAD_STATS_HI      0x5860
        !          1523: #define BGE_LPMBX_RELOAD_STATS_LO      0x5864
        !          1524: #define BGE_LPMBX_RX_STD_PROD_HI       0x5868
        !          1525: #define BGE_LPMBX_RX_STD_PROD_LO       0x586C
        !          1526: #define BGE_LPMBX_RX_JUMBO_PROD_HI     0x5870
        !          1527: #define BGE_LPMBX_RX_JUMBO_PROD_LO     0x5874
        !          1528: #define BGE_LPMBX_RX_MINI_PROD_HI      0x5878
        !          1529: #define BGE_LPMBX_RX_MINI_PROD_LO      0x587C
        !          1530: #define BGE_LPMBX_RX_CONS0_HI          0x5880
        !          1531: #define BGE_LPMBX_RX_CONS0_LO          0x5884
        !          1532: #define BGE_LPMBX_RX_CONS1_HI          0x5888
        !          1533: #define BGE_LPMBX_RX_CONS1_LO          0x588C
        !          1534: #define BGE_LPMBX_RX_CONS2_HI          0x5890
        !          1535: #define BGE_LPMBX_RX_CONS2_LO          0x5894
        !          1536: #define BGE_LPMBX_RX_CONS3_HI          0x5898
        !          1537: #define BGE_LPMBX_RX_CONS3_LO          0x589C
        !          1538: #define BGE_LPMBX_RX_CONS4_HI          0x58A0
        !          1539: #define BGE_LPMBX_RX_CONS4_LO          0x58A4
        !          1540: #define BGE_LPMBX_RX_CONS5_HI          0x58A8
        !          1541: #define BGE_LPMBX_RX_CONS5_LO          0x58AC
        !          1542: #define BGE_LPMBX_RX_CONS6_HI          0x58B0
        !          1543: #define BGE_LPMBX_RX_CONS6_LO          0x58B4
        !          1544: #define BGE_LPMBX_RX_CONS7_HI          0x58B8
        !          1545: #define BGE_LPMBX_RX_CONS7_LO          0x58BC
        !          1546: #define BGE_LPMBX_RX_CONS8_HI          0x58C0
        !          1547: #define BGE_LPMBX_RX_CONS8_LO          0x58C4
        !          1548: #define BGE_LPMBX_RX_CONS9_HI          0x58C8
        !          1549: #define BGE_LPMBX_RX_CONS9_LO          0x58CC
        !          1550: #define BGE_LPMBX_RX_CONS10_HI         0x58D0
        !          1551: #define BGE_LPMBX_RX_CONS10_LO         0x58D4
        !          1552: #define BGE_LPMBX_RX_CONS11_HI         0x58D8
        !          1553: #define BGE_LPMBX_RX_CONS11_LO         0x58DC
        !          1554: #define BGE_LPMBX_RX_CONS12_HI         0x58E0
        !          1555: #define BGE_LPMBX_RX_CONS12_LO         0x58E4
        !          1556: #define BGE_LPMBX_RX_CONS13_HI         0x58E8
        !          1557: #define BGE_LPMBX_RX_CONS13_LO         0x58EC
        !          1558: #define BGE_LPMBX_RX_CONS14_HI         0x58F0
        !          1559: #define BGE_LPMBX_RX_CONS14_LO         0x58F4
        !          1560: #define BGE_LPMBX_RX_CONS15_HI         0x58F8
        !          1561: #define BGE_LPMBX_RX_CONS15_LO         0x58FC
        !          1562: #define BGE_LPMBX_TX_HOST_PROD0_HI     0x5900
        !          1563: #define BGE_LPMBX_TX_HOST_PROD0_LO     0x5904
        !          1564: #define BGE_LPMBX_TX_HOST_PROD1_HI     0x5908
        !          1565: #define BGE_LPMBX_TX_HOST_PROD1_LO     0x590C
        !          1566: #define BGE_LPMBX_TX_HOST_PROD2_HI     0x5910
        !          1567: #define BGE_LPMBX_TX_HOST_PROD2_LO     0x5914
        !          1568: #define BGE_LPMBX_TX_HOST_PROD3_HI     0x5918
        !          1569: #define BGE_LPMBX_TX_HOST_PROD3_LO     0x591C
        !          1570: #define BGE_LPMBX_TX_HOST_PROD4_HI     0x5920
        !          1571: #define BGE_LPMBX_TX_HOST_PROD4_LO     0x5924
        !          1572: #define BGE_LPMBX_TX_HOST_PROD5_HI     0x5928
        !          1573: #define BGE_LPMBX_TX_HOST_PROD5_LO     0x592C
        !          1574: #define BGE_LPMBX_TX_HOST_PROD6_HI     0x5930
        !          1575: #define BGE_LPMBX_TX_HOST_PROD6_LO     0x5934
        !          1576: #define BGE_LPMBX_TX_HOST_PROD7_HI     0x5938
        !          1577: #define BGE_LPMBX_TX_HOST_PROD7_LO     0x593C
        !          1578: #define BGE_LPMBX_TX_HOST_PROD8_HI     0x5940
        !          1579: #define BGE_LPMBX_TX_HOST_PROD8_LO     0x5944
        !          1580: #define BGE_LPMBX_TX_HOST_PROD9_HI     0x5948
        !          1581: #define BGE_LPMBX_TX_HOST_PROD9_LO     0x594C
        !          1582: #define BGE_LPMBX_TX_HOST_PROD10_HI    0x5950
        !          1583: #define BGE_LPMBX_TX_HOST_PROD10_LO    0x5954
        !          1584: #define BGE_LPMBX_TX_HOST_PROD11_HI    0x5958
        !          1585: #define BGE_LPMBX_TX_HOST_PROD11_LO    0x595C
        !          1586: #define BGE_LPMBX_TX_HOST_PROD12_HI    0x5960
        !          1587: #define BGE_LPMBX_TX_HOST_PROD12_LO    0x5964
        !          1588: #define BGE_LPMBX_TX_HOST_PROD13_HI    0x5968
        !          1589: #define BGE_LPMBX_TX_HOST_PROD13_LO    0x596C
        !          1590: #define BGE_LPMBX_TX_HOST_PROD14_HI    0x5970
        !          1591: #define BGE_LPMBX_TX_HOST_PROD14_LO    0x5974
        !          1592: #define BGE_LPMBX_TX_HOST_PROD15_HI    0x5978
        !          1593: #define BGE_LPMBX_TX_HOST_PROD15_LO    0x597C
        !          1594: #define BGE_LPMBX_TX_NIC_PROD0_HI      0x5980
        !          1595: #define BGE_LPMBX_TX_NIC_PROD0_LO      0x5984
        !          1596: #define BGE_LPMBX_TX_NIC_PROD1_HI      0x5988
        !          1597: #define BGE_LPMBX_TX_NIC_PROD1_LO      0x598C
        !          1598: #define BGE_LPMBX_TX_NIC_PROD2_HI      0x5990
        !          1599: #define BGE_LPMBX_TX_NIC_PROD2_LO      0x5994
        !          1600: #define BGE_LPMBX_TX_NIC_PROD3_HI      0x5998
        !          1601: #define BGE_LPMBX_TX_NIC_PROD3_LO      0x599C
        !          1602: #define BGE_LPMBX_TX_NIC_PROD4_HI      0x59A0
        !          1603: #define BGE_LPMBX_TX_NIC_PROD4_LO      0x59A4
        !          1604: #define BGE_LPMBX_TX_NIC_PROD5_HI      0x59A8
        !          1605: #define BGE_LPMBX_TX_NIC_PROD5_LO      0x59AC
        !          1606: #define BGE_LPMBX_TX_NIC_PROD6_HI      0x59B0
        !          1607: #define BGE_LPMBX_TX_NIC_PROD6_LO      0x59B4
        !          1608: #define BGE_LPMBX_TX_NIC_PROD7_HI      0x59B8
        !          1609: #define BGE_LPMBX_TX_NIC_PROD7_LO      0x59BC
        !          1610: #define BGE_LPMBX_TX_NIC_PROD8_HI      0x59C0
        !          1611: #define BGE_LPMBX_TX_NIC_PROD8_LO      0x59C4
        !          1612: #define BGE_LPMBX_TX_NIC_PROD9_HI      0x59C8
        !          1613: #define BGE_LPMBX_TX_NIC_PROD9_LO      0x59CC
        !          1614: #define BGE_LPMBX_TX_NIC_PROD10_HI     0x59D0
        !          1615: #define BGE_LPMBX_TX_NIC_PROD10_LO     0x59D4
        !          1616: #define BGE_LPMBX_TX_NIC_PROD11_HI     0x59D8
        !          1617: #define BGE_LPMBX_TX_NIC_PROD11_LO     0x59DC
        !          1618: #define BGE_LPMBX_TX_NIC_PROD12_HI     0x59E0
        !          1619: #define BGE_LPMBX_TX_NIC_PROD12_LO     0x59E4
        !          1620: #define BGE_LPMBX_TX_NIC_PROD13_HI     0x59E8
        !          1621: #define BGE_LPMBX_TX_NIC_PROD13_LO     0x59EC
        !          1622: #define BGE_LPMBX_TX_NIC_PROD14_HI     0x59F0
        !          1623: #define BGE_LPMBX_TX_NIC_PROD14_LO     0x59F4
        !          1624: #define BGE_LPMBX_TX_NIC_PROD15_HI     0x59F8
        !          1625: #define BGE_LPMBX_TX_NIC_PROD15_LO     0x59FC
        !          1626:
        !          1627: /*
        !          1628:  * Flow throw Queue reset register
        !          1629:  */
        !          1630: #define BGE_FTQ_RESET                  0x5C00
        !          1631:
        !          1632: #define BGE_FTQRESET_DMAREAD           0x00000002
        !          1633: #define BGE_FTQRESET_DMAHIPRIO_RD      0x00000004
        !          1634: #define BGE_FTQRESET_DMADONE           0x00000010
        !          1635: #define BGE_FTQRESET_SBDC              0x00000020
        !          1636: #define BGE_FTQRESET_SDI               0x00000040
        !          1637: #define BGE_FTQRESET_WDMA              0x00000080
        !          1638: #define BGE_FTQRESET_DMAHIPRIO_WR      0x00000100
        !          1639: #define BGE_FTQRESET_TYPE1_SOFTWARE    0x00000200
        !          1640: #define BGE_FTQRESET_SDC               0x00000400
        !          1641: #define BGE_FTQRESET_HCC               0x00000800
        !          1642: #define BGE_FTQRESET_TXFIFO            0x00001000
        !          1643: #define BGE_FTQRESET_MBC               0x00002000
        !          1644: #define BGE_FTQRESET_RBDC              0x00004000
        !          1645: #define BGE_FTQRESET_RXLP              0x00008000
        !          1646: #define BGE_FTQRESET_RDBDI             0x00010000
        !          1647: #define BGE_FTQRESET_RDC               0x00020000
        !          1648: #define BGE_FTQRESET_TYPE2_SOFTWARE    0x00040000
        !          1649:
        !          1650: /*
        !          1651:  * Message Signaled Interrupt registers
        !          1652:  */
        !          1653: #define BGE_MSI_MODE                   0x6000
        !          1654: #define BGE_MSI_STATUS                 0x6004
        !          1655: #define BGE_MSI_FIFOACCESS             0x6008
        !          1656:
        !          1657: /* MSI mode register */
        !          1658: #define BGE_MSIMODE_RESET              0x00000001
        !          1659: #define BGE_MSIMODE_ENABLE             0x00000002
        !          1660: #define BGE_MSIMODE_PCI_TGT_ABRT_ATTN  0x00000004
        !          1661: #define BGE_MSIMODE_PCI_MSTR_ABRT_ATTN 0x00000008
        !          1662: #define BGE_MSIMODE_PCI_PERR_ATTN      0x00000010
        !          1663: #define BGE_MSIMODE_MSI_FIFOUFLOW_ATTN 0x00000020
        !          1664: #define BGE_MSIMODE_MSI_FIFOOFLOW_ATTN 0x00000040
        !          1665:
        !          1666: /* MSI status register */
        !          1667: #define BGE_MSISTAT_PCI_TGT_ABRT_ATTN  0x00000004
        !          1668: #define BGE_MSISTAT_PCI_MSTR_ABRT_ATTN 0x00000008
        !          1669: #define BGE_MSISTAT_PCI_PERR_ATTN      0x00000010
        !          1670: #define BGE_MSISTAT_MSI_FIFOUFLOW_ATTN 0x00000020
        !          1671: #define BGE_MSISTAT_MSI_FIFOOFLOW_ATTN 0x00000040
        !          1672:
        !          1673:
        !          1674: /*
        !          1675:  * DMA Completion registers
        !          1676:  */
        !          1677: #define BGE_DMAC_MODE                  0x6400
        !          1678:
        !          1679: /* DMA Completion mode register */
        !          1680: #define BGE_DMACMODE_RESET             0x00000001
        !          1681: #define BGE_DMACMODE_ENABLE            0x00000002
        !          1682:
        !          1683:
        !          1684: /*
        !          1685:  * General control registers.
        !          1686:  */
        !          1687: #define BGE_MODE_CTL                   0x6800
        !          1688: #define BGE_MISC_CFG                   0x6804
        !          1689: #define BGE_MISC_LOCAL_CTL             0x6808
        !          1690: #define BGE_CPU_EVENT                  0x6810
        !          1691: #define BGE_EE_ADDR                    0x6838
        !          1692: #define BGE_EE_DATA                    0x683C
        !          1693: #define BGE_EE_CTL                     0x6840
        !          1694: #define BGE_MDI_CTL                    0x6844
        !          1695: #define BGE_EE_DELAY                   0x6848
        !          1696:
        !          1697: #define BGE_FASTBOOT_PC                        0x6894
        !          1698:
        !          1699: /*
        !          1700:  * TLP Control Register
        !          1701:  * Applicable to BCM5721 and BCM5751 only
        !          1702:  */
        !          1703: #define BGE_TLP_CONTROL_REG            0x7c00
        !          1704: #define BGE_TLP_DATA_FIFO_PROTECT      0x02000000
        !          1705:
        !          1706: /*
        !          1707:  * PHY Test Control Register
        !          1708:  * Applicable to BCM5721 and BCM5751 only
        !          1709:  */
        !          1710: #define BGE_PHY_TEST_CTRL_REG          0x7e2c
        !          1711: #define BGE_PHY_PCIE_SCRAM_MODE                0x0020
        !          1712: #define BGE_PHY_PCIE_LTASS_MODE                0x0040
        !          1713:
        !          1714: /* Mode control register */
        !          1715: #define BGE_MODECTL_INT_SNDCOAL_ONLY   0x00000001
        !          1716: #define BGE_MODECTL_BYTESWAP_NONFRAME  0x00000002
        !          1717: #define BGE_MODECTL_WORDSWAP_NONFRAME  0x00000004
        !          1718: #define BGE_MODECTL_BYTESWAP_DATA      0x00000010
        !          1719: #define BGE_MODECTL_WORDSWAP_DATA      0x00000020
        !          1720: #define BGE_MODECTL_NO_FRAME_CRACKING  0x00000200
        !          1721: #define BGE_MODECTL_NO_RX_CRC          0x00000400
        !          1722: #define BGE_MODECTL_RX_BADFRAMES       0x00000800
        !          1723: #define BGE_MODECTL_NO_TX_INTR         0x00002000
        !          1724: #define BGE_MODECTL_NO_RX_INTR         0x00004000
        !          1725: #define BGE_MODECTL_FORCE_PCI32                0x00008000
        !          1726: #define BGE_MODECTL_STACKUP            0x00010000
        !          1727: #define BGE_MODECTL_HOST_SEND_BDS      0x00020000
        !          1728: #define BGE_MODECTL_TX_NO_PHDR_CSUM    0x00100000
        !          1729: #define BGE_MODECTL_RX_NO_PHDR_CSUM    0x00800000
        !          1730: #define BGE_MODECTL_TX_ATTN_INTR       0x01000000
        !          1731: #define BGE_MODECTL_RX_ATTN_INTR       0x02000000
        !          1732: #define BGE_MODECTL_MAC_ATTN_INTR      0x04000000
        !          1733: #define BGE_MODECTL_DMA_ATTN_INTR      0x08000000
        !          1734: #define BGE_MODECTL_FLOWCTL_ATTN_INTR  0x10000000
        !          1735: #define BGE_MODECTL_4X_SENDRING_SZ     0x20000000
        !          1736: #define BGE_MODECTL_FW_PROCESS_MCASTS  0x40000000
        !          1737:
        !          1738: /* Misc. config register */
        !          1739: #define BGE_MISCCFG_RESET_CORE_CLOCKS  0x00000001
        !          1740: #define BGE_MISCCFG_TIMER_PRESCALER    0x000000FE
        !          1741: #define BGE_MISCCFG_KEEP_GPHY_POWER    0x04000000
        !          1742: #define BGE_MISCCFG_BOARD_ID_MASK      0x0001e000
        !          1743:
        !          1744: #define BGE_32BITTIME_66MHZ            (0x41 << 1)
        !          1745:
        !          1746: /* Misc. Local Control */
        !          1747: #define BGE_MLC_INTR_STATE             0x00000001
        !          1748: #define BGE_MLC_INTR_CLR               0x00000002
        !          1749: #define BGE_MLC_INTR_SET               0x00000004
        !          1750: #define BGE_MLC_INTR_ONATTN            0x00000008
        !          1751: #define BGE_MLC_MISCIO_IN0             0x00000100
        !          1752: #define BGE_MLC_MISCIO_IN1             0x00000200
        !          1753: #define BGE_MLC_MISCIO_IN2             0x00000400
        !          1754: #define BGE_MLC_MISCIO_OUTEN0          0x00000800
        !          1755: #define BGE_MLC_MISCIO_OUTEN1          0x00001000
        !          1756: #define BGE_MLC_MISCIO_OUTEN2          0x00002000
        !          1757: #define BGE_MLC_MISCIO_OUT0            0x00004000
        !          1758: #define BGE_MLC_MISCIO_OUT1            0x00008000
        !          1759: #define BGE_MLC_MISCIO_OUT2            0x00010000
        !          1760: #define BGE_MLC_EXTRAM_ENB             0x00020000
        !          1761: #define BGE_MLC_SRAM_SIZE              0x001C0000
        !          1762: #define BGE_MLC_BANK_SEL               0x00200000 /* 0 = 2 banks, 1 == 1 */
        !          1763: #define BGE_MLC_SSRAM_TYPE             0x00400000 /* 1 = ZBT, 0 = standard */
        !          1764: #define BGE_MLC_SSRAM_CYC_DESEL                0x00800000
        !          1765: #define BGE_MLC_AUTO_EEPROM            0x01000000
        !          1766:
        !          1767: #define BGE_SSRAMSIZE_256KB            0x00000000
        !          1768: #define BGE_SSRAMSIZE_512KB            0x00040000
        !          1769: #define BGE_SSRAMSIZE_1MB              0x00080000
        !          1770: #define BGE_SSRAMSIZE_2MB              0x000C0000
        !          1771: #define BGE_SSRAMSIZE_4MB              0x00100000
        !          1772: #define BGE_SSRAMSIZE_8MB              0x00140000
        !          1773: #define BGE_SSRAMSIZE_16M              0x00180000
        !          1774:
        !          1775: /* EEPROM address register */
        !          1776: #define BGE_EEADDR_ADDRESS             0x0000FFFC
        !          1777: #define BGE_EEADDR_HALFCLK             0x01FF0000
        !          1778: #define BGE_EEADDR_START               0x02000000
        !          1779: #define BGE_EEADDR_DEVID               0x1C000000
        !          1780: #define BGE_EEADDR_RESET               0x20000000
        !          1781: #define BGE_EEADDR_DONE                        0x40000000
        !          1782: #define BGE_EEADDR_RW                  0x80000000 /* 1 = rd, 0 = wr */
        !          1783:
        !          1784: #define BGE_EEDEVID(x)                 ((x & 7) << 26)
        !          1785: #define BGE_EEHALFCLK(x)               ((x & 0x1FF) << 16)
        !          1786: #define BGE_HALFCLK_384SCL             0x60
        !          1787: #define BGE_EE_READCMD \
        !          1788:        (BGE_EEHALFCLK(BGE_HALFCLK_384SCL)|BGE_EEDEVID(0)|      \
        !          1789:        BGE_EEADDR_START|BGE_EEADDR_RW|BGE_EEADDR_DONE)
        !          1790: #define BGE_EE_WRCMD \
        !          1791:        (BGE_EEHALFCLK(BGE_HALFCLK_384SCL)|BGE_EEDEVID(0)|      \
        !          1792:        BGE_EEADDR_START|BGE_EEADDR_DONE)
        !          1793:
        !          1794: /* EEPROM Control register */
        !          1795: #define BGE_EECTL_CLKOUT_TRISTATE      0x00000001
        !          1796: #define BGE_EECTL_CLKOUT               0x00000002
        !          1797: #define BGE_EECTL_CLKIN                        0x00000004
        !          1798: #define BGE_EECTL_DATAOUT_TRISTATE     0x00000008
        !          1799: #define BGE_EECTL_DATAOUT              0x00000010
        !          1800: #define BGE_EECTL_DATAIN               0x00000020
        !          1801:
        !          1802: /* MDI (MII/GMII) access register */
        !          1803: #define BGE_MDI_DATA                   0x00000001
        !          1804: #define BGE_MDI_DIR                    0x00000002
        !          1805: #define BGE_MDI_SEL                    0x00000004
        !          1806: #define BGE_MDI_CLK                    0x00000008
        !          1807:
        !          1808: #define BGE_MEMWIN_START               0x00008000
        !          1809: #define BGE_MEMWIN_END                 0x0000FFFF
        !          1810:
        !          1811:
        !          1812: #define BGE_MEMWIN_READ(pc, tag, x, val)                               \
        !          1813:        do {                                                            \
        !          1814:                pci_conf_write(pc, tag, BGE_PCI_MEMWIN_BASEADDR,        \
        !          1815:                    (0xFFFF0000 & x));                                  \
        !          1816:                val = CSR_READ_4(sc, BGE_MEMWIN_START + (x & 0xFFFF));  \
        !          1817:        } while(0)
        !          1818:
        !          1819: #define BGE_MEMWIN_WRITE(pc, tag, x, val)                              \
        !          1820:        do {                                                            \
        !          1821:                pci_conf_write(pc, tag, BGE_PCI_MEMWIN_BASEADDR,        \
        !          1822:                    (0xFFFF0000 & x));                                  \
        !          1823:                CSR_WRITE_4(sc, BGE_MEMWIN_START + (x & 0xFFFF), val);  \
        !          1824:        } while(0)
        !          1825:
        !          1826: /*
        !          1827:  * This magic number is written to the firmware mailbox at 0xb50
        !          1828:  * before a software reset is issued.  After the internal firmware
        !          1829:  * has completed its initialization it will write the opposite of
        !          1830:  * this value, ~BGE_MAGIC_NUMBER, to the same location, allowing the
        !          1831:  * driver to synchronize with the firmware.
        !          1832:  */
        !          1833: #define BGE_MAGIC_NUMBER                0x4B657654
        !          1834:
        !          1835: typedef struct {
        !          1836:        u_int32_t               bge_addr_hi;
        !          1837:        u_int32_t               bge_addr_lo;
        !          1838: } bge_hostaddr;
        !          1839: #define BGE_HOSTADDR(x,y)                                              \
        !          1840:        do {                                                            \
        !          1841:                (x).bge_addr_lo = ((u_int64_t) (y) & 0xffffffff);       \
        !          1842:                if (sizeof(bus_addr_t) == 8)                            \
        !          1843:                        (x).bge_addr_hi = ((u_int64_t) (y) >> 32);      \
        !          1844:                else                                                    \
        !          1845:                        (x).bge_addr_hi = 0;                            \
        !          1846:        } while(0)
        !          1847:
        !          1848: /* Ring control block structure */
        !          1849: struct bge_rcb {
        !          1850:        bge_hostaddr            bge_hostaddr;
        !          1851:        u_int32_t               bge_maxlen_flags;
        !          1852:        u_int32_t               bge_nicaddr;
        !          1853: };
        !          1854:
        !          1855: #define RCB_WRITE_4(sc, rcb, offset, val) \
        !          1856:        bus_space_write_4(sc->bge_btag, sc->bge_bhandle, \
        !          1857:                          rcb + offsetof(struct bge_rcb, offset), val)
        !          1858:
        !          1859: #define RCB_WRITE_2(sc, rcb, offset, val) \
        !          1860:        bus_space_write_2(sc->bge_btag, sc->bge_bhandle, \
        !          1861:                          rcb + offsetof(struct bge_rcb, offset), val)
        !          1862:
        !          1863: #define BGE_RCB_MAXLEN_FLAGS(maxlen, flags)    ((maxlen) << 16 | (flags))
        !          1864:
        !          1865: #define BGE_RCB_FLAG_USE_EXT_RX_BD     0x0001
        !          1866: #define BGE_RCB_FLAG_RING_DISABLED     0x0002
        !          1867:
        !          1868: struct bge_tx_bd {
        !          1869:        bge_hostaddr            bge_addr;
        !          1870: #if BYTE_ORDER == LITTLE_ENDIAN
        !          1871:        u_int16_t               bge_flags;
        !          1872:        u_int16_t               bge_len;
        !          1873:        u_int16_t               bge_vlan_tag;
        !          1874:        u_int16_t               bge_rsvd;
        !          1875: #else
        !          1876:        u_int16_t               bge_len;
        !          1877:        u_int16_t               bge_flags;
        !          1878:        u_int16_t               bge_rsvd;
        !          1879:        u_int16_t               bge_vlan_tag;
        !          1880: #endif
        !          1881: };
        !          1882:
        !          1883: #define BGE_TXBDFLAG_TCP_UDP_CSUM      0x0001
        !          1884: #define BGE_TXBDFLAG_IP_CSUM           0x0002
        !          1885: #define BGE_TXBDFLAG_END               0x0004
        !          1886: #define BGE_TXBDFLAG_IP_FRAG           0x0008
        !          1887: #define BGE_TXBDFLAG_IP_FRAG_END       0x0010
        !          1888: #define BGE_TXBDFLAG_VLAN_TAG          0x0040
        !          1889: #define BGE_TXBDFLAG_COAL_NOW          0x0080
        !          1890: #define BGE_TXBDFLAG_CPU_PRE_DMA       0x0100
        !          1891: #define BGE_TXBDFLAG_CPU_POST_DMA      0x0200
        !          1892: #define BGE_TXBDFLAG_INSERT_SRC_ADDR   0x1000
        !          1893: #define BGE_TXBDFLAG_CHOOSE_SRC_ADDR   0x6000
        !          1894: #define BGE_TXBDFLAG_NO_CRC            0x8000
        !          1895:
        !          1896: #define BGE_NIC_TXRING_ADDR(ringno, size)      \
        !          1897:        BGE_SEND_RING_1_TO_4 +                  \
        !          1898:        ((ringno * sizeof(struct bge_tx_bd) * size) / 4)
        !          1899:
        !          1900: struct bge_rx_bd {
        !          1901:        bge_hostaddr            bge_addr;
        !          1902: #if BYTE_ORDER == LITTLE_ENDIAN
        !          1903:        u_int16_t               bge_len;
        !          1904:        u_int16_t               bge_idx;
        !          1905:        u_int16_t               bge_flags;
        !          1906:        u_int16_t               bge_type;
        !          1907:        u_int16_t               bge_tcp_udp_csum;
        !          1908:        u_int16_t               bge_ip_csum;
        !          1909:        u_int16_t               bge_vlan_tag;
        !          1910:        u_int16_t               bge_error_flag;
        !          1911: #else
        !          1912:        u_int16_t               bge_idx;
        !          1913:        u_int16_t               bge_len;
        !          1914:        u_int16_t               bge_type;
        !          1915:        u_int16_t               bge_flags;
        !          1916:        u_int16_t               bge_ip_csum;
        !          1917:        u_int16_t               bge_tcp_udp_csum;
        !          1918:        u_int16_t               bge_error_flag;
        !          1919:        u_int16_t               bge_vlan_tag;
        !          1920: #endif
        !          1921:        u_int32_t               bge_rsvd;
        !          1922:        u_int32_t               bge_opaque;
        !          1923: };
        !          1924:
        !          1925: #define BGE_RXBDFLAG_END               0x0004
        !          1926: #define BGE_RXBDFLAG_JUMBO_RING                0x0020
        !          1927: #define BGE_RXBDFLAG_VLAN_TAG          0x0040
        !          1928: #define BGE_RXBDFLAG_ERROR             0x0400
        !          1929: #define BGE_RXBDFLAG_MINI_RING         0x0800
        !          1930: #define BGE_RXBDFLAG_IP_CSUM           0x1000
        !          1931: #define BGE_RXBDFLAG_TCP_UDP_CSUM      0x2000
        !          1932: #define BGE_RXBDFLAG_TCP_UDP_IS_TCP    0x4000
        !          1933:
        !          1934: #define BGE_RXERRFLAG_BAD_CRC          0x0001
        !          1935: #define BGE_RXERRFLAG_COLL_DETECT      0x0002
        !          1936: #define BGE_RXERRFLAG_LINK_LOST                0x0004
        !          1937: #define BGE_RXERRFLAG_PHY_DECODE_ERR   0x0008
        !          1938: #define BGE_RXERRFLAG_MAC_ABORT                0x0010
        !          1939: #define BGE_RXERRFLAG_RUNT             0x0020
        !          1940: #define BGE_RXERRFLAG_TRUNC_NO_RSRCS   0x0040
        !          1941: #define BGE_RXERRFLAG_GIANT            0x0080
        !          1942:
        !          1943: struct bge_sts_idx {
        !          1944: #if BYTE_ORDER == LITTLE_ENDIAN
        !          1945:        u_int16_t               bge_rx_prod_idx;
        !          1946:        u_int16_t               bge_tx_cons_idx;
        !          1947: #else
        !          1948:        u_int16_t               bge_tx_cons_idx;
        !          1949:        u_int16_t               bge_rx_prod_idx;
        !          1950: #endif
        !          1951: };
        !          1952:
        !          1953: struct bge_status_block {
        !          1954:        u_int32_t               bge_status;
        !          1955:        u_int32_t               bge_rsvd0;
        !          1956: #if BYTE_ORDER == LITTLE_ENDIAN
        !          1957:        u_int16_t               bge_rx_jumbo_cons_idx;
        !          1958:        u_int16_t               bge_rx_std_cons_idx;
        !          1959:        u_int16_t               bge_rx_mini_cons_idx;
        !          1960:        u_int16_t               bge_rsvd1;
        !          1961: #else
        !          1962:        u_int16_t               bge_rx_std_cons_idx;
        !          1963:        u_int16_t               bge_rx_jumbo_cons_idx;
        !          1964:        u_int16_t               bge_rsvd1;
        !          1965:        u_int16_t               bge_rx_mini_cons_idx;
        !          1966: #endif
        !          1967:        struct bge_sts_idx      bge_idx[16];
        !          1968: };
        !          1969:
        !          1970: #define BGE_TX_CONSIDX(x, i) x->bge_idx[i].bge_tx_considx
        !          1971: #define BGE_RX_PRODIDX(x, i) x->bge_idx[i].bge_rx_prodidx
        !          1972:
        !          1973: #define BGE_STATFLAG_UPDATED           0x00000001
        !          1974: #define BGE_STATFLAG_LINKSTATE_CHANGED 0x00000002
        !          1975: #define BGE_STATFLAG_ERROR             0x00000004
        !          1976:
        !          1977: /*
        !          1978:  * SysKonnect Subsystem IDs
        !          1979:  */
        !          1980: #define SK_SUBSYSID_9D41               0x4441
        !          1981:
        !          1982: /*
        !          1983:  * Dell PCI vendor ID
        !          1984:  */
        !          1985: #define DELL_VENDORID                  0x1028
        !          1986:
        !          1987: /*
        !          1988:  * Offset of MAC address inside EEPROM.
        !          1989:  */
        !          1990: #define BGE_EE_MAC_OFFSET              0x7C
        !          1991: #define BGE_EE_HWCFG_OFFSET            0xC8
        !          1992:
        !          1993: #define BGE_HWCFG_VOLTAGE              0x00000003
        !          1994: #define BGE_HWCFG_PHYLED_MODE          0x0000000C
        !          1995: #define BGE_HWCFG_MEDIA                        0x00000030
        !          1996: #define BGE_HWCFG_ASF                  0x00000080
        !          1997:
        !          1998: #define BGE_VOLTAGE_1POINT3            0x00000000
        !          1999: #define BGE_VOLTAGE_1POINT8            0x00000001
        !          2000:
        !          2001: #define BGE_PHYLEDMODE_UNSPEC          0x00000000
        !          2002: #define BGE_PHYLEDMODE_TRIPLELED       0x00000004
        !          2003: #define BGE_PHYLEDMODE_SINGLELED       0x00000008
        !          2004:
        !          2005: #define BGE_MEDIA_UNSPEC               0x00000000
        !          2006: #define BGE_MEDIA_COPPER               0x00000010
        !          2007: #define BGE_MEDIA_FIBER                        0x00000020
        !          2008:
        !          2009: #define BGE_PCI_READ_CMD               0x06000000
        !          2010: #define BGE_PCI_WRITE_CMD              0x70000000
        !          2011:
        !          2012: #define BGE_TICKS_PER_SEC              1000000
        !          2013:
        !          2014: /*
        !          2015:  * Ring size constants.
        !          2016:  */
        !          2017: #define BGE_EVENT_RING_CNT     256
        !          2018: #define BGE_CMD_RING_CNT       64
        !          2019: #define BGE_STD_RX_RING_CNT    512
        !          2020: #define BGE_JUMBO_RX_RING_CNT  256
        !          2021: #define BGE_MINI_RX_RING_CNT   1024
        !          2022: #define BGE_RETURN_RING_CNT    1024
        !          2023:
        !          2024: /* 5705 has smaller return ring size */
        !          2025: #define BGE_RETURN_RING_CNT_5705       512
        !          2026:
        !          2027: /*
        !          2028:  * Possible TX ring sizes.
        !          2029:  */
        !          2030: #define BGE_TX_RING_CNT_128    128
        !          2031: #define BGE_TX_RING_BASE_128   0x3800
        !          2032:
        !          2033: #define BGE_TX_RING_CNT_256    256
        !          2034: #define BGE_TX_RING_BASE_256   0x3000
        !          2035:
        !          2036: #define BGE_TX_RING_CNT_512    512
        !          2037: #define BGE_TX_RING_BASE_512   0x2000
        !          2038:
        !          2039: #define BGE_TX_RING_CNT                BGE_TX_RING_CNT_512
        !          2040: #define BGE_TX_RING_BASE       BGE_TX_RING_BASE_512
        !          2041:
        !          2042: /*
        !          2043:  * Tigon III statistics counters.
        !          2044:  */
        !          2045: /* Statistics maintained MAC Receive block. */
        !          2046: struct bge_rx_mac_stats {
        !          2047:        bge_hostaddr            ifHCInOctets;
        !          2048:        bge_hostaddr            Reserved1;
        !          2049:        bge_hostaddr            etherStatsFragments;
        !          2050:        bge_hostaddr            ifHCInUcastPkts;
        !          2051:        bge_hostaddr            ifHCInMulticastPkts;
        !          2052:        bge_hostaddr            ifHCInBroadcastPkts;
        !          2053:        bge_hostaddr            dot3StatsFCSErrors;
        !          2054:        bge_hostaddr            dot3StatsAlignmentErrors;
        !          2055:        bge_hostaddr            xonPauseFramesReceived;
        !          2056:        bge_hostaddr            xoffPauseFramesReceived;
        !          2057:        bge_hostaddr            macControlFramesReceived;
        !          2058:        bge_hostaddr            xoffStateEntered;
        !          2059:        bge_hostaddr            dot3StatsFramesTooLong;
        !          2060:        bge_hostaddr            etherStatsJabbers;
        !          2061:        bge_hostaddr            etherStatsUndersizePkts;
        !          2062:        bge_hostaddr            inRangeLengthError;
        !          2063:        bge_hostaddr            outRangeLengthError;
        !          2064:        bge_hostaddr            etherStatsPkts64Octets;
        !          2065:        bge_hostaddr            etherStatsPkts65Octetsto127Octets;
        !          2066:        bge_hostaddr            etherStatsPkts128Octetsto255Octets;
        !          2067:        bge_hostaddr            etherStatsPkts256Octetsto511Octets;
        !          2068:        bge_hostaddr            etherStatsPkts512Octetsto1023Octets;
        !          2069:        bge_hostaddr            etherStatsPkts1024Octetsto1522Octets;
        !          2070:        bge_hostaddr            etherStatsPkts1523Octetsto2047Octets;
        !          2071:        bge_hostaddr            etherStatsPkts2048Octetsto4095Octets;
        !          2072:        bge_hostaddr            etherStatsPkts4096Octetsto8191Octets;
        !          2073:        bge_hostaddr            etherStatsPkts8192Octetsto9022Octets;
        !          2074: };
        !          2075:
        !          2076: /* Statistics maintained MAC Transmit block. */
        !          2077: struct bge_tx_mac_stats {
        !          2078:        bge_hostaddr            ifHCOutOctets;
        !          2079:        bge_hostaddr            Reserved2;
        !          2080:        bge_hostaddr            etherStatsCollisions;
        !          2081:        bge_hostaddr            outXonSent;
        !          2082:        bge_hostaddr            outXoffSent;
        !          2083:        bge_hostaddr            flowControlDone;
        !          2084:        bge_hostaddr            dot3StatsInternalMacTransmitErrors;
        !          2085:        bge_hostaddr            dot3StatsSingleCollisionFrames;
        !          2086:        bge_hostaddr            dot3StatsMultipleCollisionFrames;
        !          2087:        bge_hostaddr            dot3StatsDeferredTransmissions;
        !          2088:        bge_hostaddr            Reserved3;
        !          2089:        bge_hostaddr            dot3StatsExcessiveCollisions;
        !          2090:        bge_hostaddr            dot3StatsLateCollisions;
        !          2091:        bge_hostaddr            dot3Collided2Times;
        !          2092:        bge_hostaddr            dot3Collided3Times;
        !          2093:        bge_hostaddr            dot3Collided4Times;
        !          2094:        bge_hostaddr            dot3Collided5Times;
        !          2095:        bge_hostaddr            dot3Collided6Times;
        !          2096:        bge_hostaddr            dot3Collided7Times;
        !          2097:        bge_hostaddr            dot3Collided8Times;
        !          2098:        bge_hostaddr            dot3Collided9Times;
        !          2099:        bge_hostaddr            dot3Collided10Times;
        !          2100:        bge_hostaddr            dot3Collided11Times;
        !          2101:        bge_hostaddr            dot3Collided12Times;
        !          2102:        bge_hostaddr            dot3Collided13Times;
        !          2103:        bge_hostaddr            dot3Collided14Times;
        !          2104:        bge_hostaddr            dot3Collided15Times;
        !          2105:        bge_hostaddr            ifHCOutUcastPkts;
        !          2106:        bge_hostaddr            ifHCOutMulticastPkts;
        !          2107:        bge_hostaddr            ifHCOutBroadcastPkts;
        !          2108:        bge_hostaddr            dot3StatsCarrierSenseErrors;
        !          2109:        bge_hostaddr            ifOutDiscards;
        !          2110:        bge_hostaddr            ifOutErrors;
        !          2111: };
        !          2112:
        !          2113: /* Stats counters access through registers */
        !          2114: struct bge_mac_stats_regs {
        !          2115:        u_int32_t               ifHCOutOctets;
        !          2116:        u_int32_t               Reserved0;
        !          2117:        u_int32_t               etherStatsCollisions;
        !          2118:        u_int32_t               outXonSent;
        !          2119:        u_int32_t               outXoffSent;
        !          2120:        u_int32_t               Reserved1;
        !          2121:        u_int32_t               dot3StatsInternalMacTransmitErrors;
        !          2122:        u_int32_t               dot3StatsSingleCollisionFrames;
        !          2123:        u_int32_t               dot3StatsMultipleCollisionFrames;
        !          2124:        u_int32_t               dot3StatsDeferredTransmissions;
        !          2125:        u_int32_t               Reserved2;
        !          2126:        u_int32_t               dot3StatsExcessiveCollisions;
        !          2127:        u_int32_t               dot3StatsLateCollisions;
        !          2128:        u_int32_t               Reserved3[14];
        !          2129:        u_int32_t               ifHCOutUcastPkts;
        !          2130:        u_int32_t               ifHCOutMulticastPkts;
        !          2131:        u_int32_t               ifHCOutBroadcastPkts;
        !          2132:        u_int32_t               Reserved4[2];
        !          2133:        u_int32_t               ifHCInOctets;
        !          2134:        u_int32_t               Reserved5;
        !          2135:        u_int32_t               etherStatsFragments;
        !          2136:        u_int32_t               ifHCInUcastPkts;
        !          2137:        u_int32_t               ifHCInMulticastPkts;
        !          2138:        u_int32_t               ifHCInBroadcastPkts;
        !          2139:        u_int32_t               dot3StatsFCSErrors;
        !          2140:        u_int32_t               dot3StatsAlignmentErrors;
        !          2141:        u_int32_t               xonPauseFramesReceived;
        !          2142:        u_int32_t               xoffPauseFramesReceived;
        !          2143:        u_int32_t               macControlFramesReceived;
        !          2144:        u_int32_t               xoffStateEntered;
        !          2145:        u_int32_t               dot3StatsFramesTooLong;
        !          2146:        u_int32_t               etherStatsJabbers;
        !          2147:        u_int32_t               etherStatsUndersizePkts;
        !          2148: };
        !          2149:
        !          2150: struct bge_stats {
        !          2151:        u_int8_t                Reserved0[256];
        !          2152:
        !          2153:        /* Statistics maintained by Receive MAC. */
        !          2154:        struct bge_rx_mac_stats rxstats;
        !          2155:
        !          2156:        bge_hostaddr            Unused1[37];
        !          2157:
        !          2158:        /* Statistics maintained by Transmit MAC. */
        !          2159:        struct bge_tx_mac_stats txstats;
        !          2160:
        !          2161:        bge_hostaddr            Unused2[31];
        !          2162:
        !          2163:        /* Statistics maintained by Receive List Placement. */
        !          2164:        bge_hostaddr            COSIfHCInPkts[16];
        !          2165:        bge_hostaddr            COSFramesDroppedDueToFilters;
        !          2166:        bge_hostaddr            nicDmaWriteQueueFull;
        !          2167:        bge_hostaddr            nicDmaWriteHighPriQueueFull;
        !          2168:        bge_hostaddr            nicNoMoreRxBDs;
        !          2169:        bge_hostaddr            ifInDiscards;
        !          2170:        bge_hostaddr            ifInErrors;
        !          2171:        bge_hostaddr            nicRecvThresholdHit;
        !          2172:
        !          2173:        bge_hostaddr            Unused3[9];
        !          2174:
        !          2175:        /* Statistics maintained by Send Data Initiator. */
        !          2176:        bge_hostaddr            COSIfHCOutPkts[16];
        !          2177:        bge_hostaddr            nicDmaReadQueueFull;
        !          2178:        bge_hostaddr            nicDmaReadHighPriQueueFull;
        !          2179:        bge_hostaddr            nicSendDataCompQueueFull;
        !          2180:
        !          2181:        /* Statistics maintained by Host Coalescing. */
        !          2182:        bge_hostaddr            nicRingSetSendProdIndex;
        !          2183:        bge_hostaddr            nicRingStatusUpdate;
        !          2184:        bge_hostaddr            nicInterrupts;
        !          2185:        bge_hostaddr            nicAvoidedInterrupts;
        !          2186:        bge_hostaddr            nicSendThresholdHit;
        !          2187:
        !          2188:        u_int8_t                Reserved4[320];
        !          2189: };
        !          2190:
        !          2191: /*
        !          2192:  * Tigon general information block. This resides in host memory
        !          2193:  * and contains the status counters, ring control blocks and
        !          2194:  * producer pointers.
        !          2195:  */
        !          2196:
        !          2197: struct bge_gib {
        !          2198:        struct bge_stats        bge_stats;
        !          2199:        struct bge_rcb          bge_tx_rcb[16];
        !          2200:        struct bge_rcb          bge_std_rx_rcb;
        !          2201:        struct bge_rcb          bge_jumbo_rx_rcb;
        !          2202:        struct bge_rcb          bge_mini_rx_rcb;
        !          2203:        struct bge_rcb          bge_return_rcb;
        !          2204: };
        !          2205:
        !          2206: /*
        !          2207:  * NOTE!  On the Alpha, we have an alignment constraint.
        !          2208:  * The first thing in the packet is a 14-byte Ethernet header.
        !          2209:  * This means that the packet is misaligned.  To compensate,
        !          2210:  * we actually offset the data 2 bytes into the cluster.  This
        !          2211:  * alignes the packet after the Ethernet header at a 32-bit
        !          2212:  * boundary.
        !          2213:  */
        !          2214:
        !          2215: #define BGE_JUMBO_FRAMELEN     9018
        !          2216: #define BGE_JUMBO_MTU          (BGE_JUMBO_FRAMELEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
        !          2217: #define BGE_PAGE_SIZE          PAGE_SIZE
        !          2218:
        !          2219: /*
        !          2220:  * Other utility macros.
        !          2221:  */
        !          2222: #define BGE_INC(x, y)  (x) = (x + 1) % y
        !          2223:
        !          2224: /*
        !          2225:  * Vital product data and structures.
        !          2226:  */
        !          2227: #define BGE_VPD_FLAG           0x8000
        !          2228:
        !          2229: #define VPD_RES_ID     0x82    /* ID string */
        !          2230: #define VPD_RES_READ   0x90    /* start of read only area */
        !          2231: #define VPD_RES_WRITE  0x81    /* start of read/write area */
        !          2232: #define VPD_RES_END    0x78    /* end tag */
        !          2233:
        !          2234: /*
        !          2235:  * Register access macros. The Tigon always uses memory mapped register
        !          2236:  * accesses and all registers must be accessed with 32 bit operations.
        !          2237:  */
        !          2238:
        !          2239: #define CSR_WRITE_4(sc, reg, val)      \
        !          2240:        bus_space_write_4(sc->bge_btag, sc->bge_bhandle, reg, val)
        !          2241:
        !          2242: #define CSR_READ_4(sc, reg)            \
        !          2243:        bus_space_read_4(sc->bge_btag, sc->bge_bhandle, reg)
        !          2244:
        !          2245: #define BGE_SETBIT(sc, reg, x) \
        !          2246:        CSR_WRITE_4(sc, reg, (CSR_READ_4(sc, reg) | (x)))
        !          2247: #define BGE_CLRBIT(sc, reg, x) \
        !          2248:        CSR_WRITE_4(sc, reg, (CSR_READ_4(sc, reg) & ~(x)))
        !          2249:
        !          2250: #define PCI_SETBIT(pc, tag, reg, x)    \
        !          2251:        pci_conf_write(pc, tag, reg, (pci_conf_read(pc, tag, reg) | (x)))
        !          2252: #define PCI_CLRBIT(pc, tag, reg, x)    \
        !          2253:        pci_conf_write(pc, tag, reg, (pci_conf_read(pc, tag, reg) & ~(x)))
        !          2254:
        !          2255: /*
        !          2256:  * Memory management stuff. Note: the SSLOTS, MSLOTS and JSLOTS
        !          2257:  * values are tuneable. They control the actual amount of buffers
        !          2258:  * allocated for the standard, mini and jumbo receive rings.
        !          2259:  */
        !          2260:
        !          2261: #define BGE_SSLOTS     256
        !          2262: #define BGE_MSLOTS     256
        !          2263: #define BGE_JSLOTS     384
        !          2264:
        !          2265: #define BGE_JRAWLEN (BGE_JUMBO_FRAMELEN + ETHER_ALIGN)
        !          2266: #define BGE_JLEN (BGE_JRAWLEN + (sizeof(u_int64_t) - \
        !          2267:        (BGE_JRAWLEN % sizeof(u_int64_t))))
        !          2268: #define BGE_JPAGESZ PAGE_SIZE
        !          2269: #define BGE_RESID (BGE_JPAGESZ - (BGE_JLEN * BGE_JSLOTS) % BGE_JPAGESZ)
        !          2270: #define BGE_JMEM ((BGE_JLEN * BGE_JSLOTS) + BGE_RESID)
        !          2271:
        !          2272: /*
        !          2273:  * Ring structures. Most of these reside in host memory and we tell
        !          2274:  * the NIC where they are via the ring control blocks. The exceptions
        !          2275:  * are the tx and command rings, which live in NIC memory and which
        !          2276:  * we access via the shared memory window.
        !          2277:  */
        !          2278: struct bge_ring_data {
        !          2279:        struct bge_rx_bd        bge_rx_std_ring[BGE_STD_RX_RING_CNT];
        !          2280:        struct bge_rx_bd        bge_rx_jumbo_ring[BGE_JUMBO_RX_RING_CNT];
        !          2281:        struct bge_rx_bd        bge_rx_return_ring[BGE_RETURN_RING_CNT];
        !          2282:        struct bge_tx_bd        bge_tx_ring[BGE_TX_RING_CNT];
        !          2283:        struct bge_status_block bge_status_block;
        !          2284:        struct bge_tx_desc      *bge_tx_ring_nic;/* pointer to shared mem */
        !          2285:        struct bge_cmd_desc     *bge_cmd_ring;  /* pointer to shared mem */
        !          2286:        struct bge_gib          bge_info;
        !          2287: };
        !          2288:
        !          2289: #define BGE_RING_DMA_ADDR(sc, offset) \
        !          2290:        ((sc)->bge_ring_map->dm_segs[0].ds_addr + \
        !          2291:        offsetof(struct bge_ring_data, offset))
        !          2292:
        !          2293: /*
        !          2294:  * Number of DMA segments in a TxCB. Note that this is carefully
        !          2295:  * chosen to make the total struct size an even power of two. It's
        !          2296:  * critical that no TxCB be split across a page boundary since
        !          2297:  * no attempt is made to allocate physically contiguous memory.
        !          2298:  *
        !          2299:  */
        !          2300: #ifdef __LP64__
        !          2301: #define BGE_NTXSEG      30
        !          2302: #else
        !          2303: #define BGE_NTXSEG      31
        !          2304: #endif
        !          2305:
        !          2306: /*
        !          2307:  * Mbuf pointers. We need these to keep track of the virtual addresses
        !          2308:  * of our mbuf chains since we can only convert from physical to virtual,
        !          2309:  * not the other way around.
        !          2310:  */
        !          2311: struct bge_chain_data {
        !          2312:        struct mbuf             *bge_tx_chain[BGE_TX_RING_CNT];
        !          2313:        struct mbuf             *bge_rx_std_chain[BGE_STD_RX_RING_CNT];
        !          2314:        struct mbuf             *bge_rx_jumbo_chain[BGE_JUMBO_RX_RING_CNT];
        !          2315:        struct mbuf             *bge_rx_mini_chain[BGE_MINI_RX_RING_CNT];
        !          2316:        bus_dmamap_t            bge_tx_map[BGE_TX_RING_CNT];
        !          2317:        bus_dmamap_t            bge_rx_std_map[BGE_STD_RX_RING_CNT];
        !          2318:        bus_dmamap_t            bge_rx_jumbo_map;
        !          2319:        /* Stick the jumbo mem management stuff here too. */
        !          2320:        caddr_t                 bge_jslots[BGE_JSLOTS];
        !          2321:        void                    *bge_jumbo_buf;
        !          2322: };
        !          2323:
        !          2324: #define BGE_JUMBO_DMA_ADDR(sc, m) \
        !          2325:        ((sc)->bge_cdata.bge_rx_jumbo_map->dm_segs[0].ds_addr + \
        !          2326:         (mtod((m), char *) - (char *)(sc)->bge_cdata.bge_jumbo_buf))
        !          2327:
        !          2328: struct bge_type {
        !          2329:        u_int16_t               bge_vid;
        !          2330:        u_int16_t               bge_did;
        !          2331:        char                    *bge_name;
        !          2332: };
        !          2333:
        !          2334: #define BGE_TIMEOUT            100000
        !          2335: #define BGE_TXCONS_UNSET               0xFFFF  /* impossible value */
        !          2336:
        !          2337: struct bge_jpool_entry {
        !          2338:        int                             slot;
        !          2339:        SLIST_ENTRY(bge_jpool_entry)    jpool_entries;
        !          2340: };
        !          2341:
        !          2342: struct txdmamap_pool_entry {
        !          2343:        bus_dmamap_t dmamap;
        !          2344:        SLIST_ENTRY(txdmamap_pool_entry) link;
        !          2345: };
        !          2346:
        !          2347: #define ASF_ENABLE             1
        !          2348: #define ASF_NEW_HANDSHAKE      2
        !          2349: #define ASF_STACKUP            4
        !          2350:
        !          2351: struct bge_softc {
        !          2352:        struct device           bge_dev;
        !          2353:        struct arpcom           arpcom;         /* interface info */
        !          2354:        bus_space_handle_t      bge_bhandle;
        !          2355:        bus_space_tag_t         bge_btag;
        !          2356:        void                    *bge_intrhand;
        !          2357:        struct pci_attach_args  bge_pa;
        !          2358:        struct mii_data         bge_mii;
        !          2359:        struct ifmedia          bge_ifmedia;    /* media info */
        !          2360:        u_int32_t               bge_flags;
        !          2361: #define BGE_TXRING_VALID       0x00000001
        !          2362: #define BGE_RXRING_VALID       0x00000002
        !          2363: #define BGE_JUMBO_RXRING_VALID 0x00000004
        !          2364: #define BGE_TBI                        0x00000008
        !          2365: #define BGE_RX_ALIGNBUG                0x00000010
        !          2366: #define BGE_NO_3LED            0x00000020
        !          2367: #define BGE_PCIX               0x00000040
        !          2368: #define BGE_PCIE               0x00000080
        !          2369: #define BGE_ASF_MODE           0x00000100
        !          2370: #define BGE_NO_EEPROM          0x00000200
        !          2371: #define BGE_JUMBO_CAP          0x00000400
        !          2372: #define BGE_10_100_ONLY                0x00000800
        !          2373: #define BGE_PHY_ADC_BUG                0x00001000
        !          2374: #define BGE_PHY_5704_A0_BUG    0x00002000
        !          2375: #define BGE_PHY_JITTER_BUG     0x00004000
        !          2376: #define BGE_PHY_BER_BUG                0x00008000
        !          2377: #define BGE_PHY_ADJUST_TRIM    0x00010000
        !          2378: #define BGE_NO_ETH_WIRE_SPEED  0x00020000
        !          2379:
        !          2380:        bus_dma_tag_t           bge_dmatag;
        !          2381:        u_int32_t               bge_chipid;
        !          2382:        struct bge_ring_data    *bge_rdata;     /* rings */
        !          2383:        struct bge_chain_data   bge_cdata;      /* mbufs */
        !          2384:        bus_dmamap_t            bge_ring_map;
        !          2385:        u_int16_t               bge_tx_saved_considx;
        !          2386:        u_int16_t               bge_rx_saved_considx;
        !          2387:        u_int16_t               bge_ev_saved_considx;
        !          2388:        u_int16_t               bge_return_ring_cnt;
        !          2389:        u_int32_t               bge_tx_prodidx;
        !          2390:        u_int16_t               bge_std;        /* current std ring head */
        !          2391:        u_int16_t               bge_jumbo;      /* current jumo ring head */
        !          2392:        SLIST_HEAD(__bge_jfreehead, bge_jpool_entry)    bge_jfree_listhead;
        !          2393:        SLIST_HEAD(__bge_jinusehead, bge_jpool_entry)   bge_jinuse_listhead;
        !          2394:        u_int32_t               bge_stat_ticks;
        !          2395:        u_int32_t               bge_rx_coal_ticks;
        !          2396:        u_int32_t               bge_tx_coal_ticks;
        !          2397:        u_int32_t               bge_rx_max_coal_bds;
        !          2398:        u_int32_t               bge_tx_max_coal_bds;
        !          2399:        u_int32_t               bge_tx_buf_ratio;
        !          2400:        int                     bge_flowflags;
        !          2401:        int                     bge_if_flags;
        !          2402:        int                     bge_txcnt;
        !          2403:        int                     bge_link;       /* link state */
        !          2404:        int                     bge_link_evt;   /* pending link event */
        !          2405:        struct timeout          bge_timeout;
        !          2406:        void                    *sc_powerhook;
        !          2407:        void                    *sc_shutdownhook;
        !          2408:        u_long                  bge_rx_discards;
        !          2409:        u_long                  bge_tx_discards;
        !          2410:        u_long                  bge_tx_collisions;
        !          2411:        SLIST_HEAD(, txdmamap_pool_entry) txdma_list;
        !          2412:        struct txdmamap_pool_entry *txdma[BGE_TX_RING_CNT];
        !          2413: };

CVSweb