]> Pileus Git - ~andy/linux/blob - drivers/staging/hv/include/rndis.h
Staging: hv: remove UINT32 and INT32 typedefs
[~andy/linux] / drivers / staging / hv / include / rndis.h
1 /*
2  *
3  * Copyright (c) 2009, Microsoft Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16  * Place - Suite 330, Boston, MA 02111-1307 USA.
17  *
18  * Authors:
19  *   Haiyang Zhang <haiyangz@microsoft.com>
20  *   Hank Janssen  <hjanssen@microsoft.com>
21  *
22  */
23
24
25 #ifndef _RNDIS_H_
26 #define _RNDIS_H_
27
28 //
29 //  Basic types
30 //
31 typedef u32                                  RNDIS_REQUEST_ID;
32 typedef u32                                  RNDIS_HANDLE;
33 typedef u32                                  RNDIS_STATUS;
34 typedef u32                                  RNDIS_REQUEST_TYPE;
35 typedef u32                                  RNDIS_OID;
36 typedef u32                                  RNDIS_CLASS_ID;
37 typedef u32                                  RNDIS_MEDIUM;
38 typedef u32                                  *PRNDIS_REQUEST_ID;
39 typedef u32                                  *PRNDIS_HANDLE;
40 typedef u32                                  *PRNDIS_STATUS;
41 typedef u32                                  *PRNDIS_REQUEST_TYPE;
42 typedef u32                                  *PRNDIS_OID;
43 typedef u32                                  *PRNDIS_CLASS_ID;
44 typedef u32                                  *PRNDIS_MEDIUM;
45 typedef u32                                  RNDIS_AF;
46
47 //
48 //  Status codes
49 //
50
51 #ifndef STATUS_SUCCESS
52 #define STATUS_SUCCESS                          (0x00000000L)
53 #endif
54
55 #ifndef STATUS_UNSUCCESSFUL
56 #define STATUS_UNSUCCESSFUL                     (0xC0000001L)
57 #endif
58
59 #ifndef STATUS_PENDING
60 #define STATUS_PENDING                          (0x00000103L)
61 #endif
62
63 #ifndef STATUS_INSUFFICIENT_RESOURCES
64 #define STATUS_INSUFFICIENT_RESOURCES           (0xC000009AL)
65 #endif
66
67 #ifndef STATUS_BUFFER_OVERFLOW
68 #define STATUS_BUFFER_OVERFLOW                  (0x80000005L)
69 #endif
70
71 #ifndef STATUS_NOT_SUPPORTED
72 #define STATUS_NOT_SUPPORTED                    (0xC00000BBL)
73 #endif
74
75 #define RNDIS_STATUS_SUCCESS                    ((RNDIS_STATUS)STATUS_SUCCESS)
76 #define RNDIS_STATUS_PENDING                    ((RNDIS_STATUS)STATUS_PENDING)
77 #define RNDIS_STATUS_NOT_RECOGNIZED             ((RNDIS_STATUS)0x00010001L)
78 #define RNDIS_STATUS_NOT_COPIED                 ((RNDIS_STATUS)0x00010002L)
79 #define RNDIS_STATUS_NOT_ACCEPTED               ((RNDIS_STATUS)0x00010003L)
80 #define RNDIS_STATUS_CALL_ACTIVE                ((RNDIS_STATUS)0x00010007L)
81
82 #define RNDIS_STATUS_ONLINE                     ((RNDIS_STATUS)0x40010003L)
83 #define RNDIS_STATUS_RESET_START                ((RNDIS_STATUS)0x40010004L)
84 #define RNDIS_STATUS_RESET_END                  ((RNDIS_STATUS)0x40010005L)
85 #define RNDIS_STATUS_RING_STATUS                ((RNDIS_STATUS)0x40010006L)
86 #define RNDIS_STATUS_CLOSED                     ((RNDIS_STATUS)0x40010007L)
87 #define RNDIS_STATUS_WAN_LINE_UP                ((RNDIS_STATUS)0x40010008L)
88 #define RNDIS_STATUS_WAN_LINE_DOWN              ((RNDIS_STATUS)0x40010009L)
89 #define RNDIS_STATUS_WAN_FRAGMENT               ((RNDIS_STATUS)0x4001000AL)
90 #define RNDIS_STATUS_MEDIA_CONNECT              ((RNDIS_STATUS)0x4001000BL)
91 #define RNDIS_STATUS_MEDIA_DISCONNECT           ((RNDIS_STATUS)0x4001000CL)
92 #define RNDIS_STATUS_HARDWARE_LINE_UP           ((RNDIS_STATUS)0x4001000DL)
93 #define RNDIS_STATUS_HARDWARE_LINE_DOWN         ((RNDIS_STATUS)0x4001000EL)
94 #define RNDIS_STATUS_INTERFACE_UP               ((RNDIS_STATUS)0x4001000FL)
95 #define RNDIS_STATUS_INTERFACE_DOWN             ((RNDIS_STATUS)0x40010010L)
96 #define RNDIS_STATUS_MEDIA_BUSY                 ((RNDIS_STATUS)0x40010011L)
97 #define RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION  ((RNDIS_STATUS)0x40010012L)
98 #define RNDIS_STATUS_WW_INDICATION              RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION
99 #define RNDIS_STATUS_LINK_SPEED_CHANGE          ((RNDIS_STATUS)0x40010013L)
100
101 #define RNDIS_STATUS_NOT_RESETTABLE             ((RNDIS_STATUS)0x80010001L)
102 #define RNDIS_STATUS_SOFT_ERRORS                ((RNDIS_STATUS)0x80010003L)
103 #define RNDIS_STATUS_HARD_ERRORS                ((RNDIS_STATUS)0x80010004L)
104 #define RNDIS_STATUS_BUFFER_OVERFLOW            ((RNDIS_STATUS)STATUS_BUFFER_OVERFLOW)
105
106 #define RNDIS_STATUS_FAILURE                    ((RNDIS_STATUS)STATUS_UNSUCCESSFUL)
107 #define RNDIS_STATUS_RESOURCES                  ((RNDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
108 #define RNDIS_STATUS_CLOSING                    ((RNDIS_STATUS)0xC0010002L)
109 #define RNDIS_STATUS_BAD_VERSION                ((RNDIS_STATUS)0xC0010004L)
110 #define RNDIS_STATUS_BAD_CHARACTERISTICS        ((RNDIS_STATUS)0xC0010005L)
111 #define RNDIS_STATUS_ADAPTER_NOT_FOUND          ((RNDIS_STATUS)0xC0010006L)
112 #define RNDIS_STATUS_OPEN_FAILED                ((RNDIS_STATUS)0xC0010007L)
113 #define RNDIS_STATUS_DEVICE_FAILED              ((RNDIS_STATUS)0xC0010008L)
114 #define RNDIS_STATUS_MULTICAST_FULL             ((RNDIS_STATUS)0xC0010009L)
115 #define RNDIS_STATUS_MULTICAST_EXISTS           ((RNDIS_STATUS)0xC001000AL)
116 #define RNDIS_STATUS_MULTICAST_NOT_FOUND        ((RNDIS_STATUS)0xC001000BL)
117 #define RNDIS_STATUS_REQUEST_ABORTED            ((RNDIS_STATUS)0xC001000CL)
118 #define RNDIS_STATUS_RESET_IN_PROGRESS          ((RNDIS_STATUS)0xC001000DL)
119 #define RNDIS_STATUS_CLOSING_INDICATING         ((RNDIS_STATUS)0xC001000EL)
120 #define RNDIS_STATUS_NOT_SUPPORTED              ((RNDIS_STATUS)STATUS_NOT_SUPPORTED)
121 #define RNDIS_STATUS_INVALID_PACKET             ((RNDIS_STATUS)0xC001000FL)
122 #define RNDIS_STATUS_OPEN_LIST_FULL             ((RNDIS_STATUS)0xC0010010L)
123 #define RNDIS_STATUS_ADAPTER_NOT_READY          ((RNDIS_STATUS)0xC0010011L)
124 #define RNDIS_STATUS_ADAPTER_NOT_OPEN           ((RNDIS_STATUS)0xC0010012L)
125 #define RNDIS_STATUS_NOT_INDICATING             ((RNDIS_STATUS)0xC0010013L)
126 #define RNDIS_STATUS_INVALID_LENGTH             ((RNDIS_STATUS)0xC0010014L)
127 #define RNDIS_STATUS_INVALID_DATA               ((RNDIS_STATUS)0xC0010015L)
128 #define RNDIS_STATUS_BUFFER_TOO_SHORT           ((RNDIS_STATUS)0xC0010016L)
129 #define RNDIS_STATUS_INVALID_OID                ((RNDIS_STATUS)0xC0010017L)
130 #define RNDIS_STATUS_ADAPTER_REMOVED            ((RNDIS_STATUS)0xC0010018L)
131 #define RNDIS_STATUS_UNSUPPORTED_MEDIA          ((RNDIS_STATUS)0xC0010019L)
132 #define RNDIS_STATUS_GROUP_ADDRESS_IN_USE       ((RNDIS_STATUS)0xC001001AL)
133 #define RNDIS_STATUS_FILE_NOT_FOUND             ((RNDIS_STATUS)0xC001001BL)
134 #define RNDIS_STATUS_ERROR_READING_FILE         ((RNDIS_STATUS)0xC001001CL)
135 #define RNDIS_STATUS_ALREADY_MAPPED             ((RNDIS_STATUS)0xC001001DL)
136 #define RNDIS_STATUS_RESOURCE_CONFLICT          ((RNDIS_STATUS)0xC001001EL)
137 #define RNDIS_STATUS_NO_CABLE                   ((RNDIS_STATUS)0xC001001FL)
138
139 #define RNDIS_STATUS_INVALID_SAP                ((RNDIS_STATUS)0xC0010020L)
140 #define RNDIS_STATUS_SAP_IN_USE                 ((RNDIS_STATUS)0xC0010021L)
141 #define RNDIS_STATUS_INVALID_ADDRESS            ((RNDIS_STATUS)0xC0010022L)
142 #define RNDIS_STATUS_VC_NOT_ACTIVATED           ((RNDIS_STATUS)0xC0010023L)
143 #define RNDIS_STATUS_DEST_OUT_OF_ORDER          ((RNDIS_STATUS)0xC0010024L)
144 #define RNDIS_STATUS_VC_NOT_AVAILABLE           ((RNDIS_STATUS)0xC0010025L)
145 #define RNDIS_STATUS_CELLRATE_NOT_AVAILABLE     ((RNDIS_STATUS)0xC0010026L)
146 #define RNDIS_STATUS_INCOMPATABLE_QOS           ((RNDIS_STATUS)0xC0010027L)
147 #define RNDIS_STATUS_AAL_PARAMS_UNSUPPORTED     ((RNDIS_STATUS)0xC0010028L)
148 #define RNDIS_STATUS_NO_ROUTE_TO_DESTINATION    ((RNDIS_STATUS)0xC0010029L)
149
150 #define RNDIS_STATUS_TOKEN_RING_OPEN_ERROR      ((RNDIS_STATUS)0xC0011000L)
151
152
153 //
154 // Object Identifiers used by NdisRequest Query/Set Information
155 //
156
157 //
158 // General Objects
159 //
160
161 #define RNDIS_OID_GEN_SUPPORTED_LIST                    0x00010101
162 #define RNDIS_OID_GEN_HARDWARE_STATUS                   0x00010102
163 #define RNDIS_OID_GEN_MEDIA_SUPPORTED                   0x00010103
164 #define RNDIS_OID_GEN_MEDIA_IN_USE                      0x00010104
165 #define RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD                 0x00010105
166 #define RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE                0x00010106
167 #define RNDIS_OID_GEN_LINK_SPEED                        0x00010107
168 #define RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE             0x00010108
169 #define RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE              0x00010109
170 #define RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE               0x0001010A
171 #define RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE                0x0001010B
172 #define RNDIS_OID_GEN_VENDOR_ID                         0x0001010C
173 #define RNDIS_OID_GEN_VENDOR_DESCRIPTION                0x0001010D
174 #define RNDIS_OID_GEN_CURRENT_PACKET_FILTER             0x0001010E
175 #define RNDIS_OID_GEN_CURRENT_LOOKAHEAD                 0x0001010F
176 #define RNDIS_OID_GEN_DRIVER_VERSION                    0x00010110
177 #define RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE                0x00010111
178 #define RNDIS_OID_GEN_PROTOCOL_OPTIONS                  0x00010112
179 #define RNDIS_OID_GEN_MAC_OPTIONS                       0x00010113
180 #define RNDIS_OID_GEN_MEDIA_CONNECT_STATUS              0x00010114
181 #define RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS              0x00010115
182 #define RNDIS_OID_GEN_VENDOR_DRIVER_VERSION             0x00010116
183 #define RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES           0x00010118
184 #define RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET           0x00010119
185 #define RNDIS_OID_GEN_MACHINE_NAME                      0x0001021A
186 #define RNDIS_OID_GEN_RNDIS_CONFIG_PARAMETER            0x0001021B
187
188 #define RNDIS_OID_GEN_XMIT_OK                           0x00020101
189 #define RNDIS_OID_GEN_RCV_OK                            0x00020102
190 #define RNDIS_OID_GEN_XMIT_ERROR                        0x00020103
191 #define RNDIS_OID_GEN_RCV_ERROR                         0x00020104
192 #define RNDIS_OID_GEN_RCV_NO_BUFFER                     0x00020105
193
194 #define RNDIS_OID_GEN_DIRECTED_BYTES_XMIT               0x00020201
195 #define RNDIS_OID_GEN_DIRECTED_FRAMES_XMIT              0x00020202
196 #define RNDIS_OID_GEN_MULTICAST_BYTES_XMIT              0x00020203
197 #define RNDIS_OID_GEN_MULTICAST_FRAMES_XMIT             0x00020204
198 #define RNDIS_OID_GEN_BROADCAST_BYTES_XMIT              0x00020205
199 #define RNDIS_OID_GEN_BROADCAST_FRAMES_XMIT             0x00020206
200 #define RNDIS_OID_GEN_DIRECTED_BYTES_RCV                0x00020207
201 #define RNDIS_OID_GEN_DIRECTED_FRAMES_RCV               0x00020208
202 #define RNDIS_OID_GEN_MULTICAST_BYTES_RCV               0x00020209
203 #define RNDIS_OID_GEN_MULTICAST_FRAMES_RCV              0x0002020A
204 #define RNDIS_OID_GEN_BROADCAST_BYTES_RCV               0x0002020B
205 #define RNDIS_OID_GEN_BROADCAST_FRAMES_RCV              0x0002020C
206
207 #define RNDIS_OID_GEN_RCV_CRC_ERROR                     0x0002020D
208 #define RNDIS_OID_GEN_TRANSMIT_QUEUE_LENGTH             0x0002020E
209
210 #define RNDIS_OID_GEN_GET_TIME_CAPS                     0x0002020F
211 #define RNDIS_OID_GEN_GET_NETCARD_TIME                  0x00020210
212
213 //
214 // These are connection-oriented general OIDs.
215 // These replace the above OIDs for connection-oriented media.
216 //
217 #define RNDIS_OID_GEN_CO_SUPPORTED_LIST                 0x00010101
218 #define RNDIS_OID_GEN_CO_HARDWARE_STATUS                0x00010102
219 #define RNDIS_OID_GEN_CO_MEDIA_SUPPORTED                0x00010103
220 #define RNDIS_OID_GEN_CO_MEDIA_IN_USE                   0x00010104
221 #define RNDIS_OID_GEN_CO_LINK_SPEED                     0x00010105
222 #define RNDIS_OID_GEN_CO_VENDOR_ID                      0x00010106
223 #define RNDIS_OID_GEN_CO_VENDOR_DESCRIPTION             0x00010107
224 #define RNDIS_OID_GEN_CO_DRIVER_VERSION                 0x00010108
225 #define RNDIS_OID_GEN_CO_PROTOCOL_OPTIONS               0x00010109
226 #define RNDIS_OID_GEN_CO_MAC_OPTIONS                    0x0001010A
227 #define RNDIS_OID_GEN_CO_MEDIA_CONNECT_STATUS           0x0001010B
228 #define RNDIS_OID_GEN_CO_VENDOR_DRIVER_VERSION          0x0001010C
229 #define RNDIS_OID_GEN_CO_MINIMUM_LINK_SPEED             0x0001010D
230
231 #define RNDIS_OID_GEN_CO_GET_TIME_CAPS                  0x00010201
232 #define RNDIS_OID_GEN_CO_GET_NETCARD_TIME               0x00010202
233
234 //
235 // These are connection-oriented statistics OIDs.
236 //
237 #define RNDIS_OID_GEN_CO_XMIT_PDUS_OK                   0x00020101
238 #define RNDIS_OID_GEN_CO_RCV_PDUS_OK                    0x00020102
239 #define RNDIS_OID_GEN_CO_XMIT_PDUS_ERROR                0x00020103
240 #define RNDIS_OID_GEN_CO_RCV_PDUS_ERROR                 0x00020104
241 #define RNDIS_OID_GEN_CO_RCV_PDUS_NO_BUFFER             0x00020105
242
243
244 #define RNDIS_OID_GEN_CO_RCV_CRC_ERROR                  0x00020201
245 #define RNDIS_OID_GEN_CO_TRANSMIT_QUEUE_LENGTH          0x00020202
246 #define RNDIS_OID_GEN_CO_BYTES_XMIT                     0x00020203
247 #define RNDIS_OID_GEN_CO_BYTES_RCV                      0x00020204
248 #define RNDIS_OID_GEN_CO_BYTES_XMIT_OUTSTANDING         0x00020205
249 #define RNDIS_OID_GEN_CO_NETCARD_LOAD                   0x00020206
250
251 //
252 // These are objects for Connection-oriented media call-managers.
253 //
254 #define RNDIS_OID_CO_ADD_PVC                            0xFF000001
255 #define RNDIS_OID_CO_DELETE_PVC                         0xFF000002
256 #define RNDIS_OID_CO_GET_CALL_INFORMATION               0xFF000003
257 #define RNDIS_OID_CO_ADD_ADDRESS                        0xFF000004
258 #define RNDIS_OID_CO_DELETE_ADDRESS                     0xFF000005
259 #define RNDIS_OID_CO_GET_ADDRESSES                      0xFF000006
260 #define RNDIS_OID_CO_ADDRESS_CHANGE                     0xFF000007
261 #define RNDIS_OID_CO_SIGNALING_ENABLED                  0xFF000008
262 #define RNDIS_OID_CO_SIGNALING_DISABLED                 0xFF000009
263
264
265 //
266 // 802.3 Objects (Ethernet)
267 //
268
269 #define RNDIS_OID_802_3_PERMANENT_ADDRESS               0x01010101
270 #define RNDIS_OID_802_3_CURRENT_ADDRESS                 0x01010102
271 #define RNDIS_OID_802_3_MULTICAST_LIST                  0x01010103
272 #define RNDIS_OID_802_3_MAXIMUM_LIST_SIZE               0x01010104
273 #define RNDIS_OID_802_3_MAC_OPTIONS                     0x01010105
274
275 //
276 //
277 #define NDIS_802_3_MAC_OPTION_PRIORITY                  0x00000001
278
279 #define RNDIS_OID_802_3_RCV_ERROR_ALIGNMENT             0x01020101
280 #define RNDIS_OID_802_3_XMIT_ONE_COLLISION              0x01020102
281 #define RNDIS_OID_802_3_XMIT_MORE_COLLISIONS            0x01020103
282
283 #define RNDIS_OID_802_3_XMIT_DEFERRED                   0x01020201
284 #define RNDIS_OID_802_3_XMIT_MAX_COLLISIONS             0x01020202
285 #define RNDIS_OID_802_3_RCV_OVERRUN                     0x01020203
286 #define RNDIS_OID_802_3_XMIT_UNDERRUN                   0x01020204
287 #define RNDIS_OID_802_3_XMIT_HEARTBEAT_FAILURE          0x01020205
288 #define RNDIS_OID_802_3_XMIT_TIMES_CRS_LOST             0x01020206
289 #define RNDIS_OID_802_3_XMIT_LATE_COLLISIONS            0x01020207
290
291
292 //
293 // Remote NDIS message types
294 //
295 #define REMOTE_NDIS_PACKET_MSG                  0x00000001
296 #define REMOTE_NDIS_INITIALIZE_MSG              0x00000002
297 #define REMOTE_NDIS_HALT_MSG                    0x00000003
298 #define REMOTE_NDIS_QUERY_MSG                   0x00000004
299 #define REMOTE_NDIS_SET_MSG                     0x00000005
300 #define REMOTE_NDIS_RESET_MSG                   0x00000006
301 #define REMOTE_NDIS_INDICATE_STATUS_MSG         0x00000007
302 #define REMOTE_NDIS_KEEPALIVE_MSG               0x00000008
303
304 #define REMOTE_CONDIS_MP_CREATE_VC_MSG          0x00008001
305 #define REMOTE_CONDIS_MP_DELETE_VC_MSG          0x00008002
306 #define REMOTE_CONDIS_MP_ACTIVATE_VC_MSG        0x00008005
307 #define REMOTE_CONDIS_MP_DEACTIVATE_VC_MSG      0x00008006
308 #define REMOTE_CONDIS_INDICATE_STATUS_MSG       0x00008007
309
310
311 // Remote NDIS message completion types
312 #define REMOTE_NDIS_INITIALIZE_CMPLT            0x80000002
313 #define REMOTE_NDIS_QUERY_CMPLT                 0x80000004
314 #define REMOTE_NDIS_SET_CMPLT                   0x80000005
315 #define REMOTE_NDIS_RESET_CMPLT                 0x80000006
316 #define REMOTE_NDIS_KEEPALIVE_CMPLT             0x80000008
317
318 #define REMOTE_CONDIS_MP_CREATE_VC_CMPLT        0x80008001
319 #define REMOTE_CONDIS_MP_DELETE_VC_CMPLT        0x80008002
320 #define REMOTE_CONDIS_MP_ACTIVATE_VC_CMPLT      0x80008005
321 #define REMOTE_CONDIS_MP_DEACTIVATE_VC_CMPLT    0x80008006
322
323 //
324 // Reserved message type for private communication between lower-layer
325 // host driver and remote device, if necessary.
326 //
327 #define REMOTE_NDIS_BUS_MSG                     0xff000001
328
329
330
331 //
332 //  Defines for DeviceFlags in RNDIS_INITIALIZE_COMPLETE
333 //
334 #define RNDIS_DF_CONNECTIONLESS             0x00000001
335 #define RNDIS_DF_CONNECTION_ORIENTED        0x00000002
336 #define RNDIS_DF_RAW_DATA                   0x00000004
337
338 //
339 //  Remote NDIS medium types.
340 //
341 #define RNdisMedium802_3                    0x00000000
342 #define RNdisMedium802_5                    0x00000001
343 #define RNdisMediumFddi                     0x00000002
344 #define RNdisMediumWan                      0x00000003
345 #define RNdisMediumLocalTalk                0x00000004
346 #define RNdisMediumArcnetRaw                0x00000006
347 #define RNdisMediumArcnet878_2              0x00000007
348 #define RNdisMediumAtm                      0x00000008
349 #define RNdisMediumWirelessWan              0x00000009
350 #define RNdisMediumIrda                     0x0000000a
351 #define RNdisMediumCoWan                    0x0000000b
352 #define RNdisMediumMax                      0x0000000d     // Not a real medium, defined as an upper-bound
353
354 //
355 // Remote NDIS medium connection states.
356 //
357 #define RNdisMediaStateConnected            0x00000000
358 #define RNdisMediaStateDisconnected         0x00000001
359
360 //
361 //  Remote NDIS version numbers
362 //
363 #define RNDIS_MAJOR_VERSION                 0x00000001
364 #define RNDIS_MINOR_VERSION                 0x00000000
365
366 //
367 //  NdisInitialize message
368 //
369 typedef struct _RNDIS_INITIALIZE_REQUEST
370 {
371     RNDIS_REQUEST_ID                        RequestId;
372     u32                                  MajorVersion;
373     u32                                  MinorVersion;
374     u32                                  MaxTransferSize;
375 } RNDIS_INITIALIZE_REQUEST, *PRNDIS_INITIALIZE_REQUEST;
376
377
378 //
379 //  Response to NdisInitialize
380 //
381 typedef struct _RNDIS_INITIALIZE_COMPLETE
382 {
383     RNDIS_REQUEST_ID                        RequestId;
384     RNDIS_STATUS                            Status;
385     u32                                  MajorVersion;
386     u32                                  MinorVersion;
387     u32                                  DeviceFlags;
388     RNDIS_MEDIUM                            Medium;
389     u32                                  MaxPacketsPerMessage;
390     u32                                  MaxTransferSize;
391     u32                                  PacketAlignmentFactor;
392     u32                                  AFListOffset;
393     u32                                  AFListSize;
394 } RNDIS_INITIALIZE_COMPLETE, *PRNDIS_INITIALIZE_COMPLETE;
395
396
397 //
398 //  Call manager devices only: Information about an address family
399 //  supported by the device is appended to the response to NdisInitialize.
400 //
401 typedef struct _RNDIS_CO_ADDRESS_FAMILY
402 {
403     RNDIS_AF                                AddressFamily;
404     u32                                  MajorVersion;
405     u32                                  MinorVersion;
406 } RNDIS_CO_ADDRESS_FAMILY, *PRNDIS_CO_ADDRESS_FAMILY;
407
408
409 //
410 //  NdisHalt message
411 //
412 typedef struct _RNDIS_HALT_REQUEST
413 {
414     RNDIS_REQUEST_ID                        RequestId;
415 } RNDIS_HALT_REQUEST, *PRNDIS_HALT_REQUEST;
416
417
418 //
419 // NdisQueryRequest message
420 //
421 typedef struct _RNDIS_QUERY_REQUEST
422 {
423     RNDIS_REQUEST_ID                        RequestId;
424     RNDIS_OID                               Oid;
425     u32                                  InformationBufferLength;
426     u32                                  InformationBufferOffset;
427     RNDIS_HANDLE                            DeviceVcHandle;
428 } RNDIS_QUERY_REQUEST, *PRNDIS_QUERY_REQUEST;
429
430
431 //
432 //  Response to NdisQueryRequest
433 //
434 typedef struct _RNDIS_QUERY_COMPLETE
435 {
436     RNDIS_REQUEST_ID                        RequestId;
437     RNDIS_STATUS                            Status;
438     u32                                  InformationBufferLength;
439     u32                                  InformationBufferOffset;
440 } RNDIS_QUERY_COMPLETE, *PRNDIS_QUERY_COMPLETE;
441
442
443 //
444 //  NdisSetRequest message
445 //
446 typedef struct _RNDIS_SET_REQUEST
447 {
448     RNDIS_REQUEST_ID                        RequestId;
449     RNDIS_OID                               Oid;
450     u32                                  InformationBufferLength;
451     u32                                  InformationBufferOffset;
452     RNDIS_HANDLE                            DeviceVcHandle;
453 } RNDIS_SET_REQUEST, *PRNDIS_SET_REQUEST;
454
455
456 //
457 //  Response to NdisSetRequest
458 //
459 typedef struct _RNDIS_SET_COMPLETE
460 {
461     RNDIS_REQUEST_ID                        RequestId;
462     RNDIS_STATUS                            Status;
463 } RNDIS_SET_COMPLETE, *PRNDIS_SET_COMPLETE;
464
465
466 //
467 //  NdisReset message
468 //
469 typedef struct _RNDIS_RESET_REQUEST
470 {
471     u32                                  Reserved;
472 } RNDIS_RESET_REQUEST, *PRNDIS_RESET_REQUEST;
473
474 //
475 //  Response to NdisReset
476 //
477 typedef struct _RNDIS_RESET_COMPLETE
478 {
479     RNDIS_STATUS                            Status;
480     u32                                  AddressingReset;
481 } RNDIS_RESET_COMPLETE, *PRNDIS_RESET_COMPLETE;
482
483
484 //
485 //  NdisMIndicateStatus message
486 //
487 typedef struct _RNDIS_INDICATE_STATUS
488 {
489     RNDIS_STATUS                            Status;
490     u32                                  StatusBufferLength;
491     u32                                  StatusBufferOffset;
492 } RNDIS_INDICATE_STATUS, *PRNDIS_INDICATE_STATUS;
493
494
495 //
496 //  Diagnostic information passed as the status buffer in
497 //  RNDIS_INDICATE_STATUS messages signifying error conditions.
498 //
499 typedef struct _RNDIS_DIAGNOSTIC_INFO
500 {
501     RNDIS_STATUS                            DiagStatus;
502     u32                                  ErrorOffset;
503 } RNDIS_DIAGNOSTIC_INFO, *PRNDIS_DIAGNOSTIC_INFO;
504
505
506
507 //
508 //  NdisKeepAlive message
509 //
510 typedef struct _RNDIS_KEEPALIVE_REQUEST
511 {
512     RNDIS_REQUEST_ID                        RequestId;
513 } RNDIS_KEEPALIVE_REQUEST, *PRNDIS_KEEPALIVE_REQUEST;
514
515
516 //
517 // Response to NdisKeepAlive
518 //
519 typedef struct _RNDIS_KEEPALIVE_COMPLETE
520 {
521     RNDIS_REQUEST_ID                        RequestId;
522     RNDIS_STATUS                            Status;
523 } RNDIS_KEEPALIVE_COMPLETE, *PRNDIS_KEEPALIVE_COMPLETE;
524
525
526 //
527 //  Data message. All Offset fields contain byte offsets from the beginning
528 //  of the RNDIS_PACKET structure. All Length fields are in bytes.
529 //  VcHandle is set to 0 for connectionless data, otherwise it
530 //  contains the VC handle.
531 //
532 typedef struct _RNDIS_PACKET
533 {
534     u32                                  DataOffset;
535     u32                                  DataLength;
536     u32                                  OOBDataOffset;
537     u32                                  OOBDataLength;
538     u32                                  NumOOBDataElements;
539     u32                                  PerPacketInfoOffset;
540     u32                                  PerPacketInfoLength;
541     RNDIS_HANDLE                            VcHandle;
542     u32                                  Reserved;
543 } RNDIS_PACKET, *PRNDIS_PACKET;
544
545 //
546 //  Optional Out of Band data associated with a Data message.
547 //
548 typedef struct _RNDIS_OOBD
549 {
550     u32                                  Size;
551     RNDIS_CLASS_ID                          Type;
552     u32                                  ClassInformationOffset;
553 } RNDIS_OOBD, *PRNDIS_OOBD;
554
555 //
556 //  Packet extension field contents associated with a Data message.
557 //
558 typedef struct _RNDIS_PER_PACKET_INFO
559 {
560     u32                                  Size;
561     u32                                  Type;
562     u32                                  PerPacketInformationOffset;
563 } RNDIS_PER_PACKET_INFO, *PRNDIS_PER_PACKET_INFO;
564
565
566 //
567 //  Format of Information buffer passed in a SetRequest for the OID
568 //  OID_GEN_RNDIS_CONFIG_PARAMETER.
569 //
570 typedef struct _RNDIS_CONFIG_PARAMETER_INFO
571 {
572     u32                                  ParameterNameOffset;
573     u32                                  ParameterNameLength;
574     u32                                  ParameterType;
575     u32                                  ParameterValueOffset;
576     u32                                  ParameterValueLength;
577 } RNDIS_CONFIG_PARAMETER_INFO, *PRNDIS_CONFIG_PARAMETER_INFO;
578
579 //
580 //  Values for ParameterType in RNDIS_CONFIG_PARAMETER_INFO
581 //
582 #define RNDIS_CONFIG_PARAM_TYPE_INTEGER     0
583 #define RNDIS_CONFIG_PARAM_TYPE_STRING      2
584
585
586 //
587 //  CONDIS Miniport messages for connection oriented devices
588 //  that do not implement a call manager.
589 //
590
591 //
592 //  CoNdisMiniportCreateVc message
593 //
594 typedef struct _RCONDIS_MP_CREATE_VC
595 {
596     RNDIS_REQUEST_ID                        RequestId;
597     RNDIS_HANDLE                            NdisVcHandle;
598 } RCONDIS_MP_CREATE_VC, *PRCONDIS_MP_CREATE_VC;
599
600 //
601 //  Response to CoNdisMiniportCreateVc
602 //
603 typedef struct _RCONDIS_MP_CREATE_VC_COMPLETE
604 {
605     RNDIS_REQUEST_ID                        RequestId;
606     RNDIS_HANDLE                            DeviceVcHandle;
607     RNDIS_STATUS                            Status;
608 } RCONDIS_MP_CREATE_VC_COMPLETE, *PRCONDIS_MP_CREATE_VC_COMPLETE;
609
610
611 //
612 //  CoNdisMiniportDeleteVc message
613 //
614 typedef struct _RCONDIS_MP_DELETE_VC
615 {
616     RNDIS_REQUEST_ID                        RequestId;
617     RNDIS_HANDLE                            DeviceVcHandle;
618 } RCONDIS_MP_DELETE_VC, *PRCONDIS_MP_DELETE_VC;
619
620 //
621 //  Response to CoNdisMiniportDeleteVc
622 //
623 typedef struct _RCONDIS_MP_DELETE_VC_COMPLETE
624 {
625     RNDIS_REQUEST_ID                        RequestId;
626     RNDIS_STATUS                            Status;
627 } RCONDIS_MP_DELETE_VC_COMPLETE, *PRCONDIS_MP_DELETE_VC_COMPLETE;
628
629
630 //
631 //  CoNdisMiniportQueryRequest message
632 //
633 typedef struct _RCONDIS_MP_QUERY_REQUEST
634 {
635     RNDIS_REQUEST_ID                        RequestId;
636     RNDIS_REQUEST_TYPE                      RequestType;
637     RNDIS_OID                               Oid;
638     RNDIS_HANDLE                            DeviceVcHandle;
639     u32                                  InformationBufferLength;
640     u32                                  InformationBufferOffset;
641 } RCONDIS_MP_QUERY_REQUEST, *PRCONDIS_MP_QUERY_REQUEST;
642
643
644 //
645 //  CoNdisMiniportSetRequest message
646 //
647 typedef struct _RCONDIS_MP_SET_REQUEST
648 {
649     RNDIS_REQUEST_ID                        RequestId;
650     RNDIS_REQUEST_TYPE                      RequestType;
651     RNDIS_OID                               Oid;
652     RNDIS_HANDLE                            DeviceVcHandle;
653     u32                                  InformationBufferLength;
654     u32                                  InformationBufferOffset;
655 } RCONDIS_MP_SET_REQUEST, *PRCONDIS_MP_SET_REQUEST;
656
657
658 //
659 //  CoNdisIndicateStatus message
660 //
661 typedef struct _RCONDIS_INDICATE_STATUS
662 {
663     RNDIS_HANDLE                            NdisVcHandle;
664     RNDIS_STATUS                            Status;
665     u32                                  StatusBufferLength;
666     u32                                  StatusBufferOffset;
667 } RCONDIS_INDICATE_STATUS, *PRCONDIS_INDICATE_STATUS;
668
669
670 //
671 //  CONDIS Call/VC parameters
672 //
673
674 typedef struct _RCONDIS_SPECIFIC_PARAMETERS
675 {
676     u32                                  ParameterType;
677     u32                                  ParameterLength;
678     u32                                  ParameterOffset;
679 } RCONDIS_SPECIFIC_PARAMETERS, *PRCONDIS_SPECIFIC_PARAMETERS;
680
681 typedef struct _RCONDIS_MEDIA_PARAMETERS
682 {
683     u32                                  Flags;
684     u32                                  Reserved1;
685     u32                                  Reserved2;
686     RCONDIS_SPECIFIC_PARAMETERS             MediaSpecific;
687 } RCONDIS_MEDIA_PARAMETERS, *PRCONDIS_MEDIA_PARAMETERS;
688
689
690 typedef struct _RNDIS_FLOWSPEC
691 {
692     u32                                  TokenRate;
693     u32                                  TokenBucketSize;
694     u32                                  PeakBandwidth;
695     u32                                  Latency;
696     u32                                  DelayVariation;
697     u32                                  ServiceType;
698     u32                                  MaxSduSize;
699     u32                                  MinimumPolicedSize;
700 } RNDIS_FLOWSPEC, *PRNDIS_FLOWSPEC;
701
702 typedef struct _RCONDIS_CALL_MANAGER_PARAMETERS
703 {
704     RNDIS_FLOWSPEC                          Transmit;
705     RNDIS_FLOWSPEC                          Receive;
706     RCONDIS_SPECIFIC_PARAMETERS             CallMgrSpecific;
707 } RCONDIS_CALL_MANAGER_PARAMETERS, *PRCONDIS_CALL_MANAGER_PARAMETERS;
708
709 //
710 //  CoNdisMiniportActivateVc message
711 //
712 typedef struct _RCONDIS_MP_ACTIVATE_VC_REQUEST
713 {
714     RNDIS_REQUEST_ID                        RequestId;
715     u32                                  Flags;
716     RNDIS_HANDLE                            DeviceVcHandle;
717     u32                                  MediaParamsOffset;
718     u32                                  MediaParamsLength;
719     u32                                  CallMgrParamsOffset;
720     u32                                  CallMgrParamsLength;
721 } RCONDIS_MP_ACTIVATE_VC_REQUEST, *PRCONDIS_MP_ACTIVATE_VC_REQUEST;
722
723 //
724 //  Response to CoNdisMiniportActivateVc
725 //
726 typedef struct _RCONDIS_MP_ACTIVATE_VC_COMPLETE
727 {
728     RNDIS_REQUEST_ID                        RequestId;
729     RNDIS_STATUS                            Status;
730 } RCONDIS_MP_ACTIVATE_VC_COMPLETE, *PRCONDIS_MP_ACTIVATE_VC_COMPLETE;
731
732
733 //
734 //  CoNdisMiniportDeactivateVc message
735 //
736 typedef struct _RCONDIS_MP_DEACTIVATE_VC_REQUEST
737 {
738     RNDIS_REQUEST_ID                        RequestId;
739     u32                                  Flags;
740     RNDIS_HANDLE                            DeviceVcHandle;
741 } RCONDIS_MP_DEACTIVATE_VC_REQUEST, *PRCONDIS_MP_DEACTIVATE_VC_REQUEST;
742
743 //
744 //  Response to CoNdisMiniportDeactivateVc
745 //
746 typedef struct _RCONDIS_MP_DEACTIVATE_VC_COMPLETE
747 {
748     RNDIS_REQUEST_ID                        RequestId;
749     RNDIS_STATUS                            Status;
750 } RCONDIS_MP_DEACTIVATE_VC_COMPLETE, *PRCONDIS_MP_DEACTIVATE_VC_COMPLETE;
751
752
753 //
754 // union with all of the RNDIS messages
755 //
756 typedef union _RNDIS_MESSAGE_CONTAINER
757 {
758     RNDIS_PACKET                        Packet;
759     RNDIS_INITIALIZE_REQUEST            InitializeRequest;
760     RNDIS_HALT_REQUEST                  HaltRequest;
761     RNDIS_QUERY_REQUEST                 QueryRequest;
762     RNDIS_SET_REQUEST                   SetRequest;
763     RNDIS_RESET_REQUEST                 ResetRequest;
764     RNDIS_KEEPALIVE_REQUEST             KeepaliveRequest;
765     RNDIS_INDICATE_STATUS               IndicateStatus;
766     RNDIS_INITIALIZE_COMPLETE           InitializeComplete;
767     RNDIS_QUERY_COMPLETE                QueryComplete;
768     RNDIS_SET_COMPLETE                  SetComplete;
769     RNDIS_RESET_COMPLETE                ResetComplete;
770     RNDIS_KEEPALIVE_COMPLETE            KeepaliveComplete;
771     RCONDIS_MP_CREATE_VC                CoMiniportCreateVc;
772     RCONDIS_MP_DELETE_VC                CoMiniportDeleteVc;
773     RCONDIS_INDICATE_STATUS             CoIndicateStatus;
774     RCONDIS_MP_ACTIVATE_VC_REQUEST      CoMiniportActivateVc;
775     RCONDIS_MP_DEACTIVATE_VC_REQUEST    CoMiniportDeactivateVc;
776     RCONDIS_MP_CREATE_VC_COMPLETE       CoMiniportCreateVcComplete;
777     RCONDIS_MP_DELETE_VC_COMPLETE       CoMiniportDeleteVcComplete;
778     RCONDIS_MP_ACTIVATE_VC_COMPLETE     CoMiniportActivateVcComplete;
779     RCONDIS_MP_DEACTIVATE_VC_COMPLETE   CoMiniportDeactivateVcComplete;
780
781
782 } RNDIS_MESSAGE_CONTAINER, *PRNDIS_MESSAGE_CONTAINER;
783
784 //
785 // Remote NDIS message format
786 //
787 typedef __struct_bcount(MessageLength) struct _RNDIS_MESSAGE
788 {
789     u32                                  NdisMessageType;
790
791     //
792     // Total length of this message, from the beginning
793     // of the RNDIS_MESSAGE struct, in bytes.
794     //
795     u32                                  MessageLength;
796
797     // Actual message
798     RNDIS_MESSAGE_CONTAINER                 Message;
799
800 } RNDIS_MESSAGE, *PRNDIS_MESSAGE;
801
802
803
804 //
805 // Handy macros
806
807 // get the size of an RNDIS message. Pass in the message type,
808 // RNDIS_SET_REQUEST, RNDIS_PACKET for example
809 #define RNDIS_MESSAGE_SIZE(Message)                             \
810     (sizeof(Message) + (sizeof(RNDIS_MESSAGE) - sizeof(RNDIS_MESSAGE_CONTAINER)))
811
812 // get pointer to info buffer with message pointer
813 #define MESSAGE_TO_INFO_BUFFER(Message)                         \
814     (((PUCHAR)(Message)) + Message->InformationBufferOffset)
815
816 // get pointer to status buffer with message pointer
817 #define MESSAGE_TO_STATUS_BUFFER(Message)                       \
818     (((PUCHAR)(Message)) + Message->StatusBufferOffset)
819
820 // get pointer to OOBD buffer with message pointer
821 #define MESSAGE_TO_OOBD_BUFFER(Message)                         \
822     (((PUCHAR)(Message)) + Message->OOBDataOffset)
823
824 // get pointer to data buffer with message pointer
825 #define MESSAGE_TO_DATA_BUFFER(Message)                         \
826     (((PUCHAR)(Message)) + Message->PerPacketInfoOffset)
827
828 // get pointer to contained message from NDIS_MESSAGE pointer
829 #define RNDIS_MESSAGE_PTR_TO_MESSAGE_PTR(RndisMessage)          \
830     ((void *) &RndisMessage->Message)
831
832 // get pointer to contained message from NDIS_MESSAGE pointer
833 #define RNDIS_MESSAGE_RAW_PTR_TO_MESSAGE_PTR(RndisMessage)      \
834     ((void *) RndisMessage)
835
836 #endif // _RNDIS_H_