2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Novell Eagle 2000 driver
4 * FILE: include/ne2000.h
5 * PURPOSE: NE2000 driver definitions
8 #define NDIS_MINIPORT_DRIVER 1
9 #define NDIS_LEGACY_MINIPORT 1
10 #define NDIS51_MINIPORT 1
15 /* Define NOCARD to test NDIS without a card */
18 /* NE2000 sepcific constants */
19 #define NIC_DATA 0x10 /* Data register */
20 #define NIC_RESET 0x1F /* Reset register */
23 /* Global constants */
25 #define DRIVER_NDIS_MAJOR_VERSION 0x05
26 #define DRIVER_NDIS_MINOR_VERSION 0
28 #define DRIVER_DEFAULT_IO_BASE_ADDRESS 0x280 /* bochs default */
29 #define DRIVER_DEFAULT_INTERRUPT_NUMBER 9 /* bochs default */
30 #define DRIVER_DEFAULT_INTERRUPT_SHARED FALSE
31 #define DRIVER_DEFAULT_INTERRUPT_MODE NdisInterruptLatched
33 #define DRIVER_MAX_MULTICAST_LIST_SIZE 8
35 #define DRIVER_VENDOR_DESCRIPTION "RTL 8139 Adapter."
36 #define DRIVER_VENDOR_DRIVER_VERSION 0x0100 /* 1.0 */
38 #define DRIVER_FRAME_SIZE 1514 /* Size of an ethernet frame */
39 #define DRIVER_HEADER_SIZE 14 /* Size of an ethernet header */
40 #define DRIVER_LENGTH_OF_ADDRESS 6 /* Size of an ethernet address */
42 /* Maximum lookahead buffer size */
43 #define DRIVER_MAXIMUM_LOOKAHEAD (252 - DRIVER_HEADER_SIZE)
45 /* Size of a block in a buffer ring */
46 #define DRIVER_BLOCK_SIZE 256
49 /* Default number of transmit buffers */
50 #define DRIVER_DEFAULT_TX_BUFFER_COUNT 12
51 #define BUFFERS_PER_TX_BUF 1
53 /* Interrupt Mask Register value */
54 #define DRIVER_INTERRUPT_MASK IMR_ALLE - IMR_RDCE
56 /* Maximum number of interrupts handled per call to MiniportHandleInterrupt */
57 #define INTERRUPT_LIMIT 10
59 /* Global structures */
61 typedef struct _MINIPORT_RESERVED
64 } MINIPORT_RESERVED
, *PMINIPORT_RESERVED
;
66 #define RESERVED(Packet) ((PMINIPORT_RESERVED)((Packet)->MiniportReserved))
68 typedef UCHAR DRIVER_HARDWARE_ADDRESS
[DRIVER_LENGTH_OF_ADDRESS
];
70 /* Information about an adapter */
71 typedef struct _NIC_ADAPTER
73 /* Entry on global adapter list */
76 NDIS_HANDLE MiniportAdapterHandle
;
77 /* NDIS interrupt object */
78 NDIS_MINIPORT_INTERRUPT Interrupt
;
80 /* I/O base address and interrupt number of adapter */
81 ULONG_PTR IoBaseAddress
;
83 ULONG InterruptVector
;
84 BOOLEAN InterruptShared
;
85 KINTERRUPT_MODE InterruptMode
;
87 /* Mapped address of the I/O base port */
90 /* TRUE if the NIC can transfer in word mode */
93 /* Base address and size of the onboard memory window */
97 /* Station Address PROM (SAPROM) */
100 /* Onboard ethernet address from the manufacturer */
101 DRIVER_HARDWARE_ADDRESS PermanentAddress
;
103 /* Ethernet address currently in use */
104 DRIVER_HARDWARE_ADDRESS StationAddress
;
106 /* Maximum number of multicast addresses this adapter supports */
107 ULONG MaxMulticastListSize
;
109 /* List of multicast addresses in use */
110 DRIVER_HARDWARE_ADDRESS Addresses
[DRIVER_MAX_MULTICAST_LIST_SIZE
];
112 /* Current multicast address mask */
113 UCHAR MulticastAddressMask
[8];
115 /* Masked interrupts (IMR value) */
118 /* Interrupts that have occurred */
119 UCHAR InterruptStatus
;
121 /* Current packet filter */
124 /* Lookahead buffer */
126 UCHAR Lookahead
[DRIVER_MAXIMUM_LOOKAHEAD
+ DRIVER_HEADER_SIZE
];
128 /* Receive buffer ring */
134 /* TRUE if there was a buffer overflow */
135 BOOLEAN BufferOverflow
;
137 /* TRUE if an error occurred during reception of a packet */
138 BOOLEAN ReceiveError
;
140 /* TRUE if an error occurred during transmission of a packet */
141 BOOLEAN TransmitError
;
143 /* TRUE if a transmit interrupt is pending */
144 BOOLEAN TransmitPending
;
146 /* Received packet header */
147 PACKET_HEADER PacketHeader
;
149 /* Offset in onboard RAM of received packet */
152 /* TRUE if receive indications are done and should be completed */
153 BOOLEAN DoneIndicating
;
155 /* Transmit buffers */
156 UINT TXStart
; /* Start block of transmit buffer ring */
157 UINT TXCount
; /* Number of blocks in transmit buffer ring */
158 UINT TXFree
; /* Number of free transmit buffers */
159 UINT TXNext
; /* Next buffer to use */
160 /* Length of packet. 0 means buffer is unused */
161 UINT TXSize
[DRIVER_DEFAULT_TX_BUFFER_COUNT
];
162 INT TXCurrent
; /* Current buffer beeing transmitted. -1 means none */
164 /* Head of transmit queue */
165 PNDIS_PACKET TXQueueHead
;
166 /* Tail of transmit queue */
167 PNDIS_PACKET TXQueueTail
;
170 ULONG FrameAlignmentErrors
;
174 /* Flags used for driver cleanup */
175 BOOLEAN IOPortRangeRegistered
;
176 BOOLEAN InterruptRegistered
;
177 BOOLEAN ShutdownHandlerRegistered
;
178 } NIC_ADAPTER
, *PNIC_ADAPTER
;
180 /* Global driver information */
181 typedef struct _DRIVER_INFORMATION
183 NDIS_HANDLE NdisWrapperHandle
; /* Returned from NdisInitializeWrapper */
184 NDIS_HANDLE NdisMacHandle
; /* Returned from NdisRegisterMac */
185 LIST_ENTRY AdapterListHead
; /* Adapters this driver control */
186 } DRIVER_INFORMATION
, *PDRIVER_INFORMATION
;
190 /* Global variable */
192 extern DRIVER_INFORMATION DriverInfo
;
193 extern NDIS_PHYSICAL_ADDRESS HighestAcceptableMax
;
200 PNIC_ADAPTER Adapter
);
202 NDIS_STATUS
NICInitialize(
203 PNIC_ADAPTER Adapter
);
205 NDIS_STATUS
NICSetup(
206 PNIC_ADAPTER Adapter
);
208 NDIS_STATUS
NICStart(
209 PNIC_ADAPTER Adapter
);
212 PNIC_ADAPTER Adapter
);
214 NDIS_STATUS
NICReset(
215 PNIC_ADAPTER Adapter
);
217 VOID
NICUpdateCounters(
218 PNIC_ADAPTER Adapter
);
220 VOID
NICReadDataAlign(
221 PNIC_ADAPTER Adapter
,
226 VOID
NICWriteDataAlign(
227 PNIC_ADAPTER Adapter
,
233 PNIC_ADAPTER Adapter
,
239 PNIC_ADAPTER Adapter
,
245 PNIC_ADAPTER Adapter
);