1 /*******************************************************************************
3 Copyright (c) 2001-2002 Intel Corporation
6 Redistribution and use in source and binary forms of the Software, with or
7 without modification, are permitted provided that the following conditions
10 1. Redistributions of source code of the Software may retain the above
11 copyright notice, this list of conditions and the following disclaimer.
13 2. Redistributions in binary form of the Software may reproduce the above
14 copyright notice, this list of conditions and the following disclaimer
15 in the documentation and/or other materials provided with the
18 3. Neither the name of the Intel Corporation nor the names of its
19 contributors shall be used to endorse or promote products derived from
20 this Software without specific prior written permission.
22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS CONTRIBUTORS BE LIABLE
26 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 *******************************************************************************/
38 * Structures, enums, and macros for the MAC
44 #include <dev/em/if_em_osdep.h>
46 /* Forward declarations of structures used by the shared code */
47 struct em_shared_adapter;
48 struct em_shared_stats;
50 /* Enumerated types specific to the e1000 hardware */
51 /* Media Access Controlers */
63 em_media_type_copper = 0,
64 em_media_type_fiber = 1,
73 } em_speed_duplex_type;
75 /* Flow Control Settings */
86 em_bus_type_unknown = 0,
93 em_bus_speed_unknown = 0,
103 em_bus_width_unknown = 0,
110 /* Function prototypes */
112 void em_adapter_stop(struct em_shared_adapter *shared);
113 boolean_t em_init_hw(struct em_shared_adapter *shared);
114 void em_init_rx_addrs(struct em_shared_adapter *shared);
116 /* Filters (multicast, vlan, receive) */
117 void em_mc_addr_list_update(struct em_shared_adapter *shared, uint8_t * mc_addr_list, uint32_t mc_addr_count, uint32_t pad);
118 uint32_t em_hash_mc_addr(struct em_shared_adapter *shared, uint8_t * mc_addr);
119 void em_mta_set(struct em_shared_adapter *shared, uint32_t hash_value);
120 void em_rar_set(struct em_shared_adapter *shared, uint8_t * mc_addr, uint32_t rar_index);
121 void em_write_vfta(struct em_shared_adapter *shared, uint32_t offset, uint32_t value);
122 void em_clear_vfta(struct em_shared_adapter *shared);
124 /* Link layer setup functions */
125 boolean_t em_setup_fc_and_link(struct em_shared_adapter *shared);
126 boolean_t em_setup_pcs_link(struct em_shared_adapter *shared, uint32_t dev_ctrl_reg);
127 void em_config_fc_after_link_up(struct em_shared_adapter *shared);
128 void em_check_for_link(struct em_shared_adapter *shared);
129 void em_get_speed_and_duplex(struct em_shared_adapter *shared, uint16_t * speed, uint16_t * duplex);
131 /* EEPROM Functions */
132 uint16_t em_read_eeprom(struct em_shared_adapter *shared, uint16_t reg);
133 boolean_t em_validate_eeprom_checksum(struct em_shared_adapter *shared);
134 void em_update_eeprom_checksum(struct em_shared_adapter *shared);
135 boolean_t em_write_eeprom(struct em_shared_adapter *shared, uint16_t reg, uint16_t data);
137 /* Everything else */
138 void em_clear_hw_cntrs(struct em_shared_adapter *shared);
139 boolean_t em_read_part_num(struct em_shared_adapter *shared, uint32_t * part_num);
140 void em_led_on(struct em_shared_adapter *shared);
141 void em_led_off(struct em_shared_adapter *shared);
142 void em_get_bus_info(struct em_shared_adapter *shared);
143 uint32_t em_tbi_adjust_stats(struct em_shared_adapter *shared, struct em_shared_stats *stats, uint32_t frame_len, uint8_t * mac_addr);
144 void em_write_pci_cfg(struct em_shared_adapter *shared, uint32_t reg, uint16_t * value);
147 #define E1000_DEV_ID_82542 0x1000
148 #define E1000_DEV_ID_82543GC_FIBER 0x1001
149 #define E1000_DEV_ID_82543GC_COPPER 0x1004
150 #define E1000_DEV_ID_82544EI_COPPER 0x1008
151 #define E1000_DEV_ID_82544EI_FIBER 0x1009
152 #define E1000_DEV_ID_82544GC_COPPER 0x100C
153 #define E1000_DEV_ID_82544GC_LOM 0x100D
154 #define E1000_DEV_ID_82540EM 0x100E
155 #define NUM_DEV_IDS 8
157 #define NODE_ADDRESS_SIZE 6
158 #define ETH_LENGTH_OF_ADDRESS 6
160 /* MAC decode size is 128K - This is the size of BAR0 */
161 #define MAC_DECODE_SIZE (128 * 1024)
163 #define E1000_82542_2_0_REV_ID 2
164 #define E1000_82542_2_1_REV_ID 3
167 #define SPEED_100 100
168 #define SPEED_1000 1000
169 #define HALF_DUPLEX 1
170 #define FULL_DUPLEX 2
172 /* The sizes (in bytes) of a ethernet packet */
173 #define ENET_HEADER_SIZE 14
174 #define MAXIMUM_ETHERNET_PACKET_SIZE 1514 /* Without FCS */
175 #define MINIMUM_ETHERNET_PACKET_SIZE 60 /* Without FCS */
177 #define MAX_JUMBO_FRAME_SIZE 0x3F00
180 /* 802.1q VLAN Packet Sizes */
181 #define VLAN_TAG_SIZE 4 /* 802.3ac tag (not DMAed) */
183 /* Ethertype field values */
184 #define ETHERNET_IEEE_VLAN_TYPE 0x8100 /* 802.3ac packet */
185 #define ETHERNET_IP_TYPE 0x0800 /* IP packets */
186 #define ETHERNET_ARP_TYPE 0x0806 /* Address Resolution Protocol (ARP) */
188 /* Packet Header defines */
189 #define IP_PROTOCOL_TCP 6
190 #define IP_PROTOCOL_UDP 0x11
192 /* This defines the bits that are set in the Interrupt Mask
193 * Set/Read Register. Each bit is documented below:
194 * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0)
195 * o RXSEQ = Receive Sequence Error
197 #define POLL_IMS_ENABLE_MASK ( \
201 /* This defines the bits that are set in the Interrupt Mask
202 * Set/Read Register. Each bit is documented below:
203 * o RXT0 = Receiver Timer Interrupt (ring 0)
204 * o TXDW = Transmit Descriptor Written Back
205 * o RXDMT0 = Receive Descriptor Minimum Threshold hit (ring 0)
206 * o RXSEQ = Receive Sequence Error
207 * o LSC = Link Status Change
209 #define IMS_ENABLE_MASK ( \
216 /* The number of high/low register pairs in the RAR. The RAR (Receive Address
217 * Registers) holds the directed and multicast addresses that we monitor. We
218 * reserve one of these spots for our directed address, allowing us room for
219 * E1000_RAR_ENTRIES - 1 multicast addresses.
221 #define E1000_RAR_ENTRIES 16
223 #define MIN_NUMBER_OF_DESCRIPTORS 8
224 #define MAX_NUMBER_OF_DESCRIPTORS 0xFFF8
226 /* Receive Descriptor */
228 uint64_t buffer_addr; /* Address of the descriptor's data buffer */
229 uint16_t length; /* Length of data DMAed into data buffer */
230 uint16_t csum; /* Packet checksum */
231 uint8_t status; /* Descriptor status */
232 uint8_t errors; /* Descriptor Errors */
236 /* Receive Decriptor bit definitions */
237 #define E1000_RXD_STAT_DD 0x01 /* Descriptor Done */
238 #define E1000_RXD_STAT_EOP 0x02 /* End of Packet */
239 #define E1000_RXD_STAT_IXSM 0x04 /* Ignore checksum */
240 #define E1000_RXD_STAT_VP 0x08 /* IEEE VLAN Packet */
241 #define E1000_RXD_STAT_TCPCS 0x20 /* TCP xsum calculated */
242 #define E1000_RXD_STAT_IPCS 0x40 /* IP xsum calculated */
243 #define E1000_RXD_STAT_PIF 0x80 /* passed in-exact filter */
244 #define E1000_RXD_ERR_CE 0x01 /* CRC Error */
245 #define E1000_RXD_ERR_SE 0x02 /* Symbol Error */
246 #define E1000_RXD_ERR_SEQ 0x04 /* Sequence Error */
247 #define E1000_RXD_ERR_CXE 0x10 /* Carrier Extension Error */
248 #define E1000_RXD_ERR_TCPE 0x20 /* TCP/UDP Checksum Error */
249 #define E1000_RXD_ERR_IPE 0x40 /* IP Checksum Error */
250 #define E1000_RXD_ERR_RXE 0x80 /* Rx Data Error */
251 #define E1000_RXD_SPC_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */
252 #define E1000_RXD_SPC_PRI_MASK 0xE000 /* Priority is in upper 3 bits */
253 #define E1000_RXD_SPC_PRI_SHIFT 0x000D /* Priority is in upper 3 of 16 */
254 #define E1000_RXD_SPC_CFI_MASK 0x1000 /* CFI is bit 12 */
255 #define E1000_RXD_SPC_CFI_SHIFT 0x000C /* CFI is bit 12 */
257 /* mask to determine if packets should be dropped due to frame errors */
258 #define E1000_RXD_ERR_FRAME_ERR_MASK ( \
261 E1000_RXD_ERR_SEQ | \
262 E1000_RXD_ERR_CXE | \
265 /* Transmit Descriptor */
267 uint64_t buffer_addr; /* Address of the descriptor's data buffer */
271 uint16_t length; /* Data buffer length */
272 uint8_t cso; /* Checksum offset */
273 uint8_t cmd; /* Descriptor control */
279 uint8_t status; /* Descriptor status */
280 uint8_t css; /* Checksum start */
286 /* Transmit Descriptor bit definitions */
287 #define E1000_TXD_DTYP_D 0x00100000 /* Data Descriptor */
288 #define E1000_TXD_DTYP_C 0x00000000 /* Context Descriptor */
289 #define E1000_TXD_POPTS_IXSM 0x01 /* Insert IP checksum */
290 #define E1000_TXD_POPTS_TXSM 0x02 /* Insert TCP/UDP checksum */
291 #define E1000_TXD_CMD_EOP 0x01000000 /* End of Packet */
292 #define E1000_TXD_CMD_IFCS 0x02000000 /* Insert FCS (Ethernet CRC) */
293 #define E1000_TXD_CMD_IC 0x04000000 /* Insert Checksum */
294 #define E1000_TXD_CMD_RS 0x08000000 /* Report Status */
295 #define E1000_TXD_CMD_RPS 0x10000000 /* Report Packet Sent */
296 #define E1000_TXD_CMD_DEXT 0x20000000 /* Descriptor extension (0 = legacy) */
297 #define E1000_TXD_CMD_VLE 0x40000000 /* Add VLAN tag */
298 #define E1000_TXD_CMD_IDE 0x80000000 /* Enable Tidv register */
299 #define E1000_TXD_STAT_DD 0x00000001 /* Descriptor Done */
300 #define E1000_TXD_STAT_EC 0x00000002 /* Excess Collisions */
301 #define E1000_TXD_STAT_LC 0x00000004 /* Late Collisions */
302 #define E1000_TXD_STAT_TU 0x00000008 /* Transmit underrun */
303 #define E1000_TXD_CMD_TCP 0x01000000 /* TCP packet */
304 #define E1000_TXD_CMD_IP 0x02000000 /* IP packet */
305 #define E1000_TXD_CMD_TSE 0x04000000 /* TCP Seg enable */
306 #define E1000_TXD_STAT_TC 0x00000004 /* Tx Underrun */
308 /* Offload Context Descriptor */
309 struct em_context_desc {
313 uint8_t ipcss; /* IP checksum start */
314 uint8_t ipcso; /* IP checksum offset */
315 uint16_t ipcse; /* IP checksum end */
321 uint8_t tucss; /* TCP checksum start */
322 uint8_t tucso; /* TCP checksum offset */
323 uint16_t tucse; /* TCP checksum end */
326 uint32_t cmd_and_length; /* */
330 uint8_t status; /* Descriptor status */
331 uint8_t hdr_len; /* Header length */
332 uint16_t mss; /* Maximum segment size */
337 /* Offload data descriptor */
338 struct em_data_desc {
339 uint64_t buffer_addr; /* Address of the descriptor's buffer address */
343 uint16_t length; /* Data buffer length */
344 uint8_t typ_len_ext; /* */
351 uint8_t status; /* Descriptor status */
352 uint8_t popts; /* Packet Options */
353 uint16_t special; /* */
359 #define E1000_NUM_UNICAST 16 /* Unicast filter entries */
360 #define E1000_MC_TBL_SIZE 128 /* Multicast Filter Table (4096 bits) */
361 #define E1000_VLAN_FILTER_TBL_SIZE 128 /* VLAN Filter Table (4096 bits) */
364 /* Receive Address Register */
366 volatile uint32_t low; /* receive address low */
367 volatile uint32_t high; /* receive address high */
370 /* The number of entries in the Multicast Table Array (MTA). */
371 #define E1000_NUM_MTA_REGISTERS 128
373 /* IPv4 Address Table Entry */
374 struct em_ipv4_at_entry {
375 volatile uint32_t ipv4_addr; /* IP Address (RW) */
376 volatile uint32_t reserved;
379 /* Four wakeup IP addresses are supported */
380 #define E1000_WAKEUP_IP_ADDRESS_COUNT_MAX 4
381 #define E1000_IP4AT_SIZE E1000_WAKEUP_IP_ADDRESS_COUNT_MAX
382 #define E1000_IP6AT_SIZE 1
384 /* IPv6 Address Table Entry */
385 struct em_ipv6_at_entry {
386 volatile uint8_t ipv6_addr[16];
389 /* Flexible Filter Length Table Entry */
390 struct em_fflt_entry {
391 volatile uint32_t length; /* Flexible Filter Length (RW) */
392 volatile uint32_t reserved;
395 /* Flexible Filter Mask Table Entry */
396 struct em_ffmt_entry {
397 volatile uint32_t mask; /* Flexible Filter Mask (RW) */
398 volatile uint32_t reserved;
401 /* Flexible Filter Value Table Entry */
402 struct em_ffvt_entry {
403 volatile uint32_t value; /* Flexible Filter Value (RW) */
404 volatile uint32_t reserved;
407 /* Four Flexible Filters are supported */
408 #define E1000_FLEXIBLE_FILTER_COUNT_MAX 4
410 /* Each Flexible Filter is at most 128 (0x80) bytes in length */
411 #define E1000_FLEXIBLE_FILTER_SIZE_MAX 128
413 #define E1000_FFLT_SIZE E1000_FLEXIBLE_FILTER_COUNT_MAX
414 #define E1000_FFMT_SIZE E1000_FLEXIBLE_FILTER_SIZE_MAX
415 #define E1000_FFVT_SIZE E1000_FLEXIBLE_FILTER_SIZE_MAX
417 /* Register Set. (82543, 82544)
419 * Registers are defined to be 32 bits and should be accessed as 32 bit values.
420 * These registers are physically located on the NIC, but are mapped into the
421 * host memory address space.
423 * RW - register is both readable and writable
424 * RO - register is read only
425 * WO - register is write only
426 * R/clr - register is read only and is cleared when read
429 #define E1000_CTRL 0x00000 /* Device Control - RW */
430 #define E1000_STATUS 0x00008 /* Device Status - RO */
431 #define E1000_EECD 0x00010 /* EEPROM/Flash Control - RW */
432 #define E1000_EERD 0x00014 /* EEPROM Read - RW */
433 #define E1000_CTRL_EXT 0x00018 /* Extended Device Control - RW */
434 #define E1000_MDIC 0x00020 /* MDI Control - RW */
435 #define E1000_FCAL 0x00028 /* Flow Control Address Low - RW */
436 #define E1000_FCAH 0x0002C /* Flow Control Address High -RW */
437 #define E1000_FCT 0x00030 /* Flow Control Type - RW */
438 #define E1000_VET 0x00038 /* VLAN Ether Type - RW */
439 #define E1000_ICR 0x000C0 /* Interrupt Cause Read - R/clr */
440 #define E1000_ITR 0x000C4 /* Interrupt Throttling Rate - RW */
441 #define E1000_ICS 0x000C8 /* Interrupt Cause Set - WO */
442 #define E1000_IMS 0x000D0 /* Interrupt Mask Set - RW */
443 #define E1000_IMC 0x000D8 /* Interrupt Mask Clear - WO */
444 #define E1000_RCTL 0x00100 /* RX Control - RW */
445 #define E1000_FCTTV 0x00170 /* Flow Control Transmit Timer Value - RW */
446 #define E1000_TXCW 0x00178 /* TX Configuration Word - RW */
447 #define E1000_RXCW 0x00180 /* RX Configuration Word - RO */
448 #define E1000_TCTL 0x00400 /* TX Control - RW */
449 #define E1000_TIPG 0x00410 /* TX Inter-packet gap -RW */
450 #define E1000_TBT 0x00448 /* TX Burst Timer - RW */
451 #define E1000_LEDCTL 0x00E00 /* LED Control - RW */
452 #define E1000_PBA 0x01000 /* Packet Buffer Allocation - RW */
453 #define E1000_FCRTL 0x02160 /* Flow Control Receive Threshold Low - RW */
454 #define E1000_FCRTH 0x02168 /* Flow Control Receive Threshold High - RW */
455 #define E1000_RDBAL 0x02800 /* RX Descriptor Base Address Low - RW */
456 #define E1000_RDBAH 0x02804 /* RX Descriptor Base Address High - RW */
457 #define E1000_RDLEN 0x02808 /* RX Descriptor Length - RW */
458 #define E1000_RDH 0x02810 /* RX Descriptor Head - RW */
459 #define E1000_RDT 0x02818 /* RX Descriptor Tail - RW */
460 #define E1000_RDTR 0x02820 /* RX Delay Timer - RW */
461 #define E1000_RXDCTL 0x02828 /* RX Descriptor Control - RW */
462 #define E1000_RADV 0x0282C /* RX Interrupt Absolute Delay Timer - RW */
463 #define E1000_RSRPD 0x02C00 /* RX Small Packet Detect - RW */
464 #define E1000_TXDMAC 0x03000 /* TX DMA Control - RW */
465 #define E1000_TDBAL 0x03800 /* TX Descriptor Base Address Low - RW */
466 #define E1000_TDBAH 0x03804 /* TX Descriptor Base Address High - RW */
467 #define E1000_TDLEN 0x03808 /* TX Descriptor Length - RW */
468 #define E1000_TDH 0x03810 /* TX Descriptor Head - RW */
469 #define E1000_TDT 0x03818 /* TX Descripotr Tail - RW */
470 #define E1000_TIDV 0x03820 /* TX Interrupt Delay Value - RW */
471 #define E1000_TXDCTL 0x03828 /* TX Descriptor Control - RW */
472 #define E1000_TADV 0x0382C /* TX Interrupt Absolute Delay Val - RW */
473 #define E1000_TSPMT 0x03830 /* TCP Segmentation PAD & Min Threshold - RW */
474 #define E1000_CRCERRS 0x04000 /* CRC Error Count - R/clr */
475 #define E1000_ALGNERRC 0x04004 /* Alignment Error Count - R/clr */
476 #define E1000_SYMERRS 0x04008 /* Symbol Error Count - R/clr */
477 #define E1000_RXERRC 0x0400C /* Receive Error Count - R/clr */
478 #define E1000_MPC 0x04010 /* Missed Packet Count - R/clr */
479 #define E1000_SCC 0x04014 /* Single Collision Count - R/clr */
480 #define E1000_ECOL 0x04018 /* Excessive Collision Count - R/clr */
481 #define E1000_MCC 0x0401C /* Multiple Collision Count - R/clr */
482 #define E1000_LATECOL 0x04020 /* Late Collision Count - R/clr */
483 #define E1000_COLC 0x04028 /* Collision Count - R/clr */
484 #define E1000_DC 0x04030 /* Defer Count - R/clr */
485 #define E1000_TNCRS 0x04034 /* TX-No CRS - R/clr */
486 #define E1000_SEC 0x04038 /* Sequence Error Count - R/clr */
487 #define E1000_CEXTERR 0x0403C /* Carrier Extension Error Count - R/clr */
488 #define E1000_RLEC 0x04040 /* Receive Length Error Count - R/clr */
489 #define E1000_XONRXC 0x04048 /* XON RX Count - R/clr */
490 #define E1000_XONTXC 0x0404C /* XON TX Count - R/clr */
491 #define E1000_XOFFRXC 0x04050 /* XOFF RX Count - R/clr */
492 #define E1000_XOFFTXC 0x04054 /* XOFF TX Count - R/clr */
493 #define E1000_FCRUC 0x04058 /* Flow Control RX Unsupported Count- R/clr */
494 #define E1000_PRC64 0x0405C /* Packets RX (64 bytes) - R/clr */
495 #define E1000_PRC127 0x04060 /* Packets RX (65-127 bytes) - R/clr */
496 #define E1000_PRC255 0x04064 /* Packets RX (128-255 bytes) - R/clr */
497 #define E1000_PRC511 0x04068 /* Packets RX (255-511 bytes) - R/clr */
498 #define E1000_PRC1023 0x0406C /* Packets RX (512-1023 bytes) - R/clr */
499 #define E1000_PRC1522 0x04070 /* Packets RX (1024-1522 bytes) - R/clr */
500 #define E1000_GPRC 0x04074 /* Good Packets RX Count - R/clr */
501 #define E1000_BPRC 0x04078 /* Broadcast Packets RX Count - R/clr */
502 #define E1000_MPRC 0x0407C /* Multicast Packets RX Count - R/clr */
503 #define E1000_GPTC 0x04080 /* Good Packets TX Count - R/clr */
504 #define E1000_GORCL 0x04088 /* Good Octets RX Count Low - R/clr */
505 #define E1000_GORCH 0x0408C /* Good Octets RX Count High - R/clr */
506 #define E1000_GOTCL 0x04090 /* Good Octets TX Count Low - R/clr */
507 #define E1000_GOTCH 0x04094 /* Good Octets TX Count High - R/clr */
508 #define E1000_RNBC 0x040A0 /* RX No Buffers Count - R/clr */
509 #define E1000_RUC 0x040A4 /* RX Undersize Count - R/clr */
510 #define E1000_RFC 0x040A8 /* RX Fragment Count - R/clr */
511 #define E1000_ROC 0x040AC /* RX Oversize Count - R/clr */
512 #define E1000_RJC 0x040B0 /* RX Jabber Count - R/clr */
513 #define E1000_MGTPRC 0x040B4 /* Management Packets RX Count - R/clr */
514 #define E1000_MGTPDC 0x040B8 /* Management Packets Dropped Count - R/clr */
515 #define E1000_MGTPTC 0x040BC /* Management Packets TX Count - R/clr */
516 #define E1000_TORL 0x040C0 /* Total Octets RX Low - R/clr */
517 #define E1000_TORH 0x040C4 /* Total Octets RX High - R/clr */
518 #define E1000_TOTL 0x040C8 /* Total Octets TX Low - R/clr */
519 #define E1000_TOTH 0x040CC /* Total Octets TX High - R/clr */
520 #define E1000_TPR 0x040D0 /* Total Packets RX - R/clr */
521 #define E1000_TPT 0x040D4 /* Total Packets TX - R/clr */
522 #define E1000_PTC64 0x040D8 /* Packets TX (64 bytes) - R/clr */
523 #define E1000_PTC127 0x040DC /* Packets TX (65-127 bytes) - R/clr */
524 #define E1000_PTC255 0x040E0 /* Packets TX (128-255 bytes) - R/clr */
525 #define E1000_PTC511 0x040E4 /* Packets TX (256-511 bytes) - R/clr */
526 #define E1000_PTC1023 0x040E8 /* Packets TX (512-1023 bytes) - R/clr */
527 #define E1000_PTC1522 0x040EC /* Packets TX (1024-1522 Bytes) - R/clr */
528 #define E1000_MPTC 0x040F0 /* Multicast Packets TX Count - R/clr */
529 #define E1000_BPTC 0x040F4 /* Broadcast Packets TX Count - R/clr */
530 #define E1000_TSCTC 0x040F8 /* TCP Segmentation Context TX - R/clr */
531 #define E1000_TSCTFC 0x040FC /* TCP Segmentation Context TX Fail - R/clr */
532 #define E1000_RXCSUM 0x05000 /* RX Checksum Control - RW */
533 #define E1000_MTA 0x05200 /* Multicast Table Array - RW Array */
534 #define E1000_RA 0x05400 /* Receive Address - RW Array */
535 #define E1000_VFTA 0x05600 /* VLAN Filter Table Array - RW Array */
536 #define E1000_WUC 0x05800 /* Wakeup Control - RW */
537 #define E1000_WUFC 0x05808 /* Wakeup Filter Control - RW */
538 #define E1000_WUS 0x05810 /* Wakeup Status - RO */
539 #define E1000_MANC 0x05820 /* Management Control - RW */
540 #define E1000_IPAV 0x05838 /* IP Address Valid - RW */
541 #define E1000_IP4AT 0x05840 /* IPv4 Address Table - RW Array */
542 #define E1000_IP6AT 0x05880 /* IPv6 Address Table - RW Array */
543 #define E1000_WUPL 0x05900 /* Wakeup Packet Length - RW */
544 #define E1000_WUPM 0x05A00 /* Wakeup Packet Memory - RO A */
545 #define E1000_FFLT 0x05F00 /* Flexible Filter Length Table - RW Array */
546 #define E1000_FFMT 0x09000 /* Flexible Filter Mask Table - RW Array */
547 #define E1000_FFVT 0x09800 /* Flexible Filter Value Table - RW Array */
549 /* Register Set (82542)
551 * Some of the 82542 registers are located at different offsets than they are
552 * in more current versions of the 8254x. Despite the difference in location,
553 * the registers function in the same manner.
555 #define E1000_82542_CTRL E1000_CTRL
556 #define E1000_82542_STATUS E1000_STATUS
557 #define E1000_82542_EECD E1000_EECD
558 #define E1000_82542_EERD E1000_EERD
559 #define E1000_82542_CTRL_EXT E1000_CTRL_EXT
560 #define E1000_82542_MDIC E1000_MDIC
561 #define E1000_82542_FCAL E1000_FCAL
562 #define E1000_82542_FCAH E1000_FCAH
563 #define E1000_82542_FCT E1000_FCT
564 #define E1000_82542_VET E1000_VET
565 #define E1000_82542_RA 0x00040
566 #define E1000_82542_ICR E1000_ICR
567 #define E1000_82542_ITR E1000_ITR
568 #define E1000_82542_ICS E1000_ICS
569 #define E1000_82542_IMS E1000_IMS
570 #define E1000_82542_IMC E1000_IMC
571 #define E1000_82542_RCTL E1000_RCTL
572 #define E1000_82542_RDTR 0x00108
573 #define E1000_82542_RDBAL 0x00110
574 #define E1000_82542_RDBAH 0x00114
575 #define E1000_82542_RDLEN 0x00118
576 #define E1000_82542_RDH 0x00120
577 #define E1000_82542_RDT 0x00128
578 #define E1000_82542_FCRTH 0x00160
579 #define E1000_82542_FCRTL 0x00168
580 #define E1000_82542_FCTTV E1000_FCTTV
581 #define E1000_82542_TXCW E1000_TXCW
582 #define E1000_82542_RXCW E1000_RXCW
583 #define E1000_82542_MTA 0x00200
584 #define E1000_82542_TCTL E1000_TCTL
585 #define E1000_82542_TIPG E1000_TIPG
586 #define E1000_82542_TDBAL 0x00420
587 #define E1000_82542_TDBAH 0x00424
588 #define E1000_82542_TDLEN 0x00428
589 #define E1000_82542_TDH 0x00430
590 #define E1000_82542_TDT 0x00438
591 #define E1000_82542_TIDV 0x00440
592 #define E1000_82542_TBT E1000_TBT
593 #define E1000_82542_VFTA 0x00600
594 #define E1000_82542_LEDCTL E1000_LEDCTL
595 #define E1000_82542_PBA E1000_PBA
596 #define E1000_82542_RXDCTL E1000_RXDCTL
597 #define E1000_82542_RADV E1000_RADV
598 #define E1000_82542_RSRPD E1000_RSRPD
599 #define E1000_82542_TXDMAC E1000_TXDMAC
600 #define E1000_82542_TXDCTL E1000_TXDCTL
601 #define E1000_82542_TADV E1000_TADV
602 #define E1000_82542_TSPMT E1000_TSPMT
603 #define E1000_82542_CRCERRS E1000_CRCERRS
604 #define E1000_82542_ALGNERRC E1000_ALGNERRC
605 #define E1000_82542_SYMERRS E1000_SYMERRS
606 #define E1000_82542_RXERRC E1000_RXERRC
607 #define E1000_82542_MPC E1000_MPC
608 #define E1000_82542_SCC E1000_SCC
609 #define E1000_82542_ECOL E1000_ECOL
610 #define E1000_82542_MCC E1000_MCC
611 #define E1000_82542_LATECOL E1000_LATECOL
612 #define E1000_82542_COLC E1000_COLC
613 #define E1000_82542_DC E1000_DC
614 #define E1000_82542_TNCRS E1000_TNCRS
615 #define E1000_82542_SEC E1000_SEC
616 #define E1000_82542_CEXTERR E1000_CEXTERR
617 #define E1000_82542_RLEC E1000_RLEC
618 #define E1000_82542_XONRXC E1000_XONRXC
619 #define E1000_82542_XONTXC E1000_XONTXC
620 #define E1000_82542_XOFFRXC E1000_XOFFRXC
621 #define E1000_82542_XOFFTXC E1000_XOFFTXC
622 #define E1000_82542_FCRUC E1000_FCRUC
623 #define E1000_82542_PRC64 E1000_PRC64
624 #define E1000_82542_PRC127 E1000_PRC127
625 #define E1000_82542_PRC255 E1000_PRC255
626 #define E1000_82542_PRC511 E1000_PRC511
627 #define E1000_82542_PRC1023 E1000_PRC1023
628 #define E1000_82542_PRC1522 E1000_PRC1522
629 #define E1000_82542_GPRC E1000_GPRC
630 #define E1000_82542_BPRC E1000_BPRC
631 #define E1000_82542_MPRC E1000_MPRC
632 #define E1000_82542_GPTC E1000_GPTC
633 #define E1000_82542_GORCL E1000_GORCL
634 #define E1000_82542_GORCH E1000_GORCH
635 #define E1000_82542_GOTCL E1000_GOTCL
636 #define E1000_82542_GOTCH E1000_GOTCH
637 #define E1000_82542_RNBC E1000_RNBC
638 #define E1000_82542_RUC E1000_RUC
639 #define E1000_82542_RFC E1000_RFC
640 #define E1000_82542_ROC E1000_ROC
641 #define E1000_82542_RJC E1000_RJC
642 #define E1000_82542_MGTPRC E1000_MGTPRC
643 #define E1000_82542_MGTPDC E1000_MGTPDC
644 #define E1000_82542_MGTPTC E1000_MGTPTC
645 #define E1000_82542_TORL E1000_TORL
646 #define E1000_82542_TORH E1000_TORH
647 #define E1000_82542_TOTL E1000_TOTL
648 #define E1000_82542_TOTH E1000_TOTH
649 #define E1000_82542_TPR E1000_TPR
650 #define E1000_82542_TPT E1000_TPT
651 #define E1000_82542_PTC64 E1000_PTC64
652 #define E1000_82542_PTC127 E1000_PTC127
653 #define E1000_82542_PTC255 E1000_PTC255
654 #define E1000_82542_PTC511 E1000_PTC511
655 #define E1000_82542_PTC1023 E1000_PTC1023
656 #define E1000_82542_PTC1522 E1000_PTC1522
657 #define E1000_82542_MPTC E1000_MPTC
658 #define E1000_82542_BPTC E1000_BPTC
659 #define E1000_82542_TSCTC E1000_TSCTC
660 #define E1000_82542_TSCTFC E1000_TSCTFC
661 #define E1000_82542_RXCSUM E1000_RXCSUM
662 #define E1000_82542_WUC E1000_WUC
663 #define E1000_82542_WUFC E1000_WUFC
664 #define E1000_82542_WUS E1000_WUS
665 #define E1000_82542_MANC E1000_MANC
666 #define E1000_82542_IPAV E1000_IPAV
667 #define E1000_82542_IP4AT E1000_IP4AT
668 #define E1000_82542_IP6AT E1000_IP6AT
669 #define E1000_82542_WUPL E1000_WUPL
670 #define E1000_82542_WUPM E1000_WUPM
671 #define E1000_82542_FFLT E1000_FFLT
672 #define E1000_82542_FFMT E1000_FFMT
673 #define E1000_82542_FFVT E1000_FFVT
675 /* Statistics counters collected by the MAC */
676 struct em_shared_stats {
737 /* Structure containing variables used by the shared code (em_mac.c and
740 struct em_shared_adapter {
742 em_mac_type mac_type;
743 em_media_type media_type;
746 em_bus_speed bus_speed;
747 em_bus_width bus_width;
748 em_bus_type bus_type;
751 uint32_t original_fc;
753 uint32_t autoneg_failed;
754 uint32_t max_frame_size;
755 uint32_t min_frame_size;
756 uint32_t mc_filter_type;
757 uint32_t num_mc_addrs;
758 uint16_t autoneg_advertised;
759 uint16_t pci_cmd_word;
760 uint16_t fc_high_water;
761 uint16_t fc_low_water;
762 uint16_t fc_pause_time;
765 uint16_t subsystem_id;
766 uint16_t subsystem_vendor_id;
768 boolean_t disable_polarity_correction;
769 boolean_t get_link_status;
770 boolean_t tbi_compatibility_en;
771 boolean_t tbi_compatibility_on;
772 boolean_t adapter_stopped;
773 boolean_t fc_send_xon;
774 boolean_t report_tx_early;
775 boolean_t low_profile;
778 uint8_t forced_speed_duplex;
779 uint8_t wait_autoneg_complete;
780 uint8_t dma_fairness;
781 uint8_t mac_addr[NODE_ADDRESS_SIZE];
785 #define E1000_EEPROM_SWDPIN0 0x0001 /* SWDPIN 0 EEPROM Value */
786 #define E1000_EEPROM_LED_LOGIC 0x0020 /* Led Logic Word */
788 /* Register Bit Masks */
790 #define E1000_CTRL_FD 0x00000001 /* Full duplex.0=half; 1=full */
791 #define E1000_CTRL_BEM 0x00000002 /* Endian Mode.0=little,1=big */
792 #define E1000_CTRL_PRIOR 0x00000004 /* Priority on PCI. 0=rx,1=fair */
793 #define E1000_CTRL_LRST 0x00000008 /* Link reset. 0=normal,1=reset */
794 #define E1000_CTRL_TME 0x00000010 /* Test mode. 0=normal,1=test */
795 #define E1000_CTRL_SLE 0x00000020 /* Serial Link on 0=dis,1=en */
796 #define E1000_CTRL_ASDE 0x00000020 /* Auto-speed detect enable */
797 #define E1000_CTRL_SLU 0x00000040 /* Set link up (Force Link) */
798 #define E1000_CTRL_ILOS 0x00000080 /* Invert Loss-Of Signal */
799 #define E1000_CTRL_SPD_SEL 0x00000300 /* Speed Select Mask */
800 #define E1000_CTRL_SPD_10 0x00000000 /* Force 10Mb */
801 #define E1000_CTRL_SPD_100 0x00000100 /* Force 100Mb */
802 #define E1000_CTRL_SPD_1000 0x00000200 /* Force 1Gb */
803 #define E1000_CTRL_BEM32 0x00000400 /* Big Endian 32 mode */
804 #define E1000_CTRL_FRCSPD 0x00000800 /* Force Speed */
805 #define E1000_CTRL_FRCDPX 0x00001000 /* Force Duplex */
806 #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */
807 #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */
808 #define E1000_CTRL_SWDPIN2 0x00100000 /* SWDPIN 2 value */
809 #define E1000_CTRL_SWDPIN3 0x00200000 /* SWDPIN 3 value */
810 #define E1000_CTRL_SWDPIO0 0x00400000 /* SWDPIN 0 Input or output */
811 #define E1000_CTRL_SWDPIO1 0x00800000 /* SWDPIN 1 input or output */
812 #define E1000_CTRL_SWDPIO2 0x01000000 /* SWDPIN 2 input or output */
813 #define E1000_CTRL_SWDPIO3 0x02000000 /* SWDPIN 3 input or output */
814 #define E1000_CTRL_RST 0x04000000 /* Global reset */
815 #define E1000_CTRL_RFCE 0x08000000 /* Receive Flow Control enable */
816 #define E1000_CTRL_TFCE 0x10000000 /* Transmit flow control enable */
817 #define E1000_CTRL_RTE 0x20000000 /* Routing tag enable */
818 #define E1000_CTRL_VME 0x40000000 /* IEEE VLAN mode enable */
819 #define E1000_CTRL_PHY_RST 0x80000000 /* PHY Reset */
822 #define E1000_STATUS_FD 0x00000001 /* Full duplex.0=half,1=full */
823 #define E1000_STATUS_LU 0x00000002 /* Link up.0=no,1=link */
824 #define E1000_STATUS_FUNC_MASK 0x0000000C /* PCI Function Mask */
825 #define E1000_STATUS_FUNC_0 0x00000000 /* Function 0 */
826 #define E1000_STATUS_FUNC_1 0x00000004 /* Function 1 */
827 #define E1000_STATUS_TXOFF 0x00000010 /* transmission paused */
828 #define E1000_STATUS_TBIMODE 0x00000020 /* TBI mode */
829 #define E1000_STATUS_SPEED_MASK 0x000000C0
830 #define E1000_STATUS_SPEED_10 0x00000000 /* Speed 10Mb/s */
831 #define E1000_STATUS_SPEED_100 0x00000040 /* Speed 100Mb/s */
832 #define E1000_STATUS_SPEED_1000 0x00000080 /* Speed 1000Mb/s */
833 #define E1000_STATUS_ASDV 0x00000300 /* Auto speed detect value */
834 #define E1000_STATUS_MTXCKOK 0x00000400 /* MTX clock running OK */
835 #define E1000_STATUS_PCI66 0x00000800 /* In 66Mhz slot */
836 #define E1000_STATUS_BUS64 0x00001000 /* In 64 bit slot */
837 #define E1000_STATUS_PCIX_MODE 0x00002000 /* PCI-X mode */
838 #define E1000_STATUS_PCIX_SPEED 0x0000C000 /* PCI-X bus speed */
840 /* Constants used to intrepret the masked PCI-X bus speed. */
841 #define E1000_STATUS_PCIX_SPEED_66 0x00000000 /* PCI-X bus speed 50-66 MHz */
842 #define E1000_STATUS_PCIX_SPEED_100 0x00004000 /* PCI-X bus speed 66-100 MHz */
843 #define E1000_STATUS_PCIX_SPEED_133 0x00008000 /* PCI-X bus speed 100-133 MHz */
845 /* EEPROM/Flash Control */
846 #define E1000_EECD_SK 0x00000001 /* EEPROM Clock */
847 #define E1000_EECD_CS 0x00000002 /* EEPROM Chip Select */
848 #define E1000_EECD_DI 0x00000004 /* EEPROM Data In */
849 #define E1000_EECD_DO 0x00000008 /* EEPROM Data Out */
850 #define E1000_EECD_FWE_MASK 0x00000030
851 #define E1000_EECD_FWE_DIS 0x00000010 /* Disable FLASH writes */
852 #define E1000_EECD_FWE_EN 0x00000020 /* Enable FLASH writes */
853 #define E1000_EECD_FWE_SHIFT 4
854 #define E1000_EECD_SIZE 0x00000200 /* EEPROM Size (0=64 word 1=256 word) */
855 #define E1000_EECD_REQ 0x00000040 /* EEPROM Access Request */
856 #define E1000_EECD_GNT 0x00000080 /* EEPROM Access Grant */
857 #define E1000_EECD_PRES 0x00000100 /* EEPROM Present */
860 #define E1000_EERD_START 0x00000001 /* Start Read */
861 #define E1000_EERD_DONE 0x00000010 /* Read Done */
862 #define E1000_EERD_ADDR_SHIFT 8
863 #define E1000_EERD_ADDR_MASK 0x0000FF00 /* Read Address */
864 #define E1000_EERD_DATA_SHIFT 16
865 #define E1000_EERD_DATA_MASK 0xFFFF0000 /* Read Data */
867 /* Extended Device Control */
868 #define E1000_CTRL_EXT_GPI0_EN 0x00000001 /* Maps SDP4 to GPI0 */
869 #define E1000_CTRL_EXT_GPI1_EN 0x00000002 /* Maps SDP5 to GPI1 */
870 #define E1000_CTRL_EXT_PHYINT_EN E1000_CTRL_EXT_GPI1_EN
871 #define E1000_CTRL_EXT_GPI2_EN 0x00000004 /* Maps SDP6 to GPI2 */
872 #define E1000_CTRL_EXT_GPI3_EN 0x00000008 /* Maps SDP7 to GPI3 */
873 #define E1000_CTRL_EXT_SDP4_DATA 0x00000010 /* Value of SW Defineable Pin 4 */
874 #define E1000_CTRL_EXT_SDP5_DATA 0x00000020 /* Value of SW Defineable Pin 5 */
875 #define E1000_CTRL_EXT_PHY_INT E1000_CTRL_EXT_SDP5_DATA
876 #define E1000_CTRL_EXT_SDP6_DATA 0x00000040 /* Value of SW Defineable Pin 6 */
877 #define E1000_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW Defineable Pin 7 */
878 #define E1000_CTRL_EXT_SDP4_DIR 0x00000100 /* Direction of SDP4 0=in 1=out */
879 #define E1000_CTRL_EXT_SDP5_DIR 0x00000200 /* Direction of SDP5 0=in 1=out */
880 #define E1000_CTRL_EXT_SDP6_DIR 0x00000400 /* Direction of SDP6 0=in 1=out */
881 #define E1000_CTRL_EXT_SDP7_DIR 0x00000800 /* Direction of SDP7 0=in 1=out */
882 #define E1000_CTRL_EXT_ASDCHK 0x00001000 /* Initiate an ASD sequence */
883 #define E1000_CTRL_EXT_EE_RST 0x00002000 /* Reinitialize from EEPROM */
884 #define E1000_CTRL_EXT_IPS 0x00004000 /* Invert Power State */
885 #define E1000_CTRL_EXT_SPD_BYPS 0x00008000 /* Speed Select Bypass */
886 #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000
887 #define E1000_CTRL_EXT_LINK_MODE_GMII 0x00000000
888 #define E1000_CTRL_EXT_LINK_MODE_TBI 0x00C00000
889 #define E1000_CTRL_EXT_WR_WMARK_MASK 0x03000000
890 #define E1000_CTRL_EXT_WR_WMARK_256 0x00000000
891 #define E1000_CTRL_EXT_WR_WMARK_320 0x01000000
892 #define E1000_CTRL_EXT_WR_WMARK_384 0x02000000
893 #define E1000_CTRL_EXT_WR_WMARK_448 0x03000000
896 #define E1000_MDIC_DATA_MASK 0x0000FFFF
897 #define E1000_MDIC_REG_MASK 0x001F0000
898 #define E1000_MDIC_REG_SHIFT 16
899 #define E1000_MDIC_PHY_MASK 0x03E00000
900 #define E1000_MDIC_PHY_SHIFT 21
901 #define E1000_MDIC_OP_WRITE 0x04000000
902 #define E1000_MDIC_OP_READ 0x08000000
903 #define E1000_MDIC_READY 0x10000000
904 #define E1000_MDIC_INT_EN 0x20000000
905 #define E1000_MDIC_ERROR 0x40000000
908 #define E1000_LEDCTL_LED0_MODE_MASK 0x0000000F
909 #define E1000_LEDCTL_LED0_MODE_SHIFT 0
910 #define E1000_LEDCTL_LED0_IVRT 0x00000040
911 #define E1000_LEDCTL_LED0_BLINK 0x00000080
912 #define E1000_LEDCTL_LED1_MODE_MASK 0x00000F00
913 #define E1000_LEDCTL_LED1_MODE_SHIFT 8
914 #define E1000_LEDCTL_LED1_IVRT 0x00004000
915 #define E1000_LEDCTL_LED1_BLINK 0x00008000
916 #define E1000_LEDCTL_LED2_MODE_MASK 0x000F0000
917 #define E1000_LEDCTL_LED2_MODE_SHIFT 16
918 #define E1000_LEDCTL_LED2_IVRT 0x00400000
919 #define E1000_LEDCTL_LED2_BLINK 0x00800000
920 #define E1000_LEDCTL_LED3_MODE_MASK 0x0F000000
921 #define E1000_LEDCTL_LED3_MODE_SHIFT 24
922 #define E1000_LEDCTL_LED3_IVRT 0x40000000
923 #define E1000_LEDCTL_LED3_BLINK 0x80000000
925 #define E1000_LEDCTL_MODE_LINK_10_1000 0x0
926 #define E1000_LEDCTL_MODE_LINK_100_1000 0x1
927 #define E1000_LEDCTL_MODE_LINK_UP 0x2
928 #define E1000_LEDCTL_MODE_ACTIVITY 0x3
929 #define E1000_LEDCTL_MODE_LINK_ACTIVITY 0x4
930 #define E1000_LEDCTL_MODE_LINK_10 0x5
931 #define E1000_LEDCTL_MODE_LINK_100 0x6
932 #define E1000_LEDCTL_MODE_LINK_1000 0x7
933 #define E1000_LEDCTL_MODE_PCIX_MODE 0x8
934 #define E1000_LEDCTL_MODE_FULL_DUPLEX 0x9
935 #define E1000_LEDCTL_MODE_COLLISION 0xA
936 #define E1000_LEDCTL_MODE_BUS_SPEED 0xB
937 #define E1000_LEDCTL_MODE_BUS_SIZE 0xC
938 #define E1000_LEDCTL_MODE_PAUSED 0xD
939 #define E1000_LEDCTL_MODE_LED_ON 0xE
940 #define E1000_LEDCTL_MODE_LED_OFF 0xF
942 /* Receive Address */
943 #define E1000_RAH_AV 0x80000000 /* Receive descriptor valid */
945 /* Interrupt Cause Read */
946 #define E1000_ICR_TXDW 0x00000001 /* Transmit desc written back */
947 #define E1000_ICR_TXQE 0x00000002 /* Transmit Queue empty */
948 #define E1000_ICR_LSC 0x00000004 /* Link Status Change */
949 #define E1000_ICR_RXSEQ 0x00000008 /* rx sequence error */
950 #define E1000_ICR_RXDMT0 0x00000010 /* rx desc min. threshold (0) */
951 #define E1000_ICR_RXO 0x00000040 /* rx overrun */
952 #define E1000_ICR_RXT0 0x00000080 /* rx timer intr (ring 0) */
953 #define E1000_ICR_MDAC 0x00000200 /* MDIO access complete */
954 #define E1000_ICR_RXCFG 0x00000400 /* RX /c/ ordered set */
955 #define E1000_ICR_GPI_EN0 0x00000800 /* GP Int 0 */
956 #define E1000_ICR_GPI_EN1 0x00001000 /* GP Int 1 */
957 #define E1000_ICR_GPI_EN2 0x00002000 /* GP Int 2 */
958 #define E1000_ICR_GPI_EN3 0x00004000 /* GP Int 3 */
959 #define E1000_ICR_TXD_LOW 0x00008000
960 #define E1000_ICR_SRPD 0x00010000
962 /* Interrupt Cause Set */
963 #define E1000_ICS_TXDW E1000_ICR_TXDW /* Transmit desc written back */
964 #define E1000_ICS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */
965 #define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */
966 #define E1000_ICS_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */
967 #define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */
968 #define E1000_ICS_RXO E1000_ICR_RXO /* rx overrun */
969 #define E1000_ICS_RXT0 E1000_ICR_RXT0 /* rx timer intr */
970 #define E1000_ICS_MDAC E1000_ICR_MDAC /* MDIO access complete */
971 #define E1000_ICS_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */
972 #define E1000_ICS_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */
973 #define E1000_ICS_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */
974 #define E1000_ICS_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */
975 #define E1000_ICS_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */
976 #define E1000_ICS_TXD_LOW E1000_ICR_TXD_LOW
977 #define E1000_ICS_SRPD E1000_ICR_SRPD
979 /* Interrupt Mask Set */
980 #define E1000_IMS_TXDW E1000_ICR_TXDW /* Transmit desc written back */
981 #define E1000_IMS_TXQE E1000_ICR_TXQE /* Transmit Queue empty */
982 #define E1000_IMS_LSC E1000_ICR_LSC /* Link Status Change */
983 #define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */
984 #define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */
985 #define E1000_IMS_RXO E1000_ICR_RXO /* rx overrun */
986 #define E1000_IMS_RXT0 E1000_ICR_RXT0 /* rx timer intr */
987 #define E1000_IMS_MDAC E1000_ICR_MDAC /* MDIO access complete */
988 #define E1000_IMS_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */
989 #define E1000_IMS_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */
990 #define E1000_IMS_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */
991 #define E1000_IMS_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */
992 #define E1000_IMS_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */
993 #define E1000_IMS_TXD_LOW E1000_ICR_TXD_LOW
994 #define E1000_IMS_SRPD E1000_ICR_SRPD
996 /* Interrupt Mask Clear */
997 #define E1000_IMC_TXDW E1000_ICR_TXDW /* Transmit desc written back */
998 #define E1000_IMC_TXQE E1000_ICR_TXQE /* Transmit Queue empty */
999 #define E1000_IMC_LSC E1000_ICR_LSC /* Link Status Change */
1000 #define E1000_IMC_RXSEQ E1000_ICR_RXSEQ /* rx sequence error */
1001 #define E1000_IMC_RXDMT0 E1000_ICR_RXDMT0 /* rx desc min. threshold */
1002 #define E1000_IMC_RXO E1000_ICR_RXO /* rx overrun */
1003 #define E1000_IMC_RXT0 E1000_ICR_RXT0 /* rx timer intr */
1004 #define E1000_IMC_MDAC E1000_ICR_MDAC /* MDIO access complete */
1005 #define E1000_IMC_RXCFG E1000_ICR_RXCFG /* RX /c/ ordered set */
1006 #define E1000_IMC_GPI_EN0 E1000_ICR_GPI_EN0 /* GP Int 0 */
1007 #define E1000_IMC_GPI_EN1 E1000_ICR_GPI_EN1 /* GP Int 1 */
1008 #define E1000_IMC_GPI_EN2 E1000_ICR_GPI_EN2 /* GP Int 2 */
1009 #define E1000_IMC_GPI_EN3 E1000_ICR_GPI_EN3 /* GP Int 3 */
1010 #define E1000_IMC_TXD_LOW E1000_ICR_TXD_LOW
1011 #define E1000_IMC_SRPD E1000_ICR_SRPD
1013 /* Receive Control */
1014 #define E1000_RCTL_RST 0x00000001 /* Software reset */
1015 #define E1000_RCTL_EN 0x00000002 /* enable */
1016 #define E1000_RCTL_SBP 0x00000004 /* store bad packet */
1017 #define E1000_RCTL_UPE 0x00000008 /* unicast promiscuous enable */
1018 #define E1000_RCTL_MPE 0x00000010 /* multicast promiscuous enab */
1019 #define E1000_RCTL_LPE 0x00000020 /* long packet enable */
1020 #define E1000_RCTL_LBM_NO 0x00000000 /* no loopback mode */
1021 #define E1000_RCTL_LBM_MAC 0x00000040 /* MAC loopback mode */
1022 #define E1000_RCTL_LBM_SLP 0x00000080 /* serial link loopback mode */
1023 #define E1000_RCTL_LBM_TCVR 0x000000C0 /* tcvr loopback mode */
1024 #define E1000_RCTL_RDMTS_HALF 0x00000000 /* rx desc min threshold size */
1025 #define E1000_RCTL_RDMTS_QUAT 0x00000100 /* rx desc min threshold size */
1026 #define E1000_RCTL_RDMTS_EIGTH 0x00000200 /* rx desc min threshold size */
1027 #define E1000_RCTL_MO_SHIFT 12 /* multicast offset shift */
1028 #define E1000_RCTL_MO_0 0x00000000 /* multicast offset 11:0 */
1029 #define E1000_RCTL_MO_1 0x00001000 /* multicast offset 12:1 */
1030 #define E1000_RCTL_MO_2 0x00002000 /* multicast offset 13:2 */
1031 #define E1000_RCTL_MO_3 0x00003000 /* multicast offset 15:4 */
1032 #define E1000_RCTL_MDR 0x00004000 /* multicast desc ring 0 */
1033 #define E1000_RCTL_BAM 0x00008000 /* broadcast enable */
1034 /* these buffer sizes are valid if E1000_RCTL_BSEX is 0 */
1035 #define E1000_RCTL_SZ_2048 0x00000000 /* rx buffer size 2048 */
1036 #define E1000_RCTL_SZ_1024 0x00010000 /* rx buffer size 1024 */
1037 #define E1000_RCTL_SZ_512 0x00020000 /* rx buffer size 512 */
1038 #define E1000_RCTL_SZ_256 0x00030000 /* rx buffer size 256 */
1039 /* these buffer sizes are valid if E1000_RCTL_BSEX is 1 */
1040 #define E1000_RCTL_SZ_16384 0x00010000 /* rx buffer size 16384 */
1041 #define E1000_RCTL_SZ_8192 0x00020000 /* rx buffer size 8192 */
1042 #define E1000_RCTL_SZ_4096 0x00030000 /* rx buffer size 4096 */
1043 #define E1000_RCTL_VFE 0x00040000 /* vlan filter enable */
1044 #define E1000_RCTL_CFIEN 0x00080000 /* canonical form enable */
1045 #define E1000_RCTL_CFI 0x00100000 /* canonical form indicator */
1046 #define E1000_RCTL_DPF 0x00400000 /* discard pause frames */
1047 #define E1000_RCTL_PMCF 0x00800000 /* pass MAC control frames */
1048 #define E1000_RCTL_BSEX 0x02000000 /* Buffer size extension */
1050 /* Receive Descriptor */
1051 #define E1000_RDT_DELAY 0x0000ffff /* Delay timer (1=1024us) */
1052 #define E1000_RDT_FPDB 0x80000000 /* Flush descriptor block */
1053 #define E1000_RDLEN_LEN 0x0007ff80 /* descriptor length */
1054 #define E1000_RDH_RDH 0x0000ffff /* receive descriptor head */
1055 #define E1000_RDT_RDT 0x0000ffff /* receive descriptor tail */
1058 #define E1000_FCRTH_RTH 0x0000FFF8 /* Mask Bits[15:3] for RTH */
1059 #define E1000_FCRTH_XFCE 0x80000000 /* External Flow Control Enable */
1060 #define E1000_FCRTL_RTL 0x0000FFF8 /* Mask Bits[15:3] for RTL */
1061 #define E1000_FCRTL_XONE 0x80000000 /* Enable XON frame transmission */
1063 /* Receive Descriptor Control */
1064 #define E1000_RXDCTL_PTHRESH 0x0000003F /* RXDCTL Prefetch Threshold */
1065 #define E1000_RXDCTL_HTHRESH 0x00003F00 /* RXDCTL Host Threshold */
1066 #define E1000_RXDCTL_WTHRESH 0x003F0000 /* RXDCTL Writeback Threshold */
1067 #define E1000_RXDCTL_GRAN 0x01000000 /* RXDCTL Granularity */
1069 /* Transmit Descriptor Control */
1070 #define E1000_TXDCTL_PTHRESH 0x000000FF /* TXDCTL Prefetch Threshold */
1071 #define E1000_TXDCTL_HTHRESH 0x0000FF00 /* TXDCTL Host Threshold */
1072 #define E1000_TXDCTL_WTHRESH 0x00FF0000 /* TXDCTL Writeback Threshold */
1073 #define E1000_TXDCTL_GRAN 0x01000000 /* TXDCTL Granularity */
1074 #define E1000_TXDCTL_LWTHRESH 0xFE000000 /* TXDCTL Low Threshold */
1076 /* Transmit Configuration Word */
1077 #define E1000_TXCW_FD 0x00000020 /* TXCW full duplex */
1078 #define E1000_TXCW_HD 0x00000040 /* TXCW half duplex */
1079 #define E1000_TXCW_PAUSE 0x00000080 /* TXCW sym pause request */
1080 #define E1000_TXCW_ASM_DIR 0x00000100 /* TXCW astm pause direction */
1081 #define E1000_TXCW_PAUSE_MASK 0x00000180 /* TXCW pause request mask */
1082 #define E1000_TXCW_RF 0x00003000 /* TXCW remote fault */
1083 #define E1000_TXCW_NP 0x00008000 /* TXCW next page */
1084 #define E1000_TXCW_CW 0x0000ffff /* TxConfigWord mask */
1085 #define E1000_TXCW_TXC 0x40000000 /* Transmit Config control */
1086 #define E1000_TXCW_ANE 0x80000000 /* Auto-neg enable */
1088 /* Receive Configuration Word */
1089 #define E1000_RXCW_CW 0x0000ffff /* RxConfigWord mask */
1090 #define E1000_RXCW_NC 0x04000000 /* Receive config no carrier */
1091 #define E1000_RXCW_IV 0x08000000 /* Receive config invalid */
1092 #define E1000_RXCW_CC 0x10000000 /* Receive config change */
1093 #define E1000_RXCW_C 0x20000000 /* Receive config */
1094 #define E1000_RXCW_SYNCH 0x40000000 /* Receive config synch */
1095 #define E1000_RXCW_ANC 0x80000000 /* Auto-neg complete */
1097 /* Transmit Control */
1098 #define E1000_TCTL_RST 0x00000001 /* software reset */
1099 #define E1000_TCTL_EN 0x00000002 /* enable tx */
1100 #define E1000_TCTL_BCE 0x00000004 /* busy check enable */
1101 #define E1000_TCTL_PSP 0x00000008 /* pad short packets */
1102 #define E1000_TCTL_CT 0x00000ff0 /* collision threshold */
1103 #define E1000_TCTL_COLD 0x003ff000 /* collision distance */
1104 #define E1000_TCTL_SWXOFF 0x00400000 /* SW Xoff transmission */
1105 #define E1000_TCTL_PBE 0x00800000 /* Packet Burst Enable */
1106 #define E1000_TCTL_RTLC 0x01000000 /* Re-transmit on late collision */
1107 #define E1000_TCTL_NRTU 0x02000000 /* No Re-transmit on underrun */
1109 /* Receive Checksum Control */
1110 #define E1000_RXCSUM_PCSS_MASK 0x000000FF /* Packet Checksum Start */
1111 #define E1000_RXCSUM_IPOFL 0x00000100 /* IPv4 checksum offload */
1112 #define E1000_RXCSUM_TUOFL 0x00000200 /* TCP / UDP checksum offload */
1113 #define E1000_RXCSUM_IPV6OFL 0x00000400 /* IPv6 checksum offload */
1115 /* Definitions for power management and wakeup registers */
1116 /* Wake Up Control */
1117 #define E1000_WUC_APME 0x00000001 /* APM Enable */
1118 #define E1000_WUC_PME_EN 0x00000002 /* PME Enable */
1119 #define E1000_WUC_PME_STATUS 0x00000004 /* PME Status */
1120 #define E1000_WUC_APMPME 0x00000008 /* Assert PME on APM Wakeup */
1122 /* Wake Up Filter Control */
1123 #define E1000_WUFC_LNKC 0x00000001 /* Link Status Change Wakeup Enable */
1124 #define E1000_WUFC_MAG 0x00000002 /* Magic Packet Wakeup Enable */
1125 #define E1000_WUFC_EX 0x00000004 /* Directed Exact Wakeup Enable */
1126 #define E1000_WUFC_MC 0x00000008 /* Directed Multicast Wakeup Enable */
1127 #define E1000_WUFC_BC 0x00000010 /* Broadcast Wakeup Enable */
1128 #define E1000_WUFC_ARP 0x00000020 /* ARP Request Packet Wakeup Enable */
1129 #define E1000_WUFC_IPV4 0x00000040 /* Directed IPv4 Packet Wakeup Enable */
1130 #define E1000_WUFC_IPV6 0x00000080 /* Directed IPv6 Packet Wakeup Enable */
1131 #define E1000_WUFC_FLX0 0x00010000 /* Flexible Filter 0 Enable */
1132 #define E1000_WUFC_FLX1 0x00020000 /* Flexible Filter 1 Enable */
1133 #define E1000_WUFC_FLX2 0x00040000 /* Flexible Filter 2 Enable */
1134 #define E1000_WUFC_FLX3 0x00080000 /* Flexible Filter 3 Enable */
1135 #define E1000_WUFC_ALL_FILTERS 0x000F00FF /* Mask for all wakeup filters */
1136 #define E1000_WUFC_FLX_OFFSET 16 /* Offset to the Flexible Filters bits */
1137 #define E1000_WUFC_FLX_FILTERS 0x000F0000 /* Mask for the 4 flexible filters */
1139 /* Wake Up Status */
1140 #define E1000_WUS_LNKC 0x00000001 /* Link Status Changed */
1141 #define E1000_WUS_MAG 0x00000002 /* Magic Packet Received */
1142 #define E1000_WUS_EX 0x00000004 /* Directed Exact Received */
1143 #define E1000_WUS_MC 0x00000008 /* Directed Multicast Received */
1144 #define E1000_WUS_BC 0x00000010 /* Broadcast Received */
1145 #define E1000_WUS_ARP 0x00000020 /* ARP Request Packet Received */
1146 #define E1000_WUS_IPV4 0x00000040 /* Directed IPv4 Packet Wakeup Received */
1147 #define E1000_WUS_IPV6 0x00000080 /* Directed IPv6 Packet Wakeup Received */
1148 #define E1000_WUS_FLX0 0x00010000 /* Flexible Filter 0 Match */
1149 #define E1000_WUS_FLX1 0x00020000 /* Flexible Filter 1 Match */
1150 #define E1000_WUS_FLX2 0x00040000 /* Flexible Filter 2 Match */
1151 #define E1000_WUS_FLX3 0x00080000 /* Flexible Filter 3 Match */
1152 #define E1000_WUS_FLX_FILTERS 0x000F0000 /* Mask for the 4 flexible filters */
1154 /* Management Control */
1155 #define E1000_MANC_SMBUS_EN 0x00000001 /* SMBus Enabled - RO */
1156 #define E1000_MANC_ASF_EN 0x00000002 /* ASF Enabled - RO */
1157 #define E1000_MANC_R_ON_FORCE 0x00000004 /* Reset on Force TCO - RO */
1158 #define E1000_MANC_RMCP_EN 0x00000100 /* Enable RCMP 026Fh Filtering */
1159 #define E1000_MANC_0298_EN 0x00000200 /* Enable RCMP 0298h Filtering */
1160 #define E1000_MANC_IPV4_EN 0x00000400 /* Enable IPv4 */
1161 #define E1000_MANC_IPV6_EN 0x00000800 /* Enable IPv6 */
1162 #define E1000_MANC_SNAP_EN 0x00001000 /* Accept LLC/SNAP */
1163 #define E1000_MANC_ARP_EN 0x00002000 /* Enable ARP Request Filtering */
1164 #define E1000_MANC_NEIGHBOR_EN 0x00004000 /* Enable Neighbor Discovery
1166 #define E1000_MANC_TCO_RESET 0x00010000 /* TCO Reset Occurred */
1167 #define E1000_MANC_RCV_TCO_EN 0x00020000 /* Receive TCO Packets Enabled */
1168 #define E1000_MANC_REPORT_STATUS 0x00040000 /* Status Reporting Enabled */
1169 #define E1000_MANC_SMB_REQ 0x01000000 /* SMBus Request */
1170 #define E1000_MANC_SMB_GNT 0x02000000 /* SMBus Grant */
1171 #define E1000_MANC_SMB_CLK_IN 0x04000000 /* SMBus Clock In */
1172 #define E1000_MANC_SMB_DATA_IN 0x08000000 /* SMBus Data In */
1173 #define E1000_MANC_SMB_DATA_OUT 0x10000000 /* SMBus Data Out */
1174 #define E1000_MANC_SMB_CLK_OUT 0x20000000 /* SMBus Clock Out */
1176 #define E1000_MANC_SMB_DATA_OUT_SHIFT 28 /* SMBus Data Out Shift */
1177 #define E1000_MANC_SMB_CLK_OUT_SHIFT 29 /* SMBus Clock Out Shift */
1179 /* Wake Up Packet Length */
1180 #define E1000_WUPL_LENGTH_MASK 0x0FFF /* Only the lower 12 bits are valid */
1182 #define E1000_MDALIGN 4096
1184 /* EEPROM Commands */
1185 #define EEPROM_READ_OPCODE 0x6 /* EERPOM read opcode */
1186 #define EEPROM_WRITE_OPCODE 0x5 /* EERPOM write opcode */
1187 #define EEPROM_ERASE_OPCODE 0x7 /* EERPOM erase opcode */
1188 #define EEPROM_EWEN_OPCODE 0x13 /* EERPOM erase/write enable */
1189 #define EEPROM_EWDS_OPCODE 0x10 /* EERPOM erast/write disable */
1191 /* EEPROM Word Offsets */
1192 #define EEPROM_INIT_CONTROL1_REG 0x000A
1193 #define EEPROM_INIT_CONTROL2_REG 0x000F
1194 #define EEPROM_FLASH_VERSION 0x0032
1195 #define EEPROM_CHECKSUM_REG 0x003F
1197 /* Mask bits for fields in Word 0x0a of the EEPROM */
1198 #define EEPROM_WORD0A_ILOS 0x0010
1199 #define EEPROM_WORD0A_SWDPIO 0x01E0
1200 #define EEPROM_WORD0A_LRST 0x0200
1201 #define EEPROM_WORD0A_FD 0x0400
1202 #define EEPROM_WORD0A_66MHZ 0x0800
1204 /* Mask bits for fields in Word 0x0f of the EEPROM */
1205 #define EEPROM_WORD0F_PAUSE_MASK 0x3000
1206 #define EEPROM_WORD0F_PAUSE 0x1000
1207 #define EEPROM_WORD0F_ASM_DIR 0x2000
1208 #define EEPROM_WORD0F_ANE 0x0800
1209 #define EEPROM_WORD0F_SWPDIO_EXT 0x00F0
1211 /* For checksumming, the sum of all words in the EEPROM should equal 0xBABA. */
1212 #define EEPROM_SUM 0xBABA
1214 /* EEPROM Map defines (WORD OFFSETS)*/
1215 #define EEPROM_NODE_ADDRESS_BYTE_0 0
1216 #define EEPROM_PBA_BYTE_1 8
1218 /* EEPROM Map Sizes (Byte Counts) */
1221 /* Collision related configuration parameters */
1222 #define E1000_COLLISION_THRESHOLD 16
1223 #define E1000_CT_SHIFT 4
1224 #define E1000_FDX_COLLISION_DISTANCE 64
1225 #define E1000_HDX_COLLISION_DISTANCE 64
1226 #define E1000_GB_HDX_COLLISION_DISTANCE 512
1227 #define E1000_COLD_SHIFT 12
1229 /* The number of Transmit and Receive Descriptors must be a multiple of 8 */
1230 #define REQ_TX_DESCRIPTOR_MULTIPLE 8
1231 #define REQ_RX_DESCRIPTOR_MULTIPLE 8
1233 /* Default values for the transmit IPG register */
1234 #define DEFAULT_82542_TIPG_IPGT 10
1235 #define DEFAULT_82543_TIPG_IPGT_FIBER 9
1236 #define DEFAULT_82543_TIPG_IPGT_COPPER 8
1238 #define E1000_TIPG_IPGT_MASK 0x000003FF
1239 #define E1000_TIPG_IPGR1_MASK 0x000FFC00
1240 #define E1000_TIPG_IPGR2_MASK 0x3FF00000
1242 #define DEFAULT_82542_TIPG_IPGR1 2
1243 #define DEFAULT_82543_TIPG_IPGR1 8
1244 #define E1000_TIPG_IPGR1_SHIFT 10
1246 #define DEFAULT_82542_TIPG_IPGR2 10
1247 #define DEFAULT_82543_TIPG_IPGR2 6
1248 #define E1000_TIPG_IPGR2_SHIFT 20
1250 #define E1000_TXDMAC_DPP 0x00000001
1253 #define E1000_PBA_16K 0x0010 /* 16KB, default TX allocation */
1254 #define E1000_PBA_24K 0x0018
1255 #define E1000_PBA_40K 0x0028
1256 #define E1000_PBA_48K 0x0030 /* 48KB, default RX allocation */
1258 /* Flow Control Constants */
1259 #define FLOW_CONTROL_ADDRESS_LOW 0x00C28001
1260 #define FLOW_CONTROL_ADDRESS_HIGH 0x00000100
1261 #define FLOW_CONTROL_TYPE 0x8808
1263 /* The historical defaults for the flow control values are given below. */
1264 #define FC_DEFAULT_HI_THRESH (0x8000) /* 32KB */
1265 #define FC_DEFAULT_LO_THRESH (0x4000) /* 16KB */
1266 #define FC_DEFAULT_TX_TIMER (0x100) /* ~130 us */
1269 /* The number of bits that we need to shift right to move the "pause"
1270 * bits from the EEPROM (bits 13:12) to the "pause" (bits 8:7) field
1271 * in the TXCW register
1273 #define PAUSE_SHIFT 5
1275 /* The number of bits that we need to shift left to move the "SWDPIO"
1276 * bits from the EEPROM (bits 8:5) to the "SWDPIO" (bits 25:22) field
1277 * in the CTRL register
1279 #define SWDPIO_SHIFT 17
1281 /* The number of bits that we need to shift left to move the "SWDPIO_EXT"
1282 * bits from the EEPROM word F (bits 7:4) to the bits 11:8 of The
1283 * Extended CTRL register.
1284 * in the CTRL register
1286 #define SWDPIO__EXT_SHIFT 4
1288 /* The number of bits that we need to shift left to move the "ILOS"
1289 * bit from the EEPROM (bit 4) to the "ILOS" (bit 7) field
1290 * in the CTRL register
1292 #define ILOS_SHIFT 3
1295 #define RECEIVE_BUFFER_ALIGN_SIZE (256)
1297 /* The number of milliseconds we wait for auto-negotiation to complete */
1298 #define LINK_UP_TIMEOUT 500
1300 #define E1000_TX_BUFFER_SIZE ((uint32_t)1514)
1302 /* The carrier extension symbol, as received by the NIC. */
1303 #define CARRIER_EXTENSION 0x0F
1305 /* TBI_ACCEPT macro definition:
1307 * This macro requires:
1308 * adapter = a pointer to struct em_shared_adapter
1309 * status = the 8 bit status field of the RX descriptor with EOP set
1310 * error = the 8 bit error field of the RX descriptor with EOP set
1311 * length = the sum of all the length fields of the RX descriptors that
1312 * make up the current frame
1313 * last_byte = the last byte of the frame DMAed by the hardware
1314 * max_frame_length = the maximum frame length we want to accept.
1315 * min_frame_length = the minimum frame length we want to accept.
1317 * This macro is a conditional that should be used in the interrupt
1318 * handler's Rx processing routine when RxErrors have been detected.
1323 * accept_frame = TRUE;
1324 * em_tbi_adjust_stats(adapter, MacAddress);
1327 * accept_frame = FALSE;
1332 #define TBI_ACCEPT(adapter, status, errors, length, last_byte) \
1333 ((adapter)->tbi_compatibility_on && \
1334 (((errors) & E1000_RXD_ERR_FRAME_ERR_MASK) == E1000_RXD_ERR_CE) && \
1335 ((last_byte) == CARRIER_EXTENSION) && \
1336 (((status) & E1000_RXD_STAT_VP) ? \
1337 (((length) > ((adapter)->min_frame_size - VLAN_TAG_SIZE)) && \
1338 ((length) <= ((adapter)->max_frame_size + 1))) : \
1339 (((length) > (adapter)->min_frame_size) && \
1340 ((length) <= ((adapter)->max_frame_size + VLAN_TAG_SIZE + 1)))))
1343 #endif /* _EM_MAC_H_ */