summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/ne2000/ne2000hw.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/ntos/ndis/ne2000/ne2000hw.h557
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_