mirror of https://github.com/lianthony/NT4.0
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.
333 lines
9.2 KiB
333 lines
9.2 KiB
#define ELNK3_3C529_10BASET_MCA_ID 0x627c
|
|
#define ELNK3_3C529_10BASE2_MCA_ID 0x627d
|
|
#define ELNK3_3C529_TPONLY_MCA_ID 0x627f
|
|
|
|
#define ELNK3_3C579_EISA_ID 0x92506d50
|
|
#define ELNK3_3C509_EISA_ID 0x90506d50
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define IDCMD_WAIT 0x00 /* Go to ID_WAIT state, actually 0 to 0x7f */
|
|
#define IDCMD_READ_PROM 0x80 /* Read EEPROM word n, n is last six bits */
|
|
/* of command */
|
|
#define IDCMD_RESET 0xC0 /* Global reset, same as power on reset */
|
|
#define IDCMD_SET_TAG 0xD0 /* Set Adapter tag to value in last 3 bits */
|
|
#define IDCMD_TEST_TAG 0xD8 /* Test Adapter tag by value in last 3 bits */
|
|
#define MAXTAG 7
|
|
#define IDCMD_ACTIVATE 0xE0 /* Activate adapter, writing last 5 bits */
|
|
/* into Address Configuration register */
|
|
#define IDCMD_ACTIVATE_FF 0xFF /* Activate adapter using preconfigured */
|
|
/* I/O base address */
|
|
/*
|
|
Default configuration values for the EtherLink III adapter.
|
|
*/
|
|
|
|
#define DEFAULT_ID_PORT 0x00000110 /* A port (maybe) not being used by */
|
|
/* anything else in an ISA machine */
|
|
/*
|
|
Card EEPROM configuration, as shipped.
|
|
*/
|
|
#define DEFAULT_IO_PORT (PVOID)0x300
|
|
#define DEFAULT_IRQ 10
|
|
#define DEFAULT_TRANSCEIVER TRANSCEIVER_BNC /* For the 3C509-TP, this will */
|
|
/* be TRANSCEIVER_TP */
|
|
|
|
// AdaptP->MulticastListMax
|
|
//
|
|
// the maximum number of different multicast addresses that
|
|
// may be specified to this adapter (the list is global for
|
|
// all protocols).
|
|
|
|
#define DEFAULT_MULTICASTLISTMAX 16
|
|
|
|
|
|
/*
|
|
EEPROM data structure.
|
|
*/
|
|
|
|
#define EEPROM_NODE_ADDRESS_0 0
|
|
#define EEPROM_NODE_ADDRESS_1 1
|
|
#define EEPROM_NODE_ADDRESS_2 2
|
|
|
|
#define EEPROM_PRODUCT_ID 3
|
|
|
|
#define EEPROM_MANUFACTURING_DATE 4
|
|
#define EEPROM_MANUFACTURING_DATA1 5
|
|
#define EEPROM_MANUFACTURING_DATA2 6
|
|
#define EEPROM_MANUFACTURER_CODE 7
|
|
|
|
#define EEPROM_ADDRESS_CONFIGURATION 8
|
|
#define EEPROM_RESOURCE_CONFIGURATION 9
|
|
|
|
#define EEPROM_OEM_NODE_0 10
|
|
#define EEPROM_OEM_NODE_1 11
|
|
#define EEPROM_OEM_NODE_2 12
|
|
|
|
#define EEPROM_SOFTWARE_INFO 13
|
|
|
|
#define EEPROM_RESERVED 14
|
|
|
|
#define EEPROM_CHECKSUM 15
|
|
|
|
#define EEPROM_NETWORK_MANAGEMENT_DATA_0 16
|
|
|
|
/*
|
|
Address configuration register.
|
|
*/
|
|
|
|
typedef union ELNK3_Address_Configuration_Register{
|
|
struct{
|
|
USHORT eacf_iobase : 5;
|
|
USHORT eacf_reserved : 3;
|
|
USHORT eacf_ROMbase : 4;
|
|
USHORT eacf_ROMsize : 2;
|
|
USHORT eacf_XCVR : 2;
|
|
};
|
|
USHORT eacf_contents;
|
|
}ELNK3_Address_Configuration_Register, *PELNK3_Address_Configuration_Register;
|
|
|
|
|
|
/*
|
|
EtherLink III configuration control register.
|
|
*/
|
|
|
|
#define CCR_ENABLE_BIT 0
|
|
#define CCR_RESET_BIT 2
|
|
|
|
#define CCR_ENABLE ( 1 << CCR_ENABLE_BIT )
|
|
#define CCR_RESET ( 1 << CCR_RESET_BIT )
|
|
/*
|
|
Transceiver configuration as stored in Address Configuration Register.
|
|
*/
|
|
|
|
#define TRANSCEIVER_TP 0 /* Twisted pair transceiver enabled. */
|
|
#define TRANSCEIVER_EXTERNAL 1 /* AUI port enabled, using ext. trans. */
|
|
#define TRANSCEIVER_RESERVED 2 /* reserved - undefined */
|
|
#define TRANSCEIVER_BNC 3 /* BNC transceiver enabled */
|
|
#define TRANSCEIVER_UNDEFINED TRANSCEIVER_RESERVED
|
|
/* Handy dandy undefined transceiver value */
|
|
|
|
/*
|
|
Conversion from eacf_iobase to I/O port used.
|
|
*/
|
|
#define IOBASE_EISA 0x31 /* EISA mode slot-specific I/O address */
|
|
|
|
typedef union EISA_IO_Address {
|
|
struct{
|
|
USHORT eia_port : 12;
|
|
USHORT eia_slot : 4;
|
|
};
|
|
USHORT eia_contents;
|
|
}EISA_IO_Address, *PEISA_IO_Address;
|
|
|
|
#define EISA_Window_0_Address 0xC80 /* Window zero is always mapped here */
|
|
/* on an EISA machine configured */
|
|
/* adapter */
|
|
|
|
/*
|
|
IOBaseAddress for an EtherLink III configured for EISA operation and installed
|
|
in an EISA slot is the slotnumber times 1000h.
|
|
*/
|
|
#define EISA_SlotNumber_To_IOBase(x) ((x) * 0x1000)
|
|
|
|
#define EACF_IOBASE_TO_ISA_IOBASE(x) ( ( (x) << 4 ) + 0x200 )
|
|
#define ISA_IOBASE_TO_EACF_IOBASE(x) ( ( (x) - 0x200 ) >> 4 )
|
|
|
|
/*
|
|
Elnk III resource configuration register.
|
|
*/
|
|
|
|
typedef union ELNK3_Resource_Configuration_Register{
|
|
struct{
|
|
USHORT ercf_reserved : 8;
|
|
USHORT ercf_reserved_F : 4;
|
|
USHORT ercf_IRQ : 4;
|
|
};
|
|
USHORT ercf_contents;
|
|
}ELNK3_Resource_Configuration_Register, *PELNK3_Resource_Configuration_Register;
|
|
|
|
/*
|
|
Format of command word written to ELNK III command register.
|
|
*/
|
|
|
|
typedef union ELNK3_Command{
|
|
struct{
|
|
USHORT ec_arg : 11;
|
|
USHORT ec_command : 5;
|
|
};
|
|
USHORT ec_contents;
|
|
}ELNK3_Command,*PELNK3_Command;
|
|
|
|
#define EC_GLOBAL_RESET 0
|
|
#define EC_SELECT_WINDOW 1
|
|
#define EC_START_COAX_XCVR 2
|
|
#define EC_RX_DISABLE 3
|
|
#define EC_RX_ENABLE 4
|
|
#define EC_RX_RESET 5
|
|
|
|
#define EC_RX_DISCARD_TOP_PACKET 8
|
|
#define EC_TX_ENABLE 9
|
|
#define EC_TX_DISABLE 10
|
|
#define EC_TX_RESET 11
|
|
|
|
#define EC_REQUEST_INTERRUPT 12
|
|
|
|
#define EC_INT_LATCH 1
|
|
#define EC_INT_ADAPTER_FAILURE 2
|
|
#define EC_INT_TX_COMPLETE 4
|
|
#define EC_INT_TX_AVAILABLE 8
|
|
#define EC_INT_RX_COMPLETE 16
|
|
#define EC_INT_RX_EARLY 32
|
|
#define EC_INT_INTERRUPT_REQUESTED 64
|
|
#define EC_INT_UPDATE_STATISTICS 128
|
|
|
|
#define EC_ACKNOWLEDGE_INTERRUPT 13
|
|
#define EC_SET_INTERRUPT_MASK 14
|
|
#define EC_SET_READ_ZERO_MASK 15
|
|
|
|
#define EC_SET_RX_EARLY 17
|
|
#define EC_SET_TX_AVAILIBLE 18
|
|
|
|
|
|
#define EC_SET_RX_FILTER 16
|
|
|
|
#define EC_FILTER_ADDRESS 1
|
|
#define EC_FILTER_GROUP 2
|
|
#define EC_FILTER_BROADCAST 4
|
|
#define EC_FILTER_PROMISCUOUS 8
|
|
|
|
//
|
|
// Window Numbers
|
|
//
|
|
#define WNO_SETUP 0 // setup/configuration
|
|
#define WNO_OPERATING 1 // operating set
|
|
#define WNO_STATIONADDRESS 2 // station address setup/read
|
|
#define WNO_FIFO 3 // FIFO management
|
|
#define WNO_DIAGNOSTICS 4 // diagnostics
|
|
#define WNO_READABLE 5 // registers set by commands
|
|
#define WNO_STATISTICS 6 // statistics
|
|
//
|
|
// Port offsets, Window 1
|
|
//
|
|
#define PORT_CmdStatus 0x0E // command/status
|
|
#define PORT_TxFree 0x0C // free transmit bytes
|
|
#define PORT_TxStatus 0x0B // transmit status (byte)
|
|
#define PORT_Timer 0x0A // latency timer (byte)
|
|
#define PORT_RxStatus 0x08 // receive status
|
|
#define PORT_RxFIFO 0x00 // RxFIFO read
|
|
#define PORT_TxFIFO 0x00 // TxFIFO write
|
|
//
|
|
// Port offsets, Window 0
|
|
//
|
|
#define PORT_EEData 0x0C // EEProm data register
|
|
#define PORT_EECmd 0x0A // EEProm command register
|
|
#define PORT_CfgResource 0x08 // resource configuration
|
|
#define PORT_CfgAddress 0x06 // address configuration
|
|
#define PORT_CfgControl 0x04 // configuration control
|
|
#define PORT_ProductID 0x02 // product id (EISA)
|
|
#define PORT_Manufacturer 0x00 // Manufacturer code (EISA)
|
|
//
|
|
// Port offsets, Window 2
|
|
//
|
|
#define PORT_SA0_1 0x00 // station address bytes 0,1
|
|
#define PORT_SA2_3 0x02 // station address bytes 2,3
|
|
#define PORT_SA4_5 0x04 // station address bytes 4,5
|
|
|
|
//
|
|
// port offsets, window 3
|
|
//
|
|
#define PORT_FREE_RX_BYTES 0x0a
|
|
|
|
//
|
|
//
|
|
// Port Offsets window 4
|
|
//
|
|
#define PORT_FIFO_DIAG 0x04
|
|
|
|
#define RX_UNDERRUN 0x2000
|
|
#define TX_OVERRUN 0x0400
|
|
|
|
|
|
#define PORT_MEDIA_TYPE 0x0a
|
|
|
|
#define MEDIA_LINK_BEAT 0x0080
|
|
#define MEDIA_JABBER 0x0040
|
|
|
|
|
|
#define PORT_NET_DIAG 0x06
|
|
|
|
|
|
|
|
//
|
|
// board identification codes
|
|
//
|
|
#define EISA_MANUFACTURER_ID 0x6D50 // EISA manufacturer code
|
|
|
|
#define ISAID_BNC 0x9050 // Product ID for ISA TP board
|
|
#define ISAID_TP 0x9051 // Product ID for ISA coax board
|
|
#define EISAID 0x9052 // Product ID for EISA board
|
|
|
|
//...so far the list is 5090=ISA 3C509-TP (TP/AUI), 5091h=ISA 3C509 (BNC/AUI),
|
|
// 5092h=EISA 3C579-TP (TP/AUI) and 5092h=EISA 3C579 (BNC/AUI). other
|
|
// bottom nibbles will likely be assigned to TP-only/combo/whatever
|
|
// else marketting thinks up...
|
|
|
|
#define PRODUCT_ID_MASK 0xF0FF // Mask off revision nibble
|
|
|
|
#define MCAID_BNC 0x627C // MCA Adapter ID: BNC/AUI
|
|
#define MCAID_TP 0x627D // MCA Adapter ID: TP/AUI
|
|
#define MCAID_COMBO 0x61DB // MCA Adapter ID: Combo (future)
|
|
#define MCAID_TPCOAX 0x62F6 // MCA Adapter ID: TP/COAX (future)
|
|
#define MCAID_TPONLY 0x62F7 // MCA Adapter ID: TP only (future)
|
|
|
|
/*
|
|
Note: This is referred to as POS2 in 3COM's MCA Technical Reference Addendum
|
|
for the EtherLink III.
|
|
*/
|
|
#define POS1_CDEN 1 // Card enable bit in POS2 register
|
|
|
|
/*
|
|
Note: This is referred to as POS4 in 3COM's MCA Technical Reference Addendum
|
|
for the EtherLink III.
|
|
*/
|
|
#define POS3_TO_IOBASE(x) ((((x) << 8) & 0xFC00) | 0x0200)
|
|
//
|
|
// EEProm access
|
|
//
|
|
#define EE_BUSY 0x8000 // EEProm busy bit in EECmd
|
|
#define EE_TCOM_NODE_ADDR_WORD0 0x00
|
|
#define EE_TCOM_NODE_ADDR_WORD1 0x1
|
|
#define EE_TCOM_NODE_ADDR_WORD2 0x2
|
|
#define EE_VULCAN_PROD_ID 0x3
|
|
#define EE_MANUFACTURING_DATA 0x4
|
|
#define EE_SERIAL_NUMBER_WORD0 0x5
|
|
#define EE_SERIAL_NUMBER_WORD1 0x6
|
|
#define EE_MANUFACTURER_CODE 0x7
|
|
#define EE_ADDR_CONFIGURATION 0x8
|
|
#define EE_RESOURCE_CONFIGURATION 0x9
|
|
#define EE_OEM_NODE_ADDR_WORD0 0xA
|
|
#define EE_OEM_NODE_ADDR_WORD1 0xB
|
|
#define EE_OEM_NODE_ADDR_WORD2 0xC
|
|
#define EE_SOFTWARE_CONFIG_INFO 0xD
|
|
#define EE_CWORD 0xE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct _ELNK3_ISA_DESCRIPTION {
|
|
USHORT AddressConfigRegister;
|
|
USHORT ResourceConfigRegister;
|
|
USHORT IOPort;
|
|
USHORT Irq;
|
|
BOOLEAN Tagged;
|
|
BOOLEAN Active;
|
|
} ELNK3_ISA_DESCRIPTION, *PELNK3_ISA_DESCRIPTION;
|