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