1 |
/* |
2 |
* b2ether driver -- derived from DDK packet driver sample |
3 |
* |
4 |
* Basilisk II (C) 1997-1999 Christian Bauer |
5 |
* |
6 |
* Windows platform specific code copyright (C) Lauri Pesonen |
7 |
* |
8 |
* This program is free software; you can redistribute it and/or modify |
9 |
* it under the terms of the GNU General Public License as published by |
10 |
* the Free Software Foundation; either version 2 of the License, or |
11 |
* (at your option) any later version. |
12 |
* |
13 |
* This program is distributed in the hope that it will be useful, |
14 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 |
* GNU General Public License for more details. |
17 |
* |
18 |
* You should have received a copy of the GNU General Public License |
19 |
* along with this program; if not, write to the Free Software |
20 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
21 |
*/ |
22 |
|
23 |
#ifndef _B2ETHER_H_ |
24 |
#define _B2ETHER_H_ |
25 |
|
26 |
#undef ExAllocatePool |
27 |
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a, b, 'te2B') |
28 |
|
29 |
#if DBG |
30 |
#define DebugPrint(_x_) \ |
31 |
DbgPrint("B2ETHER: ");\ |
32 |
DbgPrint _x_; |
33 |
#else |
34 |
#define DebugPrint(_x_) |
35 |
#endif |
36 |
|
37 |
#define NT_DEVICE_NAME L"\\Device\\B2ether" |
38 |
#define DOS_DEVICE_NAME L"\\DosDevices\\B2ether" |
39 |
|
40 |
typedef struct _GLOBAL { |
41 |
PDRIVER_OBJECT DriverObject; |
42 |
NDIS_HANDLE NdisProtocolHandle; |
43 |
UNICODE_STRING RegistryPath; |
44 |
LIST_ENTRY AdapterList; |
45 |
KSPIN_LOCK GlobalLock; |
46 |
PDEVICE_OBJECT ControlDeviceObject; |
47 |
} GLOBAL, *PGLOBAL; |
48 |
|
49 |
GLOBAL Globals; |
50 |
|
51 |
typedef struct _INTERNAL_REQUEST { |
52 |
PIRP Irp; |
53 |
NDIS_REQUEST Request; |
54 |
} INTERNAL_REQUEST, *PINTERNAL_REQUEST; |
55 |
|
56 |
typedef struct _OPEN_INSTANCE { |
57 |
PDEVICE_OBJECT DeviceObject; |
58 |
ULONG IrpCount; |
59 |
NDIS_STRING AdapterName; |
60 |
NDIS_STRING SymbolicLink; |
61 |
NDIS_HANDLE AdapterHandle; |
62 |
NDIS_HANDLE PacketPool; |
63 |
KSPIN_LOCK RcvQSpinLock; |
64 |
LIST_ENTRY RcvList; |
65 |
NDIS_MEDIUM Medium; |
66 |
KSPIN_LOCK ResetQueueLock; |
67 |
LIST_ENTRY ResetIrpList; |
68 |
NDIS_STATUS Status; |
69 |
NDIS_EVENT Event; |
70 |
NDIS_EVENT CleanupEvent; |
71 |
LIST_ENTRY AdapterListEntry; |
72 |
BOOLEAN Bound; |
73 |
CHAR Filler[3]; |
74 |
} OPEN_INSTANCE, *POPEN_INSTANCE; |
75 |
|
76 |
typedef struct _PACKET_RESERVED { |
77 |
LIST_ENTRY ListElement; |
78 |
PIRP Irp; |
79 |
PMDL pMdl; |
80 |
} PACKET_RESERVED, *PPACKET_RESERVED; |
81 |
|
82 |
|
83 |
#define ETHERNET_HEADER_LENGTH 14 |
84 |
#define RESERVED(_p) ((PPACKET_RESERVED)((_p)->ProtocolReserved)) |
85 |
#define TRANSMIT_PACKETS 16 |
86 |
|
87 |
|
88 |
NTSTATUS |
89 |
DriverEntry( |
90 |
IN PDRIVER_OBJECT DriverObject, |
91 |
IN PUNICODE_STRING RegistryPath |
92 |
); |
93 |
|
94 |
NTSTATUS |
95 |
PacketCancelReadIrps( |
96 |
IN PDEVICE_OBJECT DeviceObject |
97 |
); |
98 |
|
99 |
NTSTATUS |
100 |
PacketCleanup( |
101 |
IN PDEVICE_OBJECT DeviceObject, |
102 |
IN PIRP Irp |
103 |
); |
104 |
|
105 |
VOID |
106 |
PacketBindAdapter( |
107 |
OUT PNDIS_STATUS Status, |
108 |
IN NDIS_HANDLE BindContext, |
109 |
IN PNDIS_STRING DeviceName, |
110 |
IN PVOID SystemSpecific1, |
111 |
IN PVOID SystemSpecific2 |
112 |
); |
113 |
VOID |
114 |
PacketUnbindAdapter( |
115 |
OUT PNDIS_STATUS Status, |
116 |
IN NDIS_HANDLE ProtocolBindingContext, |
117 |
IN NDIS_HANDLE UnbindContext |
118 |
); |
119 |
|
120 |
|
121 |
VOID |
122 |
PacketOpenAdapterComplete( |
123 |
IN NDIS_HANDLE ProtocolBindingContext, |
124 |
IN NDIS_STATUS Status, |
125 |
IN NDIS_STATUS OpenErrorStatus |
126 |
); |
127 |
|
128 |
VOID |
129 |
PacketCloseAdapterComplete( |
130 |
IN NDIS_HANDLE ProtocolBindingContext, |
131 |
IN NDIS_STATUS Status |
132 |
); |
133 |
|
134 |
|
135 |
NDIS_STATUS |
136 |
PacketReceiveIndicate( |
137 |
IN NDIS_HANDLE ProtocolBindingContext, |
138 |
IN NDIS_HANDLE MacReceiveContext, |
139 |
IN PVOID HeaderBuffer, |
140 |
IN UINT HeaderBufferSize, |
141 |
IN PVOID LookAheadBuffer, |
142 |
IN UINT LookaheadBufferSize, |
143 |
IN UINT PacketSize |
144 |
); |
145 |
|
146 |
VOID |
147 |
PacketReceiveComplete( |
148 |
IN NDIS_HANDLE ProtocolBindingContext |
149 |
); |
150 |
|
151 |
|
152 |
VOID |
153 |
PacketRequestComplete( |
154 |
IN NDIS_HANDLE ProtocolBindingContext, |
155 |
IN PNDIS_REQUEST pRequest, |
156 |
IN NDIS_STATUS Status |
157 |
); |
158 |
|
159 |
VOID |
160 |
PacketSendComplete( |
161 |
IN NDIS_HANDLE ProtocolBindingContext, |
162 |
IN PNDIS_PACKET pPacket, |
163 |
IN NDIS_STATUS Status |
164 |
); |
165 |
|
166 |
|
167 |
VOID |
168 |
PacketResetComplete( |
169 |
IN NDIS_HANDLE ProtocolBindingContext, |
170 |
IN NDIS_STATUS Status |
171 |
); |
172 |
|
173 |
|
174 |
VOID |
175 |
PacketStatus( |
176 |
IN NDIS_HANDLE ProtocolBindingContext, |
177 |
IN NDIS_STATUS Status, |
178 |
IN PVOID StatusBuffer, |
179 |
IN UINT StatusBufferSize |
180 |
); |
181 |
|
182 |
|
183 |
VOID |
184 |
PacketStatusComplete( |
185 |
IN NDIS_HANDLE ProtocolBindingContext |
186 |
); |
187 |
|
188 |
VOID |
189 |
PacketTransferDataComplete( |
190 |
IN NDIS_HANDLE ProtocolBindingContext, |
191 |
IN PNDIS_PACKET Packet, |
192 |
IN NDIS_STATUS Status, |
193 |
IN UINT BytesTransferred |
194 |
); |
195 |
|
196 |
|
197 |
NTSTATUS |
198 |
PacketShutdown( |
199 |
IN PDEVICE_OBJECT DeviceObject, |
200 |
IN PIRP Irp |
201 |
); |
202 |
|
203 |
VOID |
204 |
PacketUnload( |
205 |
IN PDRIVER_OBJECT DriverObject |
206 |
); |
207 |
|
208 |
|
209 |
|
210 |
NTSTATUS |
211 |
PacketOpen( |
212 |
IN PDEVICE_OBJECT DeviceObject, |
213 |
IN PIRP Irp |
214 |
); |
215 |
|
216 |
NTSTATUS |
217 |
PacketClose( |
218 |
IN PDEVICE_OBJECT DeviceObject, |
219 |
IN PIRP Irp |
220 |
); |
221 |
|
222 |
NTSTATUS |
223 |
PacketWrite( |
224 |
IN PDEVICE_OBJECT DeviceObject, |
225 |
IN PIRP Irp |
226 |
); |
227 |
|
228 |
NTSTATUS |
229 |
PacketRead( |
230 |
IN PDEVICE_OBJECT DeviceObject, |
231 |
IN PIRP Irp |
232 |
); |
233 |
|
234 |
NTSTATUS |
235 |
PacketIoControl( |
236 |
IN PDEVICE_OBJECT DeviceObject, |
237 |
IN PIRP Irp |
238 |
); |
239 |
|
240 |
VOID |
241 |
PacketCancelRoutine ( |
242 |
IN PDEVICE_OBJECT DeviceObject, |
243 |
IN PIRP Irp |
244 |
); |
245 |
|
246 |
INT |
247 |
PacketReceivePacket( |
248 |
IN NDIS_HANDLE ProtocolBindingContext, |
249 |
IN PNDIS_PACKET Packet |
250 |
); |
251 |
|
252 |
NTSTATUS |
253 |
PacketGetAdapterList( |
254 |
IN PVOID Buffer, |
255 |
IN ULONG Length, |
256 |
IN OUT PULONG DataLength |
257 |
); |
258 |
|
259 |
NDIS_STATUS |
260 |
PacketPNPHandler( |
261 |
IN NDIS_HANDLE ProtocolBindingContext, |
262 |
IN PNET_PNP_EVENT pNetPnPEvent |
263 |
); |
264 |
|
265 |
|
266 |
VOID |
267 |
IoIncrement ( |
268 |
IN OUT POPEN_INSTANCE Open |
269 |
); |
270 |
|
271 |
VOID |
272 |
IoDecrement ( |
273 |
IN OUT POPEN_INSTANCE Open |
274 |
); |
275 |
|
276 |
#endif //_B2ETHER_H_ |