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
14 /* Define NOCARD to test NDIS without a card */
17 /* NE2000 sepcific constants */
18 #define NIC_DATA 0x10 /* Data register */
19 #define NIC_RESET 0x1F /* Reset register */
22 /* Global constants */
24 #define DRIVER_NDIS_MAJOR_VERSION 3
25 #define DRIVER_NDIS_MINOR_VERSION 0
27 #define DRIVER_DEFAULT_IO_BASE_ADDRESS 0x280 /* bochs default */
28 #define DRIVER_DEFAULT_INTERRUPT_NUMBER 9 /* bochs default */
30 #define DRIVER_MAX_MULTICAST_LIST_SIZE 8
32 #define DRIVER_VENDOR_DESCRIPTION "Novell Eagle 2000 Adapter."
33 #define DRIVER_VENDOR_DRIVER_VERSION 0x0100 /* 1.0 */
35 #define DRIVER_FRAME_SIZE 1514 /* Size of an ethernet frame */
36 #define DRIVER_HEADER_SIZE 14 /* Size of an ethernet header */
37 #define DRIVER_LENGTH_OF_ADDRESS 6 /* Size of an ethernet address */
39 /* Maximum lookahead buffer size */
40 #define DRIVER_MAXIMUM_LOOKAHEAD (252 - DRIVER_HEADER_SIZE)
42 /* Size of a block in a buffer ring */
43 #define DRIVER_BLOCK_SIZE 256
46 /* Default number of transmit buffers */
47 #define DRIVER_DEFAULT_TX_BUFFER_COUNT 12
48 #define BUFFERS_PER_TX_BUF 1
50 /* Interrupt Mask Register value */
51 #define DRIVER_INTERRUPT_MASK IMR_ALLE - IMR_RDCE
55 /* Global structures */
57 typedef struct _MINIPORT_RESERVED
60 } MINIPORT_RESERVED
, *PMINIPORT_RESERVED
;
62 #define RESERVED(Packet) ((PMINIPORT_RESERVED)((Packet)->u.s1.MiniportReserved))
64 typedef UCHAR DRIVER_HARDWARE_ADDRESS
[DRIVER_LENGTH_OF_ADDRESS
];
66 /* Information about an adapter */
67 typedef struct _NIC_ADAPTER
69 /* Entry on global adapter list */
72 NDIS_HANDLE MiniportAdapterHandle
;
73 /* NDIS interrupt object */
74 NDIS_MINIPORT_INTERRUPT Interrupt
;
76 /* I/O base address and interrupt number of adapter */
78 ULONG InterruptNumber
;
80 /* Mapped address of the I/O base port */
83 /* TRUE if the NIC can transfer in word mode */
86 /* Base address and size of the onboard memory window */
90 /* Station Address PROM (SAPROM) */
93 /* Onboard ethernet address from the manufacturer */
94 DRIVER_HARDWARE_ADDRESS PermanentAddress
;
96 /* Ethernet address currently in use */
97 DRIVER_HARDWARE_ADDRESS StationAddress
;
99 /* Maximum number of multicast addresses this adapter supports */
100 ULONG MaxMulticastListSize
;
102 /* List of multicast addresses in use */
103 DRIVER_HARDWARE_ADDRESS Addresses
[DRIVER_MAX_MULTICAST_LIST_SIZE
];
105 /* Current multicast address mask */
106 UCHAR MulticastAddressMask
[8];
108 /* Masked interrupts (IMR value) */
111 /* Interrupts that have occurred */
112 UCHAR InterruptStatus
;
114 /* Current packet filter */
117 /* Lookahead buffer */
119 UCHAR Lookahead
[DRIVER_MAXIMUM_LOOKAHEAD
+ DRIVER_HEADER_SIZE
];
121 /* Receive buffer ring */
127 /* TRUE if there was a buffer overflow */
128 BOOLEAN BufferOverflow
;
130 /* TRUE if an error occurred during reception of a packet */
131 BOOLEAN ReceiveError
;
133 /* TRUE if an error occurred during transmission of a packet */
134 BOOLEAN TransmitError
;
136 /* TRUE if a transmit interrupt is pending */
137 BOOLEAN TransmitPending
;
139 /* Received packet header */
140 PACKET_HEADER PacketHeader
;
142 /* Offset in onboard RAM of received packet */
145 /* TRUE if receive indications are done and should be completed */
146 BOOLEAN DoneIndicating
;
148 /* Transmit buffers */
149 UINT TXStart
; /* Start block of transmit buffer ring */
150 UINT TXCount
; /* Number of blocks in transmit buffer ring */
151 UINT TXFree
; /* Number of free transmit buffers */
152 UINT TXNext
; /* Next buffer to use */
153 /* Length of packet. 0 means buffer is unused */
154 INT TXSize
[DRIVER_DEFAULT_TX_BUFFER_COUNT
];
155 INT TXCurrent
; /* Current buffer beeing transmitted. -1 means none */
157 /* Head of transmit queue */
158 PNDIS_PACKET TXQueueHead
;
159 /* Tail of transmit queue */
160 PNDIS_PACKET TXQueueTail
;
163 ULONG FrameAlignmentErrors
;
167 /* Flags used for driver cleanup */
168 BOOLEAN IOPortRangeRegistered
;
169 BOOLEAN InterruptRegistered
;
170 } NIC_ADAPTER
, *PNIC_ADAPTER
;
172 /* Global driver information */
173 typedef struct _DRIVER_INFORMATION
175 NDIS_HANDLE NdisWrapperHandle
; /* Returned from NdisInitializeWrapper */
176 NDIS_HANDLE NdisMacHandle
; /* Returned from NdisRegisterMac */
177 LIST_ENTRY AdapterListHead
; /* Adapters this driver control */
178 } DRIVER_INFORMATION
, *PDRIVER_INFORMATION
;
182 /* Global variable */
184 extern DRIVER_INFORMATION DriverInfo
;
185 extern NDIS_PHYSICAL_ADDRESS HighestAcceptableMax
;
192 PNIC_ADAPTER Adapter
);
194 NDIS_STATUS
NICInitialize(
195 PNIC_ADAPTER Adapter
);
197 NDIS_STATUS
NICSetup(
198 PNIC_ADAPTER Adapter
);
200 NDIS_STATUS
NICStart(
201 PNIC_ADAPTER Adapter
);
204 PNIC_ADAPTER Adapter
);
206 NDIS_STATUS
NICReset(
207 PNIC_ADAPTER Adapter
);
209 VOID
NICUpdateCounters(
210 PNIC_ADAPTER Adapter
);
212 VOID
NICReadDataAlign(
213 PNIC_ADAPTER Adapter
,
218 VOID
NICWriteDataAlign(
219 PNIC_ADAPTER Adapter
,
225 PNIC_ADAPTER Adapter
,
231 PNIC_ADAPTER Adapter
,
237 PNIC_ADAPTER Adapter
);
239 #endif /* __NE2000_H */