ia64/linux-2.6.18-xen.hg

annotate drivers/net/tg3.h @ 897:329ea0ccb344

balloon: try harder to balloon up under memory pressure.

Currently if the balloon driver is unable to increase the guest's
reservation it assumes the failure was due to reaching its full
allocation, gives up on the ballooning operation and records the limit
it reached as the "hard limit". The driver will not try again until
the target is set again (even to the same value).

However it is possible that ballooning has in fact failed due to
memory pressure in the host and therefore it is desirable to keep
attempting to reach the target in case memory becomes available. The
most likely scenario is that some guests are ballooning down while
others are ballooning up and therefore there is temporary memory
pressure while things stabilise. You would not expect a well behaved
toolstack to ask a domain to balloon to more than its allocation nor
would you expect it to deliberately over-commit memory by setting
balloon targets which exceed the total host memory.

This patch drops the concept of a hard limit and causes the balloon
driver to retry increasing the reservation on a timer in the same
manner as when decreasing the reservation.

Also if we partially succeed in increasing the reservation
(i.e. receive less pages than we asked for) then we may as well keep
those pages rather than returning them to Xen.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
author Keir Fraser <keir.fraser@citrix.com>
date Fri Jun 05 14:01:20 2009 +0100 (2009-06-05)
parents 831230e53067
children
rev   line source
ian@0 1 /* $Id: tg3.h,v 1.37.2.32 2002/03/11 12:18:18 davem Exp $
ian@0 2 * tg3.h: Definitions for Broadcom Tigon3 ethernet driver.
ian@0 3 *
ian@0 4 * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller (davem@redhat.com)
ian@0 5 * Copyright (C) 2001 Jeff Garzik (jgarzik@pobox.com)
ian@0 6 * Copyright (C) 2004 Sun Microsystems Inc.
ian@0 7 */
ian@0 8
ian@0 9 #ifndef _T3_H
ian@0 10 #define _T3_H
ian@0 11
ian@0 12 #define TG3_64BIT_REG_HIGH 0x00UL
ian@0 13 #define TG3_64BIT_REG_LOW 0x04UL
ian@0 14
ian@0 15 /* Descriptor block info. */
ian@0 16 #define TG3_BDINFO_HOST_ADDR 0x0UL /* 64-bit */
ian@0 17 #define TG3_BDINFO_MAXLEN_FLAGS 0x8UL /* 32-bit */
ian@0 18 #define BDINFO_FLAGS_USE_EXT_RECV 0x00000001 /* ext rx_buffer_desc */
ian@0 19 #define BDINFO_FLAGS_DISABLED 0x00000002
ian@0 20 #define BDINFO_FLAGS_MAXLEN_MASK 0xffff0000
ian@0 21 #define BDINFO_FLAGS_MAXLEN_SHIFT 16
ian@0 22 #define TG3_BDINFO_NIC_ADDR 0xcUL /* 32-bit */
ian@0 23 #define TG3_BDINFO_SIZE 0x10UL
ian@0 24
ian@0 25 #define RX_COPY_THRESHOLD 256
ian@0 26
ian@0 27 #define RX_STD_MAX_SIZE 1536
ian@0 28 #define RX_STD_MAX_SIZE_5705 512
ian@0 29 #define RX_JUMBO_MAX_SIZE 0xdeadbeef /* XXX */
ian@0 30
ian@0 31 /* First 256 bytes are a mirror of PCI config space. */
ian@0 32 #define TG3PCI_VENDOR 0x00000000
ian@0 33 #define TG3PCI_VENDOR_BROADCOM 0x14e4
ian@0 34 #define TG3PCI_DEVICE 0x00000002
ian@0 35 #define TG3PCI_DEVICE_TIGON3_1 0x1644 /* BCM5700 */
ian@0 36 #define TG3PCI_DEVICE_TIGON3_2 0x1645 /* BCM5701 */
ian@0 37 #define TG3PCI_DEVICE_TIGON3_3 0x1646 /* BCM5702 */
ian@0 38 #define TG3PCI_DEVICE_TIGON3_4 0x1647 /* BCM5703 */
ian@0 39 #define TG3PCI_COMMAND 0x00000004
ian@0 40 #define TG3PCI_STATUS 0x00000006
ian@0 41 #define TG3PCI_CCREVID 0x00000008
ian@0 42 #define TG3PCI_CACHELINESZ 0x0000000c
ian@0 43 #define TG3PCI_LATTIMER 0x0000000d
ian@0 44 #define TG3PCI_HEADERTYPE 0x0000000e
ian@0 45 #define TG3PCI_BIST 0x0000000f
ian@0 46 #define TG3PCI_BASE0_LOW 0x00000010
ian@0 47 #define TG3PCI_BASE0_HIGH 0x00000014
ian@0 48 /* 0x18 --> 0x2c unused */
ian@0 49 #define TG3PCI_SUBSYSVENID 0x0000002c
ian@0 50 #define TG3PCI_SUBSYSID 0x0000002e
ian@0 51 #define TG3PCI_ROMADDR 0x00000030
ian@0 52 #define TG3PCI_CAPLIST 0x00000034
ian@0 53 /* 0x35 --> 0x3c unused */
ian@0 54 #define TG3PCI_IRQ_LINE 0x0000003c
ian@0 55 #define TG3PCI_IRQ_PIN 0x0000003d
ian@0 56 #define TG3PCI_MIN_GNT 0x0000003e
ian@0 57 #define TG3PCI_MAX_LAT 0x0000003f
ian@0 58 #define TG3PCI_X_CAPS 0x00000040
ian@0 59 #define PCIX_CAPS_RELAXED_ORDERING 0x00020000
ian@0 60 #define PCIX_CAPS_SPLIT_MASK 0x00700000
ian@0 61 #define PCIX_CAPS_SPLIT_SHIFT 20
ian@0 62 #define PCIX_CAPS_BURST_MASK 0x000c0000
ian@0 63 #define PCIX_CAPS_BURST_SHIFT 18
ian@0 64 #define PCIX_CAPS_MAX_BURST_CPIOB 2
ian@0 65 #define TG3PCI_PM_CAP_PTR 0x00000041
ian@0 66 #define TG3PCI_X_COMMAND 0x00000042
ian@0 67 #define TG3PCI_X_STATUS 0x00000044
ian@0 68 #define TG3PCI_PM_CAP_ID 0x00000048
ian@0 69 #define TG3PCI_VPD_CAP_PTR 0x00000049
ian@0 70 #define TG3PCI_PM_CAPS 0x0000004a
ian@0 71 #define TG3PCI_PM_CTRL_STAT 0x0000004c
ian@0 72 #define TG3PCI_BR_SUPP_EXT 0x0000004e
ian@0 73 #define TG3PCI_PM_DATA 0x0000004f
ian@0 74 #define TG3PCI_VPD_CAP_ID 0x00000050
ian@0 75 #define TG3PCI_MSI_CAP_PTR 0x00000051
ian@0 76 #define TG3PCI_VPD_ADDR_FLAG 0x00000052
ian@0 77 #define VPD_ADDR_FLAG_WRITE 0x00008000
ian@0 78 #define TG3PCI_VPD_DATA 0x00000054
ian@0 79 #define TG3PCI_MSI_CAP_ID 0x00000058
ian@0 80 #define TG3PCI_NXT_CAP_PTR 0x00000059
ian@0 81 #define TG3PCI_MSI_CTRL 0x0000005a
ian@0 82 #define TG3PCI_MSI_ADDR_LOW 0x0000005c
ian@0 83 #define TG3PCI_MSI_ADDR_HIGH 0x00000060
ian@0 84 #define TG3PCI_MSI_DATA 0x00000064
ian@0 85 /* 0x66 --> 0x68 unused */
ian@0 86 #define TG3PCI_MISC_HOST_CTRL 0x00000068
ian@0 87 #define MISC_HOST_CTRL_CLEAR_INT 0x00000001
ian@0 88 #define MISC_HOST_CTRL_MASK_PCI_INT 0x00000002
ian@0 89 #define MISC_HOST_CTRL_BYTE_SWAP 0x00000004
ian@0 90 #define MISC_HOST_CTRL_WORD_SWAP 0x00000008
ian@0 91 #define MISC_HOST_CTRL_PCISTATE_RW 0x00000010
ian@0 92 #define MISC_HOST_CTRL_CLKREG_RW 0x00000020
ian@0 93 #define MISC_HOST_CTRL_REGWORD_SWAP 0x00000040
ian@0 94 #define MISC_HOST_CTRL_INDIR_ACCESS 0x00000080
ian@0 95 #define MISC_HOST_CTRL_IRQ_MASK_MODE 0x00000100
ian@0 96 #define MISC_HOST_CTRL_TAGGED_STATUS 0x00000200
ian@0 97 #define MISC_HOST_CTRL_CHIPREV 0xffff0000
ian@0 98 #define MISC_HOST_CTRL_CHIPREV_SHIFT 16
ian@0 99 #define GET_CHIP_REV_ID(MISC_HOST_CTRL) \
ian@0 100 (((MISC_HOST_CTRL) & MISC_HOST_CTRL_CHIPREV) >> \
ian@0 101 MISC_HOST_CTRL_CHIPREV_SHIFT)
ian@0 102 #define CHIPREV_ID_5700_A0 0x7000
ian@0 103 #define CHIPREV_ID_5700_A1 0x7001
ian@0 104 #define CHIPREV_ID_5700_B0 0x7100
ian@0 105 #define CHIPREV_ID_5700_B1 0x7101
ian@0 106 #define CHIPREV_ID_5700_B3 0x7102
ian@0 107 #define CHIPREV_ID_5700_ALTIMA 0x7104
ian@0 108 #define CHIPREV_ID_5700_C0 0x7200
ian@0 109 #define CHIPREV_ID_5701_A0 0x0000
ian@0 110 #define CHIPREV_ID_5701_B0 0x0100
ian@0 111 #define CHIPREV_ID_5701_B2 0x0102
ian@0 112 #define CHIPREV_ID_5701_B5 0x0105
ian@0 113 #define CHIPREV_ID_5703_A0 0x1000
ian@0 114 #define CHIPREV_ID_5703_A1 0x1001
ian@0 115 #define CHIPREV_ID_5703_A2 0x1002
ian@0 116 #define CHIPREV_ID_5703_A3 0x1003
ian@0 117 #define CHIPREV_ID_5704_A0 0x2000
ian@0 118 #define CHIPREV_ID_5704_A1 0x2001
ian@0 119 #define CHIPREV_ID_5704_A2 0x2002
ian@0 120 #define CHIPREV_ID_5704_A3 0x2003
ian@0 121 #define CHIPREV_ID_5705_A0 0x3000
ian@0 122 #define CHIPREV_ID_5705_A1 0x3001
ian@0 123 #define CHIPREV_ID_5705_A2 0x3002
ian@0 124 #define CHIPREV_ID_5705_A3 0x3003
ian@0 125 #define CHIPREV_ID_5750_A0 0x4000
ian@0 126 #define CHIPREV_ID_5750_A1 0x4001
ian@0 127 #define CHIPREV_ID_5750_A3 0x4003
ian@0 128 #define CHIPREV_ID_5750_C2 0x4202
ian@0 129 #define CHIPREV_ID_5752_A0_HW 0x5000
ian@0 130 #define CHIPREV_ID_5752_A0 0x6000
ian@0 131 #define CHIPREV_ID_5752_A1 0x6001
ian@0 132 #define GET_ASIC_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 12)
ian@0 133 #define ASIC_REV_5700 0x07
ian@0 134 #define ASIC_REV_5701 0x00
ian@0 135 #define ASIC_REV_5703 0x01
ian@0 136 #define ASIC_REV_5704 0x02
ian@0 137 #define ASIC_REV_5705 0x03
ian@0 138 #define ASIC_REV_5750 0x04
ian@0 139 #define ASIC_REV_5752 0x06
ian@0 140 #define ASIC_REV_5780 0x08
ian@0 141 #define ASIC_REV_5714 0x09
ian@0 142 #define ASIC_REV_5755 0x0a
ian@0 143 #define ASIC_REV_5787 0x0b
ian@0 144 #define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8)
ian@0 145 #define CHIPREV_5700_AX 0x70
ian@0 146 #define CHIPREV_5700_BX 0x71
ian@0 147 #define CHIPREV_5700_CX 0x72
ian@0 148 #define CHIPREV_5701_AX 0x00
ian@0 149 #define CHIPREV_5703_AX 0x10
ian@0 150 #define CHIPREV_5704_AX 0x20
ian@0 151 #define CHIPREV_5704_BX 0x21
ian@0 152 #define CHIPREV_5750_AX 0x40
ian@0 153 #define CHIPREV_5750_BX 0x41
ian@0 154 #define GET_METAL_REV(CHIP_REV_ID) ((CHIP_REV_ID) & 0xff)
ian@0 155 #define METAL_REV_A0 0x00
ian@0 156 #define METAL_REV_A1 0x01
ian@0 157 #define METAL_REV_B0 0x00
ian@0 158 #define METAL_REV_B1 0x01
ian@0 159 #define METAL_REV_B2 0x02
ian@0 160 #define TG3PCI_DMA_RW_CTRL 0x0000006c
ian@0 161 #define DMA_RWCTRL_MIN_DMA 0x000000ff
ian@0 162 #define DMA_RWCTRL_MIN_DMA_SHIFT 0
ian@0 163 #define DMA_RWCTRL_READ_BNDRY_MASK 0x00000700
ian@0 164 #define DMA_RWCTRL_READ_BNDRY_DISAB 0x00000000
ian@0 165 #define DMA_RWCTRL_READ_BNDRY_16 0x00000100
ian@0 166 #define DMA_RWCTRL_READ_BNDRY_128_PCIX 0x00000100
ian@0 167 #define DMA_RWCTRL_READ_BNDRY_32 0x00000200
ian@0 168 #define DMA_RWCTRL_READ_BNDRY_256_PCIX 0x00000200
ian@0 169 #define DMA_RWCTRL_READ_BNDRY_64 0x00000300
ian@0 170 #define DMA_RWCTRL_READ_BNDRY_384_PCIX 0x00000300
ian@0 171 #define DMA_RWCTRL_READ_BNDRY_128 0x00000400
ian@0 172 #define DMA_RWCTRL_READ_BNDRY_256 0x00000500
ian@0 173 #define DMA_RWCTRL_READ_BNDRY_512 0x00000600
ian@0 174 #define DMA_RWCTRL_READ_BNDRY_1024 0x00000700
ian@0 175 #define DMA_RWCTRL_WRITE_BNDRY_MASK 0x00003800
ian@0 176 #define DMA_RWCTRL_WRITE_BNDRY_DISAB 0x00000000
ian@0 177 #define DMA_RWCTRL_WRITE_BNDRY_16 0x00000800
ian@0 178 #define DMA_RWCTRL_WRITE_BNDRY_128_PCIX 0x00000800
ian@0 179 #define DMA_RWCTRL_WRITE_BNDRY_32 0x00001000
ian@0 180 #define DMA_RWCTRL_WRITE_BNDRY_256_PCIX 0x00001000
ian@0 181 #define DMA_RWCTRL_WRITE_BNDRY_64 0x00001800
ian@0 182 #define DMA_RWCTRL_WRITE_BNDRY_384_PCIX 0x00001800
ian@0 183 #define DMA_RWCTRL_WRITE_BNDRY_128 0x00002000
ian@0 184 #define DMA_RWCTRL_WRITE_BNDRY_256 0x00002800
ian@0 185 #define DMA_RWCTRL_WRITE_BNDRY_512 0x00003000
ian@0 186 #define DMA_RWCTRL_WRITE_BNDRY_1024 0x00003800
ian@0 187 #define DMA_RWCTRL_ONE_DMA 0x00004000
ian@0 188 #define DMA_RWCTRL_READ_WATER 0x00070000
ian@0 189 #define DMA_RWCTRL_READ_WATER_SHIFT 16
ian@0 190 #define DMA_RWCTRL_WRITE_WATER 0x00380000
ian@0 191 #define DMA_RWCTRL_WRITE_WATER_SHIFT 19
ian@0 192 #define DMA_RWCTRL_USE_MEM_READ_MULT 0x00400000
ian@0 193 #define DMA_RWCTRL_ASSERT_ALL_BE 0x00800000
ian@0 194 #define DMA_RWCTRL_PCI_READ_CMD 0x0f000000
ian@0 195 #define DMA_RWCTRL_PCI_READ_CMD_SHIFT 24
ian@0 196 #define DMA_RWCTRL_PCI_WRITE_CMD 0xf0000000
ian@0 197 #define DMA_RWCTRL_PCI_WRITE_CMD_SHIFT 28
ian@0 198 #define DMA_RWCTRL_WRITE_BNDRY_64_PCIE 0x10000000
ian@0 199 #define DMA_RWCTRL_WRITE_BNDRY_128_PCIE 0x30000000
ian@0 200 #define DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE 0x70000000
ian@0 201 #define TG3PCI_PCISTATE 0x00000070
ian@0 202 #define PCISTATE_FORCE_RESET 0x00000001
ian@0 203 #define PCISTATE_INT_NOT_ACTIVE 0x00000002
ian@0 204 #define PCISTATE_CONV_PCI_MODE 0x00000004
ian@0 205 #define PCISTATE_BUS_SPEED_HIGH 0x00000008
ian@0 206 #define PCISTATE_BUS_32BIT 0x00000010
ian@0 207 #define PCISTATE_ROM_ENABLE 0x00000020
ian@0 208 #define PCISTATE_ROM_RETRY_ENABLE 0x00000040
ian@0 209 #define PCISTATE_FLAT_VIEW 0x00000100
ian@0 210 #define PCISTATE_RETRY_SAME_DMA 0x00002000
ian@0 211 #define TG3PCI_CLOCK_CTRL 0x00000074
ian@0 212 #define CLOCK_CTRL_CORECLK_DISABLE 0x00000200
ian@0 213 #define CLOCK_CTRL_RXCLK_DISABLE 0x00000400
ian@0 214 #define CLOCK_CTRL_TXCLK_DISABLE 0x00000800
ian@0 215 #define CLOCK_CTRL_ALTCLK 0x00001000
ian@0 216 #define CLOCK_CTRL_PWRDOWN_PLL133 0x00008000
ian@0 217 #define CLOCK_CTRL_44MHZ_CORE 0x00040000
ian@0 218 #define CLOCK_CTRL_625_CORE 0x00100000
ian@0 219 #define CLOCK_CTRL_FORCE_CLKRUN 0x00200000
ian@0 220 #define CLOCK_CTRL_CLKRUN_OENABLE 0x00400000
ian@0 221 #define CLOCK_CTRL_DELAY_PCI_GRANT 0x80000000
ian@0 222 #define TG3PCI_REG_BASE_ADDR 0x00000078
ian@0 223 #define TG3PCI_MEM_WIN_BASE_ADDR 0x0000007c
ian@0 224 #define TG3PCI_REG_DATA 0x00000080
ian@0 225 #define TG3PCI_MEM_WIN_DATA 0x00000084
ian@0 226 #define TG3PCI_MODE_CTRL 0x00000088
ian@0 227 #define TG3PCI_MISC_CFG 0x0000008c
ian@0 228 #define TG3PCI_MISC_LOCAL_CTRL 0x00000090
ian@0 229 /* 0x94 --> 0x98 unused */
ian@0 230 #define TG3PCI_STD_RING_PROD_IDX 0x00000098 /* 64-bit */
ian@0 231 #define TG3PCI_RCV_RET_RING_CON_IDX 0x000000a0 /* 64-bit */
ian@0 232 #define TG3PCI_SND_PROD_IDX 0x000000a8 /* 64-bit */
ian@0 233 /* 0xb0 --> 0xb8 unused */
ian@0 234 #define TG3PCI_DUAL_MAC_CTRL 0x000000b8
ian@0 235 #define DUAL_MAC_CTRL_CH_MASK 0x00000003
ian@0 236 #define DUAL_MAC_CTRL_ID 0x00000004
ian@0 237 /* 0xbc --> 0x100 unused */
ian@0 238
ian@0 239 /* 0x100 --> 0x200 unused */
ian@0 240
ian@0 241 /* Mailbox registers */
ian@0 242 #define MAILBOX_INTERRUPT_0 0x00000200 /* 64-bit */
ian@0 243 #define MAILBOX_INTERRUPT_1 0x00000208 /* 64-bit */
ian@0 244 #define MAILBOX_INTERRUPT_2 0x00000210 /* 64-bit */
ian@0 245 #define MAILBOX_INTERRUPT_3 0x00000218 /* 64-bit */
ian@0 246 #define MAILBOX_GENERAL_0 0x00000220 /* 64-bit */
ian@0 247 #define MAILBOX_GENERAL_1 0x00000228 /* 64-bit */
ian@0 248 #define MAILBOX_GENERAL_2 0x00000230 /* 64-bit */
ian@0 249 #define MAILBOX_GENERAL_3 0x00000238 /* 64-bit */
ian@0 250 #define MAILBOX_GENERAL_4 0x00000240 /* 64-bit */
ian@0 251 #define MAILBOX_GENERAL_5 0x00000248 /* 64-bit */
ian@0 252 #define MAILBOX_GENERAL_6 0x00000250 /* 64-bit */
ian@0 253 #define MAILBOX_GENERAL_7 0x00000258 /* 64-bit */
ian@0 254 #define MAILBOX_RELOAD_STAT 0x00000260 /* 64-bit */
ian@0 255 #define MAILBOX_RCV_STD_PROD_IDX 0x00000268 /* 64-bit */
ian@0 256 #define MAILBOX_RCV_JUMBO_PROD_IDX 0x00000270 /* 64-bit */
ian@0 257 #define MAILBOX_RCV_MINI_PROD_IDX 0x00000278 /* 64-bit */
ian@0 258 #define MAILBOX_RCVRET_CON_IDX_0 0x00000280 /* 64-bit */
ian@0 259 #define MAILBOX_RCVRET_CON_IDX_1 0x00000288 /* 64-bit */
ian@0 260 #define MAILBOX_RCVRET_CON_IDX_2 0x00000290 /* 64-bit */
ian@0 261 #define MAILBOX_RCVRET_CON_IDX_3 0x00000298 /* 64-bit */
ian@0 262 #define MAILBOX_RCVRET_CON_IDX_4 0x000002a0 /* 64-bit */
ian@0 263 #define MAILBOX_RCVRET_CON_IDX_5 0x000002a8 /* 64-bit */
ian@0 264 #define MAILBOX_RCVRET_CON_IDX_6 0x000002b0 /* 64-bit */
ian@0 265 #define MAILBOX_RCVRET_CON_IDX_7 0x000002b8 /* 64-bit */
ian@0 266 #define MAILBOX_RCVRET_CON_IDX_8 0x000002c0 /* 64-bit */
ian@0 267 #define MAILBOX_RCVRET_CON_IDX_9 0x000002c8 /* 64-bit */
ian@0 268 #define MAILBOX_RCVRET_CON_IDX_10 0x000002d0 /* 64-bit */
ian@0 269 #define MAILBOX_RCVRET_CON_IDX_11 0x000002d8 /* 64-bit */
ian@0 270 #define MAILBOX_RCVRET_CON_IDX_12 0x000002e0 /* 64-bit */
ian@0 271 #define MAILBOX_RCVRET_CON_IDX_13 0x000002e8 /* 64-bit */
ian@0 272 #define MAILBOX_RCVRET_CON_IDX_14 0x000002f0 /* 64-bit */
ian@0 273 #define MAILBOX_RCVRET_CON_IDX_15 0x000002f8 /* 64-bit */
ian@0 274 #define MAILBOX_SNDHOST_PROD_IDX_0 0x00000300 /* 64-bit */
ian@0 275 #define MAILBOX_SNDHOST_PROD_IDX_1 0x00000308 /* 64-bit */
ian@0 276 #define MAILBOX_SNDHOST_PROD_IDX_2 0x00000310 /* 64-bit */
ian@0 277 #define MAILBOX_SNDHOST_PROD_IDX_3 0x00000318 /* 64-bit */
ian@0 278 #define MAILBOX_SNDHOST_PROD_IDX_4 0x00000320 /* 64-bit */
ian@0 279 #define MAILBOX_SNDHOST_PROD_IDX_5 0x00000328 /* 64-bit */
ian@0 280 #define MAILBOX_SNDHOST_PROD_IDX_6 0x00000330 /* 64-bit */
ian@0 281 #define MAILBOX_SNDHOST_PROD_IDX_7 0x00000338 /* 64-bit */
ian@0 282 #define MAILBOX_SNDHOST_PROD_IDX_8 0x00000340 /* 64-bit */
ian@0 283 #define MAILBOX_SNDHOST_PROD_IDX_9 0x00000348 /* 64-bit */
ian@0 284 #define MAILBOX_SNDHOST_PROD_IDX_10 0x00000350 /* 64-bit */
ian@0 285 #define MAILBOX_SNDHOST_PROD_IDX_11 0x00000358 /* 64-bit */
ian@0 286 #define MAILBOX_SNDHOST_PROD_IDX_12 0x00000360 /* 64-bit */
ian@0 287 #define MAILBOX_SNDHOST_PROD_IDX_13 0x00000368 /* 64-bit */
ian@0 288 #define MAILBOX_SNDHOST_PROD_IDX_14 0x00000370 /* 64-bit */
ian@0 289 #define MAILBOX_SNDHOST_PROD_IDX_15 0x00000378 /* 64-bit */
ian@0 290 #define MAILBOX_SNDNIC_PROD_IDX_0 0x00000380 /* 64-bit */
ian@0 291 #define MAILBOX_SNDNIC_PROD_IDX_1 0x00000388 /* 64-bit */
ian@0 292 #define MAILBOX_SNDNIC_PROD_IDX_2 0x00000390 /* 64-bit */
ian@0 293 #define MAILBOX_SNDNIC_PROD_IDX_3 0x00000398 /* 64-bit */
ian@0 294 #define MAILBOX_SNDNIC_PROD_IDX_4 0x000003a0 /* 64-bit */
ian@0 295 #define MAILBOX_SNDNIC_PROD_IDX_5 0x000003a8 /* 64-bit */
ian@0 296 #define MAILBOX_SNDNIC_PROD_IDX_6 0x000003b0 /* 64-bit */
ian@0 297 #define MAILBOX_SNDNIC_PROD_IDX_7 0x000003b8 /* 64-bit */
ian@0 298 #define MAILBOX_SNDNIC_PROD_IDX_8 0x000003c0 /* 64-bit */
ian@0 299 #define MAILBOX_SNDNIC_PROD_IDX_9 0x000003c8 /* 64-bit */
ian@0 300 #define MAILBOX_SNDNIC_PROD_IDX_10 0x000003d0 /* 64-bit */
ian@0 301 #define MAILBOX_SNDNIC_PROD_IDX_11 0x000003d8 /* 64-bit */
ian@0 302 #define MAILBOX_SNDNIC_PROD_IDX_12 0x000003e0 /* 64-bit */
ian@0 303 #define MAILBOX_SNDNIC_PROD_IDX_13 0x000003e8 /* 64-bit */
ian@0 304 #define MAILBOX_SNDNIC_PROD_IDX_14 0x000003f0 /* 64-bit */
ian@0 305 #define MAILBOX_SNDNIC_PROD_IDX_15 0x000003f8 /* 64-bit */
ian@0 306
ian@0 307 /* MAC control registers */
ian@0 308 #define MAC_MODE 0x00000400
ian@0 309 #define MAC_MODE_RESET 0x00000001
ian@0 310 #define MAC_MODE_HALF_DUPLEX 0x00000002
ian@0 311 #define MAC_MODE_PORT_MODE_MASK 0x0000000c
ian@0 312 #define MAC_MODE_PORT_MODE_TBI 0x0000000c
ian@0 313 #define MAC_MODE_PORT_MODE_GMII 0x00000008
ian@0 314 #define MAC_MODE_PORT_MODE_MII 0x00000004
ian@0 315 #define MAC_MODE_PORT_MODE_NONE 0x00000000
ian@0 316 #define MAC_MODE_PORT_INT_LPBACK 0x00000010
ian@0 317 #define MAC_MODE_TAGGED_MAC_CTRL 0x00000080
ian@0 318 #define MAC_MODE_TX_BURSTING 0x00000100
ian@0 319 #define MAC_MODE_MAX_DEFER 0x00000200
ian@0 320 #define MAC_MODE_LINK_POLARITY 0x00000400
ian@0 321 #define MAC_MODE_RXSTAT_ENABLE 0x00000800
ian@0 322 #define MAC_MODE_RXSTAT_CLEAR 0x00001000
ian@0 323 #define MAC_MODE_RXSTAT_FLUSH 0x00002000
ian@0 324 #define MAC_MODE_TXSTAT_ENABLE 0x00004000
ian@0 325 #define MAC_MODE_TXSTAT_CLEAR 0x00008000
ian@0 326 #define MAC_MODE_TXSTAT_FLUSH 0x00010000
ian@0 327 #define MAC_MODE_SEND_CONFIGS 0x00020000
ian@0 328 #define MAC_MODE_MAGIC_PKT_ENABLE 0x00040000
ian@0 329 #define MAC_MODE_ACPI_ENABLE 0x00080000
ian@0 330 #define MAC_MODE_MIP_ENABLE 0x00100000
ian@0 331 #define MAC_MODE_TDE_ENABLE 0x00200000
ian@0 332 #define MAC_MODE_RDE_ENABLE 0x00400000
ian@0 333 #define MAC_MODE_FHDE_ENABLE 0x00800000
ian@0 334 #define MAC_STATUS 0x00000404
ian@0 335 #define MAC_STATUS_PCS_SYNCED 0x00000001
ian@0 336 #define MAC_STATUS_SIGNAL_DET 0x00000002
ian@0 337 #define MAC_STATUS_RCVD_CFG 0x00000004
ian@0 338 #define MAC_STATUS_CFG_CHANGED 0x00000008
ian@0 339 #define MAC_STATUS_SYNC_CHANGED 0x00000010
ian@0 340 #define MAC_STATUS_PORT_DEC_ERR 0x00000400
ian@0 341 #define MAC_STATUS_LNKSTATE_CHANGED 0x00001000
ian@0 342 #define MAC_STATUS_MI_COMPLETION 0x00400000
ian@0 343 #define MAC_STATUS_MI_INTERRUPT 0x00800000
ian@0 344 #define MAC_STATUS_AP_ERROR 0x01000000
ian@0 345 #define MAC_STATUS_ODI_ERROR 0x02000000
ian@0 346 #define MAC_STATUS_RXSTAT_OVERRUN 0x04000000
ian@0 347 #define MAC_STATUS_TXSTAT_OVERRUN 0x08000000
ian@0 348 #define MAC_EVENT 0x00000408
ian@0 349 #define MAC_EVENT_PORT_DECODE_ERR 0x00000400
ian@0 350 #define MAC_EVENT_LNKSTATE_CHANGED 0x00001000
ian@0 351 #define MAC_EVENT_MI_COMPLETION 0x00400000
ian@0 352 #define MAC_EVENT_MI_INTERRUPT 0x00800000
ian@0 353 #define MAC_EVENT_AP_ERROR 0x01000000
ian@0 354 #define MAC_EVENT_ODI_ERROR 0x02000000
ian@0 355 #define MAC_EVENT_RXSTAT_OVERRUN 0x04000000
ian@0 356 #define MAC_EVENT_TXSTAT_OVERRUN 0x08000000
ian@0 357 #define MAC_LED_CTRL 0x0000040c
ian@0 358 #define LED_CTRL_LNKLED_OVERRIDE 0x00000001
ian@0 359 #define LED_CTRL_1000MBPS_ON 0x00000002
ian@0 360 #define LED_CTRL_100MBPS_ON 0x00000004
ian@0 361 #define LED_CTRL_10MBPS_ON 0x00000008
ian@0 362 #define LED_CTRL_TRAFFIC_OVERRIDE 0x00000010
ian@0 363 #define LED_CTRL_TRAFFIC_BLINK 0x00000020
ian@0 364 #define LED_CTRL_TRAFFIC_LED 0x00000040
ian@0 365 #define LED_CTRL_1000MBPS_STATUS 0x00000080
ian@0 366 #define LED_CTRL_100MBPS_STATUS 0x00000100
ian@0 367 #define LED_CTRL_10MBPS_STATUS 0x00000200
ian@0 368 #define LED_CTRL_TRAFFIC_STATUS 0x00000400
ian@0 369 #define LED_CTRL_MODE_MAC 0x00000000
ian@0 370 #define LED_CTRL_MODE_PHY_1 0x00000800
ian@0 371 #define LED_CTRL_MODE_PHY_2 0x00001000
ian@0 372 #define LED_CTRL_MODE_SHASTA_MAC 0x00002000
ian@0 373 #define LED_CTRL_MODE_SHARED 0x00004000
ian@0 374 #define LED_CTRL_MODE_COMBO 0x00008000
ian@0 375 #define LED_CTRL_BLINK_RATE_MASK 0x7ff80000
ian@0 376 #define LED_CTRL_BLINK_RATE_SHIFT 19
ian@0 377 #define LED_CTRL_BLINK_PER_OVERRIDE 0x00080000
ian@0 378 #define LED_CTRL_BLINK_RATE_OVERRIDE 0x80000000
ian@0 379 #define MAC_ADDR_0_HIGH 0x00000410 /* upper 2 bytes */
ian@0 380 #define MAC_ADDR_0_LOW 0x00000414 /* lower 4 bytes */
ian@0 381 #define MAC_ADDR_1_HIGH 0x00000418 /* upper 2 bytes */
ian@0 382 #define MAC_ADDR_1_LOW 0x0000041c /* lower 4 bytes */
ian@0 383 #define MAC_ADDR_2_HIGH 0x00000420 /* upper 2 bytes */
ian@0 384 #define MAC_ADDR_2_LOW 0x00000424 /* lower 4 bytes */
ian@0 385 #define MAC_ADDR_3_HIGH 0x00000428 /* upper 2 bytes */
ian@0 386 #define MAC_ADDR_3_LOW 0x0000042c /* lower 4 bytes */
ian@0 387 #define MAC_ACPI_MBUF_PTR 0x00000430
ian@0 388 #define MAC_ACPI_LEN_OFFSET 0x00000434
ian@0 389 #define ACPI_LENOFF_LEN_MASK 0x0000ffff
ian@0 390 #define ACPI_LENOFF_LEN_SHIFT 0
ian@0 391 #define ACPI_LENOFF_OFF_MASK 0x0fff0000
ian@0 392 #define ACPI_LENOFF_OFF_SHIFT 16
ian@0 393 #define MAC_TX_BACKOFF_SEED 0x00000438
ian@0 394 #define TX_BACKOFF_SEED_MASK 0x000003ff
ian@0 395 #define MAC_RX_MTU_SIZE 0x0000043c
ian@0 396 #define RX_MTU_SIZE_MASK 0x0000ffff
ian@0 397 #define MAC_PCS_TEST 0x00000440
ian@0 398 #define PCS_TEST_PATTERN_MASK 0x000fffff
ian@0 399 #define PCS_TEST_PATTERN_SHIFT 0
ian@0 400 #define PCS_TEST_ENABLE 0x00100000
ian@0 401 #define MAC_TX_AUTO_NEG 0x00000444
ian@0 402 #define TX_AUTO_NEG_MASK 0x0000ffff
ian@0 403 #define TX_AUTO_NEG_SHIFT 0
ian@0 404 #define MAC_RX_AUTO_NEG 0x00000448
ian@0 405 #define RX_AUTO_NEG_MASK 0x0000ffff
ian@0 406 #define RX_AUTO_NEG_SHIFT 0
ian@0 407 #define MAC_MI_COM 0x0000044c
ian@0 408 #define MI_COM_CMD_MASK 0x0c000000
ian@0 409 #define MI_COM_CMD_WRITE 0x04000000
ian@0 410 #define MI_COM_CMD_READ 0x08000000
ian@0 411 #define MI_COM_READ_FAILED 0x10000000
ian@0 412 #define MI_COM_START 0x20000000
ian@0 413 #define MI_COM_BUSY 0x20000000
ian@0 414 #define MI_COM_PHY_ADDR_MASK 0x03e00000
ian@0 415 #define MI_COM_PHY_ADDR_SHIFT 21
ian@0 416 #define MI_COM_REG_ADDR_MASK 0x001f0000
ian@0 417 #define MI_COM_REG_ADDR_SHIFT 16
ian@0 418 #define MI_COM_DATA_MASK 0x0000ffff
ian@0 419 #define MAC_MI_STAT 0x00000450
ian@0 420 #define MAC_MI_STAT_LNKSTAT_ATTN_ENAB 0x00000001
ian@0 421 #define MAC_MI_MODE 0x00000454
ian@0 422 #define MAC_MI_MODE_CLK_10MHZ 0x00000001
ian@0 423 #define MAC_MI_MODE_SHORT_PREAMBLE 0x00000002
ian@0 424 #define MAC_MI_MODE_AUTO_POLL 0x00000010
ian@0 425 #define MAC_MI_MODE_CORE_CLK_62MHZ 0x00008000
ian@0 426 #define MAC_MI_MODE_BASE 0x000c0000 /* XXX magic values XXX */
ian@0 427 #define MAC_AUTO_POLL_STATUS 0x00000458
ian@0 428 #define MAC_AUTO_POLL_ERROR 0x00000001
ian@0 429 #define MAC_TX_MODE 0x0000045c
ian@0 430 #define TX_MODE_RESET 0x00000001
ian@0 431 #define TX_MODE_ENABLE 0x00000002
ian@0 432 #define TX_MODE_FLOW_CTRL_ENABLE 0x00000010
ian@0 433 #define TX_MODE_BIG_BCKOFF_ENABLE 0x00000020
ian@0 434 #define TX_MODE_LONG_PAUSE_ENABLE 0x00000040
ian@0 435 #define MAC_TX_STATUS 0x00000460
ian@0 436 #define TX_STATUS_XOFFED 0x00000001
ian@0 437 #define TX_STATUS_SENT_XOFF 0x00000002
ian@0 438 #define TX_STATUS_SENT_XON 0x00000004
ian@0 439 #define TX_STATUS_LINK_UP 0x00000008
ian@0 440 #define TX_STATUS_ODI_UNDERRUN 0x00000010
ian@0 441 #define TX_STATUS_ODI_OVERRUN 0x00000020
ian@0 442 #define MAC_TX_LENGTHS 0x00000464
ian@0 443 #define TX_LENGTHS_SLOT_TIME_MASK 0x000000ff
ian@0 444 #define TX_LENGTHS_SLOT_TIME_SHIFT 0
ian@0 445 #define TX_LENGTHS_IPG_MASK 0x00000f00
ian@0 446 #define TX_LENGTHS_IPG_SHIFT 8
ian@0 447 #define TX_LENGTHS_IPG_CRS_MASK 0x00003000
ian@0 448 #define TX_LENGTHS_IPG_CRS_SHIFT 12
ian@0 449 #define MAC_RX_MODE 0x00000468
ian@0 450 #define RX_MODE_RESET 0x00000001
ian@0 451 #define RX_MODE_ENABLE 0x00000002
ian@0 452 #define RX_MODE_FLOW_CTRL_ENABLE 0x00000004
ian@0 453 #define RX_MODE_KEEP_MAC_CTRL 0x00000008
ian@0 454 #define RX_MODE_KEEP_PAUSE 0x00000010
ian@0 455 #define RX_MODE_ACCEPT_OVERSIZED 0x00000020
ian@0 456 #define RX_MODE_ACCEPT_RUNTS 0x00000040
ian@0 457 #define RX_MODE_LEN_CHECK 0x00000080
ian@0 458 #define RX_MODE_PROMISC 0x00000100
ian@0 459 #define RX_MODE_NO_CRC_CHECK 0x00000200
ian@0 460 #define RX_MODE_KEEP_VLAN_TAG 0x00000400
ian@0 461 #define RX_MODE_IPV6_CSUM_ENABLE 0x01000000
ian@0 462 #define MAC_RX_STATUS 0x0000046c
ian@0 463 #define RX_STATUS_REMOTE_TX_XOFFED 0x00000001
ian@0 464 #define RX_STATUS_XOFF_RCVD 0x00000002
ian@0 465 #define RX_STATUS_XON_RCVD 0x00000004
ian@0 466 #define MAC_HASH_REG_0 0x00000470
ian@0 467 #define MAC_HASH_REG_1 0x00000474
ian@0 468 #define MAC_HASH_REG_2 0x00000478
ian@0 469 #define MAC_HASH_REG_3 0x0000047c
ian@0 470 #define MAC_RCV_RULE_0 0x00000480
ian@0 471 #define MAC_RCV_VALUE_0 0x00000484
ian@0 472 #define MAC_RCV_RULE_1 0x00000488
ian@0 473 #define MAC_RCV_VALUE_1 0x0000048c
ian@0 474 #define MAC_RCV_RULE_2 0x00000490
ian@0 475 #define MAC_RCV_VALUE_2 0x00000494
ian@0 476 #define MAC_RCV_RULE_3 0x00000498
ian@0 477 #define MAC_RCV_VALUE_3 0x0000049c
ian@0 478 #define MAC_RCV_RULE_4 0x000004a0
ian@0 479 #define MAC_RCV_VALUE_4 0x000004a4
ian@0 480 #define MAC_RCV_RULE_5 0x000004a8
ian@0 481 #define MAC_RCV_VALUE_5 0x000004ac
ian@0 482 #define MAC_RCV_RULE_6 0x000004b0
ian@0 483 #define MAC_RCV_VALUE_6 0x000004b4
ian@0 484 #define MAC_RCV_RULE_7 0x000004b8
ian@0 485 #define MAC_RCV_VALUE_7 0x000004bc
ian@0 486 #define MAC_RCV_RULE_8 0x000004c0
ian@0 487 #define MAC_RCV_VALUE_8 0x000004c4
ian@0 488 #define MAC_RCV_RULE_9 0x000004c8
ian@0 489 #define MAC_RCV_VALUE_9 0x000004cc
ian@0 490 #define MAC_RCV_RULE_10 0x000004d0
ian@0 491 #define MAC_RCV_VALUE_10 0x000004d4
ian@0 492 #define MAC_RCV_RULE_11 0x000004d8
ian@0 493 #define MAC_RCV_VALUE_11 0x000004dc
ian@0 494 #define MAC_RCV_RULE_12 0x000004e0
ian@0 495 #define MAC_RCV_VALUE_12 0x000004e4
ian@0 496 #define MAC_RCV_RULE_13 0x000004e8
ian@0 497 #define MAC_RCV_VALUE_13 0x000004ec
ian@0 498 #define MAC_RCV_RULE_14 0x000004f0
ian@0 499 #define MAC_RCV_VALUE_14 0x000004f4
ian@0 500 #define MAC_RCV_RULE_15 0x000004f8
ian@0 501 #define MAC_RCV_VALUE_15 0x000004fc
ian@0 502 #define RCV_RULE_DISABLE_MASK 0x7fffffff
ian@0 503 #define MAC_RCV_RULE_CFG 0x00000500
ian@0 504 #define RCV_RULE_CFG_DEFAULT_CLASS 0x00000008
ian@0 505 #define MAC_LOW_WMARK_MAX_RX_FRAME 0x00000504
ian@0 506 /* 0x508 --> 0x520 unused */
ian@0 507 #define MAC_HASHREGU_0 0x00000520
ian@0 508 #define MAC_HASHREGU_1 0x00000524
ian@0 509 #define MAC_HASHREGU_2 0x00000528
ian@0 510 #define MAC_HASHREGU_3 0x0000052c
ian@0 511 #define MAC_EXTADDR_0_HIGH 0x00000530
ian@0 512 #define MAC_EXTADDR_0_LOW 0x00000534
ian@0 513 #define MAC_EXTADDR_1_HIGH 0x00000538
ian@0 514 #define MAC_EXTADDR_1_LOW 0x0000053c
ian@0 515 #define MAC_EXTADDR_2_HIGH 0x00000540
ian@0 516 #define MAC_EXTADDR_2_LOW 0x00000544
ian@0 517 #define MAC_EXTADDR_3_HIGH 0x00000548
ian@0 518 #define MAC_EXTADDR_3_LOW 0x0000054c
ian@0 519 #define MAC_EXTADDR_4_HIGH 0x00000550
ian@0 520 #define MAC_EXTADDR_4_LOW 0x00000554
ian@0 521 #define MAC_EXTADDR_5_HIGH 0x00000558
ian@0 522 #define MAC_EXTADDR_5_LOW 0x0000055c
ian@0 523 #define MAC_EXTADDR_6_HIGH 0x00000560
ian@0 524 #define MAC_EXTADDR_6_LOW 0x00000564
ian@0 525 #define MAC_EXTADDR_7_HIGH 0x00000568
ian@0 526 #define MAC_EXTADDR_7_LOW 0x0000056c
ian@0 527 #define MAC_EXTADDR_8_HIGH 0x00000570
ian@0 528 #define MAC_EXTADDR_8_LOW 0x00000574
ian@0 529 #define MAC_EXTADDR_9_HIGH 0x00000578
ian@0 530 #define MAC_EXTADDR_9_LOW 0x0000057c
ian@0 531 #define MAC_EXTADDR_10_HIGH 0x00000580
ian@0 532 #define MAC_EXTADDR_10_LOW 0x00000584
ian@0 533 #define MAC_EXTADDR_11_HIGH 0x00000588
ian@0 534 #define MAC_EXTADDR_11_LOW 0x0000058c
ian@0 535 #define MAC_SERDES_CFG 0x00000590
ian@0 536 #define MAC_SERDES_CFG_EDGE_SELECT 0x00001000
ian@0 537 #define MAC_SERDES_STAT 0x00000594
ian@0 538 /* 0x598 --> 0x5b0 unused */
ian@0 539 #define SERDES_RX_CTRL 0x000005b0 /* 5780/5714 only */
ian@0 540 #define SERDES_RX_SIG_DETECT 0x00000400
ian@0 541 #define SG_DIG_CTRL 0x000005b0
ian@0 542 #define SG_DIG_USING_HW_AUTONEG 0x80000000
ian@0 543 #define SG_DIG_SOFT_RESET 0x40000000
ian@0 544 #define SG_DIG_DISABLE_LINKRDY 0x20000000
ian@0 545 #define SG_DIG_CRC16_CLEAR_N 0x01000000
ian@0 546 #define SG_DIG_EN10B 0x00800000
ian@0 547 #define SG_DIG_CLEAR_STATUS 0x00400000
ian@0 548 #define SG_DIG_LOCAL_DUPLEX_STATUS 0x00200000
ian@0 549 #define SG_DIG_LOCAL_LINK_STATUS 0x00100000
ian@0 550 #define SG_DIG_SPEED_STATUS_MASK 0x000c0000
ian@0 551 #define SG_DIG_SPEED_STATUS_SHIFT 18
ian@0 552 #define SG_DIG_JUMBO_PACKET_DISABLE 0x00020000
ian@0 553 #define SG_DIG_RESTART_AUTONEG 0x00010000
ian@0 554 #define SG_DIG_FIBER_MODE 0x00008000
ian@0 555 #define SG_DIG_REMOTE_FAULT_MASK 0x00006000
ian@0 556 #define SG_DIG_PAUSE_MASK 0x00001800
ian@0 557 #define SG_DIG_GBIC_ENABLE 0x00000400
ian@0 558 #define SG_DIG_CHECK_END_ENABLE 0x00000200
ian@0 559 #define SG_DIG_SGMII_AUTONEG_TIMER 0x00000100
ian@0 560 #define SG_DIG_CLOCK_PHASE_SELECT 0x00000080
ian@0 561 #define SG_DIG_GMII_INPUT_SELECT 0x00000040
ian@0 562 #define SG_DIG_MRADV_CRC16_SELECT 0x00000020
ian@0 563 #define SG_DIG_COMMA_DETECT_ENABLE 0x00000010
ian@0 564 #define SG_DIG_AUTONEG_TIMER_REDUCE 0x00000008
ian@0 565 #define SG_DIG_AUTONEG_LOW_ENABLE 0x00000004
ian@0 566 #define SG_DIG_REMOTE_LOOPBACK 0x00000002
ian@0 567 #define SG_DIG_LOOPBACK 0x00000001
ian@0 568 #define SG_DIG_STATUS 0x000005b4
ian@0 569 #define SG_DIG_CRC16_BUS_MASK 0xffff0000
ian@0 570 #define SG_DIG_PARTNER_FAULT_MASK 0x00600000 /* If !MRADV_CRC16_SELECT */
ian@0 571 #define SG_DIG_PARTNER_ASYM_PAUSE 0x00100000 /* If !MRADV_CRC16_SELECT */
ian@0 572 #define SG_DIG_PARTNER_PAUSE_CAPABLE 0x00080000 /* If !MRADV_CRC16_SELECT */
ian@0 573 #define SG_DIG_PARTNER_HALF_DUPLEX 0x00040000 /* If !MRADV_CRC16_SELECT */
ian@0 574 #define SG_DIG_PARTNER_FULL_DUPLEX 0x00020000 /* If !MRADV_CRC16_SELECT */
ian@0 575 #define SG_DIG_PARTNER_NEXT_PAGE 0x00010000 /* If !MRADV_CRC16_SELECT */
ian@0 576 #define SG_DIG_AUTONEG_STATE_MASK 0x00000ff0
ian@0 577 #define SG_DIG_COMMA_DETECTOR 0x00000008
ian@0 578 #define SG_DIG_MAC_ACK_STATUS 0x00000004
ian@0 579 #define SG_DIG_AUTONEG_COMPLETE 0x00000002
ian@0 580 #define SG_DIG_AUTONEG_ERROR 0x00000001
ian@0 581 /* 0x5b8 --> 0x600 unused */
ian@0 582 #define MAC_TX_MAC_STATE_BASE 0x00000600 /* 16 bytes */
ian@0 583 #define MAC_RX_MAC_STATE_BASE 0x00000610 /* 20 bytes */
ian@0 584 /* 0x624 --> 0x800 unused */
ian@0 585 #define MAC_TX_STATS_OCTETS 0x00000800
ian@0 586 #define MAC_TX_STATS_RESV1 0x00000804
ian@0 587 #define MAC_TX_STATS_COLLISIONS 0x00000808
ian@0 588 #define MAC_TX_STATS_XON_SENT 0x0000080c
ian@0 589 #define MAC_TX_STATS_XOFF_SENT 0x00000810
ian@0 590 #define MAC_TX_STATS_RESV2 0x00000814
ian@0 591 #define MAC_TX_STATS_MAC_ERRORS 0x00000818
ian@0 592 #define MAC_TX_STATS_SINGLE_COLLISIONS 0x0000081c
ian@0 593 #define MAC_TX_STATS_MULT_COLLISIONS 0x00000820
ian@0 594 #define MAC_TX_STATS_DEFERRED 0x00000824
ian@0 595 #define MAC_TX_STATS_RESV3 0x00000828
ian@0 596 #define MAC_TX_STATS_EXCESSIVE_COL 0x0000082c
ian@0 597 #define MAC_TX_STATS_LATE_COL 0x00000830
ian@0 598 #define MAC_TX_STATS_RESV4_1 0x00000834
ian@0 599 #define MAC_TX_STATS_RESV4_2 0x00000838
ian@0 600 #define MAC_TX_STATS_RESV4_3 0x0000083c
ian@0 601 #define MAC_TX_STATS_RESV4_4 0x00000840
ian@0 602 #define MAC_TX_STATS_RESV4_5 0x00000844
ian@0 603 #define MAC_TX_STATS_RESV4_6 0x00000848
ian@0 604 #define MAC_TX_STATS_RESV4_7 0x0000084c
ian@0 605 #define MAC_TX_STATS_RESV4_8 0x00000850
ian@0 606 #define MAC_TX_STATS_RESV4_9 0x00000854
ian@0 607 #define MAC_TX_STATS_RESV4_10 0x00000858
ian@0 608 #define MAC_TX_STATS_RESV4_11 0x0000085c
ian@0 609 #define MAC_TX_STATS_RESV4_12 0x00000860
ian@0 610 #define MAC_TX_STATS_RESV4_13 0x00000864
ian@0 611 #define MAC_TX_STATS_RESV4_14 0x00000868
ian@0 612 #define MAC_TX_STATS_UCAST 0x0000086c
ian@0 613 #define MAC_TX_STATS_MCAST 0x00000870
ian@0 614 #define MAC_TX_STATS_BCAST 0x00000874
ian@0 615 #define MAC_TX_STATS_RESV5_1 0x00000878
ian@0 616 #define MAC_TX_STATS_RESV5_2 0x0000087c
ian@0 617 #define MAC_RX_STATS_OCTETS 0x00000880
ian@0 618 #define MAC_RX_STATS_RESV1 0x00000884
ian@0 619 #define MAC_RX_STATS_FRAGMENTS 0x00000888
ian@0 620 #define MAC_RX_STATS_UCAST 0x0000088c
ian@0 621 #define MAC_RX_STATS_MCAST 0x00000890
ian@0 622 #define MAC_RX_STATS_BCAST 0x00000894
ian@0 623 #define MAC_RX_STATS_FCS_ERRORS 0x00000898
ian@0 624 #define MAC_RX_STATS_ALIGN_ERRORS 0x0000089c
ian@0 625 #define MAC_RX_STATS_XON_PAUSE_RECVD 0x000008a0
ian@0 626 #define MAC_RX_STATS_XOFF_PAUSE_RECVD 0x000008a4
ian@0 627 #define MAC_RX_STATS_MAC_CTRL_RECVD 0x000008a8
ian@0 628 #define MAC_RX_STATS_XOFF_ENTERED 0x000008ac
ian@0 629 #define MAC_RX_STATS_FRAME_TOO_LONG 0x000008b0
ian@0 630 #define MAC_RX_STATS_JABBERS 0x000008b4
ian@0 631 #define MAC_RX_STATS_UNDERSIZE 0x000008b8
ian@0 632 /* 0x8bc --> 0xc00 unused */
ian@0 633
ian@0 634 /* Send data initiator control registers */
ian@0 635 #define SNDDATAI_MODE 0x00000c00
ian@0 636 #define SNDDATAI_MODE_RESET 0x00000001
ian@0 637 #define SNDDATAI_MODE_ENABLE 0x00000002
ian@0 638 #define SNDDATAI_MODE_STAT_OFLOW_ENAB 0x00000004
ian@0 639 #define SNDDATAI_STATUS 0x00000c04
ian@0 640 #define SNDDATAI_STATUS_STAT_OFLOW 0x00000004
ian@0 641 #define SNDDATAI_STATSCTRL 0x00000c08
ian@0 642 #define SNDDATAI_SCTRL_ENABLE 0x00000001
ian@0 643 #define SNDDATAI_SCTRL_FASTUPD 0x00000002
ian@0 644 #define SNDDATAI_SCTRL_CLEAR 0x00000004
ian@0 645 #define SNDDATAI_SCTRL_FLUSH 0x00000008
ian@0 646 #define SNDDATAI_SCTRL_FORCE_ZERO 0x00000010
ian@0 647 #define SNDDATAI_STATSENAB 0x00000c0c
ian@0 648 #define SNDDATAI_STATSINCMASK 0x00000c10
ian@0 649 /* 0xc14 --> 0xc80 unused */
ian@0 650 #define SNDDATAI_COS_CNT_0 0x00000c80
ian@0 651 #define SNDDATAI_COS_CNT_1 0x00000c84
ian@0 652 #define SNDDATAI_COS_CNT_2 0x00000c88
ian@0 653 #define SNDDATAI_COS_CNT_3 0x00000c8c
ian@0 654 #define SNDDATAI_COS_CNT_4 0x00000c90
ian@0 655 #define SNDDATAI_COS_CNT_5 0x00000c94
ian@0 656 #define SNDDATAI_COS_CNT_6 0x00000c98
ian@0 657 #define SNDDATAI_COS_CNT_7 0x00000c9c
ian@0 658 #define SNDDATAI_COS_CNT_8 0x00000ca0
ian@0 659 #define SNDDATAI_COS_CNT_9 0x00000ca4
ian@0 660 #define SNDDATAI_COS_CNT_10 0x00000ca8
ian@0 661 #define SNDDATAI_COS_CNT_11 0x00000cac
ian@0 662 #define SNDDATAI_COS_CNT_12 0x00000cb0
ian@0 663 #define SNDDATAI_COS_CNT_13 0x00000cb4
ian@0 664 #define SNDDATAI_COS_CNT_14 0x00000cb8
ian@0 665 #define SNDDATAI_COS_CNT_15 0x00000cbc
ian@0 666 #define SNDDATAI_DMA_RDQ_FULL_CNT 0x00000cc0
ian@0 667 #define SNDDATAI_DMA_PRIO_RDQ_FULL_CNT 0x00000cc4
ian@0 668 #define SNDDATAI_SDCQ_FULL_CNT 0x00000cc8
ian@0 669 #define SNDDATAI_NICRNG_SSND_PIDX_CNT 0x00000ccc
ian@0 670 #define SNDDATAI_STATS_UPDATED_CNT 0x00000cd0
ian@0 671 #define SNDDATAI_INTERRUPTS_CNT 0x00000cd4
ian@0 672 #define SNDDATAI_AVOID_INTERRUPTS_CNT 0x00000cd8
ian@0 673 #define SNDDATAI_SND_THRESH_HIT_CNT 0x00000cdc
ian@0 674 /* 0xce0 --> 0x1000 unused */
ian@0 675
ian@0 676 /* Send data completion control registers */
ian@0 677 #define SNDDATAC_MODE 0x00001000
ian@0 678 #define SNDDATAC_MODE_RESET 0x00000001
ian@0 679 #define SNDDATAC_MODE_ENABLE 0x00000002
ian@0 680 /* 0x1004 --> 0x1400 unused */
ian@0 681
ian@0 682 /* Send BD ring selector */
ian@0 683 #define SNDBDS_MODE 0x00001400
ian@0 684 #define SNDBDS_MODE_RESET 0x00000001
ian@0 685 #define SNDBDS_MODE_ENABLE 0x00000002
ian@0 686 #define SNDBDS_MODE_ATTN_ENABLE 0x00000004
ian@0 687 #define SNDBDS_STATUS 0x00001404
ian@0 688 #define SNDBDS_STATUS_ERROR_ATTN 0x00000004
ian@0 689 #define SNDBDS_HWDIAG 0x00001408
ian@0 690 /* 0x140c --> 0x1440 */
ian@0 691 #define SNDBDS_SEL_CON_IDX_0 0x00001440
ian@0 692 #define SNDBDS_SEL_CON_IDX_1 0x00001444
ian@0 693 #define SNDBDS_SEL_CON_IDX_2 0x00001448
ian@0 694 #define SNDBDS_SEL_CON_IDX_3 0x0000144c
ian@0 695 #define SNDBDS_SEL_CON_IDX_4 0x00001450
ian@0 696 #define SNDBDS_SEL_CON_IDX_5 0x00001454
ian@0 697 #define SNDBDS_SEL_CON_IDX_6 0x00001458
ian@0 698 #define SNDBDS_SEL_CON_IDX_7 0x0000145c
ian@0 699 #define SNDBDS_SEL_CON_IDX_8 0x00001460
ian@0 700 #define SNDBDS_SEL_CON_IDX_9 0x00001464
ian@0 701 #define SNDBDS_SEL_CON_IDX_10 0x00001468
ian@0 702 #define SNDBDS_SEL_CON_IDX_11 0x0000146c
ian@0 703 #define SNDBDS_SEL_CON_IDX_12 0x00001470
ian@0 704 #define SNDBDS_SEL_CON_IDX_13 0x00001474
ian@0 705 #define SNDBDS_SEL_CON_IDX_14 0x00001478
ian@0 706 #define SNDBDS_SEL_CON_IDX_15 0x0000147c
ian@0 707 /* 0x1480 --> 0x1800 unused */
ian@0 708
ian@0 709 /* Send BD initiator control registers */
ian@0 710 #define SNDBDI_MODE 0x00001800
ian@0 711 #define SNDBDI_MODE_RESET 0x00000001
ian@0 712 #define SNDBDI_MODE_ENABLE 0x00000002
ian@0 713 #define SNDBDI_MODE_ATTN_ENABLE 0x00000004
ian@0 714 #define SNDBDI_STATUS 0x00001804
ian@0 715 #define SNDBDI_STATUS_ERROR_ATTN 0x00000004
ian@0 716 #define SNDBDI_IN_PROD_IDX_0 0x00001808
ian@0 717 #define SNDBDI_IN_PROD_IDX_1 0x0000180c
ian@0 718 #define SNDBDI_IN_PROD_IDX_2 0x00001810
ian@0 719 #define SNDBDI_IN_PROD_IDX_3 0x00001814
ian@0 720 #define SNDBDI_IN_PROD_IDX_4 0x00001818
ian@0 721 #define SNDBDI_IN_PROD_IDX_5 0x0000181c
ian@0 722 #define SNDBDI_IN_PROD_IDX_6 0x00001820
ian@0 723 #define SNDBDI_IN_PROD_IDX_7 0x00001824
ian@0 724 #define SNDBDI_IN_PROD_IDX_8 0x00001828
ian@0 725 #define SNDBDI_IN_PROD_IDX_9 0x0000182c
ian@0 726 #define SNDBDI_IN_PROD_IDX_10 0x00001830
ian@0 727 #define SNDBDI_IN_PROD_IDX_11 0x00001834
ian@0 728 #define SNDBDI_IN_PROD_IDX_12 0x00001838
ian@0 729 #define SNDBDI_IN_PROD_IDX_13 0x0000183c
ian@0 730 #define SNDBDI_IN_PROD_IDX_14 0x00001840
ian@0 731 #define SNDBDI_IN_PROD_IDX_15 0x00001844
ian@0 732 /* 0x1848 --> 0x1c00 unused */
ian@0 733
ian@0 734 /* Send BD completion control registers */
ian@0 735 #define SNDBDC_MODE 0x00001c00
ian@0 736 #define SNDBDC_MODE_RESET 0x00000001
ian@0 737 #define SNDBDC_MODE_ENABLE 0x00000002
ian@0 738 #define SNDBDC_MODE_ATTN_ENABLE 0x00000004
ian@0 739 /* 0x1c04 --> 0x2000 unused */
ian@0 740
ian@0 741 /* Receive list placement control registers */
ian@0 742 #define RCVLPC_MODE 0x00002000
ian@0 743 #define RCVLPC_MODE_RESET 0x00000001
ian@0 744 #define RCVLPC_MODE_ENABLE 0x00000002
ian@0 745 #define RCVLPC_MODE_CLASS0_ATTN_ENAB 0x00000004
ian@0 746 #define RCVLPC_MODE_MAPOOR_AATTN_ENAB 0x00000008
ian@0 747 #define RCVLPC_MODE_STAT_OFLOW_ENAB 0x00000010
ian@0 748 #define RCVLPC_STATUS 0x00002004
ian@0 749 #define RCVLPC_STATUS_CLASS0 0x00000004
ian@0 750 #define RCVLPC_STATUS_MAPOOR 0x00000008
ian@0 751 #define RCVLPC_STATUS_STAT_OFLOW 0x00000010
ian@0 752 #define RCVLPC_LOCK 0x00002008
ian@0 753 #define RCVLPC_LOCK_REQ_MASK 0x0000ffff
ian@0 754 #define RCVLPC_LOCK_REQ_SHIFT 0
ian@0 755 #define RCVLPC_LOCK_GRANT_MASK 0xffff0000
ian@0 756 #define RCVLPC_LOCK_GRANT_SHIFT 16
ian@0 757 #define RCVLPC_NON_EMPTY_BITS 0x0000200c
ian@0 758 #define RCVLPC_NON_EMPTY_BITS_MASK 0x0000ffff
ian@0 759 #define RCVLPC_CONFIG 0x00002010
ian@0 760 #define RCVLPC_STATSCTRL 0x00002014
ian@0 761 #define RCVLPC_STATSCTRL_ENABLE 0x00000001
ian@0 762 #define RCVLPC_STATSCTRL_FASTUPD 0x00000002
ian@0 763 #define RCVLPC_STATS_ENABLE 0x00002018
ian@0 764 #define RCVLPC_STATSENAB_DACK_FIX 0x00040000
ian@0 765 #define RCVLPC_STATSENAB_LNGBRST_RFIX 0x00400000
ian@0 766 #define RCVLPC_STATS_INCMASK 0x0000201c
ian@0 767 /* 0x2020 --> 0x2100 unused */
ian@0 768 #define RCVLPC_SELLST_BASE 0x00002100 /* 16 16-byte entries */
ian@0 769 #define SELLST_TAIL 0x00000004
ian@0 770 #define SELLST_CONT 0x00000008
ian@0 771 #define SELLST_UNUSED 0x0000000c
ian@0 772 #define RCVLPC_COS_CNTL_BASE 0x00002200 /* 16 4-byte entries */
ian@0 773 #define RCVLPC_DROP_FILTER_CNT 0x00002240
ian@0 774 #define RCVLPC_DMA_WQ_FULL_CNT 0x00002244
ian@0 775 #define RCVLPC_DMA_HIPRIO_WQ_FULL_CNT 0x00002248
ian@0 776 #define RCVLPC_NO_RCV_BD_CNT 0x0000224c
ian@0 777 #define RCVLPC_IN_DISCARDS_CNT 0x00002250
ian@0 778 #define RCVLPC_IN_ERRORS_CNT 0x00002254
ian@0 779 #define RCVLPC_RCV_THRESH_HIT_CNT 0x00002258
ian@0 780 /* 0x225c --> 0x2400 unused */
ian@0 781
ian@0 782 /* Receive Data and Receive BD Initiator Control */
ian@0 783 #define RCVDBDI_MODE 0x00002400
ian@0 784 #define RCVDBDI_MODE_RESET 0x00000001
ian@0 785 #define RCVDBDI_MODE_ENABLE 0x00000002
ian@0 786 #define RCVDBDI_MODE_JUMBOBD_NEEDED 0x00000004
ian@0 787 #define RCVDBDI_MODE_FRM_TOO_BIG 0x00000008
ian@0 788 #define RCVDBDI_MODE_INV_RING_SZ 0x00000010
ian@0 789 #define RCVDBDI_STATUS 0x00002404
ian@0 790 #define RCVDBDI_STATUS_JUMBOBD_NEEDED 0x00000004
ian@0 791 #define RCVDBDI_STATUS_FRM_TOO_BIG 0x00000008
ian@0 792 #define RCVDBDI_STATUS_INV_RING_SZ 0x00000010
ian@0 793 #define RCVDBDI_SPLIT_FRAME_MINSZ 0x00002408
ian@0 794 /* 0x240c --> 0x2440 unused */
ian@0 795 #define RCVDBDI_JUMBO_BD 0x00002440 /* TG3_BDINFO_... */
ian@0 796 #define RCVDBDI_STD_BD 0x00002450 /* TG3_BDINFO_... */
ian@0 797 #define RCVDBDI_MINI_BD 0x00002460 /* TG3_BDINFO_... */
ian@0 798 #define RCVDBDI_JUMBO_CON_IDX 0x00002470
ian@0 799 #define RCVDBDI_STD_CON_IDX 0x00002474
ian@0 800 #define RCVDBDI_MINI_CON_IDX 0x00002478
ian@0 801 /* 0x247c --> 0x2480 unused */
ian@0 802 #define RCVDBDI_BD_PROD_IDX_0 0x00002480
ian@0 803 #define RCVDBDI_BD_PROD_IDX_1 0x00002484
ian@0 804 #define RCVDBDI_BD_PROD_IDX_2 0x00002488
ian@0 805 #define RCVDBDI_BD_PROD_IDX_3 0x0000248c
ian@0 806 #define RCVDBDI_BD_PROD_IDX_4 0x00002490
ian@0 807 #define RCVDBDI_BD_PROD_IDX_5 0x00002494
ian@0 808 #define RCVDBDI_BD_PROD_IDX_6 0x00002498
ian@0 809 #define RCVDBDI_BD_PROD_IDX_7 0x0000249c
ian@0 810 #define RCVDBDI_BD_PROD_IDX_8 0x000024a0
ian@0 811 #define RCVDBDI_BD_PROD_IDX_9 0x000024a4
ian@0 812 #define RCVDBDI_BD_PROD_IDX_10 0x000024a8
ian@0 813 #define RCVDBDI_BD_PROD_IDX_11 0x000024ac
ian@0 814 #define RCVDBDI_BD_PROD_IDX_12 0x000024b0
ian@0 815 #define RCVDBDI_BD_PROD_IDX_13 0x000024b4
ian@0 816 #define RCVDBDI_BD_PROD_IDX_14 0x000024b8
ian@0 817 #define RCVDBDI_BD_PROD_IDX_15 0x000024bc
ian@0 818 #define RCVDBDI_HWDIAG 0x000024c0
ian@0 819 /* 0x24c4 --> 0x2800 unused */
ian@0 820
ian@0 821 /* Receive Data Completion Control */
ian@0 822 #define RCVDCC_MODE 0x00002800
ian@0 823 #define RCVDCC_MODE_RESET 0x00000001
ian@0 824 #define RCVDCC_MODE_ENABLE 0x00000002
ian@0 825 #define RCVDCC_MODE_ATTN_ENABLE 0x00000004
ian@0 826 /* 0x2804 --> 0x2c00 unused */
ian@0 827
ian@0 828 /* Receive BD Initiator Control Registers */
ian@0 829 #define RCVBDI_MODE 0x00002c00
ian@0 830 #define RCVBDI_MODE_RESET 0x00000001
ian@0 831 #define RCVBDI_MODE_ENABLE 0x00000002
ian@0 832 #define RCVBDI_MODE_RCB_ATTN_ENAB 0x00000004
ian@0 833 #define RCVBDI_STATUS 0x00002c04
ian@0 834 #define RCVBDI_STATUS_RCB_ATTN 0x00000004
ian@0 835 #define RCVBDI_JUMBO_PROD_IDX 0x00002c08
ian@0 836 #define RCVBDI_STD_PROD_IDX 0x00002c0c
ian@0 837 #define RCVBDI_MINI_PROD_IDX 0x00002c10
ian@0 838 #define RCVBDI_MINI_THRESH 0x00002c14
ian@0 839 #define RCVBDI_STD_THRESH 0x00002c18
ian@0 840 #define RCVBDI_JUMBO_THRESH 0x00002c1c
ian@0 841 /* 0x2c20 --> 0x3000 unused */
ian@0 842
ian@0 843 /* Receive BD Completion Control Registers */
ian@0 844 #define RCVCC_MODE 0x00003000
ian@0 845 #define RCVCC_MODE_RESET 0x00000001
ian@0 846 #define RCVCC_MODE_ENABLE 0x00000002
ian@0 847 #define RCVCC_MODE_ATTN_ENABLE 0x00000004
ian@0 848 #define RCVCC_STATUS 0x00003004
ian@0 849 #define RCVCC_STATUS_ERROR_ATTN 0x00000004
ian@0 850 #define RCVCC_JUMP_PROD_IDX 0x00003008
ian@0 851 #define RCVCC_STD_PROD_IDX 0x0000300c
ian@0 852 #define RCVCC_MINI_PROD_IDX 0x00003010
ian@0 853 /* 0x3014 --> 0x3400 unused */
ian@0 854
ian@0 855 /* Receive list selector control registers */
ian@0 856 #define RCVLSC_MODE 0x00003400
ian@0 857 #define RCVLSC_MODE_RESET 0x00000001
ian@0 858 #define RCVLSC_MODE_ENABLE 0x00000002
ian@0 859 #define RCVLSC_MODE_ATTN_ENABLE 0x00000004
ian@0 860 #define RCVLSC_STATUS 0x00003404
ian@0 861 #define RCVLSC_STATUS_ERROR_ATTN 0x00000004
ian@0 862 /* 0x3408 --> 0x3800 unused */
ian@0 863
ian@0 864 /* Mbuf cluster free registers */
ian@0 865 #define MBFREE_MODE 0x00003800
ian@0 866 #define MBFREE_MODE_RESET 0x00000001
ian@0 867 #define MBFREE_MODE_ENABLE 0x00000002
ian@0 868 #define MBFREE_STATUS 0x00003804
ian@0 869 /* 0x3808 --> 0x3c00 unused */
ian@0 870
ian@0 871 /* Host coalescing control registers */
ian@0 872 #define HOSTCC_MODE 0x00003c00
ian@0 873 #define HOSTCC_MODE_RESET 0x00000001
ian@0 874 #define HOSTCC_MODE_ENABLE 0x00000002
ian@0 875 #define HOSTCC_MODE_ATTN 0x00000004
ian@0 876 #define HOSTCC_MODE_NOW 0x00000008
ian@0 877 #define HOSTCC_MODE_FULL_STATUS 0x00000000
ian@0 878 #define HOSTCC_MODE_64BYTE 0x00000080
ian@0 879 #define HOSTCC_MODE_32BYTE 0x00000100
ian@0 880 #define HOSTCC_MODE_CLRTICK_RXBD 0x00000200
ian@0 881 #define HOSTCC_MODE_CLRTICK_TXBD 0x00000400
ian@0 882 #define HOSTCC_MODE_NOINT_ON_NOW 0x00000800
ian@0 883 #define HOSTCC_MODE_NOINT_ON_FORCE 0x00001000
ian@0 884 #define HOSTCC_STATUS 0x00003c04
ian@0 885 #define HOSTCC_STATUS_ERROR_ATTN 0x00000004
ian@0 886 #define HOSTCC_RXCOL_TICKS 0x00003c08
ian@0 887 #define LOW_RXCOL_TICKS 0x00000032
ian@0 888 #define LOW_RXCOL_TICKS_CLRTCKS 0x00000014
ian@0 889 #define DEFAULT_RXCOL_TICKS 0x00000048
ian@0 890 #define HIGH_RXCOL_TICKS 0x00000096
ian@0 891 #define MAX_RXCOL_TICKS 0x000003ff
ian@0 892 #define HOSTCC_TXCOL_TICKS 0x00003c0c
ian@0 893 #define LOW_TXCOL_TICKS 0x00000096
ian@0 894 #define LOW_TXCOL_TICKS_CLRTCKS 0x00000048
ian@0 895 #define DEFAULT_TXCOL_TICKS 0x0000012c
ian@0 896 #define HIGH_TXCOL_TICKS 0x00000145
ian@0 897 #define MAX_TXCOL_TICKS 0x000003ff
ian@0 898 #define HOSTCC_RXMAX_FRAMES 0x00003c10
ian@0 899 #define LOW_RXMAX_FRAMES 0x00000005
ian@0 900 #define DEFAULT_RXMAX_FRAMES 0x00000008
ian@0 901 #define HIGH_RXMAX_FRAMES 0x00000012
ian@0 902 #define MAX_RXMAX_FRAMES 0x000000ff
ian@0 903 #define HOSTCC_TXMAX_FRAMES 0x00003c14
ian@0 904 #define LOW_TXMAX_FRAMES 0x00000035
ian@0 905 #define DEFAULT_TXMAX_FRAMES 0x0000004b
ian@0 906 #define HIGH_TXMAX_FRAMES 0x00000052
ian@0 907 #define MAX_TXMAX_FRAMES 0x000000ff
ian@0 908 #define HOSTCC_RXCOAL_TICK_INT 0x00003c18
ian@0 909 #define DEFAULT_RXCOAL_TICK_INT 0x00000019
ian@0 910 #define DEFAULT_RXCOAL_TICK_INT_CLRTCKS 0x00000014
ian@0 911 #define MAX_RXCOAL_TICK_INT 0x000003ff
ian@0 912 #define HOSTCC_TXCOAL_TICK_INT 0x00003c1c
ian@0 913 #define DEFAULT_TXCOAL_TICK_INT 0x00000019
ian@0 914 #define DEFAULT_TXCOAL_TICK_INT_CLRTCKS 0x00000014
ian@0 915 #define MAX_TXCOAL_TICK_INT 0x000003ff
ian@0 916 #define HOSTCC_RXCOAL_MAXF_INT 0x00003c20
ian@0 917 #define DEFAULT_RXCOAL_MAXF_INT 0x00000005
ian@0 918 #define MAX_RXCOAL_MAXF_INT 0x000000ff
ian@0 919 #define HOSTCC_TXCOAL_MAXF_INT 0x00003c24
ian@0 920 #define DEFAULT_TXCOAL_MAXF_INT 0x00000005
ian@0 921 #define MAX_TXCOAL_MAXF_INT 0x000000ff
ian@0 922 #define HOSTCC_STAT_COAL_TICKS 0x00003c28
ian@0 923 #define DEFAULT_STAT_COAL_TICKS 0x000f4240
ian@0 924 #define MAX_STAT_COAL_TICKS 0xd693d400
ian@0 925 #define MIN_STAT_COAL_TICKS 0x00000064
ian@0 926 /* 0x3c2c --> 0x3c30 unused */
ian@0 927 #define HOSTCC_STATS_BLK_HOST_ADDR 0x00003c30 /* 64-bit */
ian@0 928 #define HOSTCC_STATUS_BLK_HOST_ADDR 0x00003c38 /* 64-bit */
ian@0 929 #define HOSTCC_STATS_BLK_NIC_ADDR 0x00003c40
ian@0 930 #define HOSTCC_STATUS_BLK_NIC_ADDR 0x00003c44
ian@0 931 #define HOSTCC_FLOW_ATTN 0x00003c48
ian@0 932 /* 0x3c4c --> 0x3c50 unused */
ian@0 933 #define HOSTCC_JUMBO_CON_IDX 0x00003c50
ian@0 934 #define HOSTCC_STD_CON_IDX 0x00003c54
ian@0 935 #define HOSTCC_MINI_CON_IDX 0x00003c58
ian@0 936 /* 0x3c5c --> 0x3c80 unused */
ian@0 937 #define HOSTCC_RET_PROD_IDX_0 0x00003c80
ian@0 938 #define HOSTCC_RET_PROD_IDX_1 0x00003c84
ian@0 939 #define HOSTCC_RET_PROD_IDX_2 0x00003c88
ian@0 940 #define HOSTCC_RET_PROD_IDX_3 0x00003c8c
ian@0 941 #define HOSTCC_RET_PROD_IDX_4 0x00003c90
ian@0 942 #define HOSTCC_RET_PROD_IDX_5 0x00003c94
ian@0 943 #define HOSTCC_RET_PROD_IDX_6 0x00003c98
ian@0 944 #define HOSTCC_RET_PROD_IDX_7 0x00003c9c
ian@0 945 #define HOSTCC_RET_PROD_IDX_8 0x00003ca0
ian@0 946 #define HOSTCC_RET_PROD_IDX_9 0x00003ca4
ian@0 947 #define HOSTCC_RET_PROD_IDX_10 0x00003ca8
ian@0 948 #define HOSTCC_RET_PROD_IDX_11 0x00003cac
ian@0 949 #define HOSTCC_RET_PROD_IDX_12 0x00003cb0
ian@0 950 #define HOSTCC_RET_PROD_IDX_13 0x00003cb4
ian@0 951 #define HOSTCC_RET_PROD_IDX_14 0x00003cb8
ian@0 952 #define HOSTCC_RET_PROD_IDX_15 0x00003cbc
ian@0 953 #define HOSTCC_SND_CON_IDX_0 0x00003cc0
ian@0 954 #define HOSTCC_SND_CON_IDX_1 0x00003cc4
ian@0 955 #define HOSTCC_SND_CON_IDX_2 0x00003cc8
ian@0 956 #define HOSTCC_SND_CON_IDX_3 0x00003ccc
ian@0 957 #define HOSTCC_SND_CON_IDX_4 0x00003cd0
ian@0 958 #define HOSTCC_SND_CON_IDX_5 0x00003cd4
ian@0 959 #define HOSTCC_SND_CON_IDX_6 0x00003cd8
ian@0 960 #define HOSTCC_SND_CON_IDX_7 0x00003cdc
ian@0 961 #define HOSTCC_SND_CON_IDX_8 0x00003ce0
ian@0 962 #define HOSTCC_SND_CON_IDX_9 0x00003ce4
ian@0 963 #define HOSTCC_SND_CON_IDX_10 0x00003ce8
ian@0 964 #define HOSTCC_SND_CON_IDX_11 0x00003cec
ian@0 965 #define HOSTCC_SND_CON_IDX_12 0x00003cf0
ian@0 966 #define HOSTCC_SND_CON_IDX_13 0x00003cf4
ian@0 967 #define HOSTCC_SND_CON_IDX_14 0x00003cf8
ian@0 968 #define HOSTCC_SND_CON_IDX_15 0x00003cfc
ian@0 969 /* 0x3d00 --> 0x4000 unused */
ian@0 970
ian@0 971 /* Memory arbiter control registers */
ian@0 972 #define MEMARB_MODE 0x00004000
ian@0 973 #define MEMARB_MODE_RESET 0x00000001
ian@0 974 #define MEMARB_MODE_ENABLE 0x00000002
ian@0 975 #define MEMARB_STATUS 0x00004004
ian@0 976 #define MEMARB_TRAP_ADDR_LOW 0x00004008
ian@0 977 #define MEMARB_TRAP_ADDR_HIGH 0x0000400c
ian@0 978 /* 0x4010 --> 0x4400 unused */
ian@0 979
ian@0 980 /* Buffer manager control registers */
ian@0 981 #define BUFMGR_MODE 0x00004400
ian@0 982 #define BUFMGR_MODE_RESET 0x00000001
ian@0 983 #define BUFMGR_MODE_ENABLE 0x00000002
ian@0 984 #define BUFMGR_MODE_ATTN_ENABLE 0x00000004
ian@0 985 #define BUFMGR_MODE_BM_TEST 0x00000008
ian@0 986 #define BUFMGR_MODE_MBLOW_ATTN_ENAB 0x00000010
ian@0 987 #define BUFMGR_STATUS 0x00004404
ian@0 988 #define BUFMGR_STATUS_ERROR 0x00000004
ian@0 989 #define BUFMGR_STATUS_MBLOW 0x00000010
ian@0 990 #define BUFMGR_MB_POOL_ADDR 0x00004408
ian@0 991 #define BUFMGR_MB_POOL_SIZE 0x0000440c
ian@0 992 #define BUFMGR_MB_RDMA_LOW_WATER 0x00004410
ian@0 993 #define DEFAULT_MB_RDMA_LOW_WATER 0x00000050
ian@0 994 #define DEFAULT_MB_RDMA_LOW_WATER_5705 0x00000000
ian@0 995 #define DEFAULT_MB_RDMA_LOW_WATER_JUMBO 0x00000130
ian@0 996 #define DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780 0x00000000
ian@0 997 #define BUFMGR_MB_MACRX_LOW_WATER 0x00004414
ian@0 998 #define DEFAULT_MB_MACRX_LOW_WATER 0x00000020
ian@0 999 #define DEFAULT_MB_MACRX_LOW_WATER_5705 0x00000010
ian@0 1000 #define DEFAULT_MB_MACRX_LOW_WATER_JUMBO 0x00000098
ian@0 1001 #define DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780 0x0000004b
ian@0 1002 #define BUFMGR_MB_HIGH_WATER 0x00004418
ian@0 1003 #define DEFAULT_MB_HIGH_WATER 0x00000060
ian@0 1004 #define DEFAULT_MB_HIGH_WATER_5705 0x00000060
ian@0 1005 #define DEFAULT_MB_HIGH_WATER_JUMBO 0x0000017c
ian@0 1006 #define DEFAULT_MB_HIGH_WATER_JUMBO_5780 0x00000096
ian@0 1007 #define BUFMGR_RX_MB_ALLOC_REQ 0x0000441c
ian@0 1008 #define BUFMGR_MB_ALLOC_BIT 0x10000000
ian@0 1009 #define BUFMGR_RX_MB_ALLOC_RESP 0x00004420
ian@0 1010 #define BUFMGR_TX_MB_ALLOC_REQ 0x00004424
ian@0 1011 #define BUFMGR_TX_MB_ALLOC_RESP 0x00004428
ian@0 1012 #define BUFMGR_DMA_DESC_POOL_ADDR 0x0000442c
ian@0 1013 #define BUFMGR_DMA_DESC_POOL_SIZE 0x00004430
ian@0 1014 #define BUFMGR_DMA_LOW_WATER 0x00004434
ian@0 1015 #define DEFAULT_DMA_LOW_WATER 0x00000005
ian@0 1016 #define BUFMGR_DMA_HIGH_WATER 0x00004438
ian@0 1017 #define DEFAULT_DMA_HIGH_WATER 0x0000000a
ian@0 1018 #define BUFMGR_RX_DMA_ALLOC_REQ 0x0000443c
ian@0 1019 #define BUFMGR_RX_DMA_ALLOC_RESP 0x00004440
ian@0 1020 #define BUFMGR_TX_DMA_ALLOC_REQ 0x00004444
ian@0 1021 #define BUFMGR_TX_DMA_ALLOC_RESP 0x00004448
ian@0 1022 #define BUFMGR_HWDIAG_0 0x0000444c
ian@0 1023 #define BUFMGR_HWDIAG_1 0x00004450
ian@0 1024 #define BUFMGR_HWDIAG_2 0x00004454
ian@0 1025 /* 0x4458 --> 0x4800 unused */
ian@0 1026
ian@0 1027 /* Read DMA control registers */
ian@0 1028 #define RDMAC_MODE 0x00004800
ian@0 1029 #define RDMAC_MODE_RESET 0x00000001
ian@0 1030 #define RDMAC_MODE_ENABLE 0x00000002
ian@0 1031 #define RDMAC_MODE_TGTABORT_ENAB 0x00000004
ian@0 1032 #define RDMAC_MODE_MSTABORT_ENAB 0x00000008
ian@0 1033 #define RDMAC_MODE_PARITYERR_ENAB 0x00000010
ian@0 1034 #define RDMAC_MODE_ADDROFLOW_ENAB 0x00000020
ian@0 1035 #define RDMAC_MODE_FIFOOFLOW_ENAB 0x00000040
ian@0 1036 #define RDMAC_MODE_FIFOURUN_ENAB 0x00000080
ian@0 1037 #define RDMAC_MODE_FIFOOREAD_ENAB 0x00000100
ian@0 1038 #define RDMAC_MODE_LNGREAD_ENAB 0x00000200
ian@0 1039 #define RDMAC_MODE_SPLIT_ENABLE 0x00000800
ian@0 1040 #define RDMAC_MODE_SPLIT_RESET 0x00001000
ian@0 1041 #define RDMAC_MODE_FIFO_SIZE_128 0x00020000
ian@0 1042 #define RDMAC_MODE_FIFO_LONG_BURST 0x00030000
ian@0 1043 #define RDMAC_STATUS 0x00004804
ian@0 1044 #define RDMAC_STATUS_TGTABORT 0x00000004
ian@0 1045 #define RDMAC_STATUS_MSTABORT 0x00000008
ian@0 1046 #define RDMAC_STATUS_PARITYERR 0x00000010
ian@0 1047 #define RDMAC_STATUS_ADDROFLOW 0x00000020
ian@0 1048 #define RDMAC_STATUS_FIFOOFLOW 0x00000040
ian@0 1049 #define RDMAC_STATUS_FIFOURUN 0x00000080
ian@0 1050 #define RDMAC_STATUS_FIFOOREAD 0x00000100
ian@0 1051 #define RDMAC_STATUS_LNGREAD 0x00000200
ian@0 1052 /* 0x4808 --> 0x4c00 unused */
ian@0 1053
ian@0 1054 /* Write DMA control registers */
ian@0 1055 #define WDMAC_MODE 0x00004c00
ian@0 1056 #define WDMAC_MODE_RESET 0x00000001
ian@0 1057 #define WDMAC_MODE_ENABLE 0x00000002
ian@0 1058 #define WDMAC_MODE_TGTABORT_ENAB 0x00000004
ian@0 1059 #define WDMAC_MODE_MSTABORT_ENAB 0x00000008
ian@0 1060 #define WDMAC_MODE_PARITYERR_ENAB 0x00000010
ian@0 1061 #define WDMAC_MODE_ADDROFLOW_ENAB 0x00000020
ian@0 1062 #define WDMAC_MODE_FIFOOFLOW_ENAB 0x00000040
ian@0 1063 #define WDMAC_MODE_FIFOURUN_ENAB 0x00000080
ian@0 1064 #define WDMAC_MODE_FIFOOREAD_ENAB 0x00000100
ian@0 1065 #define WDMAC_MODE_LNGREAD_ENAB 0x00000200
ian@0 1066 #define WDMAC_MODE_RX_ACCEL 0x00000400
ian@0 1067 #define WDMAC_STATUS 0x00004c04
ian@0 1068 #define WDMAC_STATUS_TGTABORT 0x00000004
ian@0 1069 #define WDMAC_STATUS_MSTABORT 0x00000008
ian@0 1070 #define WDMAC_STATUS_PARITYERR 0x00000010
ian@0 1071 #define WDMAC_STATUS_ADDROFLOW 0x00000020
ian@0 1072 #define WDMAC_STATUS_FIFOOFLOW 0x00000040
ian@0 1073 #define WDMAC_STATUS_FIFOURUN 0x00000080
ian@0 1074 #define WDMAC_STATUS_FIFOOREAD 0x00000100
ian@0 1075 #define WDMAC_STATUS_LNGREAD 0x00000200
ian@0 1076 /* 0x4c08 --> 0x5000 unused */
ian@0 1077
ian@0 1078 /* Per-cpu register offsets (arm9) */
ian@0 1079 #define CPU_MODE 0x00000000
ian@0 1080 #define CPU_MODE_RESET 0x00000001
ian@0 1081 #define CPU_MODE_HALT 0x00000400
ian@0 1082 #define CPU_STATE 0x00000004
ian@0 1083 #define CPU_EVTMASK 0x00000008
ian@0 1084 /* 0xc --> 0x1c reserved */
ian@0 1085 #define CPU_PC 0x0000001c
ian@0 1086 #define CPU_INSN 0x00000020
ian@0 1087 #define CPU_SPAD_UFLOW 0x00000024
ian@0 1088 #define CPU_WDOG_CLEAR 0x00000028
ian@0 1089 #define CPU_WDOG_VECTOR 0x0000002c
ian@0 1090 #define CPU_WDOG_PC 0x00000030
ian@0 1091 #define CPU_HW_BP 0x00000034
ian@0 1092 /* 0x38 --> 0x44 unused */
ian@0 1093 #define CPU_WDOG_SAVED_STATE 0x00000044
ian@0 1094 #define CPU_LAST_BRANCH_ADDR 0x00000048
ian@0 1095 #define CPU_SPAD_UFLOW_SET 0x0000004c
ian@0 1096 /* 0x50 --> 0x200 unused */
ian@0 1097 #define CPU_R0 0x00000200
ian@0 1098 #define CPU_R1 0x00000204
ian@0 1099 #define CPU_R2 0x00000208
ian@0 1100 #define CPU_R3 0x0000020c
ian@0 1101 #define CPU_R4 0x00000210
ian@0 1102 #define CPU_R5 0x00000214
ian@0 1103 #define CPU_R6 0x00000218
ian@0 1104 #define CPU_R7 0x0000021c
ian@0 1105 #define CPU_R8 0x00000220
ian@0 1106 #define CPU_R9 0x00000224
ian@0 1107 #define CPU_R10 0x00000228
ian@0 1108 #define CPU_R11 0x0000022c
ian@0 1109 #define CPU_R12 0x00000230
ian@0 1110 #define CPU_R13 0x00000234
ian@0 1111 #define CPU_R14 0x00000238
ian@0 1112 #define CPU_R15 0x0000023c
ian@0 1113 #define CPU_R16 0x00000240
ian@0 1114 #define CPU_R17 0x00000244
ian@0 1115 #define CPU_R18 0x00000248
ian@0 1116 #define CPU_R19 0x0000024c
ian@0 1117 #define CPU_R20 0x00000250
ian@0 1118 #define CPU_R21 0x00000254
ian@0 1119 #define CPU_R22 0x00000258
ian@0 1120 #define CPU_R23 0x0000025c
ian@0 1121 #define CPU_R24 0x00000260
ian@0 1122 #define CPU_R25 0x00000264
ian@0 1123 #define CPU_R26 0x00000268
ian@0 1124 #define CPU_R27 0x0000026c
ian@0 1125 #define CPU_R28 0x00000270
ian@0 1126 #define CPU_R29 0x00000274
ian@0 1127 #define CPU_R30 0x00000278
ian@0 1128 #define CPU_R31 0x0000027c
ian@0 1129 /* 0x280 --> 0x400 unused */
ian@0 1130
ian@0 1131 #define RX_CPU_BASE 0x00005000
ian@0 1132 #define RX_CPU_MODE 0x00005000
ian@0 1133 #define RX_CPU_STATE 0x00005004
ian@0 1134 #define RX_CPU_PGMCTR 0x0000501c
ian@0 1135 #define RX_CPU_HWBKPT 0x00005034
ian@0 1136 #define TX_CPU_BASE 0x00005400
ian@0 1137 #define TX_CPU_MODE 0x00005400
ian@0 1138 #define TX_CPU_STATE 0x00005404
ian@0 1139 #define TX_CPU_PGMCTR 0x0000541c
ian@0 1140
ian@0 1141 /* Mailboxes */
ian@0 1142 #define GRCMBOX_INTERRUPT_0 0x00005800 /* 64-bit */
ian@0 1143 #define GRCMBOX_INTERRUPT_1 0x00005808 /* 64-bit */
ian@0 1144 #define GRCMBOX_INTERRUPT_2 0x00005810 /* 64-bit */
ian@0 1145 #define GRCMBOX_INTERRUPT_3 0x00005818 /* 64-bit */
ian@0 1146 #define GRCMBOX_GENERAL_0 0x00005820 /* 64-bit */
ian@0 1147 #define GRCMBOX_GENERAL_1 0x00005828 /* 64-bit */
ian@0 1148 #define GRCMBOX_GENERAL_2 0x00005830 /* 64-bit */
ian@0 1149 #define GRCMBOX_GENERAL_3 0x00005838 /* 64-bit */
ian@0 1150 #define GRCMBOX_GENERAL_4 0x00005840 /* 64-bit */
ian@0 1151 #define GRCMBOX_GENERAL_5 0x00005848 /* 64-bit */
ian@0 1152 #define GRCMBOX_GENERAL_6 0x00005850 /* 64-bit */
ian@0 1153 #define GRCMBOX_GENERAL_7 0x00005858 /* 64-bit */
ian@0 1154 #define GRCMBOX_RELOAD_STAT 0x00005860 /* 64-bit */
ian@0 1155 #define GRCMBOX_RCVSTD_PROD_IDX 0x00005868 /* 64-bit */
ian@0 1156 #define GRCMBOX_RCVJUMBO_PROD_IDX 0x00005870 /* 64-bit */
ian@0 1157 #define GRCMBOX_RCVMINI_PROD_IDX 0x00005878 /* 64-bit */
ian@0 1158 #define GRCMBOX_RCVRET_CON_IDX_0 0x00005880 /* 64-bit */
ian@0 1159 #define GRCMBOX_RCVRET_CON_IDX_1 0x00005888 /* 64-bit */
ian@0 1160 #define GRCMBOX_RCVRET_CON_IDX_2 0x00005890 /* 64-bit */
ian@0 1161 #define GRCMBOX_RCVRET_CON_IDX_3 0x00005898 /* 64-bit */
ian@0 1162 #define GRCMBOX_RCVRET_CON_IDX_4 0x000058a0 /* 64-bit */
ian@0 1163 #define GRCMBOX_RCVRET_CON_IDX_5 0x000058a8 /* 64-bit */
ian@0 1164 #define GRCMBOX_RCVRET_CON_IDX_6 0x000058b0 /* 64-bit */
ian@0 1165 #define GRCMBOX_RCVRET_CON_IDX_7 0x000058b8 /* 64-bit */
ian@0 1166 #define GRCMBOX_RCVRET_CON_IDX_8 0x000058c0 /* 64-bit */
ian@0 1167 #define GRCMBOX_RCVRET_CON_IDX_9 0x000058c8 /* 64-bit */
ian@0 1168 #define GRCMBOX_RCVRET_CON_IDX_10 0x000058d0 /* 64-bit */
ian@0 1169 #define GRCMBOX_RCVRET_CON_IDX_11 0x000058d8 /* 64-bit */
ian@0 1170 #define GRCMBOX_RCVRET_CON_IDX_12 0x000058e0 /* 64-bit */
ian@0 1171 #define GRCMBOX_RCVRET_CON_IDX_13 0x000058e8 /* 64-bit */
ian@0 1172 #define GRCMBOX_RCVRET_CON_IDX_14 0x000058f0 /* 64-bit */
ian@0 1173 #define GRCMBOX_RCVRET_CON_IDX_15 0x000058f8 /* 64-bit */
ian@0 1174 #define GRCMBOX_SNDHOST_PROD_IDX_0 0x00005900 /* 64-bit */
ian@0 1175 #define GRCMBOX_SNDHOST_PROD_IDX_1 0x00005908 /* 64-bit */
ian@0 1176 #define GRCMBOX_SNDHOST_PROD_IDX_2 0x00005910 /* 64-bit */
ian@0 1177 #define GRCMBOX_SNDHOST_PROD_IDX_3 0x00005918 /* 64-bit */
ian@0 1178 #define GRCMBOX_SNDHOST_PROD_IDX_4 0x00005920 /* 64-bit */
ian@0 1179 #define GRCMBOX_SNDHOST_PROD_IDX_5 0x00005928 /* 64-bit */
ian@0 1180 #define GRCMBOX_SNDHOST_PROD_IDX_6 0x00005930 /* 64-bit */
ian@0 1181 #define GRCMBOX_SNDHOST_PROD_IDX_7 0x00005938 /* 64-bit */
ian@0 1182 #define GRCMBOX_SNDHOST_PROD_IDX_8 0x00005940 /* 64-bit */
ian@0 1183 #define GRCMBOX_SNDHOST_PROD_IDX_9 0x00005948 /* 64-bit */
ian@0 1184 #define GRCMBOX_SNDHOST_PROD_IDX_10 0x00005950 /* 64-bit */
ian@0 1185 #define GRCMBOX_SNDHOST_PROD_IDX_11 0x00005958 /* 64-bit */
ian@0 1186 #define GRCMBOX_SNDHOST_PROD_IDX_12 0x00005960 /* 64-bit */
ian@0 1187 #define GRCMBOX_SNDHOST_PROD_IDX_13 0x00005968 /* 64-bit */
ian@0 1188 #define GRCMBOX_SNDHOST_PROD_IDX_14 0x00005970 /* 64-bit */
ian@0 1189 #define GRCMBOX_SNDHOST_PROD_IDX_15 0x00005978 /* 64-bit */
ian@0 1190 #define GRCMBOX_SNDNIC_PROD_IDX_0 0x00005980 /* 64-bit */
ian@0 1191 #define GRCMBOX_SNDNIC_PROD_IDX_1 0x00005988 /* 64-bit */
ian@0 1192 #define GRCMBOX_SNDNIC_PROD_IDX_2 0x00005990 /* 64-bit */
ian@0 1193 #define GRCMBOX_SNDNIC_PROD_IDX_3 0x00005998 /* 64-bit */
ian@0 1194 #define GRCMBOX_SNDNIC_PROD_IDX_4 0x000059a0 /* 64-bit */
ian@0 1195 #define GRCMBOX_SNDNIC_PROD_IDX_5 0x000059a8 /* 64-bit */
ian@0 1196 #define GRCMBOX_SNDNIC_PROD_IDX_6 0x000059b0 /* 64-bit */
ian@0 1197 #define GRCMBOX_SNDNIC_PROD_IDX_7 0x000059b8 /* 64-bit */
ian@0 1198 #define GRCMBOX_SNDNIC_PROD_IDX_8 0x000059c0 /* 64-bit */
ian@0 1199 #define GRCMBOX_SNDNIC_PROD_IDX_9 0x000059c8 /* 64-bit */
ian@0 1200 #define GRCMBOX_SNDNIC_PROD_IDX_10 0x000059d0 /* 64-bit */
ian@0 1201 #define GRCMBOX_SNDNIC_PROD_IDX_11 0x000059d8 /* 64-bit */
ian@0 1202 #define GRCMBOX_SNDNIC_PROD_IDX_12 0x000059e0 /* 64-bit */
ian@0 1203 #define GRCMBOX_SNDNIC_PROD_IDX_13 0x000059e8 /* 64-bit */
ian@0 1204 #define GRCMBOX_SNDNIC_PROD_IDX_14 0x000059f0 /* 64-bit */
ian@0 1205 #define GRCMBOX_SNDNIC_PROD_IDX_15 0x000059f8 /* 64-bit */
ian@0 1206 #define GRCMBOX_HIGH_PRIO_EV_VECTOR 0x00005a00
ian@0 1207 #define GRCMBOX_HIGH_PRIO_EV_MASK 0x00005a04
ian@0 1208 #define GRCMBOX_LOW_PRIO_EV_VEC 0x00005a08
ian@0 1209 #define GRCMBOX_LOW_PRIO_EV_MASK 0x00005a0c
ian@0 1210 /* 0x5a10 --> 0x5c00 */
ian@0 1211
ian@0 1212 /* Flow Through queues */
ian@0 1213 #define FTQ_RESET 0x00005c00
ian@0 1214 /* 0x5c04 --> 0x5c10 unused */
ian@0 1215 #define FTQ_DMA_NORM_READ_CTL 0x00005c10
ian@0 1216 #define FTQ_DMA_NORM_READ_FULL_CNT 0x00005c14
ian@0 1217 #define FTQ_DMA_NORM_READ_FIFO_ENQDEQ 0x00005c18
ian@0 1218 #define FTQ_DMA_NORM_READ_WRITE_PEEK 0x00005c1c
ian@0 1219 #define FTQ_DMA_HIGH_READ_CTL 0x00005c20
ian@0 1220 #define FTQ_DMA_HIGH_READ_FULL_CNT 0x00005c24
ian@0 1221 #define FTQ_DMA_HIGH_READ_FIFO_ENQDEQ 0x00005c28
ian@0 1222 #define FTQ_DMA_HIGH_READ_WRITE_PEEK 0x00005c2c
ian@0 1223 #define FTQ_DMA_COMP_DISC_CTL 0x00005c30
ian@0 1224 #define FTQ_DMA_COMP_DISC_FULL_CNT 0x00005c34
ian@0 1225 #define FTQ_DMA_COMP_DISC_FIFO_ENQDEQ 0x00005c38
ian@0 1226 #define FTQ_DMA_COMP_DISC_WRITE_PEEK 0x00005c3c
ian@0 1227 #define FTQ_SEND_BD_COMP_CTL 0x00005c40
ian@0 1228 #define FTQ_SEND_BD_COMP_FULL_CNT 0x00005c44
ian@0 1229 #define FTQ_SEND_BD_COMP_FIFO_ENQDEQ 0x00005c48
ian@0 1230 #define FTQ_SEND_BD_COMP_WRITE_PEEK 0x00005c4c
ian@0 1231 #define FTQ_SEND_DATA_INIT_CTL 0x00005c50
ian@0 1232 #define FTQ_SEND_DATA_INIT_FULL_CNT 0x00005c54
ian@0 1233 #define FTQ_SEND_DATA_INIT_FIFO_ENQDEQ 0x00005c58
ian@0 1234 #define FTQ_SEND_DATA_INIT_WRITE_PEEK 0x00005c5c
ian@0 1235 #define FTQ_DMA_NORM_WRITE_CTL 0x00005c60
ian@0 1236 #define FTQ_DMA_NORM_WRITE_FULL_CNT 0x00005c64
ian@0 1237 #define FTQ_DMA_NORM_WRITE_FIFO_ENQDEQ 0x00005c68
ian@0 1238 #define FTQ_DMA_NORM_WRITE_WRITE_PEEK 0x00005c6c
ian@0 1239 #define FTQ_DMA_HIGH_WRITE_CTL 0x00005c70
ian@0 1240 #define FTQ_DMA_HIGH_WRITE_FULL_CNT 0x00005c74
ian@0 1241 #define FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ 0x00005c78
ian@0 1242 #define FTQ_DMA_HIGH_WRITE_WRITE_PEEK 0x00005c7c
ian@0 1243 #define FTQ_SWTYPE1_CTL 0x00005c80
ian@0 1244 #define FTQ_SWTYPE1_FULL_CNT 0x00005c84
ian@0 1245 #define FTQ_SWTYPE1_FIFO_ENQDEQ 0x00005c88
ian@0 1246 #define FTQ_SWTYPE1_WRITE_PEEK 0x00005c8c
ian@0 1247 #define FTQ_SEND_DATA_COMP_CTL 0x00005c90
ian@0 1248 #define FTQ_SEND_DATA_COMP_FULL_CNT 0x00005c94
ian@0 1249 #define FTQ_SEND_DATA_COMP_FIFO_ENQDEQ 0x00005c98
ian@0 1250 #define FTQ_SEND_DATA_COMP_WRITE_PEEK 0x00005c9c
ian@0 1251 #define FTQ_HOST_COAL_CTL 0x00005ca0
ian@0 1252 #define FTQ_HOST_COAL_FULL_CNT 0x00005ca4
ian@0 1253 #define FTQ_HOST_COAL_FIFO_ENQDEQ 0x00005ca8
ian@0 1254 #define FTQ_HOST_COAL_WRITE_PEEK 0x00005cac
ian@0 1255 #define FTQ_MAC_TX_CTL 0x00005cb0
ian@0 1256 #define FTQ_MAC_TX_FULL_CNT 0x00005cb4
ian@0 1257 #define FTQ_MAC_TX_FIFO_ENQDEQ 0x00005cb8
ian@0 1258 #define FTQ_MAC_TX_WRITE_PEEK 0x00005cbc
ian@0 1259 #define FTQ_MB_FREE_CTL 0x00005cc0
ian@0 1260 #define FTQ_MB_FREE_FULL_CNT 0x00005cc4
ian@0 1261 #define FTQ_MB_FREE_FIFO_ENQDEQ 0x00005cc8
ian@0 1262 #define FTQ_MB_FREE_WRITE_PEEK 0x00005ccc
ian@0 1263 #define FTQ_RCVBD_COMP_CTL 0x00005cd0
ian@0 1264 #define FTQ_RCVBD_COMP_FULL_CNT 0x00005cd4
ian@0 1265 #define FTQ_RCVBD_COMP_FIFO_ENQDEQ 0x00005cd8
ian@0 1266 #define FTQ_RCVBD_COMP_WRITE_PEEK 0x00005cdc
ian@0 1267 #define FTQ_RCVLST_PLMT_CTL 0x00005ce0
ian@0 1268 #define FTQ_RCVLST_PLMT_FULL_CNT 0x00005ce4
ian@0 1269 #define FTQ_RCVLST_PLMT_FIFO_ENQDEQ 0x00005ce8
ian@0 1270 #define FTQ_RCVLST_PLMT_WRITE_PEEK 0x00005cec
ian@0 1271 #define FTQ_RCVDATA_INI_CTL 0x00005cf0
ian@0 1272 #define FTQ_RCVDATA_INI_FULL_CNT 0x00005cf4
ian@0 1273 #define FTQ_RCVDATA_INI_FIFO_ENQDEQ 0x00005cf8
ian@0 1274 #define FTQ_RCVDATA_INI_WRITE_PEEK 0x00005cfc
ian@0 1275 #define FTQ_RCVDATA_COMP_CTL 0x00005d00
ian@0 1276 #define FTQ_RCVDATA_COMP_FULL_CNT 0x00005d04
ian@0 1277 #define FTQ_RCVDATA_COMP_FIFO_ENQDEQ 0x00005d08
ian@0 1278 #define FTQ_RCVDATA_COMP_WRITE_PEEK 0x00005d0c
ian@0 1279 #define FTQ_SWTYPE2_CTL 0x00005d10
ian@0 1280 #define FTQ_SWTYPE2_FULL_CNT 0x00005d14
ian@0 1281 #define FTQ_SWTYPE2_FIFO_ENQDEQ 0x00005d18
ian@0 1282 #define FTQ_SWTYPE2_WRITE_PEEK 0x00005d1c
ian@0 1283 /* 0x5d20 --> 0x6000 unused */
ian@0 1284
ian@0 1285 /* Message signaled interrupt registers */
ian@0 1286 #define MSGINT_MODE 0x00006000
ian@0 1287 #define MSGINT_MODE_RESET 0x00000001
ian@0 1288 #define MSGINT_MODE_ENABLE 0x00000002
ian@0 1289 #define MSGINT_STATUS 0x00006004
ian@0 1290 #define MSGINT_FIFO 0x00006008
ian@0 1291 /* 0x600c --> 0x6400 unused */
ian@0 1292
ian@0 1293 /* DMA completion registers */
ian@0 1294 #define DMAC_MODE 0x00006400
ian@0 1295 #define DMAC_MODE_RESET 0x00000001
ian@0 1296 #define DMAC_MODE_ENABLE 0x00000002
ian@0 1297 /* 0x6404 --> 0x6800 unused */
ian@0 1298
ian@0 1299 /* GRC registers */
ian@0 1300 #define GRC_MODE 0x00006800
ian@0 1301 #define GRC_MODE_UPD_ON_COAL 0x00000001
ian@0 1302 #define GRC_MODE_BSWAP_NONFRM_DATA 0x00000002
ian@0 1303 #define GRC_MODE_WSWAP_NONFRM_DATA 0x00000004
ian@0 1304 #define GRC_MODE_BSWAP_DATA 0x00000010
ian@0 1305 #define GRC_MODE_WSWAP_DATA 0x00000020
ian@0 1306 #define GRC_MODE_SPLITHDR 0x00000100
ian@0 1307 #define GRC_MODE_NOFRM_CRACKING 0x00000200
ian@0 1308 #define GRC_MODE_INCL_CRC 0x00000400
ian@0 1309 #define GRC_MODE_ALLOW_BAD_FRMS 0x00000800
ian@0 1310 #define GRC_MODE_NOIRQ_ON_SENDS 0x00002000
ian@0 1311 #define GRC_MODE_NOIRQ_ON_RCV 0x00004000
ian@0 1312 #define GRC_MODE_FORCE_PCI32BIT 0x00008000
ian@0 1313 #define GRC_MODE_HOST_STACKUP 0x00010000
ian@0 1314 #define GRC_MODE_HOST_SENDBDS 0x00020000
ian@0 1315 #define GRC_MODE_NO_TX_PHDR_CSUM 0x00100000
ian@0 1316 #define GRC_MODE_NVRAM_WR_ENABLE 0x00200000
ian@0 1317 #define GRC_MODE_NO_RX_PHDR_CSUM 0x00800000
ian@0 1318 #define GRC_MODE_IRQ_ON_TX_CPU_ATTN 0x01000000
ian@0 1319 #define GRC_MODE_IRQ_ON_RX_CPU_ATTN 0x02000000
ian@0 1320 #define GRC_MODE_IRQ_ON_MAC_ATTN 0x04000000
ian@0 1321 #define GRC_MODE_IRQ_ON_DMA_ATTN 0x08000000
ian@0 1322 #define GRC_MODE_IRQ_ON_FLOW_ATTN 0x10000000
ian@0 1323 #define GRC_MODE_4X_NIC_SEND_RINGS 0x20000000
ian@0 1324 #define GRC_MODE_MCAST_FRM_ENABLE 0x40000000
ian@0 1325 #define GRC_MISC_CFG 0x00006804
ian@0 1326 #define GRC_MISC_CFG_CORECLK_RESET 0x00000001
ian@0 1327 #define GRC_MISC_CFG_PRESCALAR_MASK 0x000000fe
ian@0 1328 #define GRC_MISC_CFG_PRESCALAR_SHIFT 1
ian@0 1329 #define GRC_MISC_CFG_BOARD_ID_MASK 0x0001e000
ian@0 1330 #define GRC_MISC_CFG_BOARD_ID_5700 0x0001e000
ian@0 1331 #define GRC_MISC_CFG_BOARD_ID_5701 0x00000000
ian@0 1332 #define GRC_MISC_CFG_BOARD_ID_5702FE 0x00004000
ian@0 1333 #define GRC_MISC_CFG_BOARD_ID_5703 0x00000000
ian@0 1334 #define GRC_MISC_CFG_BOARD_ID_5703S 0x00002000
ian@0 1335 #define GRC_MISC_CFG_BOARD_ID_5704 0x00000000
ian@0 1336 #define GRC_MISC_CFG_BOARD_ID_5704CIOBE 0x00004000
ian@0 1337 #define GRC_MISC_CFG_BOARD_ID_5704_A2 0x00008000
ian@0 1338 #define GRC_MISC_CFG_BOARD_ID_5788 0x00010000
ian@0 1339 #define GRC_MISC_CFG_BOARD_ID_5788M 0x00018000
ian@0 1340 #define GRC_MISC_CFG_BOARD_ID_AC91002A1 0x00018000
ian@0 1341 #define GRC_MISC_CFG_KEEP_GPHY_POWER 0x04000000
ian@0 1342 #define GRC_LOCAL_CTRL 0x00006808
ian@0 1343 #define GRC_LCLCTRL_INT_ACTIVE 0x00000001
ian@0 1344 #define GRC_LCLCTRL_CLEARINT 0x00000002
ian@0 1345 #define GRC_LCLCTRL_SETINT 0x00000004
ian@0 1346 #define GRC_LCLCTRL_INT_ON_ATTN 0x00000008
ian@0 1347 #define GRC_LCLCTRL_GPIO_UART_SEL 0x00000010 /* 5755 only */
ian@0 1348 #define GRC_LCLCTRL_USE_SIG_DETECT 0x00000010 /* 5714/5780 only */
ian@0 1349 #define GRC_LCLCTRL_USE_EXT_SIG_DETECT 0x00000020 /* 5714/5780 only */
ian@0 1350 #define GRC_LCLCTRL_GPIO_INPUT3 0x00000020
ian@0 1351 #define GRC_LCLCTRL_GPIO_OE3 0x00000040
ian@0 1352 #define GRC_LCLCTRL_GPIO_OUTPUT3 0x00000080
ian@0 1353 #define GRC_LCLCTRL_GPIO_INPUT0 0x00000100
ian@0 1354 #define GRC_LCLCTRL_GPIO_INPUT1 0x00000200
ian@0 1355 #define GRC_LCLCTRL_GPIO_INPUT2 0x00000400
ian@0 1356 #define GRC_LCLCTRL_GPIO_OE0 0x00000800
ian@0 1357 #define GRC_LCLCTRL_GPIO_OE1 0x00001000
ian@0 1358 #define GRC_LCLCTRL_GPIO_OE2 0x00002000
ian@0 1359 #define GRC_LCLCTRL_GPIO_OUTPUT0 0x00004000
ian@0 1360 #define GRC_LCLCTRL_GPIO_OUTPUT1 0x00008000
ian@0 1361 #define GRC_LCLCTRL_GPIO_OUTPUT2 0x00010000
ian@0 1362 #define GRC_LCLCTRL_EXTMEM_ENABLE 0x00020000
ian@0 1363 #define GRC_LCLCTRL_MEMSZ_MASK 0x001c0000
ian@0 1364 #define GRC_LCLCTRL_MEMSZ_256K 0x00000000
ian@0 1365 #define GRC_LCLCTRL_MEMSZ_512K 0x00040000
ian@0 1366 #define GRC_LCLCTRL_MEMSZ_1M 0x00080000
ian@0 1367 #define GRC_LCLCTRL_MEMSZ_2M 0x000c0000
ian@0 1368 #define GRC_LCLCTRL_MEMSZ_4M 0x00100000
ian@0 1369 #define GRC_LCLCTRL_MEMSZ_8M 0x00140000
ian@0 1370 #define GRC_LCLCTRL_MEMSZ_16M 0x00180000
ian@0 1371 #define GRC_LCLCTRL_BANK_SELECT 0x00200000
ian@0 1372 #define GRC_LCLCTRL_SSRAM_TYPE 0x00400000
ian@0 1373 #define GRC_LCLCTRL_AUTO_SEEPROM 0x01000000
ian@0 1374 #define GRC_TIMER 0x0000680c
ian@0 1375 #define GRC_RX_CPU_EVENT 0x00006810
ian@0 1376 #define GRC_RX_TIMER_REF 0x00006814
ian@0 1377 #define GRC_RX_CPU_SEM 0x00006818
ian@0 1378 #define GRC_REMOTE_RX_CPU_ATTN 0x0000681c
ian@0 1379 #define GRC_TX_CPU_EVENT 0x00006820
ian@0 1380 #define GRC_TX_TIMER_REF 0x00006824
ian@0 1381 #define GRC_TX_CPU_SEM 0x00006828
ian@0 1382 #define GRC_REMOTE_TX_CPU_ATTN 0x0000682c
ian@0 1383 #define GRC_MEM_POWER_UP 0x00006830 /* 64-bit */
ian@0 1384 #define GRC_EEPROM_ADDR 0x00006838
ian@0 1385 #define EEPROM_ADDR_WRITE 0x00000000
ian@0 1386 #define EEPROM_ADDR_READ 0x80000000
ian@0 1387 #define EEPROM_ADDR_COMPLETE 0x40000000
ian@0 1388 #define EEPROM_ADDR_FSM_RESET 0x20000000
ian@0 1389 #define EEPROM_ADDR_DEVID_MASK 0x1c000000
ian@0 1390 #define EEPROM_ADDR_DEVID_SHIFT 26
ian@0 1391 #define EEPROM_ADDR_START 0x02000000
ian@0 1392 #define EEPROM_ADDR_CLKPERD_SHIFT 16
ian@0 1393 #define EEPROM_ADDR_ADDR_MASK 0x0000ffff
ian@0 1394 #define EEPROM_ADDR_ADDR_SHIFT 0
ian@0 1395 #define EEPROM_DEFAULT_CLOCK_PERIOD 0x60
ian@0 1396 #define EEPROM_CHIP_SIZE (64 * 1024)
ian@0 1397 #define GRC_EEPROM_DATA 0x0000683c
ian@0 1398 #define GRC_EEPROM_CTRL 0x00006840
ian@0 1399 #define GRC_MDI_CTRL 0x00006844
ian@0 1400 #define GRC_SEEPROM_DELAY 0x00006848
ian@0 1401 /* 0x684c --> 0x6c00 unused */
ian@0 1402 #define GRC_FASTBOOT_PC 0x00006894 /* 5752, 5755, 5787 */
ian@0 1403
ian@0 1404 /* 0x6c00 --> 0x7000 unused */
ian@0 1405
ian@0 1406 /* NVRAM Control registers */
ian@0 1407 #define NVRAM_CMD 0x00007000
ian@0 1408 #define NVRAM_CMD_RESET 0x00000001
ian@0 1409 #define NVRAM_CMD_DONE 0x00000008
ian@0 1410 #define NVRAM_CMD_GO 0x00000010
ian@0 1411 #define NVRAM_CMD_WR 0x00000020
ian@0 1412 #define NVRAM_CMD_RD 0x00000000
ian@0 1413 #define NVRAM_CMD_ERASE 0x00000040
ian@0 1414 #define NVRAM_CMD_FIRST 0x00000080
ian@0 1415 #define NVRAM_CMD_LAST 0x00000100
ian@0 1416 #define NVRAM_CMD_WREN 0x00010000
ian@0 1417 #define NVRAM_CMD_WRDI 0x00020000
ian@0 1418 #define NVRAM_STAT 0x00007004
ian@0 1419 #define NVRAM_WRDATA 0x00007008
ian@0 1420 #define NVRAM_ADDR 0x0000700c
ian@0 1421 #define NVRAM_ADDR_MSK 0x00ffffff
ian@0 1422 #define NVRAM_RDDATA 0x00007010
ian@0 1423 #define NVRAM_CFG1 0x00007014
ian@0 1424 #define NVRAM_CFG1_FLASHIF_ENAB 0x00000001
ian@0 1425 #define NVRAM_CFG1_BUFFERED_MODE 0x00000002
ian@0 1426 #define NVRAM_CFG1_PASS_THRU 0x00000004
ian@0 1427 #define NVRAM_CFG1_STATUS_BITS 0x00000070
ian@0 1428 #define NVRAM_CFG1_BIT_BANG 0x00000008
ian@0 1429 #define NVRAM_CFG1_FLASH_SIZE 0x02000000
ian@0 1430 #define NVRAM_CFG1_COMPAT_BYPASS 0x80000000
ian@0 1431 #define NVRAM_CFG1_VENDOR_MASK 0x03000003
ian@0 1432 #define FLASH_VENDOR_ATMEL_EEPROM 0x02000000
ian@0 1433 #define FLASH_VENDOR_ATMEL_FLASH_BUFFERED 0x02000003
ian@0 1434 #define FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED 0x00000003
ian@0 1435 #define FLASH_VENDOR_ST 0x03000001
ian@0 1436 #define FLASH_VENDOR_SAIFUN 0x01000003
ian@0 1437 #define FLASH_VENDOR_SST_SMALL 0x00000001
ian@0 1438 #define FLASH_VENDOR_SST_LARGE 0x02000001
ian@0 1439 #define NVRAM_CFG1_5752VENDOR_MASK 0x03c00003
ian@0 1440 #define FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ 0x00000000
ian@0 1441 #define FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ 0x02000000
ian@0 1442 #define FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED 0x02000003
ian@0 1443 #define FLASH_5752VENDOR_ST_M45PE10 0x02400000
ian@0 1444 #define FLASH_5752VENDOR_ST_M45PE20 0x02400002
ian@0 1445 #define FLASH_5752VENDOR_ST_M45PE40 0x02400001
ian@0 1446 #define FLASH_5755VENDOR_ATMEL_FLASH_1 0x03400001
ian@0 1447 #define FLASH_5755VENDOR_ATMEL_FLASH_2 0x03400002
ian@0 1448 #define FLASH_5755VENDOR_ATMEL_FLASH_3 0x03400000
ian@0 1449 #define FLASH_5755VENDOR_ATMEL_FLASH_4 0x00000003
ian@0 1450 #define FLASH_5755VENDOR_ATMEL_EEPROM_64KHZ 0x03c00003
ian@0 1451 #define FLASH_5755VENDOR_ATMEL_EEPROM_376KHZ 0x03c00002
ian@0 1452 #define FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ 0x03000003
ian@0 1453 #define FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ 0x03000002
ian@0 1454 #define FLASH_5787VENDOR_MICRO_EEPROM_64KHZ 0x03000000
ian@0 1455 #define FLASH_5787VENDOR_MICRO_EEPROM_376KHZ 0x02000000
ian@0 1456 #define NVRAM_CFG1_5752PAGE_SIZE_MASK 0x70000000
ian@0 1457 #define FLASH_5752PAGE_SIZE_256 0x00000000
ian@0 1458 #define FLASH_5752PAGE_SIZE_512 0x10000000
ian@0 1459 #define FLASH_5752PAGE_SIZE_1K 0x20000000
ian@0 1460 #define FLASH_5752PAGE_SIZE_2K 0x30000000
ian@0 1461 #define FLASH_5752PAGE_SIZE_4K 0x40000000
ian@0 1462 #define FLASH_5752PAGE_SIZE_264 0x50000000
ian@0 1463 #define NVRAM_CFG2 0x00007018
ian@0 1464 #define NVRAM_CFG3 0x0000701c
ian@0 1465 #define NVRAM_SWARB 0x00007020
ian@0 1466 #define SWARB_REQ_SET0 0x00000001
ian@0 1467 #define SWARB_REQ_SET1 0x00000002
ian@0 1468 #define SWARB_REQ_SET2 0x00000004
ian@0 1469 #define SWARB_REQ_SET3 0x00000008
ian@0 1470 #define SWARB_REQ_CLR0 0x00000010
ian@0 1471 #define SWARB_REQ_CLR1 0x00000020
ian@0 1472 #define SWARB_REQ_CLR2 0x00000040
ian@0 1473 #define SWARB_REQ_CLR3 0x00000080
ian@0 1474 #define SWARB_GNT0 0x00000100
ian@0 1475 #define SWARB_GNT1 0x00000200
ian@0 1476 #define SWARB_GNT2 0x00000400
ian@0 1477 #define SWARB_GNT3 0x00000800
ian@0 1478 #define SWARB_REQ0 0x00001000
ian@0 1479 #define SWARB_REQ1 0x00002000
ian@0 1480 #define SWARB_REQ2 0x00004000
ian@0 1481 #define SWARB_REQ3 0x00008000
ian@0 1482 #define NVRAM_ACCESS 0x00007024
ian@0 1483 #define ACCESS_ENABLE 0x00000001
ian@0 1484 #define ACCESS_WR_ENABLE 0x00000002
ian@0 1485 #define NVRAM_WRITE1 0x00007028
ian@0 1486 /* 0x702c --> 0x7400 unused */
ian@0 1487
ian@0 1488 /* 0x7400 --> 0x8000 unused */
ian@0 1489
ian@0 1490 #define TG3_EEPROM_MAGIC 0x669955aa
ian@0 1491
ian@0 1492 /* 32K Window into NIC internal memory */
ian@0 1493 #define NIC_SRAM_WIN_BASE 0x00008000
ian@0 1494
ian@0 1495 /* Offsets into first 32k of NIC internal memory. */
ian@0 1496 #define NIC_SRAM_PAGE_ZERO 0x00000000
ian@0 1497 #define NIC_SRAM_SEND_RCB 0x00000100 /* 16 * TG3_BDINFO_... */
ian@0 1498 #define NIC_SRAM_RCV_RET_RCB 0x00000200 /* 16 * TG3_BDINFO_... */
ian@0 1499 #define NIC_SRAM_STATS_BLK 0x00000300
ian@0 1500 #define NIC_SRAM_STATUS_BLK 0x00000b00
ian@0 1501
ian@0 1502 #define NIC_SRAM_FIRMWARE_MBOX 0x00000b50
ian@0 1503 #define NIC_SRAM_FIRMWARE_MBOX_MAGIC1 0x4B657654
ian@0 1504 #define NIC_SRAM_FIRMWARE_MBOX_MAGIC2 0x4861764b /* !dma on linkchg */
ian@0 1505
ian@0 1506 #define NIC_SRAM_DATA_SIG 0x00000b54
ian@0 1507 #define NIC_SRAM_DATA_SIG_MAGIC 0x4b657654 /* ascii for 'KevT' */
ian@0 1508
ian@0 1509 #define NIC_SRAM_DATA_CFG 0x00000b58
ian@0 1510 #define NIC_SRAM_DATA_CFG_LED_MODE_MASK 0x0000000c
ian@0 1511 #define NIC_SRAM_DATA_CFG_LED_MODE_MAC 0x00000000
ian@0 1512 #define NIC_SRAM_DATA_CFG_LED_MODE_PHY_1 0x00000004
ian@0 1513 #define NIC_SRAM_DATA_CFG_LED_MODE_PHY_2 0x00000008
ian@0 1514 #define NIC_SRAM_DATA_CFG_PHY_TYPE_MASK 0x00000030
ian@0 1515 #define NIC_SRAM_DATA_CFG_PHY_TYPE_UNKNOWN 0x00000000
ian@0 1516 #define NIC_SRAM_DATA_CFG_PHY_TYPE_COPPER 0x00000010
ian@0 1517 #define NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER 0x00000020
ian@0 1518 #define NIC_SRAM_DATA_CFG_WOL_ENABLE 0x00000040
ian@0 1519 #define NIC_SRAM_DATA_CFG_ASF_ENABLE 0x00000080
ian@0 1520 #define NIC_SRAM_DATA_CFG_EEPROM_WP 0x00000100
ian@0 1521 #define NIC_SRAM_DATA_CFG_MINI_PCI 0x00001000
ian@0 1522 #define NIC_SRAM_DATA_CFG_FIBER_WOL 0x00004000
ian@0 1523 #define NIC_SRAM_DATA_CFG_NO_GPIO2 0x00100000
ian@0 1524
ian@0 1525 #define NIC_SRAM_DATA_VER 0x00000b5c
ian@0 1526 #define NIC_SRAM_DATA_VER_SHIFT 16
ian@0 1527
ian@0 1528 #define NIC_SRAM_DATA_PHY_ID 0x00000b74
ian@0 1529 #define NIC_SRAM_DATA_PHY_ID1_MASK 0xffff0000
ian@0 1530 #define NIC_SRAM_DATA_PHY_ID2_MASK 0x0000ffff
ian@0 1531
ian@0 1532 #define NIC_SRAM_FW_CMD_MBOX 0x00000b78
ian@0 1533 #define FWCMD_NICDRV_ALIVE 0x00000001
ian@0 1534 #define FWCMD_NICDRV_PAUSE_FW 0x00000002
ian@0 1535 #define FWCMD_NICDRV_IPV4ADDR_CHG 0x00000003
ian@0 1536 #define FWCMD_NICDRV_IPV6ADDR_CHG 0x00000004
ian@0 1537 #define FWCMD_NICDRV_FIX_DMAR 0x00000005
ian@0 1538 #define FWCMD_NICDRV_FIX_DMAW 0x00000006
ian@0 1539 #define FWCMD_NICDRV_ALIVE2 0x0000000d
ian@0 1540 #define NIC_SRAM_FW_CMD_LEN_MBOX 0x00000b7c
ian@0 1541 #define NIC_SRAM_FW_CMD_DATA_MBOX 0x00000b80
ian@0 1542 #define NIC_SRAM_FW_ASF_STATUS_MBOX 0x00000c00
ian@0 1543 #define NIC_SRAM_FW_DRV_STATE_MBOX 0x00000c04
ian@0 1544 #define DRV_STATE_START 0x00000001
ian@0 1545 #define DRV_STATE_START_DONE 0x80000001
ian@0 1546 #define DRV_STATE_UNLOAD 0x00000002
ian@0 1547 #define DRV_STATE_UNLOAD_DONE 0x80000002
ian@0 1548 #define DRV_STATE_WOL 0x00000003
ian@0 1549 #define DRV_STATE_SUSPEND 0x00000004
ian@0 1550
ian@0 1551 #define NIC_SRAM_FW_RESET_TYPE_MBOX 0x00000c08
ian@0 1552
ian@0 1553 #define NIC_SRAM_MAC_ADDR_HIGH_MBOX 0x00000c14
ian@0 1554 #define NIC_SRAM_MAC_ADDR_LOW_MBOX 0x00000c18
ian@0 1555
ian@0 1556 #define NIC_SRAM_WOL_MBOX 0x00000d30
ian@0 1557 #define WOL_SIGNATURE 0x474c0000
ian@0 1558 #define WOL_DRV_STATE_SHUTDOWN 0x00000001
ian@0 1559 #define WOL_DRV_WOL 0x00000002
ian@0 1560 #define WOL_SET_MAGIC_PKT 0x00000004
ian@0 1561
ian@0 1562 #define NIC_SRAM_DATA_CFG_2 0x00000d38
ian@0 1563
ian@0 1564 #define SHASTA_EXT_LED_MODE_MASK 0x00018000
ian@0 1565 #define SHASTA_EXT_LED_LEGACY 0x00000000
ian@0 1566 #define SHASTA_EXT_LED_SHARED 0x00008000
ian@0 1567 #define SHASTA_EXT_LED_MAC 0x00010000
ian@0 1568 #define SHASTA_EXT_LED_COMBO 0x00018000
ian@0 1569
ian@0 1570 #define NIC_SRAM_RX_MINI_BUFFER_DESC 0x00001000
ian@0 1571
ian@0 1572 #define NIC_SRAM_DMA_DESC_POOL_BASE 0x00002000
ian@0 1573 #define NIC_SRAM_DMA_DESC_POOL_SIZE 0x00002000
ian@0 1574 #define NIC_SRAM_TX_BUFFER_DESC 0x00004000 /* 512 entries */
ian@0 1575 #define NIC_SRAM_RX_BUFFER_DESC 0x00006000 /* 256 entries */
ian@0 1576 #define NIC_SRAM_RX_JUMBO_BUFFER_DESC 0x00007000 /* 256 entries */
ian@0 1577 #define NIC_SRAM_MBUF_POOL_BASE 0x00008000
ian@0 1578 #define NIC_SRAM_MBUF_POOL_SIZE96 0x00018000
ian@0 1579 #define NIC_SRAM_MBUF_POOL_SIZE64 0x00010000
ian@0 1580 #define NIC_SRAM_MBUF_POOL_BASE5705 0x00010000
ian@0 1581 #define NIC_SRAM_MBUF_POOL_SIZE5705 0x0000e000
ian@0 1582
ian@0 1583 /* Currently this is fixed. */
ian@0 1584 #define PHY_ADDR 0x01
ian@0 1585
ian@0 1586 /* Tigon3 specific PHY MII registers. */
ian@0 1587 #define TG3_BMCR_SPEED1000 0x0040
ian@0 1588
ian@0 1589 #define MII_TG3_CTRL 0x09 /* 1000-baseT control register */
ian@0 1590 #define MII_TG3_CTRL_ADV_1000_HALF 0x0100
ian@0 1591 #define MII_TG3_CTRL_ADV_1000_FULL 0x0200
ian@0 1592 #define MII_TG3_CTRL_AS_MASTER 0x0800
ian@0 1593 #define MII_TG3_CTRL_ENABLE_AS_MASTER 0x1000
ian@0 1594
ian@0 1595 #define MII_TG3_EXT_CTRL 0x10 /* Extended control register */
ian@0 1596 #define MII_TG3_EXT_CTRL_FIFO_ELASTIC 0x0001
ian@0 1597 #define MII_TG3_EXT_CTRL_LNK3_LED_MODE 0x0002
ian@0 1598 #define MII_TG3_EXT_CTRL_FORCE_LED_OFF 0x0008
ian@0 1599 #define MII_TG3_EXT_CTRL_TBI 0x8000
ian@0 1600
ian@0 1601 #define MII_TG3_EXT_STAT 0x11 /* Extended status register */
ian@0 1602 #define MII_TG3_EXT_STAT_LPASS 0x0100
ian@0 1603
ian@0 1604 #define MII_TG3_DSP_RW_PORT 0x15 /* DSP coefficient read/write port */
ian@0 1605
ian@0 1606 #define MII_TG3_DSP_ADDRESS 0x17 /* DSP address register */
ian@0 1607
ian@0 1608 #define MII_TG3_AUX_CTRL 0x18 /* auxilliary control register */
ian@0 1609
ian@0 1610 #define MII_TG3_AUX_STAT 0x19 /* auxilliary status register */
ian@0 1611 #define MII_TG3_AUX_STAT_LPASS 0x0004
ian@0 1612 #define MII_TG3_AUX_STAT_SPDMASK 0x0700
ian@0 1613 #define MII_TG3_AUX_STAT_10HALF 0x0100
ian@0 1614 #define MII_TG3_AUX_STAT_10FULL 0x0200
ian@0 1615 #define MII_TG3_AUX_STAT_100HALF 0x0300
ian@0 1616 #define MII_TG3_AUX_STAT_100_4 0x0400
ian@0 1617 #define MII_TG3_AUX_STAT_100FULL 0x0500
ian@0 1618 #define MII_TG3_AUX_STAT_1000HALF 0x0600
ian@0 1619 #define MII_TG3_AUX_STAT_1000FULL 0x0700
ian@0 1620
ian@0 1621 #define MII_TG3_ISTAT 0x1a /* IRQ status register */
ian@0 1622 #define MII_TG3_IMASK 0x1b /* IRQ mask register */
ian@0 1623
ian@0 1624 /* ISTAT/IMASK event bits */
ian@0 1625 #define MII_TG3_INT_LINKCHG 0x0002
ian@0 1626 #define MII_TG3_INT_SPEEDCHG 0x0004
ian@0 1627 #define MII_TG3_INT_DUPLEXCHG 0x0008
ian@0 1628 #define MII_TG3_INT_ANEG_PAGE_RX 0x0400
ian@0 1629
ian@0 1630 /* There are two ways to manage the TX descriptors on the tigon3.
ian@0 1631 * Either the descriptors are in host DMA'able memory, or they
ian@0 1632 * exist only in the cards on-chip SRAM. All 16 send bds are under
ian@0 1633 * the same mode, they may not be configured individually.
ian@0 1634 *
ian@0 1635 * This driver always uses host memory TX descriptors.
ian@0 1636 *
ian@0 1637 * To use host memory TX descriptors:
ian@0 1638 * 1) Set GRC_MODE_HOST_SENDBDS in GRC_MODE register.
ian@0 1639 * Make sure GRC_MODE_4X_NIC_SEND_RINGS is clear.
ian@0 1640 * 2) Allocate DMA'able memory.
ian@0 1641 * 3) In NIC_SRAM_SEND_RCB (of desired index) of on-chip SRAM:
ian@0 1642 * a) Set TG3_BDINFO_HOST_ADDR to DMA address of memory
ian@0 1643 * obtained in step 2
ian@0 1644 * b) Set TG3_BDINFO_NIC_ADDR to NIC_SRAM_TX_BUFFER_DESC.
ian@0 1645 * c) Set len field of TG3_BDINFO_MAXLEN_FLAGS to number
ian@0 1646 * of TX descriptors. Leave flags field clear.
ian@0 1647 * 4) Access TX descriptors via host memory. The chip
ian@0 1648 * will refetch into local SRAM as needed when producer
ian@0 1649 * index mailboxes are updated.
ian@0 1650 *
ian@0 1651 * To use on-chip TX descriptors:
ian@0 1652 * 1) Set GRC_MODE_4X_NIC_SEND_RINGS in GRC_MODE register.
ian@0 1653 * Make sure GRC_MODE_HOST_SENDBDS is clear.
ian@0 1654 * 2) In NIC_SRAM_SEND_RCB (of desired index) of on-chip SRAM:
ian@0 1655 * a) Set TG3_BDINFO_HOST_ADDR to zero.
ian@0 1656 * b) Set TG3_BDINFO_NIC_ADDR to NIC_SRAM_TX_BUFFER_DESC
ian@0 1657 * c) TG3_BDINFO_MAXLEN_FLAGS is don't care.
ian@0 1658 * 3) Access TX descriptors directly in on-chip SRAM
ian@0 1659 * using normal {read,write}l(). (and not using
ian@0 1660 * pointer dereferencing of ioremap()'d memory like
ian@0 1661 * the broken Broadcom driver does)
ian@0 1662 *
ian@0 1663 * Note that BDINFO_FLAGS_DISABLED should be set in the flags field of
ian@0 1664 * TG3_BDINFO_MAXLEN_FLAGS of all unused SEND_RCB indices.
ian@0 1665 */
ian@0 1666 struct tg3_tx_buffer_desc {
ian@0 1667 u32 addr_hi;
ian@0 1668 u32 addr_lo;
ian@0 1669
ian@0 1670 u32 len_flags;
ian@0 1671 #define TXD_FLAG_TCPUDP_CSUM 0x0001
ian@0 1672 #define TXD_FLAG_IP_CSUM 0x0002
ian@0 1673 #define TXD_FLAG_END 0x0004
ian@0 1674 #define TXD_FLAG_IP_FRAG 0x0008
ian@0 1675 #define TXD_FLAG_IP_FRAG_END 0x0010
ian@0 1676 #define TXD_FLAG_VLAN 0x0040
ian@0 1677 #define TXD_FLAG_COAL_NOW 0x0080
ian@0 1678 #define TXD_FLAG_CPU_PRE_DMA 0x0100
ian@0 1679 #define TXD_FLAG_CPU_POST_DMA 0x0200
ian@0 1680 #define TXD_FLAG_ADD_SRC_ADDR 0x1000
ian@0 1681 #define TXD_FLAG_CHOOSE_SRC_ADDR 0x6000
ian@0 1682 #define TXD_FLAG_NO_CRC 0x8000
ian@0 1683 #define TXD_LEN_SHIFT 16
ian@0 1684
ian@0 1685 u32 vlan_tag;
ian@0 1686 #define TXD_VLAN_TAG_SHIFT 0
ian@0 1687 #define TXD_MSS_SHIFT 16
ian@0 1688 };
ian@0 1689
ian@0 1690 #define TXD_ADDR 0x00UL /* 64-bit */
ian@0 1691 #define TXD_LEN_FLAGS 0x08UL /* 32-bit (upper 16-bits are len) */
ian@0 1692 #define TXD_VLAN_TAG 0x0cUL /* 32-bit (upper 16-bits are tag) */
ian@0 1693 #define TXD_SIZE 0x10UL
ian@0 1694
ian@0 1695 struct tg3_rx_buffer_desc {
ian@0 1696 u32 addr_hi;
ian@0 1697 u32 addr_lo;
ian@0 1698
ian@0 1699 u32 idx_len;
ian@0 1700 #define RXD_IDX_MASK 0xffff0000
ian@0 1701 #define RXD_IDX_SHIFT 16
ian@0 1702 #define RXD_LEN_MASK 0x0000ffff
ian@0 1703 #define RXD_LEN_SHIFT 0
ian@0 1704
ian@0 1705 u32 type_flags;
ian@0 1706 #define RXD_TYPE_SHIFT 16
ian@0 1707 #define RXD_FLAGS_SHIFT 0
ian@0 1708
ian@0 1709 #define RXD_FLAG_END 0x0004
ian@0 1710 #define RXD_FLAG_MINI 0x0800
ian@0 1711 #define RXD_FLAG_JUMBO 0x0020
ian@0 1712 #define RXD_FLAG_VLAN 0x0040
ian@0 1713 #define RXD_FLAG_ERROR 0x0400
ian@0 1714 #define RXD_FLAG_IP_CSUM 0x1000
ian@0 1715 #define RXD_FLAG_TCPUDP_CSUM 0x2000
ian@0 1716 #define RXD_FLAG_IS_TCP 0x4000
ian@0 1717
ian@0 1718 u32 ip_tcp_csum;
ian@0 1719 #define RXD_IPCSUM_MASK 0xffff0000
ian@0 1720 #define RXD_IPCSUM_SHIFT 16
ian@0 1721 #define RXD_TCPCSUM_MASK 0x0000ffff
ian@0 1722 #define RXD_TCPCSUM_SHIFT 0
ian@0 1723
ian@0 1724 u32 err_vlan;
ian@0 1725
ian@0 1726 #define RXD_VLAN_MASK 0x0000ffff
ian@0 1727
ian@0 1728 #define RXD_ERR_BAD_CRC 0x00010000
ian@0 1729 #define RXD_ERR_COLLISION 0x00020000
ian@0 1730 #define RXD_ERR_LINK_LOST 0x00040000
ian@0 1731 #define RXD_ERR_PHY_DECODE 0x00080000
ian@0 1732 #define RXD_ERR_ODD_NIBBLE_RCVD_MII 0x00100000
ian@0 1733 #define RXD_ERR_MAC_ABRT 0x00200000
ian@0 1734 #define RXD_ERR_TOO_SMALL 0x00400000
ian@0 1735 #define RXD_ERR_NO_RESOURCES 0x00800000
ian@0 1736 #define RXD_ERR_HUGE_FRAME 0x01000000
ian@0 1737 #define RXD_ERR_MASK 0xffff0000
ian@0 1738
ian@0 1739 u32 reserved;
ian@0 1740 u32 opaque;
ian@0 1741 #define RXD_OPAQUE_INDEX_MASK 0x0000ffff
ian@0 1742 #define RXD_OPAQUE_INDEX_SHIFT 0
ian@0 1743 #define RXD_OPAQUE_RING_STD 0x00010000
ian@0 1744 #define RXD_OPAQUE_RING_JUMBO 0x00020000
ian@0 1745 #define RXD_OPAQUE_RING_MINI 0x00040000
ian@0 1746 #define RXD_OPAQUE_RING_MASK 0x00070000
ian@0 1747 };
ian@0 1748
ian@0 1749 struct tg3_ext_rx_buffer_desc {
ian@0 1750 struct {
ian@0 1751 u32 addr_hi;
ian@0 1752 u32 addr_lo;
ian@0 1753 } addrlist[3];
ian@0 1754 u32 len2_len1;
ian@0 1755 u32 resv_len3;
ian@0 1756 struct tg3_rx_buffer_desc std;
ian@0 1757 };
ian@0 1758
ian@0 1759 /* We only use this when testing out the DMA engine
ian@0 1760 * at probe time. This is the internal format of buffer
ian@0 1761 * descriptors used by the chip at NIC_SRAM_DMA_DESCS.
ian@0 1762 */
ian@0 1763 struct tg3_internal_buffer_desc {
ian@0 1764 u32 addr_hi;
ian@0 1765 u32 addr_lo;
ian@0 1766 u32 nic_mbuf;
ian@0 1767 /* XXX FIX THIS */
ian@0 1768 #ifdef __BIG_ENDIAN
ian@0 1769 u16 cqid_sqid;
ian@0 1770 u16 len;
ian@0 1771 #else
ian@0 1772 u16 len;
ian@0 1773 u16 cqid_sqid;
ian@0 1774 #endif
ian@0 1775 u32 flags;
ian@0 1776 u32 __cookie1;
ian@0 1777 u32 __cookie2;
ian@0 1778 u32 __cookie3;
ian@0 1779 };
ian@0 1780
ian@0 1781 #define TG3_HW_STATUS_SIZE 0x50
ian@0 1782 struct tg3_hw_status {
ian@0 1783 u32 status;
ian@0 1784 #define SD_STATUS_UPDATED 0x00000001
ian@0 1785 #define SD_STATUS_LINK_CHG 0x00000002
ian@0 1786 #define SD_STATUS_ERROR 0x00000004
ian@0 1787
ian@0 1788 u32 status_tag;
ian@0 1789
ian@0 1790 #ifdef __BIG_ENDIAN
ian@0 1791 u16 rx_consumer;
ian@0 1792 u16 rx_jumbo_consumer;
ian@0 1793 #else
ian@0 1794 u16 rx_jumbo_consumer;
ian@0 1795 u16 rx_consumer;
ian@0 1796 #endif
ian@0 1797
ian@0 1798 #ifdef __BIG_ENDIAN
ian@0 1799 u16 reserved;
ian@0 1800 u16 rx_mini_consumer;
ian@0 1801 #else
ian@0 1802 u16 rx_mini_consumer;
ian@0 1803 u16 reserved;
ian@0 1804 #endif
ian@0 1805 struct {
ian@0 1806 #ifdef __BIG_ENDIAN
ian@0 1807 u16 tx_consumer;
ian@0 1808 u16 rx_producer;
ian@0 1809 #else
ian@0 1810 u16 rx_producer;
ian@0 1811 u16 tx_consumer;
ian@0 1812 #endif
ian@0 1813 } idx[16];
ian@0 1814 };
ian@0 1815
ian@0 1816 typedef struct {
ian@0 1817 u32 high, low;
ian@0 1818 } tg3_stat64_t;
ian@0 1819
ian@0 1820 struct tg3_hw_stats {
ian@0 1821 u8 __reserved0[0x400-0x300];
ian@0 1822
ian@0 1823 /* Statistics maintained by Receive MAC. */
ian@0 1824 tg3_stat64_t rx_octets;
ian@0 1825 u64 __reserved1;
ian@0 1826 tg3_stat64_t rx_fragments;
ian@0 1827 tg3_stat64_t rx_ucast_packets;
ian@0 1828 tg3_stat64_t rx_mcast_packets;
ian@0 1829 tg3_stat64_t rx_bcast_packets;
ian@0 1830 tg3_stat64_t rx_fcs_errors;
ian@0 1831 tg3_stat64_t rx_align_errors;
ian@0 1832 tg3_stat64_t rx_xon_pause_rcvd;
ian@0 1833 tg3_stat64_t rx_xoff_pause_rcvd;
ian@0 1834 tg3_stat64_t rx_mac_ctrl_rcvd;
ian@0 1835 tg3_stat64_t rx_xoff_entered;
ian@0 1836 tg3_stat64_t rx_frame_too_long_errors;
ian@0 1837 tg3_stat64_t rx_jabbers;
ian@0 1838 tg3_stat64_t rx_undersize_packets;
ian@0 1839 tg3_stat64_t rx_in_length_errors;
ian@0 1840 tg3_stat64_t rx_out_length_errors;
ian@0 1841 tg3_stat64_t rx_64_or_less_octet_packets;
ian@0 1842 tg3_stat64_t rx_65_to_127_octet_packets;
ian@0 1843 tg3_stat64_t rx_128_to_255_octet_packets;
ian@0 1844 tg3_stat64_t rx_256_to_511_octet_packets;
ian@0 1845 tg3_stat64_t rx_512_to_1023_octet_packets;
ian@0 1846 tg3_stat64_t rx_1024_to_1522_octet_packets;
ian@0 1847 tg3_stat64_t rx_1523_to_2047_octet_packets;
ian@0 1848 tg3_stat64_t rx_2048_to_4095_octet_packets;
ian@0 1849 tg3_stat64_t rx_4096_to_8191_octet_packets;
ian@0 1850 tg3_stat64_t rx_8192_to_9022_octet_packets;
ian@0 1851
ian@0 1852 u64 __unused0[37];
ian@0 1853
ian@0 1854 /* Statistics maintained by Transmit MAC. */
ian@0 1855 tg3_stat64_t tx_octets;
ian@0 1856 u64 __reserved2;
ian@0 1857 tg3_stat64_t tx_collisions;
ian@0 1858 tg3_stat64_t tx_xon_sent;
ian@0 1859 tg3_stat64_t tx_xoff_sent;
ian@0 1860 tg3_stat64_t tx_flow_control;
ian@0 1861 tg3_stat64_t tx_mac_errors;
ian@0 1862 tg3_stat64_t tx_single_collisions;
ian@0 1863 tg3_stat64_t tx_mult_collisions;
ian@0 1864 tg3_stat64_t tx_deferred;
ian@0 1865 u64 __reserved3;
ian@0 1866 tg3_stat64_t tx_excessive_collisions;
ian@0 1867 tg3_stat64_t tx_late_collisions;
ian@0 1868 tg3_stat64_t tx_collide_2times;
ian@0 1869 tg3_stat64_t tx_collide_3times;
ian@0 1870 tg3_stat64_t tx_collide_4times;
ian@0 1871 tg3_stat64_t tx_collide_5times;
ian@0 1872 tg3_stat64_t tx_collide_6times;
ian@0 1873 tg3_stat64_t tx_collide_7times;
ian@0 1874 tg3_stat64_t tx_collide_8times;
ian@0 1875 tg3_stat64_t tx_collide_9times;
ian@0 1876 tg3_stat64_t tx_collide_10times;
ian@0 1877 tg3_stat64_t tx_collide_11times;
ian@0 1878 tg3_stat64_t tx_collide_12times;
ian@0 1879 tg3_stat64_t tx_collide_13times;
ian@0 1880 tg3_stat64_t tx_collide_14times;
ian@0 1881 tg3_stat64_t tx_collide_15times;
ian@0 1882 tg3_stat64_t tx_ucast_packets;
ian@0 1883 tg3_stat64_t tx_mcast_packets;
ian@0 1884 tg3_stat64_t tx_bcast_packets;
ian@0 1885 tg3_stat64_t tx_carrier_sense_errors;
ian@0 1886 tg3_stat64_t tx_discards;
ian@0 1887 tg3_stat64_t tx_errors;
ian@0 1888
ian@0 1889 u64 __unused1[31];
ian@0 1890
ian@0 1891 /* Statistics maintained by Receive List Placement. */
ian@0 1892 tg3_stat64_t COS_rx_packets[16];
ian@0 1893 tg3_stat64_t COS_rx_filter_dropped;
ian@0 1894 tg3_stat64_t dma_writeq_full;
ian@0 1895 tg3_stat64_t dma_write_prioq_full;
ian@0 1896 tg3_stat64_t rxbds_empty;
ian@0 1897 tg3_stat64_t rx_discards;
ian@0 1898 tg3_stat64_t rx_errors;
ian@0 1899 tg3_stat64_t rx_threshold_hit;
ian@0 1900
ian@0 1901 u64 __unused2[9];
ian@0 1902
ian@0 1903 /* Statistics maintained by Send Data Initiator. */
ian@0 1904 tg3_stat64_t COS_out_packets[16];
ian@0 1905 tg3_stat64_t dma_readq_full;
ian@0 1906 tg3_stat64_t dma_read_prioq_full;
ian@0 1907 tg3_stat64_t tx_comp_queue_full;
ian@0 1908
ian@0 1909 /* Statistics maintained by Host Coalescing. */
ian@0 1910 tg3_stat64_t ring_set_send_prod_index;
ian@0 1911 tg3_stat64_t ring_status_update;
ian@0 1912 tg3_stat64_t nic_irqs;
ian@0 1913 tg3_stat64_t nic_avoided_irqs;
ian@0 1914 tg3_stat64_t nic_tx_threshold_hit;
ian@0 1915
ian@0 1916 u8 __reserved4[0xb00-0x9c0];
ian@0 1917 };
ian@0 1918
ian@0 1919 /* 'mapping' is superfluous as the chip does not write into
ian@0 1920 * the tx/rx post rings so we could just fetch it from there.
ian@0 1921 * But the cache behavior is better how we are doing it now.
ian@0 1922 */
ian@0 1923 struct ring_info {
ian@0 1924 struct sk_buff *skb;
ian@0 1925 DECLARE_PCI_UNMAP_ADDR(mapping)
ian@0 1926 };
ian@0 1927
ian@0 1928 struct tx_ring_info {
ian@0 1929 struct sk_buff *skb;
ian@0 1930 DECLARE_PCI_UNMAP_ADDR(mapping)
ian@0 1931 u32 prev_vlan_tag;
ian@0 1932 };
ian@0 1933
ian@0 1934 struct tg3_config_info {
ian@0 1935 u32 flags;
ian@0 1936 };
ian@0 1937
ian@0 1938 struct tg3_link_config {
ian@0 1939 /* Describes what we're trying to get. */
ian@0 1940 u32 advertising;
ian@0 1941 u16 speed;
ian@0 1942 u8 duplex;
ian@0 1943 u8 autoneg;
ian@0 1944
ian@0 1945 /* Describes what we actually have. */
ian@0 1946 u16 active_speed;
ian@0 1947 u8 active_duplex;
ian@0 1948 #define SPEED_INVALID 0xffff
ian@0 1949 #define DUPLEX_INVALID 0xff
ian@0 1950 #define AUTONEG_INVALID 0xff
ian@0 1951
ian@0 1952 /* When we go in and out of low power mode we need
ian@0 1953 * to swap with this state.
ian@0 1954 */
ian@0 1955 int phy_is_low_power;
ian@0 1956 u16 orig_speed;
ian@0 1957 u8 orig_duplex;
ian@0 1958 u8 orig_autoneg;
ian@0 1959 };
ian@0 1960
ian@0 1961 struct tg3_bufmgr_config {
ian@0 1962 u32 mbuf_read_dma_low_water;
ian@0 1963 u32 mbuf_mac_rx_low_water;
ian@0 1964 u32 mbuf_high_water;
ian@0 1965
ian@0 1966 u32 mbuf_read_dma_low_water_jumbo;
ian@0 1967 u32 mbuf_mac_rx_low_water_jumbo;
ian@0 1968 u32 mbuf_high_water_jumbo;
ian@0 1969
ian@0 1970 u32 dma_low_water;
ian@0 1971 u32 dma_high_water;
ian@0 1972 };
ian@0 1973
ian@0 1974 struct tg3_ethtool_stats {
ian@0 1975 /* Statistics maintained by Receive MAC. */
ian@0 1976 u64 rx_octets;
ian@0 1977 u64 rx_fragments;
ian@0 1978 u64 rx_ucast_packets;
ian@0 1979 u64 rx_mcast_packets;
ian@0 1980 u64 rx_bcast_packets;
ian@0 1981 u64 rx_fcs_errors;
ian@0 1982 u64 rx_align_errors;
ian@0 1983 u64 rx_xon_pause_rcvd;
ian@0 1984 u64 rx_xoff_pause_rcvd;
ian@0 1985 u64 rx_mac_ctrl_rcvd;
ian@0 1986 u64 rx_xoff_entered;
ian@0 1987 u64 rx_frame_too_long_errors;
ian@0 1988 u64 rx_jabbers;
ian@0 1989 u64 rx_undersize_packets;
ian@0 1990 u64 rx_in_length_errors;
ian@0 1991 u64 rx_out_length_errors;
ian@0 1992 u64 rx_64_or_less_octet_packets;
ian@0 1993 u64 rx_65_to_127_octet_packets;
ian@0 1994 u64 rx_128_to_255_octet_packets;
ian@0 1995 u64 rx_256_to_511_octet_packets;
ian@0 1996 u64 rx_512_to_1023_octet_packets;
ian@0 1997 u64 rx_1024_to_1522_octet_packets;
ian@0 1998 u64 rx_1523_to_2047_octet_packets;
ian@0 1999 u64 rx_2048_to_4095_octet_packets;
ian@0 2000 u64 rx_4096_to_8191_octet_packets;
ian@0 2001 u64 rx_8192_to_9022_octet_packets;
ian@0 2002
ian@0 2003 /* Statistics maintained by Transmit MAC. */
ian@0 2004 u64 tx_octets;
ian@0 2005 u64 tx_collisions;
ian@0 2006 u64 tx_xon_sent;
ian@0 2007 u64 tx_xoff_sent;
ian@0 2008 u64 tx_flow_control;
ian@0 2009 u64 tx_mac_errors;
ian@0 2010 u64 tx_single_collisions;
ian@0 2011 u64 tx_mult_collisions;
ian@0 2012 u64 tx_deferred;
ian@0 2013 u64 tx_excessive_collisions;
ian@0 2014 u64 tx_late_collisions;
ian@0 2015 u64 tx_collide_2times;
ian@0 2016 u64 tx_collide_3times;
ian@0 2017 u64 tx_collide_4times;
ian@0 2018 u64 tx_collide_5times;
ian@0 2019 u64 tx_collide_6times;
ian@0 2020 u64 tx_collide_7times;
ian@0 2021 u64 tx_collide_8times;
ian@0 2022 u64 tx_collide_9times;
ian@0 2023 u64 tx_collide_10times;
ian@0 2024 u64 tx_collide_11times;
ian@0 2025 u64 tx_collide_12times;
ian@0 2026 u64 tx_collide_13times;
ian@0 2027 u64 tx_collide_14times;
ian@0 2028 u64 tx_collide_15times;
ian@0 2029 u64 tx_ucast_packets;
ian@0 2030 u64 tx_mcast_packets;
ian@0 2031 u64 tx_bcast_packets;
ian@0 2032 u64 tx_carrier_sense_errors;
ian@0 2033 u64 tx_discards;
ian@0 2034 u64 tx_errors;
ian@0 2035
ian@0 2036 /* Statistics maintained by Receive List Placement. */
ian@0 2037 u64 dma_writeq_full;
ian@0 2038 u64 dma_write_prioq_full;
ian@0 2039 u64 rxbds_empty;
ian@0 2040 u64 rx_discards;
ian@0 2041 u64 rx_errors;
ian@0 2042 u64 rx_threshold_hit;
ian@0 2043
ian@0 2044 /* Statistics maintained by Send Data Initiator. */
ian@0 2045 u64 dma_readq_full;
ian@0 2046 u64 dma_read_prioq_full;
ian@0 2047 u64 tx_comp_queue_full;
ian@0 2048
ian@0 2049 /* Statistics maintained by Host Coalescing. */
ian@0 2050 u64 ring_set_send_prod_index;
ian@0 2051 u64 ring_status_update;
ian@0 2052 u64 nic_irqs;
ian@0 2053 u64 nic_avoided_irqs;
ian@0 2054 u64 nic_tx_threshold_hit;
ian@0 2055 };
ian@0 2056
ian@0 2057 struct tg3 {
ian@0 2058 /* begin "general, frequently-used members" cacheline section */
ian@0 2059
ian@0 2060 /* If the IRQ handler (which runs lockless) needs to be
ian@0 2061 * quiesced, the following bitmask state is used. The
ian@0 2062 * SYNC flag is set by non-IRQ context code to initiate
ian@0 2063 * the quiescence.
ian@0 2064 *
ian@0 2065 * When the IRQ handler notices that SYNC is set, it
ian@0 2066 * disables interrupts and returns.
ian@0 2067 *
ian@0 2068 * When all outstanding IRQ handlers have returned after
ian@0 2069 * the SYNC flag has been set, the setter can be assured
ian@0 2070 * that interrupts will no longer get run.
ian@0 2071 *
ian@0 2072 * In this way all SMP driver locks are never acquired
ian@0 2073 * in hw IRQ context, only sw IRQ context or lower.
ian@0 2074 */
ian@0 2075 unsigned int irq_sync;
ian@0 2076
ian@0 2077 /* SMP locking strategy:
ian@0 2078 *
ian@0 2079 * lock: Held during reset, PHY access, timer, and when
ian@0 2080 * updating tg3_flags and tg3_flags2.
ian@0 2081 *
ian@0 2082 * netif_tx_lock: Held during tg3_start_xmit. tg3_tx holds
ian@0 2083 * netif_tx_lock when it needs to call
ian@0 2084 * netif_wake_queue.
ian@0 2085 *
ian@0 2086 * Both of these locks are to be held with BH safety.
ian@0 2087 *
ian@0 2088 * Because the IRQ handler, tg3_poll, and tg3_start_xmit
ian@0 2089 * are running lockless, it is necessary to completely
ian@0 2090 * quiesce the chip with tg3_netif_stop and tg3_full_lock
ian@0 2091 * before reconfiguring the device.
ian@0 2092 *
ian@0 2093 * indirect_lock: Held when accessing registers indirectly
ian@0 2094 * with IRQ disabling.
ian@0 2095 */
ian@0 2096 spinlock_t lock;
ian@0 2097 spinlock_t indirect_lock;
ian@0 2098
ian@0 2099 u32 (*read32) (struct tg3 *, u32);
ian@0 2100 void (*write32) (struct tg3 *, u32, u32);
ian@0 2101 u32 (*read32_mbox) (struct tg3 *, u32);
ian@0 2102 void (*write32_mbox) (struct tg3 *, u32,
ian@0 2103 u32);
ian@0 2104 void __iomem *regs;
ian@0 2105 struct net_device *dev;
ian@0 2106 struct pci_dev *pdev;
ian@0 2107
ian@0 2108 struct tg3_hw_status *hw_status;
ian@0 2109 dma_addr_t status_mapping;
ian@0 2110 u32 last_tag;
ian@0 2111
ian@0 2112 u32 msg_enable;
ian@0 2113
ian@0 2114 /* begin "tx thread" cacheline section */
ian@0 2115 void (*write32_tx_mbox) (struct tg3 *, u32,
ian@0 2116 u32);
ian@0 2117 u32 tx_prod;
ian@0 2118 u32 tx_cons;
ian@0 2119 u32 tx_pending;
ian@0 2120
ian@0 2121 struct tg3_tx_buffer_desc *tx_ring;
ian@0 2122 struct tx_ring_info *tx_buffers;
ian@0 2123 dma_addr_t tx_desc_mapping;
ian@0 2124
ian@0 2125 /* begin "rx thread" cacheline section */
ian@0 2126 void (*write32_rx_mbox) (struct tg3 *, u32,
ian@0 2127 u32);
ian@0 2128 u32 rx_rcb_ptr;
ian@0 2129 u32 rx_std_ptr;
ian@0 2130 u32 rx_jumbo_ptr;
ian@0 2131 u32 rx_pending;
ian@0 2132 u32 rx_jumbo_pending;
ian@0 2133 #if TG3_VLAN_TAG_USED
ian@0 2134 struct vlan_group *vlgrp;
ian@0 2135 #endif
ian@0 2136
ian@0 2137 struct tg3_rx_buffer_desc *rx_std;
ian@0 2138 struct ring_info *rx_std_buffers;
ian@0 2139 dma_addr_t rx_std_mapping;
ian@0 2140 u32 rx_std_max_post;
ian@0 2141
ian@0 2142 struct tg3_rx_buffer_desc *rx_jumbo;
ian@0 2143 struct ring_info *rx_jumbo_buffers;
ian@0 2144 dma_addr_t rx_jumbo_mapping;
ian@0 2145
ian@0 2146 struct tg3_rx_buffer_desc *rx_rcb;
ian@0 2147 dma_addr_t rx_rcb_mapping;
ian@0 2148
ian@0 2149 u32 rx_pkt_buf_sz;
ian@0 2150
ian@0 2151 /* begin "everything else" cacheline(s) section */
ian@0 2152 struct net_device_stats net_stats;
ian@0 2153 struct net_device_stats net_stats_prev;
ian@0 2154 struct tg3_ethtool_stats estats;
ian@0 2155 struct tg3_ethtool_stats estats_prev;
ian@0 2156
ian@0 2157 unsigned long phy_crc_errors;
ian@0 2158
ian@0 2159 u32 rx_offset;
ian@0 2160 u32 tg3_flags;
ian@0 2161 #define TG3_FLAG_TAGGED_STATUS 0x00000001
ian@0 2162 #define TG3_FLAG_TXD_MBOX_HWBUG 0x00000002
ian@0 2163 #define TG3_FLAG_RX_CHECKSUMS 0x00000004
ian@0 2164 #define TG3_FLAG_USE_LINKCHG_REG 0x00000008
ian@0 2165 #define TG3_FLAG_USE_MI_INTERRUPT 0x00000010
ian@0 2166 #define TG3_FLAG_ENABLE_ASF 0x00000020
ian@0 2167 #define TG3_FLAG_5701_REG_WRITE_BUG 0x00000040
ian@0 2168 #define TG3_FLAG_POLL_SERDES 0x00000080
ian@0 2169 #define TG3_FLAG_MBOX_WRITE_REORDER 0x00000100
ian@0 2170 #define TG3_FLAG_PCIX_TARGET_HWBUG 0x00000200
ian@0 2171 #define TG3_FLAG_WOL_SPEED_100MB 0x00000400
ian@0 2172 #define TG3_FLAG_WOL_ENABLE 0x00000800
ian@0 2173 #define TG3_FLAG_EEPROM_WRITE_PROT 0x00001000
ian@0 2174 #define TG3_FLAG_NVRAM 0x00002000
ian@0 2175 #define TG3_FLAG_NVRAM_BUFFERED 0x00004000
ian@0 2176 #define TG3_FLAG_RX_PAUSE 0x00008000
ian@0 2177 #define TG3_FLAG_TX_PAUSE 0x00010000
ian@0 2178 #define TG3_FLAG_PCIX_MODE 0x00020000
ian@0 2179 #define TG3_FLAG_PCI_HIGH_SPEED 0x00040000
ian@0 2180 #define TG3_FLAG_PCI_32BIT 0x00080000
ian@0 2181 #define TG3_FLAG_SRAM_USE_CONFIG 0x00100000
ian@0 2182 #define TG3_FLAG_TX_RECOVERY_PENDING 0x00200000
ian@0 2183 #define TG3_FLAG_SERDES_WOL_CAP 0x00400000
ian@0 2184 #define TG3_FLAG_JUMBO_RING_ENABLE 0x00800000
ian@0 2185 #define TG3_FLAG_10_100_ONLY 0x01000000
ian@0 2186 #define TG3_FLAG_PAUSE_AUTONEG 0x02000000
ian@0 2187 #define TG3_FLAG_IN_RESET_TASK 0x04000000
ian@0 2188 #define TG3_FLAG_40BIT_DMA_BUG 0x08000000
ian@0 2189 #define TG3_FLAG_BROKEN_CHECKSUMS 0x10000000
ian@0 2190 #define TG3_FLAG_GOT_SERDES_FLOWCTL 0x20000000
ian@0 2191 #define TG3_FLAG_SPLIT_MODE 0x40000000
ian@0 2192 #define TG3_FLAG_INIT_COMPLETE 0x80000000
ian@0 2193 u32 tg3_flags2;
ian@0 2194 #define TG3_FLG2_RESTART_TIMER 0x00000001
ian@0 2195 #define TG3_FLG2_HW_TSO_1_BUG 0x00000002
ian@0 2196 #define TG3_FLG2_NO_ETH_WIRE_SPEED 0x00000004
ian@0 2197 #define TG3_FLG2_IS_5788 0x00000008
ian@0 2198 #define TG3_FLG2_MAX_RXPEND_64 0x00000010
ian@0 2199 #define TG3_FLG2_TSO_CAPABLE 0x00000020
ian@0 2200 #define TG3_FLG2_PHY_ADC_BUG 0x00000040
ian@0 2201 #define TG3_FLG2_PHY_5704_A0_BUG 0x00000080
ian@0 2202 #define TG3_FLG2_PHY_BER_BUG 0x00000100
ian@0 2203 #define TG3_FLG2_PCI_EXPRESS 0x00000200
ian@0 2204 #define TG3_FLG2_ASF_NEW_HANDSHAKE 0x00000400
ian@0 2205 #define TG3_FLG2_HW_AUTONEG 0x00000800
ian@0 2206 #define TG3_FLG2_PHY_JUST_INITTED 0x00001000
ian@0 2207 #define TG3_FLG2_PHY_SERDES 0x00002000
ian@0 2208 #define TG3_FLG2_CAPACITIVE_COUPLING 0x00004000
ian@0 2209 #define TG3_FLG2_FLASH 0x00008000
ian@0 2210 #define TG3_FLG2_HW_TSO_1 0x00010000
ian@0 2211 #define TG3_FLG2_SERDES_PREEMPHASIS 0x00020000
ian@0 2212 #define TG3_FLG2_5705_PLUS 0x00040000
ian@0 2213 #define TG3_FLG2_5750_PLUS 0x00080000
ian@0 2214 #define TG3_FLG2_PROTECTED_NVRAM 0x00100000
ian@0 2215 #define TG3_FLG2_USING_MSI 0x00200000
ian@0 2216 #define TG3_FLG2_JUMBO_CAPABLE 0x00400000
ian@0 2217 #define TG3_FLG2_MII_SERDES 0x00800000
ian@0 2218 #define TG3_FLG2_ANY_SERDES (TG3_FLG2_PHY_SERDES | \
ian@0 2219 TG3_FLG2_MII_SERDES)
ian@0 2220 #define TG3_FLG2_PARALLEL_DETECT 0x01000000
ian@0 2221 #define TG3_FLG2_ICH_WORKAROUND 0x02000000
ian@0 2222 #define TG3_FLG2_5780_CLASS 0x04000000
ian@0 2223 #define TG3_FLG2_HW_TSO_2 0x08000000
ian@0 2224 #define TG3_FLG2_HW_TSO (TG3_FLG2_HW_TSO_1 | TG3_FLG2_HW_TSO_2)
ian@0 2225 #define TG3_FLG2_1SHOT_MSI 0x10000000
ian@0 2226 #define TG3_FLG2_PHY_JITTER_BUG 0x20000000
ian@0 2227 #define TG3_FLG2_NO_FWARE_REPORTED 0x40000000
ian@0 2228
ian@0 2229 u32 split_mode_max_reqs;
ian@0 2230 #define SPLIT_MODE_5704_MAX_REQ 3
ian@0 2231
ian@0 2232 struct timer_list timer;
ian@0 2233 u16 timer_counter;
ian@0 2234 u16 timer_multiplier;
ian@0 2235 u32 timer_offset;
ian@0 2236 u16 asf_counter;
ian@0 2237 u16 asf_multiplier;
ian@0 2238
ian@0 2239 struct tg3_link_config link_config;
ian@0 2240 struct tg3_bufmgr_config bufmgr_config;
ian@0 2241
ian@0 2242 /* cache h/w values, often passed straight to h/w */
ian@0 2243 u32 rx_mode;
ian@0 2244 u32 tx_mode;
ian@0 2245 u32 mac_mode;
ian@0 2246 u32 mi_mode;
ian@0 2247 u32 misc_host_ctrl;
ian@0 2248 u32 grc_mode;
ian@0 2249 u32 grc_local_ctrl;
ian@0 2250 u32 dma_rwctrl;
ian@0 2251 u32 coalesce_mode;
ian@0 2252
ian@0 2253 /* PCI block */
ian@0 2254 u16 pci_chip_rev_id;
ian@0 2255 u8 pci_cacheline_sz;
ian@0 2256 u8 pci_lat_timer;
ian@0 2257 u8 pci_hdr_type;
ian@0 2258 u8 pci_bist;
ian@0 2259
ian@0 2260 int pm_cap;
ian@0 2261 int msi_cap;
ian@0 2262
ian@0 2263 /* PHY info */
ian@0 2264 u32 phy_id;
ian@0 2265 #define PHY_ID_MASK 0xfffffff0
ian@0 2266 #define PHY_ID_BCM5400 0x60008040
ian@0 2267 #define PHY_ID_BCM5401 0x60008050
ian@0 2268 #define PHY_ID_BCM5411 0x60008070
ian@0 2269 #define PHY_ID_BCM5701 0x60008110
ian@0 2270 #define PHY_ID_BCM5703 0x60008160
ian@0 2271 #define PHY_ID_BCM5704 0x60008190
ian@0 2272 #define PHY_ID_BCM5705 0x600081a0
ian@0 2273 #define PHY_ID_BCM5750 0x60008180
ian@0 2274 #define PHY_ID_BCM5752 0x60008100
ian@0 2275 #define PHY_ID_BCM5714 0x60008340
ian@0 2276 #define PHY_ID_BCM5780 0x60008350
ian@0 2277 #define PHY_ID_BCM5755 0xbc050cc0
ian@0 2278 #define PHY_ID_BCM5787 0xbc050ce0
ian@0 2279 #define PHY_ID_BCM8002 0x60010140
ian@0 2280 #define PHY_ID_INVALID 0xffffffff
ian@0 2281 #define PHY_ID_REV_MASK 0x0000000f
ian@0 2282 #define PHY_REV_BCM5401_B0 0x1
ian@0 2283 #define PHY_REV_BCM5401_B2 0x3
ian@0 2284 #define PHY_REV_BCM5401_C0 0x6
ian@0 2285 #define PHY_REV_BCM5411_X0 0x1 /* Found on Netgear GA302T */
ian@0 2286
ian@0 2287 u32 led_ctrl;
ian@0 2288
ian@0 2289 char board_part_number[24];
ian@0 2290 char fw_ver[16];
ian@0 2291 u32 nic_sram_data_cfg;
ian@0 2292 u32 pci_clock_ctrl;
ian@0 2293 struct pci_dev *pdev_peer;
ian@0 2294
ian@0 2295 /* This macro assumes the passed PHY ID is already masked
ian@0 2296 * with PHY_ID_MASK.
ian@0 2297 */
ian@0 2298 #define KNOWN_PHY_ID(X) \
ian@0 2299 ((X) == PHY_ID_BCM5400 || (X) == PHY_ID_BCM5401 || \
ian@0 2300 (X) == PHY_ID_BCM5411 || (X) == PHY_ID_BCM5701 || \
ian@0 2301 (X) == PHY_ID_BCM5703 || (X) == PHY_ID_BCM5704 || \
ian@0 2302 (X) == PHY_ID_BCM5705 || (X) == PHY_ID_BCM5750 || \
ian@0 2303 (X) == PHY_ID_BCM5752 || (X) == PHY_ID_BCM5714 || \
ian@0 2304 (X) == PHY_ID_BCM5780 || (X) == PHY_ID_BCM5787 || \
ian@0 2305 (X) == PHY_ID_BCM5755 || (X) == PHY_ID_BCM8002)
ian@0 2306
ian@0 2307 struct tg3_hw_stats *hw_stats;
ian@0 2308 dma_addr_t stats_mapping;
ian@0 2309 struct work_struct reset_task;
ian@0 2310
ian@0 2311 int nvram_lock_cnt;
ian@0 2312 u32 nvram_size;
ian@0 2313 u32 nvram_pagesize;
ian@0 2314 u32 nvram_jedecnum;
ian@0 2315
ian@0 2316 #define JEDEC_ATMEL 0x1f
ian@0 2317 #define JEDEC_ST 0x20
ian@0 2318 #define JEDEC_SAIFUN 0x4f
ian@0 2319 #define JEDEC_SST 0xbf
ian@0 2320
ian@0 2321 #define ATMEL_AT24C64_CHIP_SIZE (64 * 1024)
ian@0 2322 #define ATMEL_AT24C64_PAGE_SIZE (32)
ian@0 2323
ian@0 2324 #define ATMEL_AT24C512_CHIP_SIZE (512 * 1024)
ian@0 2325 #define ATMEL_AT24C512_PAGE_SIZE (128)
ian@0 2326
ian@0 2327 #define ATMEL_AT45DB0X1B_PAGE_POS 9
ian@0 2328 #define ATMEL_AT45DB0X1B_PAGE_SIZE 264
ian@0 2329
ian@0 2330 #define ATMEL_AT25F512_PAGE_SIZE 256
ian@0 2331
ian@0 2332 #define ST_M45PEX0_PAGE_SIZE 256
ian@0 2333
ian@0 2334 #define SAIFUN_SA25F0XX_PAGE_SIZE 256
ian@0 2335
ian@0 2336 #define SST_25VF0X0_PAGE_SIZE 4098
ian@0 2337
ian@0 2338 struct ethtool_coalesce coal;
ian@0 2339 };
ian@0 2340
ian@0 2341 #endif /* !(_T3_H) */