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