|
|
/****************************************************************************
** COPYRIGHT (C) 1994-1997 INTEL CORPORATION ** ** DEVELOPED FOR MICROSOFT BY INTEL CORP., HILLSBORO, OREGON ** ** HTTP://WWW.INTEL.COM/ **
** THIS FILE IS PART OF THE INTEL ETHEREXPRESS PRO/100B(TM) AND ** ** ETHEREXPRESS PRO/100+(TM) NDIS 5.0 MINIPORT SAMPLE DRIVER ** ****************************************************************************/
/****************************************************************************
Module Name: e100_557.h (82557.h)
This driver runs on the following hardware: - 82558 based PCI 10/100Mb ethernet adapters (aka Intel EtherExpress(TM) PRO Adapters)
Environment: Kernel Mode - Or whatever is the equivalent on WinNT
Revision History - JCB 8/14/97 Example Driver Created - Dchen 11-01-99 Modified for the new sample driver *****************************************************************************/
#ifndef _E100_557_H
#define _E100_557_H
//-------------------------------------------------------------------------
// D100 Stepping Defines
//-------------------------------------------------------------------------
#define D100_A_STEP 0 // NEVER SHIPPED
#define D100_B_STEP 1 // d100 first shipped silicon
#define D100_C_STEP 2 // d100' (c-step) with vendor/id and hw fix
#define D101_A_STEP 4 // first silicon of d101
//-------------------------------------------------------------------------
// E100 Stepping Defines - used in PoMgmt Decisions
//-------------------------------------------------------------------------
#define E100_82557_A_STEP 1
#define E100_82557_B_STEP 2
#define E100_82557_C_STEP 3
#define E100_82558_A_STEP 4
#define E100_82558_B_STEP 5
#define E100_82559_A_STEP 6
#define E100_82559_B_STEP 7
#define E100_82559_C_STEP 8
#define E100_82559ER_A_STEP 9
//-------------------------------------------------------------------------
// D100 PORT functions -- lower 4 bits
//-------------------------------------------------------------------------
#define PORT_SOFTWARE_RESET 0
#define PORT_SELFTEST 1
#define PORT_SELECTIVE_RESET 2
#define PORT_DUMP 3
//-------------------------------------------------------------------------
// CSR field definitions -- Offsets from CSR base
//-------------------------------------------------------------------------
#define SCB_STATUS_LOW_BYTE 0x0
#define SCB_STATUS_HIGH_BYTE 0x1
#define SCB_COMMAND_LOW_BYTE 0x2
#define SCB_COMMAND_HIGH_BYTE 0x3
#define SCB_GENERAL_POINTER 0x4
#define CSR_PORT_LOW_WORD 0x8
#define CSR_PORT_HIGH_WORD 0x0a
#define CSR_FLASH_CONTROL_REG 0x0c
#define CSR_EEPROM_CONTROL_REG 0x0e
#define CSR_MDI_CONTROL_LOW_WORD 0x10
#define CSR_MDI_CONTROL_HIGH_WORD 0x12
//-------------------------------------------------------------------------
// SCB Status Word bit definitions
//-------------------------------------------------------------------------
//- Interrupt status fields
#define SCB_STATUS_MASK BIT_12_15 // ACK Mask
#define SCB_STATUS_CX BIT_15 // CU Completed Action Cmd
#define SCB_STATUS_FR BIT_14 // RU Received A Frame
#define SCB_STATUS_CNA BIT_13 // CU Became Inactive (IDLE)
#define SCB_STATUS_RNR BIT_12 // RU Became Not Ready
#define SCB_STATUS_MDI BIT_11 // MDI read or write done
#define SCB_STATUS_SWI BIT_10 // Software generated interrupt
//- Interrupt ACK fields
#define SCB_ACK_MASK (BIT_9 | BIT_12_15 | BIT_8) // ACK Mask
#define SCB_ACK_CX BIT_15 // CU Completed Action Cmd
#define SCB_ACK_FR BIT_14 // RU Received A Frame
#define SCB_ACK_CNA BIT_13 // CU Became Inactive (IDLE)
#define SCB_ACK_RNR BIT_12 // RU Became Not Ready
#define SCB_ACK_MDI BIT_11 // MDI read or write done
#define SCB_ACK_SWI BIT_10 // Software generated interrupt
#define SCB_ACK_ER BIT_9 // Early Receive interrupt
#define SCB_ACK_FCP BIT_8 // Flow Control Pause interrupt
//- CUS Fields
#define SCB_CUS_MASK (BIT_6 | BIT_7) // CUS 2-bit Mask
#define SCB_CUS_IDLE 0 // CU Idle
#define SCB_CUS_SUSPEND BIT_6 // CU Suspended
#define SCB_CUS_ACTIVE BIT_7 // CU Active
//- RUS Fields
#define SCB_RUS_IDLE 0 // RU Idle
#define SCB_RUS_MASK BIT_2_5 // RUS 3-bit Mask
#define SCB_RUS_SUSPEND BIT_2 // RU Suspended
#define SCB_RUS_NO_RESOURCES BIT_3 // RU Out Of Resources
#define SCB_RUS_READY BIT_4 // RU Ready
#define SCB_RUS_SUSP_NO_RBDS (BIT_2 | BIT_5) // RU No More RBDs
#define SCB_RUS_NO_RBDS (BIT_3 | BIT_5) // RU No More RBDs
#define SCB_RUS_READY_NO_RBDS (BIT_4 | BIT_5) // RU Ready, No RBDs
//-------------------------------------------------------------------------
// SCB Command Word bit definitions
//-------------------------------------------------------------------------
//- CUC fields
#define SCB_CUC_MASK BIT_4_6 // CUC 3-bit Mask
#define SCB_CUC_START BIT_4 // CU Start
#define SCB_CUC_RESUME BIT_5 // CU Resume
#define SCB_CUC_DUMP_ADDR BIT_6 // CU Dump Counters Address
#define SCB_CUC_DUMP_STAT (BIT_4 | BIT_6) // CU Dump statistics counters
#define SCB_CUC_LOAD_BASE (BIT_5 | BIT_6) // Load the CU base
#define SCB_CUC_DUMP_RST_STAT BIT_4_6 // CU Dump and reset statistics counters
#define SCB_CUC_STATIC_RESUME (BIT_5 | BIT_7) // CU Static Resume
//- RUC fields
#define SCB_RUC_MASK BIT_0_2 // RUC 3-bit Mask
#define SCB_RUC_START BIT_0 // RU Start
#define SCB_RUC_RESUME BIT_1 // RU Resume
#define SCB_RUC_ABORT BIT_2 // RU Abort
#define SCB_RUC_LOAD_HDS (BIT_0 | BIT_2) // Load RFD Header Data Size
#define SCB_RUC_LOAD_BASE (BIT_1 | BIT_2) // Load the RU base
#define SCB_RUC_RBD_RESUME BIT_0_2 // RBD resume
// Interrupt fields (assuming byte addressing)
#define SCB_INT_MASK BIT_0 // Mask interrupts
#define SCB_SOFT_INT BIT_1 // Generate a software interrupt
//-------------------------------------------------------------------------
// EEPROM bit definitions
//-------------------------------------------------------------------------
//- EEPROM control register bits
#define EN_TRNF 0x10 // Enable turnoff
#define EEDO 0x08 // EEPROM data out
#define EEDI 0x04 // EEPROM data in (set for writing data)
#define EECS 0x02 // EEPROM chip select (1=high, 0=low)
#define EESK 0x01 // EEPROM shift clock (1=high, 0=low)
//- EEPROM opcodes
#define EEPROM_READ_OPCODE 06
#define EEPROM_WRITE_OPCODE 05
#define EEPROM_ERASE_OPCODE 07
#define EEPROM_EWEN_OPCODE 19 // Erase/write enable
#define EEPROM_EWDS_OPCODE 16 // Erase/write disable
//- EEPROM data locations
#define EEPROM_NODE_ADDRESS_BYTE_0 0
#define EEPROM_FLAGS_WORD_3 3
#define EEPROM_FLAG_10MC BIT_0
#define EEPROM_FLAG_100MC BIT_1
//-------------------------------------------------------------------------
// MDI Control register bit definitions
//-------------------------------------------------------------------------
#define MDI_DATA_MASK BIT_0_15 // MDI Data port
#define MDI_REG_ADDR BIT_16_20 // which MDI register to read/write
#define MDI_PHY_ADDR BIT_21_25 // which PHY to read/write
#define MDI_PHY_OPCODE BIT_26_27 // which PHY to read/write
#define MDI_PHY_READY BIT_28 // PHY is ready for another MDI cycle
#define MDI_PHY_INT_ENABLE BIT_29 // Assert INT at MDI cycle completion
//-------------------------------------------------------------------------
// MDI Control register opcode definitions
//-------------------------------------------------------------------------
#define MDI_WRITE 1 // Phy Write
#define MDI_READ 2 // Phy read
//-------------------------------------------------------------------------
// D100 Action Commands
//-------------------------------------------------------------------------
#define CB_NOP 0
#define CB_IA_ADDRESS 1
#define CB_CONFIGURE 2
#define CB_MULTICAST 3
#define CB_TRANSMIT 4
#define CB_LOAD_MICROCODE 5
#define CB_DUMP 6
#define CB_DIAGNOSE 7
//-------------------------------------------------------------------------
// Command Block (CB) Field Definitions
//-------------------------------------------------------------------------
//- CB Command Word
#define CB_EL_BIT BIT_15 // CB EL Bit
#define CB_S_BIT BIT_14 // CB Suspend Bit
#define CB_I_BIT BIT_13 // CB Interrupt Bit
#define CB_TX_SF_BIT BIT_3 // TX CB Flexible Mode
#define CB_CMD_MASK BIT_0_2 // CB 3-bit CMD Mask
//- CB Status Word
#define CB_STATUS_MASK BIT_12_15 // CB Status Mask (4-bits)
#define CB_STATUS_COMPLETE BIT_15 // CB Complete Bit
#define CB_STATUS_OK BIT_13 // CB OK Bit
#define CB_STATUS_UNDERRUN BIT_12 // CB A Bit
#define CB_STATUS_FAIL BIT_11 // CB Fail (F) Bit
//misc command bits
#define CB_TX_EOF_BIT BIT_15 // TX CB/TBD EOF Bit
//-------------------------------------------------------------------------
// Config CB Parameter Fields
//-------------------------------------------------------------------------
#define CB_CFIG_BYTE_COUNT 22 // 22 config bytes
#define CB_SHORT_CFIG_BYTE_COUNT 8 // 8 config bytes
// byte 0 bit definitions
#define CB_CFIG_BYTE_COUNT_MASK BIT_0_5 // Byte count occupies bit 5-0
// byte 1 bit definitions
#define CB_CFIG_RXFIFO_LIMIT_MASK BIT_0_4 // RxFifo limit mask
#define CB_CFIG_TXFIFO_LIMIT_MASK BIT_4_7 // TxFifo limit mask
// byte 3 bit definitions --
#define CB_CFIG_B3_MWI_ENABLE BIT_0 // Memory Write Invalidate Enable Bit
// byte 4 bit definitions
#define CB_CFIG_RX_MIN_DMA_MASK BIT_0_6 // Rx minimum DMA count mask
// byte 5 bit definitions
#define CB_CFIG_TX_MIN_DMA_MASK BIT_0_6 // Tx minimum DMA count mask
#define CB_CFIG_DMBC_EN BIT_7 // Enable Tx/Rx minimum DMA counts
// byte 6 bit definitions
#define CB_CFIG_LATE_SCB BIT_0 // Update SCB After New Tx Start
#define CB_CFIG_TNO_INT BIT_2 // Tx Not OK Interrupt
#define CB_CFIG_CI_INT BIT_3 // Command Complete Interrupt
#define CB_CFIG_SAVE_BAD_FRAMES BIT_7 // Save Bad Frames Enabled
// byte 7 bit definitions
#define CB_CFIG_DISC_SHORT_FRAMES BIT_0 // Discard Short Frames
#define CB_CFIG_URUN_RETRY BIT_1_2 // Underrun Retry Count
// byte 8 bit definitions
#define CB_CFIG_503_MII BIT_0 // 503 vs. MII mode
// byte 9 bit definitions -- pre-defined all zeros
// byte 10 bit definitions
#define CB_CFIG_NO_SRCADR BIT_3 // No Source Address Insertion
#define CB_CFIG_PREAMBLE_LEN BIT_4_5 // Preamble Length
#define CB_CFIG_LOOPBACK_MODE BIT_6_7 // Loopback Mode
// byte 11 bit definitions
#define CB_CFIG_LINEAR_PRIORITY BIT_0_2 // Linear Priority
// byte 12 bit definitions
#define CB_CFIG_LINEAR_PRI_MODE BIT_0 // Linear Priority mode
#define CB_CFIG_IFS_MASK BIT_4_7 // CSMA level Interframe Spacing mask
// byte 13 bit definitions -- pre-defined all zeros
// byte 14 bit definitions -- pre-defined 0xf2
// byte 15 bit definitions
#define CB_CFIG_PROMISCUOUS BIT_0 // Promiscuous Mode Enable
#define CB_CFIG_BROADCAST_DIS BIT_1 // Broadcast Mode Disable
#define CB_CFIG_CRS_OR_CDT BIT_7 // CRS Or CDT
// byte 16 bit definitions -- pre-defined all zeros
// byte 17 bit definitions -- pre-defined 0x40
// byte 18 bit definitions
#define CB_CFIG_STRIPPING BIT_0 // Stripping Disabled
#define CB_CFIG_PADDING BIT_1 // Padding Disabled
#define CB_CFIG_CRC_IN_MEM BIT_2 // Transfer CRC To Memory
// byte 19 bit definitions
#define CB_CFIG_FORCE_FDX BIT_6 // Force Full Duplex
#define CB_CFIG_FDX_ENABLE BIT_7 // Full Duplex Enabled
// byte 20 bit definitions
#define CB_CFIG_MULTI_IA BIT_6 // Multiple IA Addr
// byte 21 bit definitions
#define CB_CFIG_MULTICAST_ALL BIT_3 // Multicast All
//-------------------------------------------------------------------------
// Receive Frame Descriptor Fields
//-------------------------------------------------------------------------
//- RFD Status Bits
#define RFD_RECEIVE_COLLISION BIT_0 // Collision detected on Receive
#define RFD_IA_MATCH BIT_1 // Indv Address Match Bit
#define RFD_RX_ERR BIT_4 // RX_ERR pin on Phy was set
#define RFD_FRAME_TOO_SHORT BIT_7 // Receive Frame Short
#define RFD_DMA_OVERRUN BIT_8 // Receive DMA Overrun
#define RFD_NO_RESOURCES BIT_9 // No Buffer Space
#define RFD_ALIGNMENT_ERROR BIT_10 // Alignment Error
#define RFD_CRC_ERROR BIT_11 // CRC Error
#define RFD_STATUS_OK BIT_13 // RFD OK Bit
#define RFD_STATUS_COMPLETE BIT_15 // RFD Complete Bit
//- RFD Command Bits
#define RFD_EL_BIT BIT_15 // RFD EL Bit
#define RFD_S_BIT BIT_14 // RFD Suspend Bit
#define RFD_H_BIT BIT_4 // Header RFD Bit
#define RFD_SF_BIT BIT_3 // RFD Flexible Mode
//- RFD misc bits
#define RFD_EOF_BIT BIT_15 // RFD End-Of-Frame Bit
#define RFD_F_BIT BIT_14 // RFD Buffer Fetch Bit
#define RFD_ACT_COUNT_MASK BIT_0_13 // RFD Actual Count Mask
#define RFD_HEADER_SIZE 0x10 // Size of RFD Header (16 bytes)
//-------------------------------------------------------------------------
// Receive Buffer Descriptor Fields
//-------------------------------------------------------------------------
#define RBD_EOF_BIT BIT_15 // RBD End-Of-Frame Bit
#define RBD_F_BIT BIT_14 // RBD Buffer Fetch Bit
#define RBD_ACT_COUNT_MASK BIT_0_13 // RBD Actual Count Mask
#define SIZE_FIELD_MASK BIT_0_13 // Size of the associated buffer
#define RBD_EL_BIT BIT_15 // RBD EL Bit
//-------------------------------------------------------------------------
// Size Of Dump Buffer
//-------------------------------------------------------------------------
#define DUMP_BUFFER_SIZE 600 // size of the dump buffer
//-------------------------------------------------------------------------
// Self Test Results
//-------------------------------------------------------------------------
#define CB_SELFTEST_FAIL_BIT BIT_12
#define CB_SELFTEST_DIAG_BIT BIT_5
#define CB_SELFTEST_REGISTER_BIT BIT_3
#define CB_SELFTEST_ROM_BIT BIT_2
#define CB_SELFTEST_ERROR_MASK ( \
CB_SELFTEST_FAIL_BIT | CB_SELFTEST_DIAG_BIT | \ CB_SELFTEST_REGISTER_BIT | CB_SELFTEST_ROM_BIT)
//-------------------------------------------------------------------------
// Driver Configuration Default Parameters for the 557
// Note: If the driver uses any defaults that are different from the chip's
// defaults, it will be noted below
//-------------------------------------------------------------------------
// Byte 0 (byte count) default
#define CB_557_CFIG_DEFAULT_PARM0 CB_CFIG_BYTE_COUNT
// Byte 1 (fifo limits) default
#define DEFAULT_TX_FIFO_LIMIT 0x08
#define DEFAULT_RX_FIFO_LIMIT 0x08
#define CB_557_CFIG_DEFAULT_PARM1 0x88
// Byte 2 (IFS) default
#define CB_557_CFIG_DEFAULT_PARM2 0x00
// Byte 3 (reserved) default
#define CB_557_CFIG_DEFAULT_PARM3 0x00
// Byte 4 (Rx DMA min count) default
#define CB_557_CFIG_DEFAULT_PARM4 0x00
// Byte 5 (Tx DMA min count, DMA min count enable) default
#define CB_557_CFIG_DEFAULT_PARM5 0x00
// Byte 6 (Late SCB, TNO int, CI int, Save bad frames) default
#define CB_557_CFIG_DEFAULT_PARM6 0x32
// Byte 7 (Discard short frames, underrun retry) default
// note: disc short frames will be enabled
#define DEFAULT_UNDERRUN_RETRY 0x01
#define CB_557_CFIG_DEFAULT_PARM7 0x01
// Byte 8 (MII or 503) default
// note: MII will be the default
#define CB_557_CFIG_DEFAULT_PARM8 0x01
// Byte 9 - Power management for 82558B, 82559
#define CB_WAKE_ON_LINK_BYTE9 0x20
#define CB_WAKE_ON_ARP_PKT_BYTE9 0x40
#define CB_557_CFIG_DEFAULT_PARM9 0
// Byte 10 (scr addr insertion, preamble, loopback) default
#define CB_557_CFIG_DEFAULT_PARM10 0x2e
// Byte 11 (linear priority) default
#define CB_557_CFIG_DEFAULT_PARM11 0x00
// Byte 12 (IFS,linear priority mode) default
#define CB_557_CFIG_DEFAULT_PARM12 0x60
// Byte 13 (reserved) default
#define CB_557_CFIG_DEFAULT_PARM13 0x00
// Byte 14 (reserved) default
#define CB_557_CFIG_DEFAULT_PARM14 0xf2
// Byte 15 (promiscuous, broadcast, CRS/CDT) default
#define CB_557_CFIG_DEFAULT_PARM15 0xea
// Byte 16 (reserved) default
#define CB_557_CFIG_DEFAULT_PARM16 0x00
// Byte 17 (reserved) default
#define CB_557_CFIG_DEFAULT_PARM17 0x40
// Byte 18 (Stripping, padding, Rcv CRC in mem) default
// note: padding will be enabled
#define CB_557_CFIG_DEFAULT_PARM18 0xf2
// Byte 19 (reserved) default
// note: full duplex is enabled if FDX# pin is 0
#define CB_557_CFIG_DEFAULT_PARM19 0x80
// Byte 20 (multi-IA) default
#define CB_557_CFIG_DEFAULT_PARM20 0x3f
// Byte 21 (multicast all) default
#define CB_557_CFIG_DEFAULT_PARM21 0x05
#pragma pack(1)
//-------------------------------------------------------------------------
// Ethernet Frame Structure
//-------------------------------------------------------------------------
//- Ethernet 6-byte Address
typedef struct _ETH_ADDRESS_STRUC { UCHAR EthNodeAddress[ETHERNET_ADDRESS_LENGTH]; } ETH_ADDRESS_STRUC, *PETH_ADDRESS_STRUC;
//- Ethernet 14-byte Header
typedef struct _ETH_HEADER_STRUC { UCHAR Destination[ETHERNET_ADDRESS_LENGTH]; UCHAR Source[ETHERNET_ADDRESS_LENGTH]; USHORT TypeLength; } ETH_HEADER_STRUC, *PETH_HEADER_STRUC;
//- Ethernet Buffer (Including Ethernet Header) for Transmits
typedef struct _ETH_TX_BUFFER_STRUC { ETH_HEADER_STRUC TxMacHeader; UCHAR TxBufferData[(TCB_BUFFER_SIZE - sizeof(ETH_HEADER_STRUC))]; } ETH_TX_BUFFER_STRUC, *PETH_TX_BUFFER_STRUC;
typedef struct _ETH_RX_BUFFER_STRUC { ETH_HEADER_STRUC RxMacHeader; UCHAR RxBufferData[(RCB_BUFFER_SIZE - sizeof(ETH_HEADER_STRUC))]; } ETH_RX_BUFFER_STRUC, *PETH_RX_BUFFER_STRUC;
//-------------------------------------------------------------------------
// 82557 Data Structures
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
// Self test
//-------------------------------------------------------------------------
typedef struct _SELF_TEST_STRUC { ULONG StSignature; // Self Test Signature
ULONG StResults; // Self Test Results
} SELF_TEST_STRUC, *PSELF_TEST_STRUC;
//-------------------------------------------------------------------------
// Control/Status Registers (CSR)
//-------------------------------------------------------------------------
typedef struct _CSR_STRUC { USHORT ScbStatus; // SCB Status register
UCHAR ScbCommandLow; // SCB Command register (low byte)
UCHAR ScbCommandHigh; // SCB Command register (high byte)
ULONG ScbGeneralPointer; // SCB General pointer
ULONG Port; // PORT register
USHORT FlashControl; // Flash Control register
USHORT EepromControl; // EEPROM control register
ULONG MDIControl; // MDI Control Register
ULONG RxDMAByteCount; // Receive DMA Byte count register
} CSR_STRUC, *PCSR_STRUC;
//-------------------------------------------------------------------------
// Error Counters
//-------------------------------------------------------------------------
typedef struct _ERR_COUNT_STRUC { ULONG XmtGoodFrames; // Good frames transmitted
ULONG XmtMaxCollisions; // Fatal frames -- had max collisions
ULONG XmtLateCollisions; // Fatal frames -- had a late coll.
ULONG XmtUnderruns; // Transmit underruns (fatal or re-transmit)
ULONG XmtLostCRS; // Frames transmitted without CRS
ULONG XmtDeferred; // Deferred transmits
ULONG XmtSingleCollision; // Transmits that had 1 and only 1 coll.
ULONG XmtMultCollisions; // Transmits that had multiple coll.
ULONG XmtTotalCollisions; // Transmits that had 1+ collisions.
ULONG RcvGoodFrames; // Good frames received
ULONG RcvCrcErrors; // Aligned frames that had a CRC error
ULONG RcvAlignmentErrors; // Receives that had alignment errors
ULONG RcvResourceErrors; // Good frame dropped due to lack of resources
ULONG RcvOverrunErrors; // Overrun errors - bus was busy
ULONG RcvCdtErrors; // Received frames that encountered coll.
ULONG RcvShortFrames; // Received frames that were to short
ULONG CommandComplete; // A005h indicates cmd completion
} ERR_COUNT_STRUC, *PERR_COUNT_STRUC;
//-------------------------------------------------------------------------
// Command Block (CB) Generic Header Structure
//-------------------------------------------------------------------------
typedef struct _CB_HEADER_STRUC { USHORT CbStatus; // Command Block Status
USHORT CbCommand; // Command Block Command
ULONG CbLinkPointer; // Link To Next CB
} CB_HEADER_STRUC, *PCB_HEADER_STRUC;
//-------------------------------------------------------------------------
// NOP Command Block (NOP_CB)
//-------------------------------------------------------------------------
typedef struct _NOP_CB_STRUC { CB_HEADER_STRUC NopCBHeader; } NOP_CB_STRUC, *PNOP_CB_STRUC;
//-------------------------------------------------------------------------
// Individual Address Command Block (IA_CB)
//-------------------------------------------------------------------------
typedef struct _IA_CB_STRUC { CB_HEADER_STRUC IaCBHeader; UCHAR IaAddress[ETHERNET_ADDRESS_LENGTH]; } IA_CB_STRUC, *PIA_CB_STRUC;
//-------------------------------------------------------------------------
// Configure Command Block (CONFIG_CB)
//-------------------------------------------------------------------------
typedef struct _CONFIG_CB_STRUC { CB_HEADER_STRUC ConfigCBHeader; UCHAR ConfigBytes[CB_CFIG_BYTE_COUNT]; } CONFIG_CB_STRUC, *PCONFIG_CB_STRUC;
//-------------------------------------------------------------------------
// MultiCast Command Block (MULTICAST_CB)
//-------------------------------------------------------------------------
typedef struct _MULTICAST_CB_STRUC { CB_HEADER_STRUC McCBHeader; USHORT McCount; // Number of multicast addresses
UCHAR McAddress[(ETHERNET_ADDRESS_LENGTH * MAX_MULTICAST_ADDRESSES)]; } MULTICAST_CB_STRUC, *PMULTICAST_CB_STRUC;
//-------------------------------------------------------------------------
// WakeUp Filter Command Block (FILTER_CB)
//-------------------------------------------------------------------------
typedef struct _FILTER_CB_STRUC { CB_HEADER_STRUC FilterCBHeader; ULONG Pattern[16]; }FILTER_CB_STRUC , *PFILTER_CB_STRUC ;
//-------------------------------------------------------------------------
// Dump Command Block (DUMP_CB)
//-------------------------------------------------------------------------
typedef struct _DUMP_CB_STRUC { CB_HEADER_STRUC DumpCBHeader; ULONG DumpAreaAddress; // Dump Buffer Area Address
} DUMP_CB_STRUC, *PDUMP_CB_STRUC;
//-------------------------------------------------------------------------
// Dump Area structure definition
//-------------------------------------------------------------------------
typedef struct _DUMP_AREA_STRUC { UCHAR DumpBuffer[DUMP_BUFFER_SIZE]; } DUMP_AREA_STRUC, *PDUMP_AREA_STRUC;
//-------------------------------------------------------------------------
// Diagnose Command Block (DIAGNOSE_CB)
//-------------------------------------------------------------------------
typedef struct _DIAGNOSE_CB_STRUC { CB_HEADER_STRUC DiagCBHeader; } DIAGNOSE_CB_STRUC, *PDIAGNOSE_CB_STRUC;
//-------------------------------------------------------------------------
// Transmit Command Block (TxCB)
//-------------------------------------------------------------------------
typedef struct _GENERIC_TxCB { CB_HEADER_STRUC TxCbHeader; ULONG TxCbTbdPointer; // TBD address
USHORT TxCbCount; // Data Bytes In TCB past header
UCHAR TxCbThreshold; // TX Threshold for FIFO Extender
UCHAR TxCbTbdNumber; ETH_TX_BUFFER_STRUC TxCbData; ULONG pad0; ULONG pad1; ULONG pad2; ULONG pad3; } TXCB_STRUC, *PTXCB_STRUC;
//-------------------------------------------------------------------------
// Transmit Buffer Descriptor (TBD)
//-------------------------------------------------------------------------
typedef struct _TBD_STRUC { ULONG TbdBufferAddress; // Physical Transmit Buffer Address
unsigned TbdCount :14; unsigned :1 ; // always 0
unsigned EndOfList:1 ; // EL bit in Tbd
unsigned :16; // field that is always 0's in a TBD
} TBD_STRUC, *PTBD_STRUC;
//-------------------------------------------------------------------------
// Receive Frame Descriptor (RFD)
//-------------------------------------------------------------------------
typedef struct _RFD_STRUC { CB_HEADER_STRUC RfdCbHeader; ULONG RfdRbdPointer; // Receive Buffer Descriptor Addr
USHORT RfdActualCount; // Number Of Bytes Received
USHORT RfdSize; // Number Of Bytes In RFD
ETH_RX_BUFFER_STRUC RfdBuffer; // Data buffer in RFD
} RFD_STRUC, *PRFD_STRUC;
//-------------------------------------------------------------------------
// Receive Buffer Descriptor (RBD)
//-------------------------------------------------------------------------
typedef struct _RBD_STRUC { USHORT RbdActualCount; // Number Of Bytes Received
USHORT RbdFiller; ULONG RbdLinkAddress; // Link To Next RBD
ULONG RbdRcbAddress; // Receive Buffer Address
USHORT RbdSize; // Receive Buffer Size
USHORT RbdFiller1; } RBD_STRUC, *PRBD_STRUC;
#pragma pack()
//-------------------------------------------------------------------------
// 82557 PCI Register Definitions
// Refer To The PCI Specification For Detailed Explanations
//-------------------------------------------------------------------------
//- Register Offsets
#define PCI_VENDOR_ID_REGISTER 0x00 // PCI Vendor ID Register
#define PCI_DEVICE_ID_REGISTER 0x02 // PCI Device ID Register
#define PCI_CONFIG_ID_REGISTER 0x00 // PCI Configuration ID Register
#define PCI_COMMAND_REGISTER 0x04 // PCI Command Register
#define PCI_STATUS_REGISTER 0x06 // PCI Status Register
#define PCI_REV_ID_REGISTER 0x08 // PCI Revision ID Register
#define PCI_CLASS_CODE_REGISTER 0x09 // PCI Class Code Register
#define PCI_CACHE_LINE_REGISTER 0x0C // PCI Cache Line Register
#define PCI_LATENCY_TIMER 0x0D // PCI Latency Timer Register
#define PCI_HEADER_TYPE 0x0E // PCI Header Type Register
#define PCI_BIST_REGISTER 0x0F // PCI Built-In SelfTest Register
#define PCI_BAR_0_REGISTER 0x10 // PCI Base Address Register 0
#define PCI_BAR_1_REGISTER 0x14 // PCI Base Address Register 1
#define PCI_BAR_2_REGISTER 0x18 // PCI Base Address Register 2
#define PCI_BAR_3_REGISTER 0x1C // PCI Base Address Register 3
#define PCI_BAR_4_REGISTER 0x20 // PCI Base Address Register 4
#define PCI_BAR_5_REGISTER 0x24 // PCI Base Address Register 5
#define PCI_SUBVENDOR_ID_REGISTER 0x2C // PCI SubVendor ID Register
#define PCI_SUBDEVICE_ID_REGISTER 0x2E // PCI SubDevice ID Register
#define PCI_EXPANSION_ROM 0x30 // PCI Expansion ROM Base Register
#define PCI_INTERRUPT_LINE 0x3C // PCI Interrupt Line Register
#define PCI_INTERRUPT_PIN 0x3D // PCI Interrupt Pin Register
#define PCI_MIN_GNT_REGISTER 0x3E // PCI Min-Gnt Register
#define PCI_MAX_LAT_REGISTER 0x3F // PCI Max_Lat Register
#define PCI_NODE_ADDR_REGISTER 0x40 // PCI Node Address Register
//-------------------------------------------------------------------------
// PHY 100 MDI Register/Bit Definitions
//-------------------------------------------------------------------------
// MDI register set
#define MDI_CONTROL_REG 0x00 // MDI control register
#define MDI_STATUS_REG 0x01 // MDI Status regiser
#define PHY_ID_REG_1 0x02 // Phy indentification reg (word 1)
#define PHY_ID_REG_2 0x03 // Phy indentification reg (word 2)
#define AUTO_NEG_ADVERTISE_REG 0x04 // Auto-negotiation advertisement
#define AUTO_NEG_LINK_PARTNER_REG 0x05 // Auto-negotiation link partner ability
#define AUTO_NEG_EXPANSION_REG 0x06 // Auto-negotiation expansion
#define AUTO_NEG_NEXT_PAGE_REG 0x07 // Auto-negotiation next page transmit
#define EXTENDED_REG_0 0x10 // Extended reg 0 (Phy 100 modes)
#define EXTENDED_REG_1 0x14 // Extended reg 1 (Phy 100 error indications)
#define NSC_CONG_CONTROL_REG 0x17 // National (TX) congestion control
#define NSC_SPEED_IND_REG 0x19 // National (TX) speed indication
#define PHY_EQUALIZER_REG 0x1A // Register for the Phy Equalizer values
// MDI Control register bit definitions
#define MDI_CR_COLL_TEST_ENABLE BIT_7 // Collision test enable
#define MDI_CR_FULL_HALF BIT_8 // FDX =1, half duplex =0
#define MDI_CR_RESTART_AUTO_NEG BIT_9 // Restart auto negotiation
#define MDI_CR_ISOLATE BIT_10 // Isolate PHY from MII
#define MDI_CR_POWER_DOWN BIT_11 // Power down
#define MDI_CR_AUTO_SELECT BIT_12 // Auto speed select enable
#define MDI_CR_10_100 BIT_13 // 0 = 10Mbs, 1 = 100Mbs
#define MDI_CR_LOOPBACK BIT_14 // 0 = normal, 1 = loopback
#define MDI_CR_RESET BIT_15 // 0 = normal, 1 = PHY reset
// MDI Status register bit definitions
#define MDI_SR_EXT_REG_CAPABLE BIT_0 // Extended register capabilities
#define MDI_SR_JABBER_DETECT BIT_1 // Jabber detected
#define MDI_SR_LINK_STATUS BIT_2 // Link Status -- 1 = link
#define MDI_SR_AUTO_SELECT_CAPABLE BIT_3 // Auto speed select capable
#define MDI_SR_REMOTE_FAULT_DETECT BIT_4 // Remote fault detect
#define MDI_SR_AUTO_NEG_COMPLETE BIT_5 // Auto negotiation complete
#define MDI_SR_10T_HALF_DPX BIT_11 // 10BaseT Half Duplex capable
#define MDI_SR_10T_FULL_DPX BIT_12 // 10BaseT full duplex capable
#define MDI_SR_TX_HALF_DPX BIT_13 // TX Half Duplex capable
#define MDI_SR_TX_FULL_DPX BIT_14 // TX full duplex capable
#define MDI_SR_T4_CAPABLE BIT_15 // T4 capable
// Auto-Negotiation advertisement register bit definitions
#define NWAY_AD_SELCTOR_FIELD BIT_0_4 // identifies supported protocol
#define NWAY_AD_ABILITY BIT_5_12 // technologies that are supported
#define NWAY_AD_10T_HALF_DPX BIT_5 // 10BaseT Half Duplex capable
#define NWAY_AD_10T_FULL_DPX BIT_6 // 10BaseT full duplex capable
#define NWAY_AD_TX_HALF_DPX BIT_7 // TX Half Duplex capable
#define NWAY_AD_TX_FULL_DPX BIT_8 // TX full duplex capable
#define NWAY_AD_T4_CAPABLE BIT_9 // T4 capable
#define NWAY_AD_REMOTE_FAULT BIT_13 // indicates local remote fault
#define NWAY_AD_RESERVED BIT_14 // reserved
#define NWAY_AD_NEXT_PAGE BIT_15 // Next page (not supported)
// Auto-Negotiation link partner ability register bit definitions
#define NWAY_LP_SELCTOR_FIELD BIT_0_4 // identifies supported protocol
#define NWAY_LP_ABILITY BIT_5_9 // technologies that are supported
#define NWAY_LP_REMOTE_FAULT BIT_13 // indicates partner remote fault
#define NWAY_LP_ACKNOWLEDGE BIT_14 // acknowledge
#define NWAY_LP_NEXT_PAGE BIT_15 // Next page (not supported)
// Auto-Negotiation expansion register bit definitions
#define NWAY_EX_LP_NWAY BIT_0 // link partner is NWAY
#define NWAY_EX_PAGE_RECEIVED BIT_1 // link code word received
#define NWAY_EX_NEXT_PAGE_ABLE BIT_2 // local is next page able
#define NWAY_EX_LP_NEXT_PAGE_ABLE BIT_3 // partner is next page able
#define NWAY_EX_PARALLEL_DET_FLT BIT_4 // parallel detection fault
#define NWAY_EX_RESERVED BIT_5_15 // reserved
// PHY 100 Extended Register 0 bit definitions
#define PHY_100_ER0_FDX_INDIC BIT_0 // 1 = FDX, 0 = half duplex
#define PHY_100_ER0_SPEED_INDIC BIT_1 // 1 = 100mbs, 0= 10mbs
#define PHY_100_ER0_WAKE_UP BIT_2 // Wake up DAC
#define PHY_100_ER0_RESERVED BIT_3_4 // Reserved
#define PHY_100_ER0_REV_CNTRL BIT_5_7 // Revsion control (A step = 000)
#define PHY_100_ER0_FORCE_FAIL BIT_8 // Force Fail is enabled
#define PHY_100_ER0_TEST BIT_9_13 // Revsion control (A step = 000)
#define PHY_100_ER0_LINKDIS BIT_14 // Link integrity test is disabled
#define PHY_100_ER0_JABDIS BIT_15 // Jabber function is disabled
// PHY 100 Extended Register 1 bit definitions
#define PHY_100_ER1_RESERVED BIT_0_8 // Reserved
#define PHY_100_ER1_CH2_DET_ERR BIT_9 // Channel 2 EOF detection error
#define PHY_100_ER1_MANCH_CODE_ERR BIT_10 // Manchester code error
#define PHY_100_ER1_EOP_ERR BIT_11 // EOP error
#define PHY_100_ER1_BAD_CODE_ERR BIT_12 // bad code error
#define PHY_100_ER1_INV_CODE_ERR BIT_13 // invalid code error
#define PHY_100_ER1_DC_BAL_ERR BIT_14 // DC balance error
#define PHY_100_ER1_PAIR_SKEW_ERR BIT_15 // Pair skew error
// PHY TX Register/Bit definitions
#define PHY_TX_STATUS_CTRL_REG 0x10
#define PHY_TX_POLARITY_MASK BIT_8 // register 10h bit 8 (the polarity bit)
#define PHY_TX_NORMAL_POLARITY 0 // register 10h bit 8 =0 (normal polarity)
#define PHY_TX_SPECIAL_CTRL_REG 0x11
#define AUTO_POLARITY_DISABLE BIT_4 // register 11h bit 4 (0=enable, 1=disable)
#define PHY_TX_REG_18 0x18 // Error counter register
// National Semiconductor TX phy congestion control register bit definitions
#define NSC_TX_CONG_TXREADY BIT_10 // Makes TxReady an input
#define NSC_TX_CONG_ENABLE BIT_8 // Enables congestion control
#define NSC_TX_CONG_F_CONNECT BIT_5 // Enables congestion control
// National Semiconductor TX phy speed indication register bit definitions
#define NSC_TX_SPD_INDC_SPEED BIT_6 // 0 = 100mb, 1=10mb
#endif // _E100_557_H
|