1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _RGE_HW_H 27 #define _RGE_HW_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #include <sys/types.h> 34 35 36 /* 37 * First section: 38 * Identification of the various Realtek GigE chips 39 */ 40 41 /* 42 * Driver support device 43 */ 44 #define VENDOR_ID_REALTECK 0x10EC 45 #define DEVICE_ID_8169 0x8169 /* PCI */ 46 #define DEVICE_ID_8110 0x8169 /* PCI */ 47 #define DEVICE_ID_8168 0x8168 /* PCI-E */ 48 #define DEVICE_ID_8111 0x8168 /* PCI-E */ 49 #define DEVICE_ID_8169SC 0x8167 /* PCI */ 50 #define DEVICE_ID_8110SC 0x8167 /* PCI */ 51 #define DEVICE_ID_8101E 0x8136 /* 10/100M PCI-E */ 52 53 #define RGE_REGISTER_MAX 0x0100 54 55 56 /* 57 * Second section: 58 * Offsets of important registers & definitions for bits therein 59 */ 60 /* 61 * MAC address register, initial value is autoloaded from the 62 * EEPROM EthernetID field 63 */ 64 #define ID_0_REG 0x0000 65 #define ID_1_REG 0x0001 66 #define ID_2_REG 0x0002 67 #define ID_3_REG 0x0003 68 #define ID_4_REG 0x0004 69 #define ID_5_REG 0x0005 70 71 /* 72 * Multicast register 73 */ 74 #define MULTICAST_0_REG 0x0008 75 #define MULTICAST_1_REG 0x0009 76 #define MULTICAST_2_REG 0x000a 77 #define MULTICAST_3_REG 0x000b 78 #define MULTICAST_4_REG 0x000c 79 #define MULTICAST_5_REG 0x000d 80 #define MULTICAST_6_REG 0x000e 81 #define MULTICAST_7_REG 0x000f 82 #define RGE_MCAST_NUM 8 /* total 8 registers: MAR0 - MAR7 */ 83 84 /* 85 * Dump Tally Counter Command register 86 */ 87 #define DUMP_COUNTER_REG_0 0x0010 88 #define DUMP_COUNTER_REG_RESV 0x00000037 89 #define DUMP_START 0x00000008 90 #define DUMP_COUNTER_REG_1 0x0014 91 92 /* 93 * Register for start address of transmit descriptors 94 */ 95 #define NORMAL_TX_RING_ADDR_LO_REG 0x0020 96 #define NORMAL_TX_RING_ADDR_HI_REG 0x0024 97 #define HIGH_TX_RING_ADDR_LO_REG 0x0028 98 #define HIGH_TX_RING_ADDR_HI_REG 0x002c 99 100 /* 101 * Commond register 102 */ 103 #define RT_COMMAND_REG 0x0037 104 #define RT_COMMAND_RESV 0xe3 105 #define RT_COMMAND_RESET 0x10 106 #define RT_COMMAND_RX_ENABLE 0x08 107 #define RT_COMMAND_TX_ENABLE 0x04 108 109 /* 110 * Transmit priority polling register 111 */ 112 #define TX_RINGS_POLL_REG 0x0038 113 #define HIGH_TX_RING_POLL 0x80 114 #define NORMAL_TX_RING_POLL 0x40 115 #define FORCE_SW_INT 0x01 116 117 /* 118 * Interrupt mask & status register 119 */ 120 #define INT_MASK_REG 0x003c 121 #define INT_STATUS_REG 0x003e 122 #define SYS_ERR_INT 0x8000 123 #define TIME_OUT_INT 0x4000 124 #define SW_INT 0x0100 125 #define NO_TXDESC_INT 0x0080 126 #define RX_FIFO_OVERFLOW_INT 0x0040 127 #define LINK_CHANGE_INT 0x0020 128 #define NO_RXDESC_INT 0x0010 129 #define TX_ERR_INT 0x0008 130 #define TX_OK_INT 0x0004 131 #define RX_ERR_INT 0x0002 132 #define RX_OK_INT 0x0001 133 134 #define INT_REG_RESV 0x3e00 135 #define INT_MASK_ALL 0xffff 136 #define INT_MASK_NONE 0x0000 137 #define RGE_RX_INT (RX_OK_INT | RX_ERR_INT | \ 138 NO_RXDESC_INT) 139 #define RGE_INT_MASK (RGE_RX_INT | LINK_CHANGE_INT) 140 141 /* 142 * Transmit configuration register 143 */ 144 #define TX_CONFIG_REG 0x0040 145 #define TX_CONFIG_REG_RESV 0x8070f8ff 146 #define HW_VERSION_ID_0 0x7c000000 147 #define INTER_FRAME_GAP_BITS 0x03080000 148 #define TX_INTERFRAME_GAP_802_3 0x03000000 149 #define HW_VERSION_ID_1 0x00800000 150 #define MAC_LOOPBACK_ENABLE 0x00060000 151 #define CRC_APPEND_ENABLE 0x00010000 152 #define TX_DMA_BURST_BITS 0x00000700 153 154 #define TX_DMA_BURST_UNLIMIT 0x00000700 155 #define TX_DMA_BURST_1024B 0x00000600 156 #define TX_DMA_BURST_512B 0x00000500 157 #define TX_DMA_BURST_256B 0x00000400 158 #define TX_DMA_BURST_128B 0x00000300 159 #define TX_DMA_BURST_64B 0x00000200 160 #define TX_DMA_BURST_32B 0x00000100 161 #define TX_DMA_BURST_16B 0x00000000 162 163 #define MAC_VER_8169 0x00000000 164 #define MAC_VER_8169S_D 0x00800000 165 #define MAC_VER_8169S_E 0x04000000 166 #define MAC_VER_8169SB 0x10000000 167 #define MAC_VER_8169SC 0x18000000 168 #define MAC_VER_8168 0x20000000 169 #define MAC_VER_8168B_B 0x30000000 170 #define MAC_VER_8168B_C 0x38000000 171 #define MAC_VER_8168B_D 0x3c000000 172 #define MAC_VER_8101E 0x34000000 173 #define MAC_VER_8101E_B 0x24800000 174 #define MAC_VER_8101E_C 0x34800000 175 176 #define TX_CONFIG_DEFAULT (TX_INTERFRAME_GAP_802_3 | \ 177 TX_DMA_BURST_1024B) 178 /* 179 * Receive configuration register 180 */ 181 #define RX_CONFIG_REG 0x0044 182 #define RX_CONFIG_REG_RESV 0xfffe1880 183 #define RX_RER8_ENABLE 0x00010000 184 #define RX_FIFO_THRESHOLD_BITS 0x0000e000 185 #define RX_FIFO_THRESHOLD_NONE 0x0000e000 186 #define RX_FIFO_THRESHOLD_1024B 0x0000c000 187 #define RX_FIFO_THRESHOLD_512B 0x0000a000 188 #define RX_FIFO_THRESHOLD_256B 0x00008000 189 #define RX_FIFO_THRESHOLD_128B 0x00006000 190 #define RX_FIFO_THRESHOLD_64B 0x00004000 191 #define RX_DMA_BURST_BITS 0x00000700 192 #define RX_DMA_BURST_UNLIMITED 0x00000700 193 #define RX_DMA_BURST_1024B 0x00000600 194 #define RX_DMA_BURST_512B 0x00000500 195 #define RX_DMA_BURST_256B 0x00000400 196 #define RX_DMA_BURST_128B 0x00000300 197 #define RX_DMA_BURST_64B 0x00000200 198 #define RX_EEPROM_9356 0x00000040 199 #define RX_ACCEPT_ERR_PKT 0x00000020 200 #define RX_ACCEPT_RUNT_PKT 0x00000010 201 #define RX_ACCEPT_BROADCAST_PKT 0x000000008 202 #define RX_ACCEPT_MULTICAST_PKT 0x000000004 203 #define RX_ACCEPT_MAC_MATCH_PKT 0x000000002 204 #define RX_ACCEPT_ALL_PKT 0x000000001 205 206 #define RX_CONFIG_DEFAULT (RX_FIFO_THRESHOLD_NONE | \ 207 RX_DMA_BURST_1024B | \ 208 RX_ACCEPT_BROADCAST_PKT | \ 209 RX_ACCEPT_MULTICAST_PKT | \ 210 RX_ACCEPT_MAC_MATCH_PKT) 211 212 /* 213 * Timer count register 214 */ 215 #define TIMER_COUNT_REG 0x0048 216 217 /* 218 * Missed packet counter: indicates the number of packets 219 * discarded due to Rx FIFO overflow 220 */ 221 #define RX_PKT_MISS_COUNT_REG 0x004c 222 223 /* 224 * 93c46(93c56) commond register: 225 */ 226 #define RT_93c46_COMMOND_REG 0x0050 227 #define RT_93c46_MODE_BITS 0xc0 228 #define RT_93c46_MODE_NORMAL 0x00 229 #define RT_93c46_MODE_AUTOLOAD 0x40 230 #define RT_93c46_MODE_PROGRAM 0x80 231 #define RT_93c46_MODE_CONFIG 0xc0 232 233 #define RT_93c46_EECS 0x08 234 #define RT_93c46_EESK 0x04 235 #define RT_93c46_EEDI 0x02 236 #define RT_93c46_EEDO 0x01 237 238 /* 239 * Configuration registers 240 */ 241 #define RT_CONFIG_0_REG 0x0051 242 #define RT_CONFIG_1_REG 0x0052 243 #define RT_CONFIG_2_REG 0x0053 244 #define RT_CONFIG_3_REG 0x0054 245 #define RT_CONFIG_4_REG 0x0055 246 #define RT_CONFIG_5_REG 0x0056 247 248 /* 249 * Timer interrupt register 250 */ 251 #define TIMER_INT_REG 0x0058 252 #define TIMER_INT_NONE 0x00000000 253 254 /* 255 * PHY access register 256 */ 257 #define PHY_ACCESS_REG 0x0060 258 #define PHY_ACCESS_WR_FLAG 0x80000000 259 #define PHY_ACCESS_REG_BITS 0x001f0000 260 #define PHY_ACCESS_DATA_BITS 0x0000ffff 261 #define PHY_DATA_MASK 0xffff 262 #define PHY_REG_MASK 0x1f 263 #define PHY_REG_SHIFT 16 264 265 /* 266 * CSI data register (for PCIE chipset) 267 */ 268 #define RT_CSI_DATA_REG 0x0064 269 270 /* 271 * CSI access register (for PCIE chipset) 272 */ 273 #define RT_CSI_ACCESS_REG 0x0068 274 275 /* 276 * PHY status register 277 */ 278 #define PHY_STATUS_REG 0x006c 279 #define PHY_STATUS_TBI 0x80 280 #define PHY_STATUS_TX_FLOW 0x40 281 #define PHY_STATUS_RX_FLOW 0x20 282 #define PHY_STATUS_1000MF 0x10 283 #define PHY_STATUS_100M 0x08 284 #define PHY_STATUS_10M 0x04 285 #define PHY_STATUS_LINK_UP 0x02 286 #define PHY_STATUS_DUPLEX_FULL 0x01 287 288 #define RGE_SPEED_1000M 1000 289 #define RGE_SPEED_100M 100 290 #define RGE_SPEED_10M 10 291 #define RGE_SPEED_UNKNOWN 0 292 293 /* 294 * EPHY access register (for PCIE chipset) 295 */ 296 #define EPHY_ACCESS_REG 0x0080 297 #define EPHY_ACCESS_WR_FLAG 0x80000000 298 #define EPHY_ACCESS_REG_BITS 0x001f0000 299 #define EPHY_ACCESS_DATA_BITS 0x0000ffff 300 #define EPHY_DATA_MASK 0xffff 301 #define EPHY_REG_MASK 0x1f 302 #define EPHY_REG_SHIFT 16 303 304 /* 305 * Receive packet maximum size register 306 * -- the maximum rx size supported is (16K - 1) bytes 307 */ 308 #define RX_MAX_PKTSIZE_REG 0x00da 309 #define RX_PKTSIZE_JUMBO 0x1bfa /* 7K bytes */ 310 #define RX_PKTSIZE_STD 0x05fa /* 1530 bytes */ 311 #define RX_PKTSIZE_STD_8101E 0x3fff 312 313 /* 314 * C+ command register 315 */ 316 #define CPLUS_COMMAND_REG 0x00e0 317 #define CPLUS_RESERVE 0xfd87 318 #define CPLUS_BIT14 0x4000 319 #define CPLUS_BIG_ENDIAN 0x0400 320 #define RX_VLAN_DETAG 0x0040 321 #define RX_CKSM_OFFLOAD 0x0020 322 #define DUAL_PCI_CYCLE 0x0010 323 #define MUL_PCI_RW_ENABLE 0x0008 324 325 /* 326 * Receive descriptor start address 327 */ 328 #define RX_RING_ADDR_LO_REG 0x00e4 329 #define RX_RING_ADDR_HI_REG 0x00e8 330 331 /* 332 * Max transmit packet size register 333 */ 334 #define TX_MAX_PKTSIZE_REG 0x00ec 335 #define TX_MAX_PKTSIZE_REG_RESV 0xc0 336 #define TX_PKTSIZE_JUMBO 0x3b /* Realtek suggested value */ 337 #define TX_PKTSIZE_STD 0x32 /* document suggested value */ 338 #define TX_PKTSIZE_STD_8101E 0x3f 339 340 #define RESV_82_REG 0x0082 341 #define RESV_E2_REG 0x00e2 342 343 /* 344 * PHY registers 345 */ 346 /* 347 * Basic mode control register 348 */ 349 #define PHY_BMCR_REG 0x00 350 #define PHY_RESET 0x8000 351 #define PHY_LOOPBACK 0x4000 352 #define PHY_SPEED_0 0x2000 353 #define PHY_SPEED_1 0x0040 354 #define PHY_SPEED_BITS (PHY_SPEED_0 | PHY_SPEED_1) 355 #define PHY_SPEED_1000M PHY_SPEED_1 356 #define PHY_SPEED_100M PHY_SPEED_0 357 #define PHY_SPEED_10M 0x0000 358 #define PHY_SPEED_RES (PHY_SPEED_0 | PHY_SPEED_1) 359 #define PHY_AUTO_NEGO 0x1000 360 #define PHY_RESTART_ANTO_NEGO 0x0200 361 #define PHY_DUPLEX_FULL 0x0100 362 #define PHY_BMCR_CLEAR 0xff40 363 364 /* 365 * Basic mode status register 366 */ 367 #define PHY_BMSR_REG 0x01 368 #define PHY_100BASE_T4 0x8000 369 #define PHY_100BASE_TX_FULL 0x4000 370 #define PHY_100BASE_TX_HALF 0x2000 371 #define PHY_10BASE_T_FULL 0x1000 372 #define PHY_10BASE_T_HALF 0x0800 373 #define PHY_100BASE_T2_FULL 0x0400 374 #define PHY_100BASE_T2_HALF 0x0200 375 #define PHY_1000BASE_T_EXT 0x0100 376 #define PHY_AUTO_NEGO_END 0x0020 377 #define PHY_REMOTE_FAULT 0x0010 378 #define PHY_AUTO_NEGO_ABLE 0x0008 379 #define PHY_LINK_UP 0x0004 380 #define PHY_JABBER_DETECT 0x0002 381 #define PHY_EXT_ABLE 0x0001 382 383 /* 384 * PHY identifier register 385 */ 386 #define PHY_ID_REG_1 0x02 387 #define PHY_ID_REG_2 0x03 388 #define PHY_VER_MASK 0x000f 389 #define PHY_VER_S 0x0000 390 #define PHY_VER_SB 0x0010 391 392 /* 393 * Auto-negotiation advertising register 394 */ 395 #define PHY_ANAR_REG 0x04 396 #define ANAR_NEXT_PAGE 0x8000 397 #define ANAR_REMOTE_FAULT 0x2000 398 #define ANAR_ASY_PAUSE 0x0800 399 #define ANAR_PAUSE 0x0400 400 #define ANAR_100BASE_T4 0x0200 401 #define ANAR_100BASE_TX_FULL 0x0100 402 #define ANAR_100BASE_TX_HALF 0x0080 403 #define ANAR_10BASE_T_FULL 0x0040 404 #define ANAR_10BASE_T_HALF 0x0020 405 #define ANAR_RESV_BITS 0x501f 406 407 /* 408 * Auto-negotiation link partner ability register 409 */ 410 #define PHY_ANLPAR_REG 0x05 411 412 /* 413 * Auto-negotiation expansion register 414 */ 415 #define PHY_ANER_REG 0x06 416 417 /* 418 * Auto-negotiation next page transmit register 419 */ 420 #define PHY_ANNPTR_REG 0x07 421 422 /* 423 * Auto-negotiation next page receive register 424 */ 425 #define PHY_ANNPRR_REG 0x08 426 427 /* 428 * 1000Base-T control register 429 */ 430 #define PHY_GBCR_REG 0x09 431 #define GBCR_MODE_JITTER 0x2000 432 #define GBCR_MODE_MASTER 0x4000 433 #define GBCR_MODE_SLAVE 0x6000 434 #define GBCR_1000BASE_T_FULL 0x0200 435 #define GBCR_1000BASE_T_HALF 0x0100 436 #define GBCR_DEFAULT 0x273a 437 438 /* 439 * 1000Base-T status register 440 */ 441 #define PHY_GBSR_REG 0x0a 442 #define LP_1000BASE_T_FULL 0x0800 443 #define LP_1000BASE_T_HALF 0x0400 444 445 /* 446 * 1000Base-T extended status register 447 */ 448 #define PHY_GBESR_REG 0x0f 449 450 #define PHY_1F_REG 0x1f 451 #define PHY_1D_REG 0x1d 452 #define PHY_1C_REG 0x1c 453 #define PHY_1B_REG 0x1b 454 #define PHY_18_REG 0x18 455 #define PHY_15_REG 0x15 456 #define PHY_13_REG 0x13 457 #define PHY_12_REG 0x12 458 #define PHY_0E_REG 0x0e 459 #define PHY_0C_REG 0x0c 460 #define PHY_0B_REG 0x0b 461 462 /* 463 * MII (PHY) registers, beyond those already defined in <sys/miiregs.h> 464 */ 465 466 #define MII_AN_LPNXTPG 8 467 #define MII_1000BASE_T_CONTROL 9 468 #define MII_1000BASE_T_STATUS 10 469 #define MII_IEEE_EXT_STATUS 15 470 471 /* 472 * New bits in the MII_CONTROL register 473 */ 474 #define MII_CONTROL_1000MB 0x0040 475 476 /* 477 * New bits in the MII_AN_ADVERT register 478 */ 479 #define MII_ABILITY_ASYM_PAUSE 0x0800 480 #define MII_ABILITY_PAUSE 0x0400 481 482 /* 483 * Values for the <selector> field of the MII_AN_ADVERT register 484 */ 485 #define MII_AN_SELECTOR_8023 0x0001 486 487 /* 488 * Bits in the MII_1000BASE_T_CONTROL register 489 * 490 * The MASTER_CFG bit enables manual configuration of Master/Slave mode 491 * (otherwise, roles are automatically negotiated). When this bit is set, 492 * the MASTER_SEL bit forces Master mode, otherwise Slave mode is forced. 493 */ 494 #define MII_1000BT_CTL_MASTER_CFG 0x1000 /* enable role select */ 495 #define MII_1000BT_CTL_MASTER_SEL 0x0800 /* role select bit */ 496 #define MII_1000BT_CTL_ADV_FDX 0x0200 497 #define MII_1000BT_CTL_ADV_HDX 0x0100 498 499 /* 500 * Vendor-specific MII registers 501 */ 502 #define MII_EXT_CONTROL MII_VENDOR(0) 503 #define MII_EXT_STATUS MII_VENDOR(1) 504 #define MII_RCV_ERR_COUNT MII_VENDOR(2) 505 #define MII_FALSE_CARR_COUNT MII_VENDOR(3) 506 #define MII_RCV_NOT_OK_COUNT MII_VENDOR(4) 507 #define MII_AUX_CONTROL MII_VENDOR(8) 508 #define MII_AUX_STATUS MII_VENDOR(9) 509 #define MII_INTR_STATUS MII_VENDOR(10) 510 #define MII_INTR_MASK MII_VENDOR(11) 511 #define MII_HCD_STATUS MII_VENDOR(13) 512 513 #define MII_MAXREG MII_VENDOR(15) /* 31, 0x1f */ 514 515 /* 516 * Bits in the MII_AUX_STATUS register 517 */ 518 #define MII_AUX_STATUS_MODE_MASK 0x0700 519 #define MII_AUX_STATUS_MODE_1000_F 0x0700 520 #define MII_AUX_STATUS_MODE_1000_H 0x0600 521 #define MII_AUX_STATUS_MODE_100_F 0x0500 522 #define MII_AUX_STATUS_MODE_100_4 0x0400 523 #define MII_AUX_STATUS_MODE_100_H 0x0300 524 #define MII_AUX_STATUS_MODE_10_F 0x0200 525 #define MII_AUX_STATUS_MODE_10_H 0x0100 526 #define MII_AUX_STATUS_MODE_NONE 0x0000 527 #define MII_AUX_STATUS_MODE_SHIFT 8 528 529 #define MII_AUX_STATUS_PAR_FAULT 0x0080 530 #define MII_AUX_STATUS_REM_FAULT 0x0040 531 #define MII_AUX_STATUS_LP_ANEG_ABLE 0x0010 532 #define MII_AUX_STATUS_LP_NP_ABLE 0x0008 533 534 #define MII_AUX_STATUS_LINKUP 0x0004 535 #define MII_AUX_STATUS_RX_PAUSE 0x0002 536 #define MII_AUX_STATUS_TX_PAUSE 0x0001 537 538 /* 539 * Third section: 540 * Hardware-defined data structures 541 * 542 * Note that the chip is naturally little-endian, so, for a little-endian 543 * host, the structures defined below match those descibed in the PRM. 544 * For big-endian hosts, some structures have to be swapped around. 545 */ 546 547 #if !defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) 548 #error Host endianness not defined 549 #endif 550 551 /* 552 * Architectural constants: absolute maximum numbers of each type of ring 553 */ 554 555 #define RGE_SEND_SLOTS 1024 556 #define RGE_RECV_SLOTS 1024 557 #define RGE_BUFF_SIZE_STD 1536 /* 1536 bytes */ 558 #define RGE_BUFF_SIZE_JUMBO 7168 /* maximum 7K */ 559 #define RGE_JUMBO_SIZE 7014 560 #define RGE_JUMBO_MTU 7000 561 #define RGE_STATS_DUMP_SIZE 64 562 563 typedef struct rge_bd { 564 volatile uint32_t flags_len; 565 volatile uint32_t vlan_tag; 566 volatile uint32_t host_buf_addr; 567 volatile uint32_t host_buf_addr_hi; 568 } rge_bd_t; 569 570 #define BD_FLAG_HW_OWN 0x80000000 571 #define BD_FLAG_EOR 0x40000000 572 #define BD_FLAG_PKT_START 0x20000000 573 #define BD_FLAG_PKT_END 0x10000000 574 575 #define RBD_FLAG_MULTICAST 0x08000000 576 #define RBD_FLAG_UNICAST 0x04000000 577 #define RBD_FLAG_BROADCAST 0x02000000 578 #define RBD_FLAG_PKT_4096 0x00400000 579 #define RBD_FLAG_ERROR 0x00200000 580 #define RBD_FLAG_RUNT 0x00100000 581 #define RBD_FLAG_CRC_ERR 0x00080000 582 #define RBD_FLAG_PROTOCOL 0x00060000 583 #define RBD_FLAG_IP 0x00060000 584 #define RBD_FLAG_UDP 0x00040000 585 #define RBD_FLAG_TCP 0x00020000 586 #define RBD_FLAG_NONE_IP 0x00000000 587 #define RBD_IP_CKSUM_ERR 0x00010000 588 #define RBD_UDP_CKSUM_ERR 0x00008000 589 #define RBD_TCP_CKSUM_ERR 0x00004000 590 #define RBD_CKSUM_ERR 0x0001c000 591 #define RBD_FLAGS_MASK 0xffffc000 592 #define RBD_LEN_MASK 0x00003fff 593 594 #define RBD_VLAN_PKT 0x00010000 595 #define RBD_VLAN_TAG 0x0000ffff 596 597 598 #define SBD_FLAG_LARGE_SEND 0x08000000 599 #define SBD_FLAG_SEG_MAX 0x07ff0000 600 #define SBD_FLAG_IP_CKSUM 0x00040000 601 #define SBD_FLAG_UDP_CKSUM 0x00020000 602 #define SBD_FLAG_TCP_CKSUM 0x00010000 603 #define SBD_FLAG_TCP_UDP_CKSUM 0x00030000 604 #define SBD_LEN_MASK 0x0000ffff 605 606 #define SBD_VLAN_PKT 0x00020000 607 #define SBD_VLAN_TAG 0x0000ffff 608 609 #define SBD_FLAG_TX_PKT (BD_FLAG_HW_OWN | BD_FLAG_PKT_START | \ 610 BD_FLAG_PKT_END) 611 612 /* 613 * Chip VLAN TCI format 614 * bit0-3: VIDH The high 4 bits of a 12-bit VLAN ID 615 * bit4: CFI Canonical format indicator 616 * bit5-7: 3-bit 8-level priority 617 * bit8-15: The low 8 bits of a 12-bit VLAN ID 618 */ 619 #define TCI_OS2CHIP(tci) (((tci & 0xff) << 8) | (tci >> 8)) 620 #define TCI_CHIP2OS(tci) (((tci & 0xff00) >> 8) | (tci << 8)) 621 622 /* 623 * Hardware-defined Status Block 624 */ 625 typedef struct rge_hw_stats { 626 uint64_t xmt_ok; 627 uint64_t rcv_ok; 628 uint64_t xmt_err; 629 uint32_t rcv_err; 630 uint16_t in_discards; 631 uint16_t frame_err; 632 uint32_t xmt_1col; 633 uint32_t xmt_mcol; 634 uint64_t unicast_rcv; 635 uint64_t brdcst_rcv; 636 uint32_t multi_rcv; 637 uint16_t xmt_abt; 638 uint16_t xmt_undrn; 639 } rge_hw_stats_t; /* total 64 bytes */ 640 641 #ifdef __cplusplus 642 } 643 #endif 644 645 #endif /* _RGE_HW_H */ 646