[E1000] Initial send implementation.
[reactos.git] / drivers / network / dd / e1000 / nic.h
1 /*
2 * PROJECT: ReactOS Intel PRO/1000 Driver
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Intel PRO/1000 driver definitions
5 * COPYRIGHT: Copyright 2013 Cameron Gutman (cameron.gutman@reactos.org)
6 * Copyright 2018 Mark Jansen (mark.jansen@reactos.org)
7 */
8
9 #ifndef _E1000_PCH_
10 #define _E1000_PCH_
11
12 #include <ndis.h>
13
14 #include "e1000hw.h"
15
16 #define E1000_TAG '001e'
17
18 #define MAXIMUM_FRAME_SIZE 1522
19 #define RECEIVE_BUFFER_SIZE 2048
20
21 #define DRIVER_VERSION 1
22
23
24 #define DEFAULT_INTERRUPT_MASK (E1000_IMS_LSC | E1000_IMS_TXDW | E1000_IMS_RXDMT0 | E1000_IMS_RXT0)
25
26 typedef struct _E1000_ADAPTER
27 {
28 NDIS_SPIN_LOCK Lock;
29 NDIS_HANDLE AdapterHandle;
30 USHORT VendorID;
31 USHORT DeviceID;
32 USHORT SubsystemID;
33 USHORT SubsystemVendorID;
34
35 UCHAR PermanentMacAddress[IEEE_802_ADDR_LENGTH];
36 struct {
37 UCHAR MacAddress[IEEE_802_ADDR_LENGTH];
38 } MulticastList[MAXIMUM_MULTICAST_ADDRESSES];
39
40 ULONG LinkSpeedMbps;
41 ULONG MediaState;
42 ULONG PacketFilter;
43
44 /* Io Port */
45 ULONG IoPortAddress;
46 ULONG IoPortLength;
47 volatile PUCHAR IoPort;
48
49 /* NIC Memory */
50 NDIS_PHYSICAL_ADDRESS IoAddress;
51 ULONG IoLength;
52 volatile PUCHAR IoBase;
53
54 /* Interrupt */
55 ULONG InterruptVector;
56 ULONG InterruptLevel;
57 BOOLEAN InterruptShared;
58 ULONG InterruptFlags;
59
60 NDIS_MINIPORT_INTERRUPT Interrupt;
61 BOOLEAN InterruptRegistered;
62
63 ULONG InterruptMask;
64 ULONG InterruptPending;
65
66
67 /* Transmit */
68 PE1000_TRANSMIT_DESCRIPTOR TransmitDescriptors;
69 NDIS_PHYSICAL_ADDRESS TransmitDescriptorsPa;
70
71 ULONG CurrentTxDesc;
72 ULONG LastTxDesc;
73 BOOLEAN TxFull;
74
75
76 /* Receive */
77 PE1000_RECEIVE_DESCRIPTOR ReceiveDescriptors;
78 NDIS_PHYSICAL_ADDRESS ReceiveDescriptorsPa;
79
80 ULONG CurrentRxDesc;
81
82 E1000_RCVBUF_SIZE ReceiveBufferType;
83 volatile PUCHAR ReceiveBuffer;
84 NDIS_PHYSICAL_ADDRESS ReceiveBufferPa;
85 ULONG ReceiveBufferEntrySize;
86
87 } E1000_ADAPTER, *PE1000_ADAPTER;
88
89
90 BOOLEAN
91 NTAPI
92 NICRecognizeHardware(
93 IN PE1000_ADAPTER Adapter);
94
95 NDIS_STATUS
96 NTAPI
97 NICInitializeAdapterResources(
98 IN PE1000_ADAPTER Adapter,
99 IN PNDIS_RESOURCE_LIST ResourceList);
100
101 NDIS_STATUS
102 NTAPI
103 NICAllocateIoResources(
104 IN PE1000_ADAPTER Adapter);
105
106 NDIS_STATUS
107 NTAPI
108 NICRegisterInterrupts(
109 IN PE1000_ADAPTER Adapter);
110
111 NDIS_STATUS
112 NTAPI
113 NICUnregisterInterrupts(
114 IN PE1000_ADAPTER Adapter);
115
116 NDIS_STATUS
117 NTAPI
118 NICReleaseIoResources(
119 IN PE1000_ADAPTER Adapter);
120
121 NDIS_STATUS
122 NTAPI
123 NICPowerOn(
124 IN PE1000_ADAPTER Adapter);
125
126 NDIS_STATUS
127 NTAPI
128 NICSoftReset(
129 IN PE1000_ADAPTER Adapter);
130
131 NDIS_STATUS
132 NTAPI
133 NICEnableTxRx(
134 IN PE1000_ADAPTER Adapter);
135
136 NDIS_STATUS
137 NTAPI
138 NICDisableTxRx(
139 IN PE1000_ADAPTER Adapter);
140
141 NDIS_STATUS
142 NTAPI
143 NICGetPermanentMacAddress(
144 IN PE1000_ADAPTER Adapter,
145 OUT PUCHAR MacAddress);
146
147 NDIS_STATUS
148 NTAPI
149 NICUpdateMulticastList(
150 IN PE1000_ADAPTER Adapter);
151
152 NDIS_STATUS
153 NTAPI
154 NICApplyPacketFilter(
155 IN PE1000_ADAPTER Adapter);
156
157 NDIS_STATUS
158 NTAPI
159 NICApplyInterruptMask(
160 IN PE1000_ADAPTER Adapter);
161
162 NDIS_STATUS
163 NTAPI
164 NICDisableInterrupts(
165 IN PE1000_ADAPTER Adapter);
166
167 ULONG
168 NTAPI
169 NICInterruptRecognized(
170 IN PE1000_ADAPTER Adapter,
171 OUT PBOOLEAN InterruptRecognized);
172
173 VOID
174 NTAPI
175 NICUpdateLinkStatus(
176 IN PE1000_ADAPTER Adapter);
177
178 NDIS_STATUS
179 NTAPI
180 NICTransmitPacket(
181 IN PE1000_ADAPTER Adapter,
182 IN ULONG PhysicalAddress,
183 IN ULONG Length);
184
185 NDIS_STATUS
186 NTAPI
187 MiniportSetInformation(
188 IN NDIS_HANDLE MiniportAdapterContext,
189 IN NDIS_OID Oid,
190 IN PVOID InformationBuffer,
191 IN ULONG InformationBufferLength,
192 OUT PULONG BytesRead,
193 OUT PULONG BytesNeeded);
194
195 NDIS_STATUS
196 NTAPI
197 MiniportQueryInformation(
198 IN NDIS_HANDLE MiniportAdapterContext,
199 IN NDIS_OID Oid,
200 IN PVOID InformationBuffer,
201 IN ULONG InformationBufferLength,
202 OUT PULONG BytesWritten,
203 OUT PULONG BytesNeeded);
204
205 VOID
206 NTAPI
207 MiniportISR(
208 OUT PBOOLEAN InterruptRecognized,
209 OUT PBOOLEAN QueueMiniportHandleInterrupt,
210 IN NDIS_HANDLE MiniportAdapterContext);
211
212 VOID
213 NTAPI
214 MiniportHandleInterrupt(
215 IN NDIS_HANDLE MiniportAdapterContext);
216
217
218 VOID
219 NTAPI
220 E1000WriteUlong(
221 IN PE1000_ADAPTER Adapter,
222 IN ULONG Address,
223 IN ULONG Value);
224
225
226
227 #endif /* _E1000_PCH_ */