Big merge: thanks alex and greatlord. Not a complete merge but most
[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 InterruptNumber;
82
83 /* Mapped address of the I/O base port */
84 PUCHAR IOBase;
85
86 /* TRUE if the NIC can transfer in word mode */
87 BOOLEAN WordMode;
88
89 /* Base address and size of the onboard memory window */
90 PUCHAR RamBase;
91 UINT RamSize;
92
93 /* Station Address PROM (SAPROM) */
94 UCHAR SAPROM[16];
95
96 /* Onboard ethernet address from the manufacturer */
97 DRIVER_HARDWARE_ADDRESS PermanentAddress;
98
99 /* Ethernet address currently in use */
100 DRIVER_HARDWARE_ADDRESS StationAddress;
101
102 /* Maximum number of multicast addresses this adapter supports */
103 ULONG MaxMulticastListSize;
104
105 /* List of multicast addresses in use */
106 DRIVER_HARDWARE_ADDRESS Addresses[DRIVER_MAX_MULTICAST_LIST_SIZE];
107
108 /* Current multicast address mask */
109 UCHAR MulticastAddressMask[8];
110
111 /* Masked interrupts (IMR value) */
112 ULONG InterruptMask;
113
114 /* Interrupts that have occurred */
115 UCHAR InterruptStatus;
116
117 /* Current packet filter */
118 ULONG PacketFilter;
119
120 /* Lookahead buffer */
121 UINT LookaheadSize;
122 UCHAR Lookahead[DRIVER_MAXIMUM_LOOKAHEAD + DRIVER_HEADER_SIZE];
123
124 /* Receive buffer ring */
125 UINT PageStart;
126 UINT PageStop;
127 UINT CurrentPage;
128 UINT NextPacket;
129
130 /* TRUE if there was a buffer overflow */
131 BOOLEAN BufferOverflow;
132
133 /* TRUE if an error occurred during reception of a packet */
134 BOOLEAN ReceiveError;
135
136 /* TRUE if an error occurred during transmission of a packet */
137 BOOLEAN TransmitError;
138
139 /* TRUE if a transmit interrupt is pending */
140 BOOLEAN TransmitPending;
141
142 /* Received packet header */
143 PACKET_HEADER PacketHeader;
144
145 /* Offset in onboard RAM of received packet */
146 ULONG PacketOffset;
147
148 /* TRUE if receive indications are done and should be completed */
149 BOOLEAN DoneIndicating;
150
151 /* Transmit buffers */
152 UINT TXStart; /* Start block of transmit buffer ring */
153 UINT TXCount; /* Number of blocks in transmit buffer ring */
154 UINT TXFree; /* Number of free transmit buffers */
155 UINT TXNext; /* Next buffer to use */
156 /* Length of packet. 0 means buffer is unused */
157 INT TXSize[DRIVER_DEFAULT_TX_BUFFER_COUNT];
158 INT TXCurrent; /* Current buffer beeing transmitted. -1 means none */
159
160 /* Head of transmit queue */
161 PNDIS_PACKET TXQueueHead;
162 /* Tail of transmit queue */
163 PNDIS_PACKET TXQueueTail;
164
165 /* Statistics */
166 ULONG FrameAlignmentErrors;
167 ULONG CrcErrors;
168 ULONG MissedPackets;
169
170 /* Flags used for driver cleanup */
171 BOOLEAN IOPortRangeRegistered;
172 BOOLEAN InterruptRegistered;
173 } NIC_ADAPTER, *PNIC_ADAPTER;
174
175 /* Global driver information */
176 typedef struct _DRIVER_INFORMATION
177 {
178 NDIS_HANDLE NdisWrapperHandle; /* Returned from NdisInitializeWrapper */
179 NDIS_HANDLE NdisMacHandle; /* Returned from NdisRegisterMac */
180 LIST_ENTRY AdapterListHead; /* Adapters this driver control */
181 } DRIVER_INFORMATION, *PDRIVER_INFORMATION;
182
183
184
185 /* Global variable */
186
187 extern DRIVER_INFORMATION DriverInfo;
188 extern NDIS_PHYSICAL_ADDRESS HighestAcceptableMax;
189
190
191
192 /* Prototypes */
193
194 BOOLEAN NICCheck(
195 PNIC_ADAPTER Adapter);
196
197 NDIS_STATUS NICInitialize(
198 PNIC_ADAPTER Adapter);
199
200 NDIS_STATUS NICSetup(
201 PNIC_ADAPTER Adapter);
202
203 NDIS_STATUS NICStart(
204 PNIC_ADAPTER Adapter);
205
206 NDIS_STATUS NICStop(
207 PNIC_ADAPTER Adapter);
208
209 NDIS_STATUS NICReset(
210 PNIC_ADAPTER Adapter);
211
212 VOID NICUpdateCounters(
213 PNIC_ADAPTER Adapter);
214
215 VOID NICReadDataAlign(
216 PNIC_ADAPTER Adapter,
217 PUSHORT Target,
218 ULONG Source,
219 USHORT Length);
220
221 VOID NICWriteDataAlign(
222 PNIC_ADAPTER Adapter,
223 ULONG Target,
224 PUSHORT Source,
225 USHORT Length);
226
227 VOID NICReadData(
228 PNIC_ADAPTER Adapter,
229 PUCHAR Target,
230 ULONG Source,
231 USHORT Length);
232
233 VOID NICWriteData(
234 PNIC_ADAPTER Adapter,
235 ULONG Target,
236 PUCHAR Source,
237 USHORT Length);
238
239 VOID NICTransmit(
240 PNIC_ADAPTER Adapter);
241
242 #endif /* __NE2000_H */
243
244 /* EOF */