diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/ndis/ieepro/eprohw.h | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/private/ntos/ndis/ieepro/eprohw.h b/private/ntos/ndis/ieepro/eprohw.h new file mode 100644 index 000000000..fb1678e66 --- /dev/null +++ b/private/ntos/ndis/ieepro/eprohw.h @@ -0,0 +1,202 @@ +#ifndef _IEPROHW_ +#define _IEPROHW_ + +#define EPRO_LENGTH_OF_ADDRESS 6 + +//////////////////////////////////////////////////////////// +// Bank Switches +//////////////////////////////////////////////////////////// +#define EPRO_GOTO_B0 EPRO_WRITE_UCHAR(epro_cmd_reg, EPRO_CMD_BANK0) +#define EPRO_GOTO_B1 EPRO_WRITE_UCHAR(epro_cmd_reg, EPRO_CMD_BANK1) +#define EPRO_GOTO_B2 EPRO_WRITE_UCHAR(epro_cmd_reg, EPRO_CMD_BANK2) + +//////////////////////////////////////////////////////////// +// Port I/O +//////////////////////////////////////////////////////////// +#define EPRO_READ_UCHAR(_Port, _pValue) \ + NdisRawReadPortUchar( \ + (ULONG)(_Port), \ + (PUCHAR)(_pValue) \ + ) + +#define EPRO_READ_USHORT(_Port, _pValue) \ + NdisRawReadPortUshort( \ + (ULONG)(_Port), \ + (PUSHORT)(_pValue) \ + ) + +#define EPRO_WRITE_UCHAR(_Port, _Value) \ + NdisRawWritePortUchar( \ + (ULONG)(_Port), \ + (UCHAR) (_Value) \ + ) + +//////////////////////////////////////////////////////////// +// Command Macros +// Care must be taken to ensure you are in the right bank +//////////////////////////////////////////////////////////// + +// Memory I/O +#define EPRO_MEM_READADDR(_pValue) \ + EPRO_READ_USHORT(EPro_IOBaseAddress + EPRO_HOST_ADDR_REG, _pValue) + +#define EPRO_MEM_WRITEADDR(_Value) \ + EPRO_WRITE_USHORT(EPro_IOBaseAddress + EPRO_HOST_ADDR_REG, Value) + +#define EPRO_MEM_READSHORT(_pValue) \ + EPRO_READ_USHORT(EPro_IOBaseAddress + EPRO_MEM_IO_REG) + +#define EPRO_MEM_WRITESHORT(_Value) \ + EPRO_WRITE_USHORT(EPro_IOBaseAddress + EPRO_MEM_IO_REG) + +//BOOLEAN EProMemcpyW(void *pMainMemSrc_, void *OnBoardDest_, UINT count); +//BOOLEAN EProMemcpyR(void *OnBoardSrc_, void *pMainMemDest_, UINT count); + +//////////////////////////////////////////////////////////// +// TX Defines +//////////////////////////////////////////////////////////// +#define EPRO_NUM_TX_BUFFERS 30 +#define EPRO_TX_FIRST_BUF_START 0 + +// 1514 bytes ethernet frame +// 16 bytes epro header +// 2 bytes pad for word alignment +//#define EPRO_BUFFER_LEN 1532 + +#define EPRO_TRANSMIT_HEADER_SHORT1 (USHORT)I82595_XMT +#define EPRO_TRANSMIT_HEADER_SHORT2 (USHORT)0x0 + +//////////////////////////////////////////////////////////// +// +//////////////////////////////////////////////////////////// + +#define EPRO_REGISTRY_INTERRUPT_STRING NDIS_STRING_CONST("INTERRUPT") +#define EPRO_REGISTRY_IOADDRESS_STRING NDIS_STRING_CONST("IOADDRESS") +#define EPRO_REGISTRY_OLDIOADDRESS_STRING NDIS_STRING_CONST("OLDIOADDRESS") +#define EPRO_REGISTRY_BUSTYPE_STRING NDIS_STRING_CONST("BusType") +#define EPRO_REGISTRY_TRANSCEIVER_STRING NDIS_STRING_CONST("Transceiver") +#define EPRO_REGISTRY_IOCHRDY_STRING NDIS_STRING_CONST("IoChannelReady") + +#define EPRO_IOCHRDY_EARLY 0x01 +#define EPRO_IOCHRDY_LATE 0x02 +#define EPRO_IOCHRDY_NEVER 0x03 +#define EPRO_IOCHRDY_AUTO 0x04 + +//////////////////////////////////////////////////////////// +// Capabilities/Statistics about the EPRO card +//////////////////////////////////////////////////////////// + +#define EPRO_VENDOR_ID_L 0x00 +#define EPRO_VENDOR_ID_M 0xaa +#define EPRO_VENDOR_ID_H 0x00 + +#define EPRO_GEN_MEDIA_SUPPORTED NdisMedium802_3 +#define EPRO_GEN_MEDIA_IN_USE NdisMedium802_3 +#define EPRO_GEN_MAXIMUM_LOKAHEAD 256 +#define EPRO_GEN_MAXIMUM_FRAME_SIZE 1500 +#define EPRO_GEN_MAXIMUM_TOTAL_SIZE 1514 +#define EPRO_MAX_MULTICAST 64 +#define EPRO_GEN_MAC_OPTIONS (NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA | \ + NDIS_MAC_OPTION_RECEIVE_SERIALIZED | \ + NDIS_MAC_OPTION_NO_LOOPBACK) +#define EPRO_GEN_LINK_SPEED 100000 +#define EPRO_GEN_RECEIVE_BUFFER_SPACE (0x8000 - 0x3000) +#define EPRO_TX_BUF_SIZE 1514 +#define EPRO_RX_BUF_SIZE 0 +#define EPRO_GEN_TRANSMIT_BUFFER_SPACE EPRO_TX_BUF_SIZE * EPRO_NUM_TX_BUFFERS +#define EPRO_VENDOR_DESC "Intel EtherExpress PRO" + + +//////////////////////////////////////////////////////////// +// EPro EEPROM defines +//////////////////////////////////////////////////////////// +#define EPRO_SK_STALL_TIME 1000 // use 1000 microsecs + +#define EPRO_ETHERNET_ADDR_H 0x2 +#define EPRO_ETHERNET_ADDR_M 0x3 +#define EPRO_ETHERNET_ADDR_L 0x4 + +#define EPRO_EEPROM_CONFIG_OFFSET 0 +#define EPRO_EEPROM_CONFIG1_OFFSET 1 + +// word 0 on the eeprom +#define EPRO_EEPROM_IOADDR_BITPOS 0x0a // bits 10-15 +#define EPRO_EEPROM_IOADDR_MASK 0xfc00 +#define EPRO_EEPROM_AUTO_IO_ENABLE_MASK 0x0040 +#define EPRO_EEPROM_HOST_BUS_WD_MASK 0x0004 +#define EPRO_EEPROM_PNP_ENABLE_MASK 0x0001 + +// word 1 on the eeprom. RM: Due to chenges for eeprom stepping 4, we +// have additional masks. For simplicity's sake, stepping 4 masks +// are prefixed with the '4' (even if there is no other stepping +// equivalent INT for that IRQ). +#define EPRO_EEPROM_IRQ_MASK 0x000f +#define EPRO_EEPROM_IRQ_2_MASK 0x0 +#define EPRO_EEPROM_IRQ_3_MASK 0x1 +#define EPRO_EEPROM4_IRQ_3_MASK 0x0 +#define EPRO_EEPROM4_IRQ_4_MASK 0x1 +#define EPRO_EEPROM_IRQ_5_MASK 0x2 +#define EPRO_EEPROM4_IRQ_7_MASK 0x3 +#define EPRO_EEPROM4_IRQ_9_MASK 0x4 +#define EPRO_EEPROM_IRQ_10_MASK 0x3 +#define EPRO_EEPROM4_IRQ_10_MASK 0x5 +#define EPRO_EEPROM_IRQ_11_MASK 0x4 +#define EPRO_EEPROM4_IRQ_11_MASK 0x6 +#define EPRO_EEPROM4_IRQ_12_MASK 0x7 + + +//////////////////////////////////////////////////////////// +// TX/RX buffers +//////////////////////////////////////////////////////////// +#define EPRO_TX_LOWER_LIMIT 0x00 +#define EPRO_TX_UPPER_LIMIT 0x27 + +#define EPRO_TX_LOWER_LIMIT_SHORT 0x0000 +#define EPRO_TX_UPPER_LIMIT_SHORT 0x2800 + +#define EPRO_RX_LOWER_LIMIT 0x28 +#define EPRO_RX_UPPER_LIMIT 0x7f + +#define EPRO_RX_LOWER_LIMIT_SHORT 0x2800 +#define EPRO_RX_UPPER_LIMIT_SHORT 0x8000 + +//////////////////////////////////////////////////////////// +// Configuration Defaults +//////////////////////////////////////////////////////////// +//#define EPRO_CONFIG_1 0xa0 // a0 +#define EPRO_CONFIG_1 0xe0 // a0 +#define EPRO_CONFIG_2 0x16 // no broadcast + +// 4 different ones depending on the transceiver setting... +#define EPRO_CONFIG_3_AUI 0x10 +#define EPRO_CONFIG_3_BNC 0x34 +#define EPRO_CONFIG_3_TPE 0x14 +#define EPRO_CONFIG_3_AUTO 0x00 + +#define EPRO_NO_RX_STP_INTERRUPTS 0x01 +#define EPRO_NO_RX_INTERRUPTS 0x02 +#define EPRO_NO_TX_INTERRUPTS 0x04 +#define EPRO_NO_EXEC_INTERRUPTS 0x08 + +#define EPRO_DEFAULT_INTERRUPTS 0x09 // RX and TX +#define EPRO_ALL_INTERRUPTS 0x0f +#define EPRO_RX_TX_EXE_INTERRUPTS 0x01 + +//////////////////////////////////////////////////////////// +// Various states for our ISR +//////////////////////////////////////////////////////////// +#define EPRO_INT_NONE_PENDING 0 +//#define EPRO_INT_IN_SETUP 1 +//#define EPRO_INT_RESET_PENDING 2 +//#define EPRO_INT_SET_PENDING 3 +#define EPRO_INT_MC_SET_PENDING 4 + +//////////////////////////////////////////////////////////// +// +//////////////////////////////////////////////////////////// +// How long do we wait for a TX to free up before we +// consider ourselves hung? +#define EPRO_TX_TIMEOUT 10000 // 10000 usec right now + +#endif // _IEPROHW_ + |