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