Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

202 lines
6.8 KiB

#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_