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
10 #define NDIS_MINIPORT_DRIVER 1
11 #define NDIS_LEGACY_MINIPORT 1
12 #define NDIS51_MINIPORT 1
17 /* Define NOCARD to test NDIS without a card */
20 /* NE2000 sepcific constants */
21 #define NIC_DATA 0x10 /* Data register */
22 #define NIC_RESET 0x1F /* Reset register */
25 /* Global constants */
27 #define DRIVER_NDIS_MAJOR_VERSION 3
28 #define DRIVER_NDIS_MINOR_VERSION 0
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
35 #define DRIVER_MAX_MULTICAST_LIST_SIZE 8
37 #define DRIVER_VENDOR_DESCRIPTION "Novell Eagle 2000 Adapter."
38 #define DRIVER_VENDOR_DRIVER_VERSION 0x0100 /* 1.0 */
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 */
44 /* Maximum lookahead buffer size */
45 #define DRIVER_MAXIMUM_LOOKAHEAD (252 - DRIVER_HEADER_SIZE)
47 /* Size of a block in a buffer ring */
48 #define DRIVER_BLOCK_SIZE 256
51 /* Default number of transmit buffers */
52 #define DRIVER_DEFAULT_TX_BUFFER_COUNT 12
53 #define BUFFERS_PER_TX_BUF 1
55 /* Interrupt Mask Register value */
56 #define DRIVER_INTERRUPT_MASK IMR_ALLE - IMR_RDCE
60 /* Global structures */
62 typedef struct _MINIPORT_RESERVED
65 } MINIPORT_RESERVED
, *PMINIPORT_RESERVED
;
67 #define RESERVED(Packet) ((PMINIPORT_RESERVED)((Packet)->MiniportReserved))
69 typedef UCHAR DRIVER_HARDWARE_ADDRESS
[DRIVER_LENGTH_OF_ADDRESS
];
71 /* Information about an adapter */
72 typedef struct _NIC_ADAPTER
74 /* Entry on global adapter list */
77 NDIS_HANDLE MiniportAdapterHandle
;
78 /* NDIS interrupt object */
79 NDIS_MINIPORT_INTERRUPT Interrupt
;
81 /* I/O base address and interrupt number of adapter */
82 ULONG_PTR IoBaseAddress
;
84 ULONG InterruptVector
;
85 BOOLEAN InterruptShared
;
86 KINTERRUPT_MODE InterruptMode
;
88 /* Mapped address of the I/O base port */
91 /* TRUE if the NIC can transfer in word mode */
94 /* Base address and size of the onboard memory window */
98 /* Station Address PROM (SAPROM) */
101 /* Onboard ethernet address from the manufacturer */
102 DRIVER_HARDWARE_ADDRESS PermanentAddress
;
104 /* Ethernet address currently in use */
105 DRIVER_HARDWARE_ADDRESS StationAddress
;
107 /* Maximum number of multicast addresses this adapter supports */
108 ULONG MaxMulticastListSize
;
110 /* List of multicast addresses in use */
111 DRIVER_HARDWARE_ADDRESS Addresses
[DRIVER_MAX_MULTICAST_LIST_SIZE
];
113 /* Current multicast address mask */
114 UCHAR MulticastAddressMask
[8];
116 /* Masked interrupts (IMR value) */
119 /* Interrupts that have occurred */
120 UCHAR InterruptStatus
;
122 /* Current packet filter */
125 /* Lookahead buffer */
127 UCHAR Lookahead
[DRIVER_MAXIMUM_LOOKAHEAD
+ DRIVER_HEADER_SIZE
];
129 /* Receive buffer ring */
135 /* TRUE if there was a buffer overflow */
136 BOOLEAN BufferOverflow
;
138 /* TRUE if an error occurred during reception of a packet */
139 BOOLEAN ReceiveError
;
141 /* TRUE if an error occurred during transmission of a packet */
142 BOOLEAN TransmitError
;
144 /* TRUE if a transmit interrupt is pending */
145 BOOLEAN TransmitPending
;
147 /* Received packet header */
148 PACKET_HEADER PacketHeader
;
150 /* Offset in onboard RAM of received packet */
153 /* TRUE if receive indications are done and should be completed */
154 BOOLEAN DoneIndicating
;
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 */
165 /* Head of transmit queue */
166 PNDIS_PACKET TXQueueHead
;
167 /* Tail of transmit queue */
168 PNDIS_PACKET TXQueueTail
;
171 ULONG FrameAlignmentErrors
;
175 /* Flags used for driver cleanup */
176 BOOLEAN IOPortRangeRegistered
;
177 BOOLEAN InterruptRegistered
;
178 BOOLEAN ShutdownHandlerRegistered
;
179 } NIC_ADAPTER
, *PNIC_ADAPTER
;
181 /* Global driver information */
182 typedef struct _DRIVER_INFORMATION
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
;
191 /* Global variable */
193 extern DRIVER_INFORMATION DriverInfo
;
194 extern NDIS_PHYSICAL_ADDRESS HighestAcceptableMax
;
201 PNIC_ADAPTER Adapter
);
203 NDIS_STATUS
NICInitialize(
204 PNIC_ADAPTER Adapter
);
206 NDIS_STATUS
NICSetup(
207 PNIC_ADAPTER Adapter
);
209 NDIS_STATUS
NICStart(
210 PNIC_ADAPTER Adapter
);
213 PNIC_ADAPTER Adapter
);
215 NDIS_STATUS
NICReset(
216 PNIC_ADAPTER Adapter
);
218 VOID
NICUpdateCounters(
219 PNIC_ADAPTER Adapter
);
221 VOID
NICReadDataAlign(
222 PNIC_ADAPTER Adapter
,
227 VOID
NICWriteDataAlign(
228 PNIC_ADAPTER Adapter
,
234 PNIC_ADAPTER Adapter
,
240 PNIC_ADAPTER Adapter
,
246 PNIC_ADAPTER Adapter
);
248 #endif /* __NE2000_H */