Create a branch for network fixes.
[reactos.git] / drivers / network / dd / ne2000 / include / ne2000.h
1 /*
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
6 */
7 #ifndef __NE2000_H
8 #define __NE2000_H
9
10 #define NDIS_MINIPORT_DRIVER 1
11 #define NDIS_LEGACY_MINIPORT 1
12 #define NDIS51_MINIPORT 1
13 #include <ndis.h>
14 #include <8390.h>
15 #include <debug.h>
16
17 /* Define NOCARD to test NDIS without a card */
18 //#define NOCARD
19
20 /* NE2000 sepcific constants */
21 #define NIC_DATA 0x10 /* Data register */
22 #define NIC_RESET 0x1F /* Reset register */
23
24
25 /* Global constants */
26
27 #define DRIVER_NDIS_MAJOR_VERSION 3
28 #define DRIVER_NDIS_MINOR_VERSION 0
29
30 #define DRIVER_DEFAULT_IO_BASE_ADDRESS 0x280 /* bochs default */
31 #define DRIVER_DEFAULT_INTERRUPT_NUMBER 9 /* bochs default */
32 #define DRIVER_DEFAULT_INTERRUPT_SHARED FALSE
33 #define DRIVER_DEFAULT_INTERRUPT_MODE NdisInterruptLatched
34
35 #define DRIVER_MAX_MULTICAST_LIST_SIZE 8
36
37 #define DRIVER_VENDOR_DESCRIPTION "Novell Eagle 2000 Adapter."
38 #define DRIVER_VENDOR_DRIVER_VERSION 0x0100 /* 1.0 */
39
40 #define DRIVER_FRAME_SIZE 1514 /* Size of an ethernet frame */
41 #define DRIVER_HEADER_SIZE 14 /* Size of an ethernet header */
42 #define DRIVER_LENGTH_OF_ADDRESS 6 /* Size of an ethernet address */
43
44 /* Maximum lookahead buffer size */
45 #define DRIVER_MAXIMUM_LOOKAHEAD (252 - DRIVER_HEADER_SIZE)
46
47 /* Size of a block in a buffer ring */
48 #define DRIVER_BLOCK_SIZE 256
49
50
51 /* Default number of transmit buffers */
52 #define DRIVER_DEFAULT_TX_BUFFER_COUNT 12
53 #define BUFFERS_PER_TX_BUF 1
54
55 /* Interrupt Mask Register value */
56 #define DRIVER_INTERRUPT_MASK IMR_ALLE - IMR_RDCE
57
58
59
60 /* Global structures */
61
62 typedef struct _MINIPORT_RESERVED
63 {
64 PNDIS_PACKET Next;
65 } MINIPORT_RESERVED, *PMINIPORT_RESERVED;
66
67 #define RESERVED(Packet) ((PMINIPORT_RESERVED)((Packet)->MiniportReserved))
68
69 typedef UCHAR DRIVER_HARDWARE_ADDRESS[DRIVER_LENGTH_OF_ADDRESS];
70
71 /* Information about an adapter */
72 typedef struct _NIC_ADAPTER
73 {
74 /* Entry on global adapter list */
75 LIST_ENTRY ListEntry;
76 /* Adapter handle */
77 NDIS_HANDLE MiniportAdapterHandle;
78 /* NDIS interrupt object */
79 NDIS_MINIPORT_INTERRUPT Interrupt;
80
81 /* I/O base address and interrupt number of adapter */
82 ULONG IoBaseAddress;
83 ULONG InterruptLevel;
84 ULONG InterruptVector;
85 BOOLEAN InterruptShared;
86 KINTERRUPT_MODE InterruptMode;
87
88 /* Mapped address of the I/O base port */
89 PUCHAR IOBase;
90
91 /* TRUE if the NIC can transfer in word mode */
92 BOOLEAN WordMode;
93
94 /* Base address and size of the onboard memory window */
95 PUCHAR RamBase;
96 UINT RamSize;
97
98 /* Station Address PROM (SAPROM) */
99 UCHAR SAPROM[16];
100
101 /* Onboard ethernet address from the manufacturer */
102 DRIVER_HARDWARE_ADDRESS PermanentAddress;
103
104 /* Ethernet address currently in use */
105 DRIVER_HARDWARE_ADDRESS StationAddress;
106
107 /* Maximum number of multicast addresses this adapter supports */
108 ULONG MaxMulticastListSize;
109
110 /* List of multicast addresses in use */
111 DRIVER_HARDWARE_ADDRESS Addresses[DRIVER_MAX_MULTICAST_LIST_SIZE];
112
113 /* Current multicast address mask */
114 UCHAR MulticastAddressMask[8];
115
116 /* Masked interrupts (IMR value) */
117 ULONG InterruptMask;
118
119 /* Interrupts that have occurred */
120 UCHAR InterruptStatus;
121
122 /* Current packet filter */
123 ULONG PacketFilter;
124
125 /* Lookahead buffer */
126 UINT LookaheadSize;
127 UCHAR Lookahead[DRIVER_MAXIMUM_LOOKAHEAD + DRIVER_HEADER_SIZE];
128
129 /* Receive buffer ring */
130 UINT PageStart;
131 UINT PageStop;
132 UINT CurrentPage;
133 UINT NextPacket;
134
135 /* TRUE if there was a buffer overflow */
136 BOOLEAN BufferOverflow;
137
138 /* TRUE if an error occurred during reception of a packet */
139 BOOLEAN ReceiveError;
140
141 /* TRUE if an error occurred during transmission of a packet */
142 BOOLEAN TransmitError;
143
144 /* TRUE if a transmit interrupt is pending */
145 BOOLEAN TransmitPending;
146
147 /* Received packet header */
148 PACKET_HEADER PacketHeader;
149
150 /* Offset in onboard RAM of received packet */
151 ULONG PacketOffset;
152
153 /* TRUE if receive indications are done and should be completed */
154 BOOLEAN DoneIndicating;
155
156 /* Transmit buffers */
157 UINT TXStart; /* Start block of transmit buffer ring */
158 UINT TXCount; /* Number of blocks in transmit buffer ring */
159 UINT TXFree; /* Number of free transmit buffers */
160 UINT TXNext; /* Next buffer to use */
161 /* Length of packet. 0 means buffer is unused */
162 UINT TXSize[DRIVER_DEFAULT_TX_BUFFER_COUNT];
163 INT TXCurrent; /* Current buffer beeing transmitted. -1 means none */
164
165 /* Head of transmit queue */
166 PNDIS_PACKET TXQueueHead;
167 /* Tail of transmit queue */
168 PNDIS_PACKET TXQueueTail;
169
170 /* Statistics */
171 ULONG FrameAlignmentErrors;
172 ULONG CrcErrors;
173 ULONG MissedPackets;
174
175 /* Flags used for driver cleanup */
176 BOOLEAN IOPortRangeRegistered;
177 BOOLEAN InterruptRegistered;
178 } NIC_ADAPTER, *PNIC_ADAPTER;
179
180 /* Global driver information */
181 typedef struct _DRIVER_INFORMATION
182 {
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;
187
188
189
190 /* Global variable */
191
192 extern DRIVER_INFORMATION DriverInfo;
193 extern NDIS_PHYSICAL_ADDRESS HighestAcceptableMax;
194
195
196
197 /* Prototypes */
198
199 BOOLEAN NICCheck(
200 PNIC_ADAPTER Adapter);
201
202 NDIS_STATUS NICInitialize(
203 PNIC_ADAPTER Adapter);
204
205 NDIS_STATUS NICSetup(
206 PNIC_ADAPTER Adapter);
207
208 NDIS_STATUS NICStart(
209 PNIC_ADAPTER Adapter);
210
211 NDIS_STATUS NICStop(
212 PNIC_ADAPTER Adapter);
213
214 NDIS_STATUS NICReset(
215 PNIC_ADAPTER Adapter);
216
217 VOID NICUpdateCounters(
218 PNIC_ADAPTER Adapter);
219
220 VOID NICReadDataAlign(
221 PNIC_ADAPTER Adapter,
222 PUSHORT Target,
223 ULONG Source,
224 USHORT Length);
225
226 VOID NICWriteDataAlign(
227 PNIC_ADAPTER Adapter,
228 ULONG Target,
229 PUSHORT Source,
230 USHORT Length);
231
232 VOID NICReadData(
233 PNIC_ADAPTER Adapter,
234 PUCHAR Target,
235 ULONG Source,
236 USHORT Length);
237
238 VOID NICWriteData(
239 PNIC_ADAPTER Adapter,
240 ULONG Target,
241 PUCHAR Source,
242 USHORT Length);
243
244 VOID NICTransmit(
245 PNIC_ADAPTER Adapter);
246
247 #endif /* __NE2000_H */
248
249 /* EOF */