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