2 Definitions for network adapter card.
4 Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 // pci config offsets:
20 #define RX_BUFFER_COUNT 32
21 #define TX_BUFFER_COUNT 32
23 #define PCI_VENDOR_ID_INTEL 0x8086
24 #define PCI_DEVICE_ID_INTEL_82557 0x1229
25 #define D100_VENDOR_ID 0x8086
26 #define D100_DEVICE_ID 0x1229
27 #define D102_DEVICE_ID 0x2449
29 #define ICH3_DEVICE_ID_1 0x1031
30 #define ICH3_DEVICE_ID_2 0x1032
31 #define ICH3_DEVICE_ID_3 0x1033
32 #define ICH3_DEVICE_ID_4 0x1034
33 #define ICH3_DEVICE_ID_5 0x1035
34 #define ICH3_DEVICE_ID_6 0x1036
35 #define ICH3_DEVICE_ID_7 0x1037
36 #define ICH3_DEVICE_ID_8 0x1038
38 #define SPEEDO_DEVICE_ID 0x1227
39 #define SPLASH1_DEVICE_ID 0x1226
42 // bit fields for the command
43 #define PCI_COMMAND_MASTER 0x04 // bit 2
44 #define PCI_COMMAND_IO 0x01 // bit 0
45 #define PCI_COMMAND 0x04
46 #define PCI_LATENCY_TIMER 0x0D
48 #define ETHER_MAC_ADDR_LEN 6
50 #define ETHER_HEADER_LEN 14
51 // media interface type
52 // #define INTERFACE_TYPE "
54 // Hardware type values
55 #define HW_ETHER_TYPE 1
56 #define HW_EXPERIMENTAL_ETHER_TYPE 2
57 #define HW_IEEE_TYPE 6
58 #define HW_ARCNET_TYPE 7
62 #define MAX_ETHERNET_PKT_SIZE 1514 // including eth header
63 #define RX_BUFFER_SIZE 1536 // including crc and padding
64 #define TX_BUFFER_SIZE 64
65 #define ETH_MTU 1500 // does not include ethernet header length
67 #define SPEEDO3_TOTAL_SIZE 0x20
72 UINT8 dest_addr
[PXE_HWADDR_LEN_ETHER
];
73 UINT8 src_addr
[PXE_HWADDR_LEN_ETHER
];
78 typedef struct CONFIG_HEADER
{
87 UINT8 HeaderType
; // must be zero to impose this structure...
88 UINT8 BIST
; // built-in self test
89 UINT32 BaseAddressReg_0
; // memory mapped address
90 UINT32 BaseAddressReg_1
; //io mapped address, Base IO address
91 UINT32 BaseAddressReg_2
; // option rom address
92 UINT32 BaseAddressReg_3
;
93 UINT32 BaseAddressReg_4
;
94 UINT32 BaseAddressReg_5
;
98 UINT32 ExpansionROMBaseAddr
;
99 UINT8 CapabilitiesPtr
;
110 //-------------------------------------------------------------------------
111 // Offsets to the various registers.
112 // All accesses need not be longword aligned.
113 //-------------------------------------------------------------------------
114 enum speedo_offsets
{
115 SCBStatus
= 0, SCBCmd
= 2, // Rx/Command Unit command and status.
116 SCBPointer
= 4, // General purpose pointer.
117 SCBPort
= 8, // Misc. commands and operands.
118 SCBflash
= 12, SCBeeprom
= 14, // EEPROM and flash memory control.
119 SCBCtrlMDI
= 16, // MDI interface control.
120 SCBEarlyRx
= 20, // Early receive byte count.
121 SCBEarlyRxInt
= 24, SCBFlowCtrlReg
= 25, SCBPmdr
= 27,
122 // offsets for general control registers (GCRs)
123 SCBGenCtrl
= 28, SCBGenStatus
= 29, SCBGenCtrl2
= 30, SCBRsvd
= 31
126 #define GCR2_EEPROM_ACCESS_SEMAPHORE 0x80 // bit offset into the gcr2
128 //-------------------------------------------------------------------------
129 // Action commands - Commands that can be put in a command list entry.
130 //-------------------------------------------------------------------------
132 CmdNOp
= 0, CmdIASetup
= 1, CmdConfigure
= 2, CmdMulticastList
= 3,
133 CmdTx
= 4, CmdTDR
= 5, CmdDump
= 6, CmdDiagnose
= 7,
134 CmdSuspend
= 0x4000, /* Suspend after completion. */
135 CmdIntr
= 0x2000, /* Interrupt after completion. */
136 CmdTxFlex
= 0x0008 /* Use "Flexible mode" for CmdTx command. */
139 //-------------------------------------------------------------------------
141 //-------------------------------------------------------------------------
143 #define PORT_SELF_TEST 1
144 #define POR_SELECTIVE_RESET 2
145 #define PORT_DUMP_POINTER 2
147 //-------------------------------------------------------------------------
148 // SCB Command Word bit definitions
149 //-------------------------------------------------------------------------
151 #define CU_START 0x0010
152 #define CU_RESUME 0x0020
153 #define CU_STATSADDR 0x0040
154 #define CU_SHOWSTATS 0x0050 /* Dump statistics counters. */
155 #define CU_CMD_BASE 0x0060 /* Base address to add to add CU commands. */
156 #define CU_DUMPSTATS 0x0070 /* Dump then reset stats counters. */
159 #define RX_START 0x0001
160 #define RX_RESUME 0x0002
161 #define RX_ABORT 0x0004
162 #define RX_ADDR_LOAD 0x0006 /* load ru_base_reg */
163 #define RX_RESUMENR 0x0007
165 // Interrupt fields (assuming byte addressing)
166 #define INT_MASK 0x0100
167 #define DRVR_INT 0x0200 /* Driver generated interrupt. */
170 #define CMD_STATUS_COMPLETE 0x8000
171 #define RX_STATUS_COMPLETE 0x8000
172 #define CMD_STATUS_MASK 0xF000
174 //-------------------------------------------------------------------------
176 // Interrupts are ACKed by writing to the upper 6 interrupt bits
177 //-------------------------------------------------------------------------
178 #define SCB_STATUS_MASK 0xFC00 // bits 2-7 - STATUS/ACK Mask
179 #define SCB_STATUS_CX_TNO 0x8000 // BIT_15 - CX or TNO Interrupt
180 #define SCB_STATUS_FR 0x4000 // BIT_14 - FR Interrupt
181 #define SCB_STATUS_CNA 0x2000 // BIT_13 - CNA Interrupt
182 #define SCB_STATUS_RNR 0x1000 // BIT_12 - RNR Interrupt
183 #define SCB_STATUS_MDI 0x0800 // BIT_11 - MDI R/W Done Interrupt
184 #define SCB_STATUS_SWI 0x0400 // BIT_10 - SWI Interrupt
186 // CU STATUS: bits 6 & 7
187 #define SCB_STATUS_CU_MASK 0x00C0 // bits 6 & 7
188 #define SCB_STATUS_CU_IDLE 0x0000 // 00
189 #define SCB_STATUS_CU_SUSPEND 0x0040 // 01
190 #define SCB_STATUS_CU_ACTIVE 0x0080 // 10
192 // RU STATUS: bits 2-5
193 #define SCB_RUS_IDLE 0x0000
194 #define SCB_RUS_SUSPENDED 0x0004 // bit 2
195 #define SCB_RUS_NO_RESOURCES 0x0008 // bit 3
196 #define SCB_RUS_READY 0x0010 // bit 4
198 //-------------------------------------------------------------------------
199 // Bit Mask definitions
200 //-------------------------------------------------------------------------
211 #define BIT_10 0x0400
212 #define BIT_11 0x0800
213 #define BIT_12 0x1000
214 #define BIT_13 0x2000
215 #define BIT_14 0x4000
216 #define BIT_15 0x8000
217 #define BIT_24 0x01000000
218 #define BIT_28 0x10000000
221 //-------------------------------------------------------------------------
222 // MDI Control register bit definitions
223 //-------------------------------------------------------------------------
224 #define MDI_DATA_MASK BIT_0_15 // MDI Data port
225 #define MDI_REG_ADDR BIT_16_20 // which MDI register to read/write
226 #define MDI_PHY_ADDR BIT_21_25 // which PHY to read/write
227 #define MDI_PHY_OPCODE BIT_26_27 // which PHY to read/write
228 #define MDI_PHY_READY BIT_28 // PHY is ready for another MDI cycle
229 #define MDI_PHY_INT_ENABLE BIT_29 // Assert INT at MDI cycle completion
231 #define BIT_0_2 0x0007
232 #define BIT_0_3 0x000F
233 #define BIT_0_4 0x001F
234 #define BIT_0_5 0x003F
235 #define BIT_0_6 0x007F
236 #define BIT_0_7 0x00FF
237 #define BIT_0_8 0x01FF
238 #define BIT_0_13 0x3FFF
239 #define BIT_0_15 0xFFFF
240 #define BIT_1_2 0x0006
241 #define BIT_1_3 0x000E
242 #define BIT_2_5 0x003C
243 #define BIT_3_4 0x0018
244 #define BIT_4_5 0x0030
245 #define BIT_4_6 0x0070
246 #define BIT_4_7 0x00F0
247 #define BIT_5_7 0x00E0
248 #define BIT_5_9 0x03E0
249 #define BIT_5_12 0x1FE0
250 #define BIT_5_15 0xFFE0
251 #define BIT_6_7 0x00c0
252 #define BIT_7_11 0x0F80
253 #define BIT_8_10 0x0700
254 #define BIT_9_13 0x3E00
255 #define BIT_12_15 0xF000
257 #define BIT_16_20 0x001F0000
258 #define BIT_21_25 0x03E00000
259 #define BIT_26_27 0x0C000000
261 //-------------------------------------------------------------------------
262 // MDI Control register opcode definitions
263 //-------------------------------------------------------------------------
264 #define MDI_WRITE 1 // Phy Write
265 #define MDI_READ 2 // Phy read
267 //-------------------------------------------------------------------------
268 // PHY 100 MDI Register/Bit Definitions
269 //-------------------------------------------------------------------------
271 #define MDI_CONTROL_REG 0x00 // MDI control register
272 #define MDI_STATUS_REG 0x01 // MDI Status regiser
273 #define PHY_ID_REG_1 0x02 // Phy indentification reg (word 1)
274 #define PHY_ID_REG_2 0x03 // Phy indentification reg (word 2)
275 #define AUTO_NEG_ADVERTISE_REG 0x04 // Auto-negotiation advertisement
276 #define AUTO_NEG_LINK_PARTNER_REG 0x05 // Auto-negotiation link partner ability
277 #define AUTO_NEG_EXPANSION_REG 0x06 // Auto-negotiation expansion
278 #define AUTO_NEG_NEXT_PAGE_REG 0x07 // Auto-negotiation next page transmit
279 #define EXTENDED_REG_0 0x10 // Extended reg 0 (Phy 100 modes)
280 #define EXTENDED_REG_1 0x14 // Extended reg 1 (Phy 100 error indications)
281 #define NSC_CONG_CONTROL_REG 0x17 // National (TX) congestion control
282 #define NSC_SPEED_IND_REG 0x19 // National (TX) speed indication
284 // MDI Control register bit definitions
285 #define MDI_CR_COLL_TEST_ENABLE BIT_7 // Collision test enable
286 #define MDI_CR_FULL_HALF BIT_8 // FDX =1, half duplex =0
287 #define MDI_CR_RESTART_AUTO_NEG BIT_9 // Restart auto negotiation
288 #define MDI_CR_ISOLATE BIT_10 // Isolate PHY from MII
289 #define MDI_CR_POWER_DOWN BIT_11 // Power down
290 #define MDI_CR_AUTO_SELECT BIT_12 // Auto speed select enable
291 #define MDI_CR_10_100 BIT_13 // 0 = 10Mbs, 1 = 100Mbs
292 #define MDI_CR_LOOPBACK BIT_14 // 0 = normal, 1 = loopback
293 #define MDI_CR_RESET BIT_15 // 0 = normal, 1 = PHY reset
295 // MDI Status register bit definitions
296 #define MDI_SR_EXT_REG_CAPABLE BIT_0 // Extended register capabilities
297 #define MDI_SR_JABBER_DETECT BIT_1 // Jabber detected
298 #define MDI_SR_LINK_STATUS BIT_2 // Link Status -- 1 = link
299 #define MDI_SR_AUTO_SELECT_CAPABLE BIT_3 // Auto speed select capable
300 #define MDI_SR_REMOTE_FAULT_DETECT BIT_4 // Remote fault detect
301 #define MDI_SR_AUTO_NEG_COMPLETE BIT_5 // Auto negotiation complete
302 #define MDI_SR_10T_HALF_DPX BIT_11 // 10BaseT Half Duplex capable
303 #define MDI_SR_10T_FULL_DPX BIT_12 // 10BaseT full duplex capable
304 #define MDI_SR_TX_HALF_DPX BIT_13 // TX Half Duplex capable
305 #define MDI_SR_TX_FULL_DPX BIT_14 // TX full duplex capable
306 #define MDI_SR_T4_CAPABLE BIT_15 // T4 capable
308 // Auto-Negotiation advertisement register bit definitions
309 #define NWAY_AD_SELCTOR_FIELD BIT_0_4 // identifies supported protocol
310 #define NWAY_AD_ABILITY BIT_5_12 // technologies that are supported
311 #define NWAY_AD_10T_HALF_DPX BIT_5 // 10BaseT Half Duplex capable
312 #define NWAY_AD_10T_FULL_DPX BIT_6 // 10BaseT full duplex capable
313 #define NWAY_AD_TX_HALF_DPX BIT_7 // TX Half Duplex capable
314 #define NWAY_AD_TX_FULL_DPX BIT_8 // TX full duplex capable
315 #define NWAY_AD_T4_CAPABLE BIT_9 // T4 capable
316 #define NWAY_AD_REMOTE_FAULT BIT_13 // indicates local remote fault
317 #define NWAY_AD_RESERVED BIT_14 // reserved
318 #define NWAY_AD_NEXT_PAGE BIT_15 // Next page (not supported)
320 // Auto-Negotiation link partner ability register bit definitions
321 #define NWAY_LP_SELCTOR_FIELD BIT_0_4 // identifies supported protocol
322 #define NWAY_LP_ABILITY BIT_5_9 // technologies that are supported
323 #define NWAY_LP_REMOTE_FAULT BIT_13 // indicates partner remote fault
324 #define NWAY_LP_ACKNOWLEDGE BIT_14 // acknowledge
325 #define NWAY_LP_NEXT_PAGE BIT_15 // Next page (not supported)
327 // Auto-Negotiation expansion register bit definitions
328 #define NWAY_EX_LP_NWAY BIT_0 // link partner is NWAY
329 #define NWAY_EX_PAGE_RECEIVED BIT_1 // link code word received
330 #define NWAY_EX_NEXT_PAGE_ABLE BIT_2 // local is next page able
331 #define NWAY_EX_LP_NEXT_PAGE_ABLE BIT_3 // partner is next page able
332 #define NWAY_EX_PARALLEL_DET_FLT BIT_4 // parallel detection fault
333 #define NWAY_EX_RESERVED BIT_5_15 // reserved
336 // PHY 100 Extended Register 0 bit definitions
337 #define PHY_100_ER0_FDX_INDIC BIT_0 // 1 = FDX, 0 = half duplex
338 #define PHY_100_ER0_SPEED_INDIC BIT_1 // 1 = 100mbs, 0= 10mbs
339 #define PHY_100_ER0_WAKE_UP BIT_2 // Wake up DAC
340 #define PHY_100_ER0_RESERVED BIT_3_4 // Reserved
341 #define PHY_100_ER0_REV_CNTRL BIT_5_7 // Revsion control (A step = 000)
342 #define PHY_100_ER0_FORCE_FAIL BIT_8 // Force Fail is enabled
343 #define PHY_100_ER0_TEST BIT_9_13 // Revsion control (A step = 000)
344 #define PHY_100_ER0_LINKDIS BIT_14 // Link integrity test is disabled
345 #define PHY_100_ER0_JABDIS BIT_15 // Jabber function is disabled
348 // PHY 100 Extended Register 1 bit definitions
349 #define PHY_100_ER1_RESERVED BIT_0_8 // Reserved
350 #define PHY_100_ER1_CH2_DET_ERR BIT_9 // Channel 2 EOF detection error
351 #define PHY_100_ER1_MANCH_CODE_ERR BIT_10 // Manchester code error
352 #define PHY_100_ER1_EOP_ERR BIT_11 // EOP error
353 #define PHY_100_ER1_BAD_CODE_ERR BIT_12 // bad code error
354 #define PHY_100_ER1_INV_CODE_ERR BIT_13 // invalid code error
355 #define PHY_100_ER1_DC_BAL_ERR BIT_14 // DC balance error
356 #define PHY_100_ER1_PAIR_SKEW_ERR BIT_15 // Pair skew error
358 // National Semiconductor TX phy congestion control register bit definitions
359 #define NSC_TX_CONG_TXREADY BIT_10 // Makes TxReady an input
360 #define NSC_TX_CONG_ENABLE BIT_8 // Enables congestion control
361 #define NSC_TX_CONG_F_CONNECT BIT_5 // Enables congestion control
363 // National Semiconductor TX phy speed indication register bit definitions
364 #define NSC_TX_SPD_INDC_SPEED BIT_6 // 0 = 100mb, 1=10mb
366 //-------------------------------------------------------------------------
367 // Phy related constants
368 //-------------------------------------------------------------------------
370 #define PHY_100_A 0x000003E0
371 #define PHY_100_C 0x035002A8
372 #define PHY_TX_ID 0x015002A8
373 #define PHY_NSC_TX 0x5c002000
374 #define PHY_OTHER 0xFFFF
376 #define PHY_MODEL_REV_ID_MASK 0xFFF0FFFF
377 #define PARALLEL_DETECT 0
380 #define RENEGOTIATE_TIME 35 // (3.5 Seconds)
382 #define CONNECTOR_AUTO 0
383 #define CONNECTOR_TPE 1
384 #define CONNECTOR_MII 2
386 //-------------------------------------------------------------------------
388 /* The Speedo3 Rx and Tx frame/buffer descriptors. */
390 struct CB_Header
{ /* A generic descriptor. */
391 UINT16 status
; /* Offset 0. */
392 UINT16 command
; /* Offset 2. */
393 UINT32 link
; /* struct descriptor * */
396 /* transmit command block structure */
398 typedef struct s_TxCB
{
399 struct CB_Header cb_header
;
400 UINT32 PhysTBDArrayAddres
; /* address of an array that contains
401 physical TBD pointers */
402 UINT16 ByteCount
; /* immediate data count = 0 always */
405 UINT8 ImmediateData
[TX_BUFFER_SIZE
];
406 /* following fields are not seen by the 82557 */
408 UINT32 phys_buf_addr
;
410 } TBDArray
[MAX_XMIT_FRAGMENTS
];
411 UINT32 PhysArrayAddr
; /* in case the one in the header is lost */
412 UINT32 PhysTCBAddress
; /* for this TCB */
413 struct s_TxCB
*NextTCBVirtualLinkPtr
;
414 struct s_TxCB
*PrevTCBVirtualLinkPtr
;
415 UINT64 free_data_ptr
; // to be given to the upper layer when this xmit completes1
418 /* The Speedo3 Rx and Tx buffer descriptors. */
420 typedef struct s_RxFD
{ /* Receive frame descriptor. */
421 struct CB_Header cb_header
;
422 UINT32 rx_buf_addr
; /* VOID * */
425 UINT8 RFDBuffer
[RX_BUFFER_SIZE
];
430 /* Elements of the RxFD.status word. */
431 #define RX_COMPLETE 0x8000
432 #define RX_FRAME_OK 0x2000
434 /* Elements of the dump_statistics block. This block must be lword aligned. */
436 struct speedo_stats
{
437 UINT32 tx_good_frames
;
438 UINT32 tx_coll16_errs
;
439 UINT32 tx_late_colls
;
441 UINT32 tx_lost_carrier
;
444 UINT32 tx_multi_colls
;
445 UINT32 tx_total_colls
;
446 UINT32 rx_good_frames
;
448 UINT32 rx_align_errs
;
449 UINT32 rx_resource_errs
;
450 UINT32 rx_overrun_errs
;
451 UINT32 rx_colls_errs
;
459 RxFD rx_ring
[RX_BUFFER_COUNT
];
460 TxCB tx_ring
[TX_BUFFER_COUNT
];
461 struct speedo_stats statistics
;
463 #define MEMORY_NEEDED sizeof(struct Krn_Mem)
465 /* The parameters for a CmdConfigure operation.
466 There are so many options that it would be difficult to document each bit.
467 We mostly use the default or recommended settings.
471 *--------------------------------------------------------------------------
472 * Configuration CB Parameter Bit Definitions
473 *--------------------------------------------------------------------------
475 // - Byte 0 (Default Value = 16h)
476 #define CFIG_BYTE_COUNT 0x16 // 22 Configuration Bytes
478 //- Byte 1 (Default Value = 88h)
479 #define CFIG_TXRX_FIFO_LIMIT 0x88
481 //- Byte 2 (Default Value = 0)
482 #define CFIG_ADAPTIVE_IFS 0
484 //- Byte 3 (Default Value = 0, ALWAYS. This byte is RESERVED)
485 #define CFIG_RESERVED 0
487 //- Byte 4 (Default Value = 0. Default implies that Rx DMA cannot be
489 #define CFIG_RXDMA_BYTE_COUNT 0
491 //- Byte 5 (Default Value = 80h. Default implies that Tx DMA cannot be
492 //- preempted. However, setting these counters is enabled.)
493 #define CFIG_DMBC_ENABLE 0x80
495 //- Byte 6 (Default Value = 33h. Late SCB enabled, No TNO interrupts,
496 //- CNA interrupts and do not save bad frames.)
497 #define CFIG_LATE_SCB 1 // BIT 0
498 #define CFIG_TNO_INTERRUPT 0x4 // BIT 2
499 #define CFIG_CI_INTERRUPT 0x8 // BIT 3
500 #define CFIG_SAVE_BAD_FRAMES 0x80 // BIT_7
502 //- Byte 7 (Default Value = 7h. Discard short frames automatically and
503 //- attempt upto 3 retries on transmit.)
504 #define CFIG_DISCARD_SHORTRX 0x00001
505 #define CFIG_URUN_RETRY BIT_1 OR BIT_2
507 //- Byte 8 (Default Value = 1. Enable MII mode.)
508 #define CFIG_503_MII BIT_0
510 //- Byte 9 (Default Value = 0, ALWAYS)
512 //- Byte 10 (Default Value = 2Eh)
513 #define CFIG_NSAI BIT_3
514 #define CFIG_PREAMBLE_LENGTH BIT_5 ;- Bit 5-4 = 1-0
515 #define CFIG_NO_LOOPBACK 0
516 #define CFIG_INTERNAL_LOOPBACK BIT_6
517 #define CFIG_EXT_LOOPBACK BIT_7
518 #define CFIG_EXT_PIN_LOOPBACK BIT_6 OR BIT_7
520 //- Byte 11 (Default Value = 0)
521 #define CFIG_LINEAR_PRIORITY 0
523 //- Byte 12 (Default Value = 60h)
524 #define CFIG_LPRIORITY_MODE 0
525 #define CFIG_IFS 6 ;- 6 * 16 = 96
527 //- Byte 13 (Default Value = 0, ALWAYS)
529 //- Byte 14 (Default Value = 0F2h, ALWAYS)
531 //- Byte 15 (Default Value = E8h)
532 #define CFIG_PROMISCUOUS_MODE BIT_0
533 #define CFIG_BROADCAST_DISABLE BIT_1
534 #define CFIG_CRS_CDT BIT_7
536 //- Byte 16 (Default Value = 0, ALWAYS)
538 //- Byte 17 (Default Value = 40h, ALWAYS)
540 //- Byte 18 (Default Value = F2h)
541 #define CFIG_STRIPPING BIT_0
542 #define CFIG_PADDING BIT_1
543 #define CFIG_RX_CRC_TRANSFER BIT_2
545 //- Byte 19 (Default Value = 80h)
546 #define CFIG_FORCE_FDX BIT_6
547 #define CFIG_FDX_PIN_ENABLE BIT_7
549 //- Byte 20 (Default Value = 3Fh)
550 #define CFIG_MULTI_IA BIT_6
552 //- Byte 21 (Default Value = 05)
553 #define CFIG_MC_ALL BIT_3
555 /*-----------------------------------------------------------------------*/
556 #define D102_REVID 0x0b
558 #define HALF_DUPLEX 1
559 #define FULL_DUPLEX 2
561 typedef struct s_data_instance
{
563 UINT16 State
; // stopped, started or initialized
573 UINT8 PermNodeAddress
[PXE_MAC_LENGTH
];
574 UINT8 CurrentNodeAddress
[PXE_MAC_LENGTH
];
575 UINT8 BroadcastNodeAddress
[PXE_MAC_LENGTH
];
576 UINT32 Config
[MAX_PCI_CONFIG_LEN
];
577 UINT32 NVData
[MAX_EEPROM_LEN
];
582 UINT16 LinkSpeed
; // actual link speed setting
583 UINT16 LinkSpeedReq
; // requested (forced) link speed
584 UINT8 DuplexReq
; // requested duplex
585 UINT8 Duplex
; // Duplex set
586 UINT8 CableDetect
; // 1 to detect and 0 not to detect the cable
598 UINT16 PhyRecord
[2]; // primary and secondary PHY record registers from eeprom
604 RxFD
*rx_ring
; // array of rx buffers
605 TxCB
*tx_ring
; // array of tx buffers
606 struct speedo_stats
*statistics
;
611 UINT64 rx_phy_addr
; // physical addresses
613 UINT64 stat_phy_addr
;
615 UINT64 Mapped_MemoryPtr
;
617 UINT64 xmit_done
[TX_BUFFER_COUNT
<< 1]; // circular buffer
618 UINT16 xmit_done_head
; // index into the xmit_done array
619 UINT16 xmit_done_tail
; // where are we filling now (index into xmit_done)
620 UINT16 cur_rx_ind
; // current RX Q head index
623 BOOLEAN in_interrupt
;
625 BOOLEAN Receive_Started
;
627 UINT8 VersionFlag
; // UNDI30 or UNDI31??
631 UINT16 reserved
[3]; // padding for this structure to make it 8 byte aligned
633 UINT8 mc_list
[MAX_MCAST_ADDRESS_CNT
][PXE_MAC_LENGTH
]; // 8*32 is the size
638 EFI_PCI_IO_PROTOCOL
*Io_Function
;
640 // Original PCI attributes
642 UINT64 OriginalPciAttributes
;
644 VOID (*Delay_30
)(UINTN
); // call back routine
645 VOID (*Virt2Phys_30
)(UINT64 virtual_addr
, UINT64 physical_ptr
); // call back routine
646 VOID (*Block_30
)(UINT32 enable
); // call back routine
647 VOID (*Mem_Io_30
)(UINT8 read_write
, UINT8 len
, UINT64 port
, UINT64 buf_addr
);
648 VOID (*Delay
)(UINT64
, UINTN
); // call back routine
649 VOID (*Virt2Phys
)(UINT64 unq_id
, UINT64 virtual_addr
, UINT64 physical_ptr
); // call back routine
650 VOID (*Block
)(UINT64 unq_id
, UINT32 enable
); // call back routine
651 VOID (*Mem_Io
)(UINT64 unq_id
, UINT8 read_write
, UINT8 len
, UINT64 port
,
653 VOID (*Map_Mem
)(UINT64 unq_id
, UINT64 virtual_addr
, UINT32 size
,
654 UINT32 Direction
, UINT64 mapped_addr
);
655 VOID (*UnMap_Mem
)(UINT64 unq_id
, UINT64 virtual_addr
, UINT32 size
,
656 UINT32 Direction
, UINT64 mapped_addr
);
657 VOID (*Sync_Mem
)(UINT64 unq_id
, UINT64 virtual_addr
,
658 UINT32 size
, UINT32 Direction
, UINT64 mapped_addr
);
664 UINT8 m_list
[MAX_MCAST_ADDRESS_CNT
][ETHER_MAC_ADDR_LEN
];
668 #define FOUR_GIGABYTE (UINT64)0x100000000ULL