[NDISUIO]
[reactos.git] / drivers / network / ndisuio / ndisuio.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS NDIS User I/O driver
4 * FILE: ndisuio.h
5 * PURPOSE: NDISUIO definitions
6 */
7 #ifndef __NDISUIO_H
8 #define __NDISUIO_H
9
10 #include <wdm.h>
11 #include <ndis.h>
12 #include <nuiouser.h>
13
14 extern PDEVICE_OBJECT GlobalDeviceObject;
15 extern NDIS_HANDLE GlobalProtocolHandle;
16 extern LIST_ENTRY GlobalAdapterList;
17 extern KSPIN_LOCK GlobalAdapterListLock;
18
19 typedef struct _NDISUIO_ADAPTER_CONTEXT
20 {
21 /* Asynchronous completion */
22 NDIS_STATUS AsyncStatus;
23 KEVENT AsyncEvent;
24
25 /* NDIS binding information */
26 NDIS_HANDLE BindingHandle;
27
28 /* Reference count information */
29 ULONG OpenCount;
30 LIST_ENTRY OpenEntryList;
31
32 /* NDIS pools */
33 NDIS_HANDLE PacketPoolHandle;
34 NDIS_HANDLE BufferPoolHandle;
35
36 /* Receive packet list */
37 LIST_ENTRY PacketList;
38 KEVENT PacketReadEvent;
39
40 /* Device name */
41 UNICODE_STRING DeviceName;
42
43 /* Global list entry */
44 LIST_ENTRY ListEntry;
45
46 /* Spin lock */
47 KSPIN_LOCK Spinlock;
48 } NDISUIO_ADAPTER_CONTEXT, *PNDISUIO_ADAPTER_CONTEXT;
49
50 typedef struct _NDISUIO_OPEN_ENTRY
51 {
52 /* File object */
53 PFILE_OBJECT FileObject;
54
55 /* Tracks how this adapter was opened (write-only or read-write) */
56 BOOLEAN WriteOnly;
57
58 /* List entry */
59 LIST_ENTRY ListEntry;
60 } NDISUIO_OPEN_ENTRY, *PNDISUIO_OPEN_ENTRY;
61
62 typedef struct _NDISUIO_PACKET_ENTRY
63 {
64 /* Length of data at the end of the struct */
65 ULONG PacketLength;
66
67 /* Entry on the packet list */
68 LIST_ENTRY ListEntry;
69
70 /* Packet data */
71 UCHAR PacketData[1];
72 } NDISUIO_PACKET_ENTRY, *PNDISUIO_PACKET_ENTRY;
73
74 /* NDIS version info */
75 #define NDIS_MAJOR_VERSION 5
76 #define NDIS_MINOR_VERSION 0
77
78 /* createclose.c */
79 NTSTATUS
80 NTAPI
81 NduDispatchCreate(PDEVICE_OBJECT DeviceObject,
82 PIRP Irp);
83
84 NTSTATUS
85 NTAPI
86 NduDispatchClose(PDEVICE_OBJECT DeviceObject,
87 PIRP Irp);
88
89 /* ioctl.c */
90 NTSTATUS
91 NTAPI
92 NduDispatchDeviceControl(PDEVICE_OBJECT DeviceObject,
93 PIRP Irp);
94
95 /* misc.c */
96 NDIS_STATUS
97 AllocateAndChainBuffer(PNDISUIO_ADAPTER_CONTEXT AdapterContext,
98 PNDIS_PACKET Packet,
99 PVOID Buffer,
100 ULONG BufferSize,
101 BOOLEAN Front);
102
103 PNDIS_PACKET
104 CreatePacketFromPoolBuffer(PNDISUIO_ADAPTER_CONTEXT AdapterContext,
105 PVOID Buffer,
106 ULONG BufferSize);
107
108 VOID
109 CleanupAndFreePacket(PNDIS_PACKET Packet,
110 BOOLEAN FreePool);
111
112 PNDISUIO_ADAPTER_CONTEXT
113 FindAdapterContextByName(PNDIS_STRING DeviceName);
114
115 VOID
116 ReferenceAdapterContext(PNDISUIO_ADAPTER_CONTEXT AdapterContext);
117
118 VOID
119 DereferenceAdapterContextWithOpenEntry(PNDISUIO_ADAPTER_CONTEXT AdapterContext,
120 PNDISUIO_OPEN_ENTRY OpenEntry);
121
122 /* protocol.c */
123 VOID
124 NTAPI
125 NduOpenAdapterComplete(NDIS_HANDLE ProtocolBindingContext,
126 NDIS_STATUS Status,
127 NDIS_STATUS OpenStatus);
128
129 VOID
130 NTAPI
131 NduCloseAdapterComplete(NDIS_HANDLE ProtocolBindingContext,
132 NDIS_STATUS Status);
133
134 VOID
135 NTAPI
136 NduSendComplete(NDIS_HANDLE ProtocolBindingContext,
137 PNDIS_PACKET Packet,
138 NDIS_STATUS Status);
139
140 VOID
141 NTAPI
142 NduTransferDataComplete(NDIS_HANDLE ProtocolBindingContext,
143 PNDIS_PACKET Packet,
144 NDIS_STATUS Status,
145 UINT BytesTransferred);
146
147 VOID
148 NTAPI
149 NduResetComplete(NDIS_HANDLE ProtocolBindingContext,
150 NDIS_STATUS Status);
151
152 VOID
153 NTAPI
154 NduRequestComplete(NDIS_HANDLE ProtocolBindingContext,
155 PNDIS_REQUEST NdisRequest,
156 NDIS_STATUS Status);
157
158 NDIS_STATUS
159 NTAPI
160 NduReceive(NDIS_HANDLE ProtocolBindingContext,
161 NDIS_HANDLE MacReceiveContext,
162 PVOID HeaderBuffer,
163 UINT HeaderBufferSize,
164 PVOID LookAheadBuffer,
165 UINT LookaheadBufferSize,
166 UINT PacketSize);
167
168 VOID
169 NTAPI
170 NduReceiveComplete(NDIS_HANDLE ProtocolBindingContext);
171
172 VOID
173 NTAPI
174 NduStatus(NDIS_HANDLE ProtocolBindingContext,
175 NDIS_STATUS GeneralStatus,
176 PVOID StatusBuffer,
177 UINT StatusBufferSize);
178
179 VOID
180 NTAPI
181 NduStatusComplete(NDIS_HANDLE ProtocolBindingContext);
182
183 VOID
184 NTAPI
185 NduBindAdapter(PNDIS_STATUS Status,
186 NDIS_HANDLE BindContext,
187 PNDIS_STRING DeviceName,
188 PVOID SystemSpecific1,
189 PVOID SystemSpecific2);
190
191 VOID
192 NTAPI
193 NduUnbindAdapter(PNDIS_STATUS Status,
194 NDIS_HANDLE ProtocolBindingContext,
195 NDIS_HANDLE UnbindContext);
196
197 /* readwrite.c */
198 NTSTATUS
199 NTAPI
200 NduDispatchRead(PDEVICE_OBJECT DeviceObject,
201 PIRP Irp);
202
203 NTSTATUS
204 NTAPI
205 NduDispatchWrite(PDEVICE_OBJECT DeviceObject,
206 PIRP Irp);
207 #endif /* __NDISUIO_H */