• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/staging/hv/
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#ifndef _RNDIS_H_
25#define _RNDIS_H_
26
27/*  Status codes */
28
29
30#ifndef STATUS_SUCCESS
31#define STATUS_SUCCESS				(0x00000000L)
32#endif
33
34#ifndef STATUS_UNSUCCESSFUL
35#define STATUS_UNSUCCESSFUL			(0xC0000001L)
36#endif
37
38#ifndef STATUS_PENDING
39#define STATUS_PENDING				(0x00000103L)
40#endif
41
42#ifndef STATUS_INSUFFICIENT_RESOURCES
43#define STATUS_INSUFFICIENT_RESOURCES		(0xC000009AL)
44#endif
45
46#ifndef STATUS_BUFFER_OVERFLOW
47#define STATUS_BUFFER_OVERFLOW			(0x80000005L)
48#endif
49
50#ifndef STATUS_NOT_SUPPORTED
51#define STATUS_NOT_SUPPORTED			(0xC00000BBL)
52#endif
53
54#define RNDIS_STATUS_SUCCESS			(STATUS_SUCCESS)
55#define RNDIS_STATUS_PENDING			(STATUS_PENDING)
56#define RNDIS_STATUS_NOT_RECOGNIZED		(0x00010001L)
57#define RNDIS_STATUS_NOT_COPIED			(0x00010002L)
58#define RNDIS_STATUS_NOT_ACCEPTED		(0x00010003L)
59#define RNDIS_STATUS_CALL_ACTIVE		(0x00010007L)
60
61#define RNDIS_STATUS_ONLINE			(0x40010003L)
62#define RNDIS_STATUS_RESET_START		(0x40010004L)
63#define RNDIS_STATUS_RESET_END			(0x40010005L)
64#define RNDIS_STATUS_RING_STATUS		(0x40010006L)
65#define RNDIS_STATUS_CLOSED			(0x40010007L)
66#define RNDIS_STATUS_WAN_LINE_UP		(0x40010008L)
67#define RNDIS_STATUS_WAN_LINE_DOWN		(0x40010009L)
68#define RNDIS_STATUS_WAN_FRAGMENT		(0x4001000AL)
69#define RNDIS_STATUS_MEDIA_CONNECT		(0x4001000BL)
70#define RNDIS_STATUS_MEDIA_DISCONNECT		(0x4001000CL)
71#define RNDIS_STATUS_HARDWARE_LINE_UP		(0x4001000DL)
72#define RNDIS_STATUS_HARDWARE_LINE_DOWN		(0x4001000EL)
73#define RNDIS_STATUS_INTERFACE_UP		(0x4001000FL)
74#define RNDIS_STATUS_INTERFACE_DOWN		(0x40010010L)
75#define RNDIS_STATUS_MEDIA_BUSY			(0x40010011L)
76#define RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION	(0x40010012L)
77#define RNDIS_STATUS_WW_INDICATION		RDIA_SPECIFIC_INDICATION
78#define RNDIS_STATUS_LINK_SPEED_CHANGE		(0x40010013L)
79
80#define RNDIS_STATUS_NOT_RESETTABLE		(0x80010001L)
81#define RNDIS_STATUS_SOFT_ERRORS		(0x80010003L)
82#define RNDIS_STATUS_HARD_ERRORS		(0x80010004L)
83#define RNDIS_STATUS_BUFFER_OVERFLOW		(STATUS_BUFFER_OVERFLOW)
84
85#define RNDIS_STATUS_FAILURE			(STATUS_UNSUCCESSFUL)
86#define RNDIS_STATUS_RESOURCES			(STATUS_INSUFFICIENT_RESOURCES)
87#define RNDIS_STATUS_CLOSING			(0xC0010002L)
88#define RNDIS_STATUS_BAD_VERSION		(0xC0010004L)
89#define RNDIS_STATUS_BAD_CHARACTERISTICS	(0xC0010005L)
90#define RNDIS_STATUS_ADAPTER_NOT_FOUND		(0xC0010006L)
91#define RNDIS_STATUS_OPEN_FAILED		(0xC0010007L)
92#define RNDIS_STATUS_DEVICE_FAILED		(0xC0010008L)
93#define RNDIS_STATUS_MULTICAST_FULL		(0xC0010009L)
94#define RNDIS_STATUS_MULTICAST_EXISTS		(0xC001000AL)
95#define RNDIS_STATUS_MULTICAST_NOT_FOUND	(0xC001000BL)
96#define RNDIS_STATUS_REQUEST_ABORTED		(0xC001000CL)
97#define RNDIS_STATUS_RESET_IN_PROGRESS		(0xC001000DL)
98#define RNDIS_STATUS_CLOSING_INDICATING		(0xC001000EL)
99#define RNDIS_STATUS_NOT_SUPPORTED		(STATUS_NOT_SUPPORTED)
100#define RNDIS_STATUS_INVALID_PACKET		(0xC001000FL)
101#define RNDIS_STATUS_OPEN_LIST_FULL		(0xC0010010L)
102#define RNDIS_STATUS_ADAPTER_NOT_READY		(0xC0010011L)
103#define RNDIS_STATUS_ADAPTER_NOT_OPEN		(0xC0010012L)
104#define RNDIS_STATUS_NOT_INDICATING		(0xC0010013L)
105#define RNDIS_STATUS_INVALID_LENGTH		(0xC0010014L)
106#define RNDIS_STATUS_INVALID_DATA		(0xC0010015L)
107#define RNDIS_STATUS_BUFFER_TOO_SHORT		(0xC0010016L)
108#define RNDIS_STATUS_INVALID_OID		(0xC0010017L)
109#define RNDIS_STATUS_ADAPTER_REMOVED		(0xC0010018L)
110#define RNDIS_STATUS_UNSUPPORTED_MEDIA		(0xC0010019L)
111#define RNDIS_STATUS_GROUP_ADDRESS_IN_USE	(0xC001001AL)
112#define RNDIS_STATUS_FILE_NOT_FOUND		(0xC001001BL)
113#define RNDIS_STATUS_ERROR_READING_FILE		(0xC001001CL)
114#define RNDIS_STATUS_ALREADY_MAPPED		(0xC001001DL)
115#define RNDIS_STATUS_RESOURCE_CONFLICT		(0xC001001EL)
116#define RNDIS_STATUS_NO_CABLE			(0xC001001FL)
117
118#define RNDIS_STATUS_INVALID_SAP		(0xC0010020L)
119#define RNDIS_STATUS_SAP_IN_USE			(0xC0010021L)
120#define RNDIS_STATUS_INVALID_ADDRESS		(0xC0010022L)
121#define RNDIS_STATUS_VC_NOT_ACTIVATED		(0xC0010023L)
122#define RNDIS_STATUS_DEST_OUT_OF_ORDER		(0xC0010024L)
123#define RNDIS_STATUS_VC_NOT_AVAILABLE		(0xC0010025L)
124#define RNDIS_STATUS_CELLRATE_NOT_AVAILABLE	(0xC0010026L)
125#define RNDIS_STATUS_INCOMPATABLE_QOS		(0xC0010027L)
126#define RNDIS_STATUS_AAL_PARAMS_UNSUPPORTED	(0xC0010028L)
127#define RNDIS_STATUS_NO_ROUTE_TO_DESTINATION	(0xC0010029L)
128
129#define RNDIS_STATUS_TOKEN_RING_OPEN_ERROR	(0xC0011000L)
130
131/* Object Identifiers used by NdisRequest Query/Set Information */
132/* General Objects */
133#define RNDIS_OID_GEN_SUPPORTED_LIST		0x00010101
134#define RNDIS_OID_GEN_HARDWARE_STATUS		0x00010102
135#define RNDIS_OID_GEN_MEDIA_SUPPORTED		0x00010103
136#define RNDIS_OID_GEN_MEDIA_IN_USE		0x00010104
137#define RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD		0x00010105
138#define RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE	0x00010106
139#define RNDIS_OID_GEN_LINK_SPEED		0x00010107
140#define RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE	0x00010108
141#define RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE	0x00010109
142#define RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE	0x0001010A
143#define RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE	0x0001010B
144#define RNDIS_OID_GEN_VENDOR_ID			0x0001010C
145#define RNDIS_OID_GEN_VENDOR_DESCRIPTION	0x0001010D
146#define RNDIS_OID_GEN_CURRENT_PACKET_FILTER	0x0001010E
147#define RNDIS_OID_GEN_CURRENT_LOOKAHEAD		0x0001010F
148#define RNDIS_OID_GEN_DRIVER_VERSION		0x00010110
149#define RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE	0x00010111
150#define RNDIS_OID_GEN_PROTOCOL_OPTIONS		0x00010112
151#define RNDIS_OID_GEN_MAC_OPTIONS		0x00010113
152#define RNDIS_OID_GEN_MEDIA_CONNECT_STATUS	0x00010114
153#define RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS	0x00010115
154#define RNDIS_OID_GEN_VENDOR_DRIVER_VERSION	0x00010116
155#define RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES	0x00010118
156#define RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET	0x00010119
157#define RNDIS_OID_GEN_MACHINE_NAME		0x0001021A
158#define RNDIS_OID_GEN_RNDIS_CONFIG_PARAMETER	0x0001021B
159
160#define RNDIS_OID_GEN_XMIT_OK			0x00020101
161#define RNDIS_OID_GEN_RCV_OK			0x00020102
162#define RNDIS_OID_GEN_XMIT_ERROR		0x00020103
163#define RNDIS_OID_GEN_RCV_ERROR			0x00020104
164#define RNDIS_OID_GEN_RCV_NO_BUFFER		0x00020105
165
166#define RNDIS_OID_GEN_DIRECTED_BYTES_XMIT	0x00020201
167#define RNDIS_OID_GEN_DIRECTED_FRAMES_XMIT	0x00020202
168#define RNDIS_OID_GEN_MULTICAST_BYTES_XMIT	0x00020203
169#define RNDIS_OID_GEN_MULTICAST_FRAMES_XMIT	0x00020204
170#define RNDIS_OID_GEN_BROADCAST_BYTES_XMIT	0x00020205
171#define RNDIS_OID_GEN_BROADCAST_FRAMES_XMIT	0x00020206
172#define RNDIS_OID_GEN_DIRECTED_BYTES_RCV	0x00020207
173#define RNDIS_OID_GEN_DIRECTED_FRAMES_RCV	0x00020208
174#define RNDIS_OID_GEN_MULTICAST_BYTES_RCV	0x00020209
175#define RNDIS_OID_GEN_MULTICAST_FRAMES_RCV	0x0002020A
176#define RNDIS_OID_GEN_BROADCAST_BYTES_RCV	0x0002020B
177#define RNDIS_OID_GEN_BROADCAST_FRAMES_RCV	0x0002020C
178
179#define RNDIS_OID_GEN_RCV_CRC_ERROR		0x0002020D
180#define RNDIS_OID_GEN_TRANSMIT_QUEUE_LENGTH	0x0002020E
181
182#define RNDIS_OID_GEN_GET_TIME_CAPS		0x0002020F
183#define RNDIS_OID_GEN_GET_NETCARD_TIME		0x00020210
184
185/* These are connection-oriented general OIDs. */
186/* These replace the above OIDs for connection-oriented media. */
187#define RNDIS_OID_GEN_CO_SUPPORTED_LIST		0x00010101
188#define RNDIS_OID_GEN_CO_HARDWARE_STATUS	0x00010102
189#define RNDIS_OID_GEN_CO_MEDIA_SUPPORTED	0x00010103
190#define RNDIS_OID_GEN_CO_MEDIA_IN_USE		0x00010104
191#define RNDIS_OID_GEN_CO_LINK_SPEED		0x00010105
192#define RNDIS_OID_GEN_CO_VENDOR_ID		0x00010106
193#define RNDIS_OID_GEN_CO_VENDOR_DESCRIPTION	0x00010107
194#define RNDIS_OID_GEN_CO_DRIVER_VERSION		0x00010108
195#define RNDIS_OID_GEN_CO_PROTOCOL_OPTIONS	0x00010109
196#define RNDIS_OID_GEN_CO_MAC_OPTIONS		0x0001010A
197#define RNDIS_OID_GEN_CO_MEDIA_CONNECT_STATUS	0x0001010B
198#define RNDIS_OID_GEN_CO_VENDOR_DRIVER_VERSION	0x0001010C
199#define RNDIS_OID_GEN_CO_MINIMUM_LINK_SPEED	0x0001010D
200
201#define RNDIS_OID_GEN_CO_GET_TIME_CAPS		0x00010201
202#define RNDIS_OID_GEN_CO_GET_NETCARD_TIME	0x00010202
203
204/* These are connection-oriented statistics OIDs. */
205#define RNDIS_OID_GEN_CO_XMIT_PDUS_OK		0x00020101
206#define RNDIS_OID_GEN_CO_RCV_PDUS_OK		0x00020102
207#define RNDIS_OID_GEN_CO_XMIT_PDUS_ERROR	0x00020103
208#define RNDIS_OID_GEN_CO_RCV_PDUS_ERROR		0x00020104
209#define RNDIS_OID_GEN_CO_RCV_PDUS_NO_BUFFER	0x00020105
210
211
212#define RNDIS_OID_GEN_CO_RCV_CRC_ERROR		0x00020201
213#define RNDIS_OID_GEN_CO_TRANSMIT_QUEUE_LENGTH	0x00020202
214#define RNDIS_OID_GEN_CO_BYTES_XMIT		0x00020203
215#define RNDIS_OID_GEN_CO_BYTES_RCV		0x00020204
216#define RNDIS_OID_GEN_CO_BYTES_XMIT_OUTSTANDING	0x00020205
217#define RNDIS_OID_GEN_CO_NETCARD_LOAD		0x00020206
218
219/* These are objects for Connection-oriented media call-managers. */
220#define RNDIS_OID_CO_ADD_PVC			0xFF000001
221#define RNDIS_OID_CO_DELETE_PVC			0xFF000002
222#define RNDIS_OID_CO_GET_CALL_INFORMATION	0xFF000003
223#define RNDIS_OID_CO_ADD_ADDRESS		0xFF000004
224#define RNDIS_OID_CO_DELETE_ADDRESS		0xFF000005
225#define RNDIS_OID_CO_GET_ADDRESSES		0xFF000006
226#define RNDIS_OID_CO_ADDRESS_CHANGE		0xFF000007
227#define RNDIS_OID_CO_SIGNALING_ENABLED		0xFF000008
228#define RNDIS_OID_CO_SIGNALING_DISABLED		0xFF000009
229
230/* 802.3 Objects (Ethernet) */
231#define RNDIS_OID_802_3_PERMANENT_ADDRESS	0x01010101
232#define RNDIS_OID_802_3_CURRENT_ADDRESS		0x01010102
233#define RNDIS_OID_802_3_MULTICAST_LIST		0x01010103
234#define RNDIS_OID_802_3_MAXIMUM_LIST_SIZE	0x01010104
235#define RNDIS_OID_802_3_MAC_OPTIONS		0x01010105
236
237#define NDIS_802_3_MAC_OPTION_PRIORITY		0x00000001
238
239#define RNDIS_OID_802_3_RCV_ERROR_ALIGNMENT	0x01020101
240#define RNDIS_OID_802_3_XMIT_ONE_COLLISION	0x01020102
241#define RNDIS_OID_802_3_XMIT_MORE_COLLISIONS	0x01020103
242
243#define RNDIS_OID_802_3_XMIT_DEFERRED		0x01020201
244#define RNDIS_OID_802_3_XMIT_MAX_COLLISIONS	0x01020202
245#define RNDIS_OID_802_3_RCV_OVERRUN		0x01020203
246#define RNDIS_OID_802_3_XMIT_UNDERRUN		0x01020204
247#define RNDIS_OID_802_3_XMIT_HEARTBEAT_FAILURE	0x01020205
248#define RNDIS_OID_802_3_XMIT_TIMES_CRS_LOST	0x01020206
249#define RNDIS_OID_802_3_XMIT_LATE_COLLISIONS	0x01020207
250
251/* Remote NDIS message types */
252#define REMOTE_NDIS_PACKET_MSG			0x00000001
253#define REMOTE_NDIS_INITIALIZE_MSG		0x00000002
254#define REMOTE_NDIS_HALT_MSG			0x00000003
255#define REMOTE_NDIS_QUERY_MSG			0x00000004
256#define REMOTE_NDIS_SET_MSG			0x00000005
257#define REMOTE_NDIS_RESET_MSG			0x00000006
258#define REMOTE_NDIS_INDICATE_STATUS_MSG		0x00000007
259#define REMOTE_NDIS_KEEPALIVE_MSG		0x00000008
260
261#define REMOTE_CONDIS_MP_CREATE_VC_MSG		0x00008001
262#define REMOTE_CONDIS_MP_DELETE_VC_MSG		0x00008002
263#define REMOTE_CONDIS_MP_ACTIVATE_VC_MSG	0x00008005
264#define REMOTE_CONDIS_MP_DEACTIVATE_VC_MSG	0x00008006
265#define REMOTE_CONDIS_INDICATE_STATUS_MSG	0x00008007
266
267/* Remote NDIS message completion types */
268#define REMOTE_NDIS_INITIALIZE_CMPLT		0x80000002
269#define REMOTE_NDIS_QUERY_CMPLT			0x80000004
270#define REMOTE_NDIS_SET_CMPLT			0x80000005
271#define REMOTE_NDIS_RESET_CMPLT			0x80000006
272#define REMOTE_NDIS_KEEPALIVE_CMPLT		0x80000008
273
274#define REMOTE_CONDIS_MP_CREATE_VC_CMPLT	0x80008001
275#define REMOTE_CONDIS_MP_DELETE_VC_CMPLT	0x80008002
276#define REMOTE_CONDIS_MP_ACTIVATE_VC_CMPLT	0x80008005
277#define REMOTE_CONDIS_MP_DEACTIVATE_VC_CMPLT	0x80008006
278
279/*
280 * Reserved message type for private communication between lower-layer host
281 * driver and remote device, if necessary.
282 */
283#define REMOTE_NDIS_BUS_MSG			0xff000001
284
285/*  Defines for DeviceFlags in struct rndis_initialize_complete */
286#define RNDIS_DF_CONNECTIONLESS			0x00000001
287#define RNDIS_DF_CONNECTION_ORIENTED		0x00000002
288#define RNDIS_DF_RAW_DATA			0x00000004
289
290/*  Remote NDIS medium types. */
291#define RNdisMedium802_3			0x00000000
292#define RNdisMedium802_5			0x00000001
293#define RNdisMediumFddi				0x00000002
294#define RNdisMediumWan				0x00000003
295#define RNdisMediumLocalTalk			0x00000004
296#define RNdisMediumArcnetRaw			0x00000006
297#define RNdisMediumArcnet878_2			0x00000007
298#define RNdisMediumAtm				0x00000008
299#define RNdisMediumWirelessWan			0x00000009
300#define RNdisMediumIrda				0x0000000a
301#define RNdisMediumCoWan			0x0000000b
302/* Not a real medium, defined as an upper-bound */
303#define RNdisMediumMax				0x0000000d
304
305
306/* Remote NDIS medium connection states. */
307#define RNdisMediaStateConnected		0x00000000
308#define RNdisMediaStateDisconnected		0x00000001
309
310/*  Remote NDIS version numbers */
311#define RNDIS_MAJOR_VERSION			0x00000001
312#define RNDIS_MINOR_VERSION			0x00000000
313
314
315/* NdisInitialize message */
316struct rndis_initialize_request {
317	u32 RequestId;
318	u32 MajorVersion;
319	u32 MinorVersion;
320	u32 MaxTransferSize;
321};
322
323/* Response to NdisInitialize */
324struct rndis_initialize_complete {
325	u32 RequestId;
326	u32 Status;
327	u32 MajorVersion;
328	u32 MinorVersion;
329	u32 DeviceFlags;
330	u32 Medium;
331	u32 MaxPacketsPerMessage;
332	u32 MaxTransferSize;
333	u32 PacketAlignmentFactor;
334	u32 AFListOffset;
335	u32 AFListSize;
336};
337
338/* Call manager devices only: Information about an address family */
339/* supported by the device is appended to the response to NdisInitialize. */
340struct rndis_co_address_family {
341	u32 AddressFamily;
342	u32 MajorVersion;
343	u32 MinorVersion;
344};
345
346/* NdisHalt message */
347struct rndis_halt_request {
348	u32 RequestId;
349};
350
351/* NdisQueryRequest message */
352struct rndis_query_request {
353	u32 RequestId;
354	u32 Oid;
355	u32 InformationBufferLength;
356	u32 InformationBufferOffset;
357	u32 DeviceVcHandle;
358};
359
360/* Response to NdisQueryRequest */
361struct rndis_query_complete {
362	u32 RequestId;
363	u32 Status;
364	u32 InformationBufferLength;
365	u32 InformationBufferOffset;
366};
367
368/* NdisSetRequest message */
369struct rndis_set_request {
370	u32 RequestId;
371	u32 Oid;
372	u32 InformationBufferLength;
373	u32 InformationBufferOffset;
374	u32 DeviceVcHandle;
375};
376
377/* Response to NdisSetRequest */
378struct rndis_set_complete {
379	u32 RequestId;
380	u32 Status;
381};
382
383/* NdisReset message */
384struct rndis_reset_request {
385	u32 Reserved;
386};
387
388/* Response to NdisReset */
389struct rndis_reset_complete {
390	u32 Status;
391	u32 AddressingReset;
392};
393
394/* NdisMIndicateStatus message */
395struct rndis_indicate_status {
396	u32 Status;
397	u32 StatusBufferLength;
398	u32 StatusBufferOffset;
399};
400
401/* Diagnostic information passed as the status buffer in */
402/* struct rndis_indicate_status messages signifying error conditions. */
403struct rndis_diagnostic_info {
404	u32 DiagStatus;
405	u32 ErrorOffset;
406};
407
408/* NdisKeepAlive message */
409struct rndis_keepalive_request {
410	u32 RequestId;
411};
412
413/* Response to NdisKeepAlive */
414struct rndis_keepalive_complete {
415	u32 RequestId;
416	u32 Status;
417};
418
419/*
420 * Data message. All Offset fields contain byte offsets from the beginning of
421 * struct rndis_packet. All Length fields are in bytes.  VcHandle is set
422 * to 0 for connectionless data, otherwise it contains the VC handle.
423 */
424struct rndis_packet {
425	u32 DataOffset;
426	u32 DataLength;
427	u32 OOBDataOffset;
428	u32 OOBDataLength;
429	u32 NumOOBDataElements;
430	u32 PerPacketInfoOffset;
431	u32 PerPacketInfoLength;
432	u32 VcHandle;
433	u32 Reserved;
434};
435
436/* Optional Out of Band data associated with a Data message. */
437struct rndis_oobd {
438	u32 Size;
439	u32 Type;
440	u32 ClassInformationOffset;
441};
442
443/* Packet extension field contents associated with a Data message. */
444struct rndis_per_packet_info {
445	u32 Size;
446	u32 Type;
447	u32 PerPacketInformationOffset;
448};
449
450/* Format of Information buffer passed in a SetRequest for the OID */
451/* OID_GEN_RNDIS_CONFIG_PARAMETER. */
452struct rndis_config_parameter_info {
453	u32 ParameterNameOffset;
454	u32 ParameterNameLength;
455	u32 ParameterType;
456	u32 ParameterValueOffset;
457	u32 ParameterValueLength;
458};
459
460/* Values for ParameterType in struct rndis_config_parameter_info */
461#define RNDIS_CONFIG_PARAM_TYPE_INTEGER     0
462#define RNDIS_CONFIG_PARAM_TYPE_STRING      2
463
464/* CONDIS Miniport messages for connection oriented devices */
465/* that do not implement a call manager. */
466
467/* CoNdisMiniportCreateVc message */
468struct rcondis_mp_create_vc {
469	u32 RequestId;
470	u32 NdisVcHandle;
471};
472
473/* Response to CoNdisMiniportCreateVc */
474struct rcondis_mp_create_vc_complete {
475	u32 RequestId;
476	u32 DeviceVcHandle;
477	u32 Status;
478};
479
480/* CoNdisMiniportDeleteVc message */
481struct rcondis_mp_delete_vc {
482	u32 RequestId;
483	u32 DeviceVcHandle;
484};
485
486/* Response to CoNdisMiniportDeleteVc */
487struct rcondis_mp_delete_vc_complete {
488	u32 RequestId;
489	u32 Status;
490};
491
492/* CoNdisMiniportQueryRequest message */
493struct rcondis_mp_query_request {
494	u32 RequestId;
495	u32 RequestType;
496	u32 Oid;
497	u32 DeviceVcHandle;
498	u32 InformationBufferLength;
499	u32 InformationBufferOffset;
500};
501
502/* CoNdisMiniportSetRequest message */
503struct rcondis_mp_set_request {
504	u32 RequestId;
505	u32 RequestType;
506	u32 Oid;
507	u32 DeviceVcHandle;
508	u32 InformationBufferLength;
509	u32 InformationBufferOffset;
510};
511
512/* CoNdisIndicateStatus message */
513struct rcondis_indicate_status {
514	u32 NdisVcHandle;
515	u32 Status;
516	u32 StatusBufferLength;
517	u32 StatusBufferOffset;
518};
519
520/* CONDIS Call/VC parameters */
521struct rcondis_specific_parameters {
522	u32 ParameterType;
523	u32 ParameterLength;
524	u32 ParameterOffset;
525};
526
527struct rcondis_media_parameters {
528	u32 Flags;
529	u32 Reserved1;
530	u32 Reserved2;
531	struct rcondis_specific_parameters MediaSpecific;
532};
533
534struct rndis_flowspec {
535	u32 TokenRate;
536	u32 TokenBucketSize;
537	u32 PeakBandwidth;
538	u32 Latency;
539	u32 DelayVariation;
540	u32 ServiceType;
541	u32 MaxSduSize;
542	u32 MinimumPolicedSize;
543};
544
545struct rcondis_call_manager_parameters {
546	struct rndis_flowspec Transmit;
547	struct rndis_flowspec Receive;
548	struct rcondis_specific_parameters CallMgrSpecific;
549};
550
551/* CoNdisMiniportActivateVc message */
552struct rcondis_mp_activate_vc_request {
553	u32 RequestId;
554	u32 Flags;
555	u32 DeviceVcHandle;
556	u32 MediaParamsOffset;
557	u32 MediaParamsLength;
558	u32 CallMgrParamsOffset;
559	u32 CallMgrParamsLength;
560};
561
562/* Response to CoNdisMiniportActivateVc */
563struct rcondis_mp_activate_vc_complete {
564	u32 RequestId;
565	u32 Status;
566};
567
568/* CoNdisMiniportDeactivateVc message */
569struct rcondis_mp_deactivate_vc_request {
570	u32 RequestId;
571	u32 Flags;
572	u32 DeviceVcHandle;
573};
574
575/* Response to CoNdisMiniportDeactivateVc */
576struct rcondis_mp_deactivate_vc_complete {
577	u32 RequestId;
578	u32 Status;
579};
580
581
582/* union with all of the RNDIS messages */
583union rndis_message_container {
584	struct rndis_packet Packet;
585	struct rndis_initialize_request InitializeRequest;
586	struct rndis_halt_request HaltRequest;
587	struct rndis_query_request QueryRequest;
588	struct rndis_set_request SetRequest;
589	struct rndis_reset_request ResetRequest;
590	struct rndis_keepalive_request KeepaliveRequest;
591	struct rndis_indicate_status IndicateStatus;
592	struct rndis_initialize_complete InitializeComplete;
593	struct rndis_query_complete QueryComplete;
594	struct rndis_set_complete SetComplete;
595	struct rndis_reset_complete ResetComplete;
596	struct rndis_keepalive_complete KeepaliveComplete;
597	struct rcondis_mp_create_vc CoMiniportCreateVc;
598	struct rcondis_mp_delete_vc CoMiniportDeleteVc;
599	struct rcondis_indicate_status CoIndicateStatus;
600	struct rcondis_mp_activate_vc_request CoMiniportActivateVc;
601	struct rcondis_mp_deactivate_vc_request CoMiniportDeactivateVc;
602	struct rcondis_mp_create_vc_complete CoMiniportCreateVcComplete;
603	struct rcondis_mp_delete_vc_complete CoMiniportDeleteVcComplete;
604	struct rcondis_mp_activate_vc_complete CoMiniportActivateVcComplete;
605	struct rcondis_mp_deactivate_vc_complete CoMiniportDeactivateVcComplete;
606};
607
608/* Remote NDIS message format */
609struct rndis_message {
610	u32 NdisMessageType;
611
612	/* Total length of this message, from the beginning */
613	/* of the sruct rndis_message, in bytes. */
614	u32 MessageLength;
615
616	/* Actual message */
617	union rndis_message_container Message;
618};
619
620/* Handy macros */
621
622/* get the size of an RNDIS message. Pass in the message type, */
623/* struct rndis_set_request, struct rndis_packet for example */
624#define RNDIS_MESSAGE_SIZE(Message)				\
625	(sizeof(Message) + (sizeof(struct rndis_message) -	\
626	 sizeof(union rndis_message_container)))
627
628/* get pointer to info buffer with message pointer */
629#define MESSAGE_TO_INFO_BUFFER(Message)				\
630	(((unsigned char *)(Message)) + Message->InformationBufferOffset)
631
632/* get pointer to status buffer with message pointer */
633#define MESSAGE_TO_STATUS_BUFFER(Message)			\
634	(((unsigned char *)(Message)) + Message->StatusBufferOffset)
635
636/* get pointer to OOBD buffer with message pointer */
637#define MESSAGE_TO_OOBD_BUFFER(Message)				\
638	(((unsigned char *)(Message)) + Message->OOBDataOffset)
639
640/* get pointer to data buffer with message pointer */
641#define MESSAGE_TO_DATA_BUFFER(Message)				\
642	(((unsigned char *)(Message)) + Message->PerPacketInfoOffset)
643
644/* get pointer to contained message from NDIS_MESSAGE pointer */
645#define RNDIS_MESSAGE_PTR_TO_MESSAGE_PTR(RndisMessage)		\
646	((void *) &RndisMessage->Message)
647
648/* get pointer to contained message from NDIS_MESSAGE pointer */
649#define RNDIS_MESSAGE_RAW_PTR_TO_MESSAGE_PTR(RndisMessage)	\
650	((void *) RndisMessage)
651
652#endif /* _RNDIS_H_ */
653