diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/ndis/ne2000/ne2000hw.h | 557 |
1 files changed, 557 insertions, 0 deletions
diff --git a/private/ntos/ndis/ne2000/ne2000hw.h b/private/ntos/ndis/ne2000/ne2000hw.h new file mode 100644 index 000000000..bab8e30dc --- /dev/null +++ b/private/ntos/ndis/ne2000/ne2000hw.h @@ -0,0 +1,557 @@ +/*++ + +Copyright (c) 1990 Microsoft Corporation + +Module Name: + + ne2000hw.h + +Abstract: + + The main program for an Ne2000 miniport driver. + +Author: + + Sean Selitrennikoff + +Environment: + +Notes: + + optional-notes + +Revision History: + +--*/ + +#ifndef _NE2000HARDWARE_ +#define _NE2000HARDWARE_ + + +// +// Definitions for supporting clone adapters. +// + +// +// Valid value ranges for the IoBaseAddress. +// +#ifdef NE1000 +#define MIN_IOBASEADDR 0x0200 +#else +#define MIN_IOBASEADDR 0x0120 +#endif + +#define MAX_IOBASEADDR 0xc3d0 + + + +// +// Valid value ranges for the InterruptNumber. +// +#define MIN_IRQ 2 + +#ifdef NE1000 +#define MAX_IRQ 9 +#else +#define MAX_IRQ 15 +#endif + + +// +// Types of Ne2000 cards. +// +#define NE2000_ISA 0 +#define NE2000_PCMCIA 1 + +// +// ID for MCA Ne2000 clone cards +// +#define AE2_ADAPTER_ID 0x67b0 +#define UB_ADAPTER_ID 0x611f +#define NE2_ADAPTER_ID 0x7154 + +// +// Microchannel IRQ POS register mask and shift count +// +#define MC_IRQ_MASK 0x60 +#define MC_IRQ_MASK_UB 0x0E + + +// +// Microchannel I/O base address mask and shift count +// +#define MC_IO_BASE_MASK 0x0E +#define MC_IO_BASE_MASK_UB 0xE0 + +// +// Default value for Adapter->IoBaseAddr +// +#define DEFAULT_IOBASEADDR (PVOID)0x300 + +#define CIS_NET_ADDR_OFFSET 0xff0 + +// +// Default value for Adapter->InterruptNumber +// +#define DEFAULT_INTERRUPTNUMBER 3 + + +// +// Default value for Adapter->MulticastListMax +// +#define DEFAULT_MULTICASTLISTMAX 8 + + +// +// Offsets from Adapter->IoPAddr of the ports used to access +// the 8390 NIC registers. +// +// The names in parenthesis are the abbreviations by which +// the registers are referred to in the 8390 data sheet. +// +// Some of the offsets appear more than once +// because they have have relevant page 0 and page 1 values, +// or they are different registers when read than they are +// when written. The notation MSB indicates that only the +// MSB can be set for this register, the LSB is assumed 0. +// + +#define NIC_COMMAND 0x0 // (CR) +#define NIC_PAGE_START 0x1 // (PSTART) MSB, write-only +#define NIC_PHYS_ADDR 0x1 // (PAR0) page 1 +#define NIC_PAGE_STOP 0x2 // (PSTOP) MSB, write-only +#define NIC_BOUNDARY 0x3 // (BNRY) MSB +#define NIC_XMIT_START 0x4 // (TPSR) MSB, write-only +#define NIC_XMIT_STATUS 0x4 // (TSR) read-only +#define NIC_XMIT_COUNT_LSB 0x5 // (TBCR0) write-only +#define NIC_XMIT_COUNT_MSB 0x6 // (TBCR1) write-only +#define NIC_FIFO 0x6 // (FIFO) read-only +#define NIC_INTR_STATUS 0x7 // (ISR) +#define NIC_CURRENT 0x7 // (CURR) page 1 +#define NIC_MC_ADDR 0x8 // (MAR0) page 1 +#define NIC_CRDA_LSB 0x8 // (CRDA0) +#define NIC_RMT_ADDR_LSB 0x8 // (RSAR0) +#define NIC_CRDA_MSB 0x9 // (CRDA1) +#define NIC_RMT_ADDR_MSB 0x9 // (RSAR1) +#define NIC_RMT_COUNT_LSB 0xa // (RBCR0) write-only +#define NIC_RMT_COUNT_MSB 0xb // (RBCR1) write-only +#define NIC_RCV_CONFIG 0xc // (RCR) write-only +#define NIC_RCV_STATUS 0xc // (RSR) read-only +#define NIC_XMIT_CONFIG 0xd // (TCR) write-only +#define NIC_FAE_ERR_CNTR 0xd // (CNTR0) read-only +#define NIC_DATA_CONFIG 0xe // (DCR) write-only +#define NIC_CRC_ERR_CNTR 0xe // (CNTR1) read-only +#define NIC_INTR_MASK 0xf // (IMR) write-only +#define NIC_MISSED_CNTR 0xf // (CNTR2) read-only +#define NIC_RACK_NIC 0x10 // Byte to read or write +#define NIC_RESET 0x1f // (RESET) + + +// +// Constants for the NIC_COMMAND register. +// +// Start/stop the card, start transmissions, and select +// which page of registers was seen through the ports. +// + +#define CR_STOP (UCHAR)0x01 // reset the card +#define CR_START (UCHAR)0x02 // start the card +#define CR_XMIT (UCHAR)0x04 // begin transmission +#define CR_NO_DMA (UCHAR)0x20 // stop remote DMA + +#define CR_PS0 (UCHAR)0x40 // low bit of page number +#define CR_PS1 (UCHAR)0x80 // high bit of page number +#define CR_PAGE0 (UCHAR)0x00 // select page 0 +#define CR_PAGE1 CR_PS0 // select page 1 +#define CR_PAGE2 CR_PS1 // select page 2 + +#define CR_DMA_WRITE (UCHAR)0x10 // Write +#define CR_DMA_READ (UCHAR)0x08 // Read +#define CR_SEND (UCHAR)0x18 // send + + +// +// Constants for the NIC_XMIT_STATUS register. +// +// Indicate the result of a packet transmission. +// + +#define TSR_XMIT_OK (UCHAR)0x01 // transmit with no errors +#define TSR_COLLISION (UCHAR)0x04 // collided at least once +#define TSR_ABORTED (UCHAR)0x08 // too many collisions +#define TSR_NO_CARRIER (UCHAR)0x10 // carrier lost +#define TSR_NO_CDH (UCHAR)0x40 // no collision detect heartbeat + + +// +// Constants for the NIC_INTR_STATUS register. +// +// Indicate the cause of an interrupt. +// + +#define ISR_EMPTY (UCHAR)0x00 // no bits set in ISR +#define ISR_RCV (UCHAR)0x01 // packet received with no errors +#define ISR_XMIT (UCHAR)0x02 // packet transmitted with no errors +#define ISR_RCV_ERR (UCHAR)0x04 // error on packet reception +#define ISR_XMIT_ERR (UCHAR)0x08 // error on packet transmission +#define ISR_OVERFLOW (UCHAR)0x10 // receive buffer overflow +#define ISR_COUNTER (UCHAR)0x20 // MSB set on tally counter +#define ISR_DMA_DONE (UCHAR)0x40 // RDC +#define ISR_RESET (UCHAR)0x80 // (not an interrupt) card is reset + + +// +// Constants for the NIC_RCV_CONFIG register. +// +// Configure what type of packets are received. +// + +#define RCR_REJECT_ERR (UCHAR)0x00 // reject error packets +#define RCR_BROADCAST (UCHAR)0x04 // receive broadcast packets +#define RCR_MULTICAST (UCHAR)0x08 // receive multicast packets +#define RCR_ALL_PHYS (UCHAR)0x10 // receive ALL directed packets +#define RCR_MONITOR (UCHAR)0x20 // don't collect packets + + +// +// Constants for the NIC_RCV_STATUS register. +// +// Indicate the status of a received packet. +// +// These are also used to interpret the status byte in the +// packet header of a received packet. +// + +#define RSR_PACKET_OK (UCHAR)0x01 // packet received with no errors +#define RSR_CRC_ERROR (UCHAR)0x02 // packet received with CRC error +#define RSR_MULTICAST (UCHAR)0x20 // packet received was multicast +#define RSR_DISABLED (UCHAR)0x40 // received is disabled +#define RSR_DEFERRING (UCHAR)0x80 // receiver is deferring + + +// +// Constants for the NIC_XMIT_CONFIG register. +// +// Configures how packets are transmitted. +// + +#define TCR_NO_LOOPBACK (UCHAR)0x00 // normal operation +#define TCR_LOOPBACK (UCHAR)0x02 // loopback (set when NIC is stopped) + +#define TCR_INHIBIT_CRC (UCHAR)0x01 // inhibit appending of CRC + +#define TCR_NIC_LBK (UCHAR)0x02 // loopback through the NIC +#define TCR_SNI_LBK (UCHAR)0x04 // loopback through the SNI +#define TCR_COAX_LBK (UCHAR)0x06 // loopback to the coax + + +// +// Constants for the NIC_DATA_CONFIG register. +// +// Set data transfer sizes. +// + +#define DCR_BYTE_WIDE (UCHAR)0x00 // byte-wide DMA transfers +#define DCR_WORD_WIDE (UCHAR)0x01 // word-wide DMA transfers + +#define DCR_LOOPBACK (UCHAR)0x00 // loopback mode (TCR must be set) +#define DCR_NORMAL (UCHAR)0x08 // normal operation + +#define DCR_FIFO_2_BYTE (UCHAR)0x00 // 2-byte FIFO threshhold +#define DCR_FIFO_4_BYTE (UCHAR)0x20 // 4-byte FIFO threshhold +#define DCR_FIFO_8_BYTE (UCHAR)0x40 // 8-byte FIFO threshhold +#define DCR_FIFO_12_BYTE (UCHAR)0x60 // 12-byte FIFO threshhold +#define DCR_AUTO_INIT (UCHAR)0x10 // Auto-init to remove packets from ring + + +// +// Constants for the NIC_INTR_MASK register. +// +// Configure which ISR settings actually cause interrupts. +// + +#define IMR_RCV (UCHAR)0x01 // packet received with no errors +#define IMR_XMIT (UCHAR)0x02 // packet transmitted with no errors +#define IMR_RCV_ERR (UCHAR)0x04 // error on packet reception +#define IMR_XMIT_ERR (UCHAR)0x08 // error on packet transmission +#define IMR_OVERFLOW (UCHAR)0x10 // receive buffer overflow +#define IMR_COUNTER (UCHAR)0x20 // MSB set on tally counter + + +//++ +// +// VOID +// CardStart( +// IN PNE2000_ADAPTER Adapter +// ) +// +// +// Routine Description: +// +// Starts the card. +// +// Arguments: +// +// Adapter - pointer to the adapter block +// +// Return Value: +// +// None. +// +//-- + // + // Assume that the card has been stopped as in CardStop. + // + +#define CardStart(Adapter) \ + NdisRawWritePortUchar(((Adapter->IoPAddr)+NIC_XMIT_CONFIG), TCR_NO_LOOPBACK) + + + +//++ +// +// VOID +// CardSetAllMulticast( +// IN PNE2000_ADAPTER Adapter +// ) +// +// Routine Description: +// +// Enables every bit in the card multicast bit mask. +// Calls SyncCardSetAllMulticast. +// +// Arguments: +// +// Adapter - The adapter block. +// +// Return Value: +// +// None. +// +//-- + +#define CardSetAllMulticast(Adapter) \ + NdisMSynchronizeWithInterrupt(&(Adapter)->Interrupt, \ + SyncCardSetAllMulticast, (PVOID)(Adapter)) + + +//++ +// +// VOID +// CardCopyMulticastRegs( +// IN PNE2000_ADAPTER Adapter +// ) +// +// Routine Description: +// +// Writes out the entire multicast bit mask to the card from +// Adapter->NicMulticastRegs. Calls SyncCardCopyMulticastRegs. +// +// Arguments: +// +// Adapter - The adapter block. +// +// Return Value: +// +// None. +// +//-- + +#define CardCopyMulticastRegs(Adapter) \ + NdisMSynchronizeWithInterrupt(&(Adapter)->Interrupt, \ + SyncCardCopyMulticastRegs, (PVOID)(Adapter)) + + + +//++ +// +// VOID +// CardGetInterruptStatus( +// IN PNE2000_ADAPTER Adapter, +// OUT PUCHAR InterrupStatus +// ) +// +// Routine Description: +// +// Reads the interrupt status (ISR) register from the card. Only +// called at IRQL INTERRUPT_LEVEL. +// +// Arguments: +// +// Adapter - The adapter block. +// +// InterruptStatus - Returns the value of ISR. +// +// Return Value: +// +//-- + +#define CardGetInterruptStatus(_Adapter,_InterruptStatus) \ + NdisRawReadPortUchar(((_Adapter)->IoPAddr+NIC_INTR_STATUS), (_InterruptStatus)) + + +//++ +// +// VOID +// CardSetReceiveConfig( +// IN PNE2000_ADAPTER Adapter +// ) +// +// Routine Description: +// +// Sets the receive configuration (RCR) register on the card. +// The value used is Adapter->NicReceiveConfig. Calls +// SyncCardSetReceiveConfig. +// +// Arguments: +// +// Adapter - The adapter block. +// +// Return Value: +// +// None. +// +//-- + +#define CardSetReceiveConfig(Adapter) \ + NdisMSynchronizeWithInterrupt(&(Adapter)->Interrupt, \ + SyncCardSetReceiveConfig, (PVOID)(Adapter)) + + +//++ +// +// VOID +// CardBlockInterrupts( +// IN PNE2000_ADAPTER Adapter +// ) +// +// Routine Description: +// +// Blocks all interrupts from the card by clearing the +// interrupt mask (IMR) register. Only called from +// IRQL INTERRUPT_LEVEL. +// +// Arguments: +// +// Adapter - The adapter block. +// +// Return Value: +// +// None. +// +//-- + +#define CardBlockInterrupts(Adapter) \ + NdisRawWritePortUchar(((Adapter)->IoPAddr+NIC_INTR_MASK), 0) + + +//++ +// +// VOID +// CardUnblockInterrupts( +// IN PNE2000_ADAPTER Adapter +// ) +// +// Routine Description: +// +// Unblocks all interrupts from the card by setting the +// interrupt mask (IMR) register. Only called from IRQL +// INTERRUPT_LEVEL. +// +// Arguments: +// +// Adapter - The adapter block. +// +// Return Value: +// +// None. +// +//-- + +#define CardUnblockInterrupts(Adapter) \ + NdisRawWritePortUchar(\ + ((Adapter)->IoPAddr+NIC_INTR_MASK), \ + (Adapter)->NicInterruptMask) + +//++ +// +// VOID +// CardAcknowledgeOverflowInterrupt( +// IN PNE2000_ADAPTER Adapter +// ) +// +// Routine Description: +// +// Acknowledges an overflow interrupt by setting the bit in +// the interrupt status (ISR) register. Calls +// SyncCardAcknowledgeOverflow. +// +// Arguments: +// +// Adapter - The adapter block. +// +// Return Value: +// +// None. +// +//-- + +#define CardAcknowledgeOverflowInterrupt(Adapter) \ + SyncCardAcknowledgeOverflow(Adapter) + + +//++ +// +// VOID +// CardAcknowledgeCounterInterrupt( +// IN PNE2000_ADAPTER Adapter +// ) +// +// Routine Description: +// +// Acknowledges a counter interrupt by setting the bit in +// the interrupt status (ISR) register. +// +// Arguments: +// +// Adapter - The adapter block. +// +// Return Value: +// +// None. +// +//-- + +#define CardAcknowledgeCounterInterrupt(Adapter) \ + NdisRawWritePortUchar(((Adapter)->IoPAddr+NIC_INTR_STATUS), ISR_COUNTER) + +//++ +// +// VOID +// CardUpdateCounters( +// IN PNE2000_ADAPTER Adapter +// ) +// +// Routine Description: +// +// Updates the values of the three counters (frame alignment +// errors, CRC errors, and missed packets) by reading in their +// current values from the card and adding them to the ones +// stored in the Adapter structure. Calls SyncCardUpdateCounters. +// +// Arguments: +// +// Adapter - The adapter block. +// +// Return Value: +// +// None. +// +//-- + +#define CardUpdateCounters(Adapter) \ + NdisMSynchronizeWithInterrupt(&(Adapter)->Interrupt, \ + SyncCardUpdateCounters, (PVOID)(Adapter)) + + +#endif // _NE2000HARDWARE_ |