hv_rndis.h revision 299888
1/*-
2 * Copyright (c) 2009-2012,2016 Microsoft Corp.
3 * Copyright (c) 2010-2012 Citrix Inc.
4 * Copyright (c) 2012 NetApp Inc.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice unmodified, this list of conditions, and the following
12 *    disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $FreeBSD: head/sys/dev/hyperv/netvsc/hv_rndis.h 299888 2016-05-16 03:26:16Z sephe $
29 */
30
31#ifndef __HV_RNDIS_H__
32#define __HV_RNDIS_H__
33
34
35/*
36 * NDIS protocol version numbers
37 */
38#define NDIS_VERSION_5_0                        0x00050000
39#define NDIS_VERSION_5_1                        0x00050001
40#define NDIS_VERSION_6_0                        0x00060000
41#define NDIS_VERSION_6_1                        0x00060001
42#define NDIS_VERSION_6_30                       0x0006001e
43
44#define NDIS_VERSION                            (NDIS_VERSION_5_1)
45
46/*
47 * Status codes
48 */
49
50#define STATUS_SUCCESS                          (0x00000000L)
51#define STATUS_UNSUCCESSFUL                     (0xC0000001L)
52#define STATUS_PENDING                          (0x00000103L)
53#define STATUS_INSUFFICIENT_RESOURCES           (0xC000009AL)
54#define STATUS_BUFFER_OVERFLOW                  (0x80000005L)
55#define STATUS_NOT_SUPPORTED                    (0xC00000BBL)
56
57#define RNDIS_STATUS_SUCCESS                    (STATUS_SUCCESS)
58#define RNDIS_STATUS_PENDING                    (STATUS_PENDING)
59#define RNDIS_STATUS_NOT_RECOGNIZED             (0x00010001L)
60#define RNDIS_STATUS_NOT_COPIED                 (0x00010002L)
61#define RNDIS_STATUS_NOT_ACCEPTED               (0x00010003L)
62#define RNDIS_STATUS_CALL_ACTIVE                (0x00010007L)
63
64#define RNDIS_STATUS_ONLINE                     (0x40010003L)
65#define RNDIS_STATUS_RESET_START                (0x40010004L)
66#define RNDIS_STATUS_RESET_END                  (0x40010005L)
67#define RNDIS_STATUS_RING_STATUS                (0x40010006L)
68#define RNDIS_STATUS_CLOSED                     (0x40010007L)
69#define RNDIS_STATUS_WAN_LINE_UP                (0x40010008L)
70#define RNDIS_STATUS_WAN_LINE_DOWN              (0x40010009L)
71#define RNDIS_STATUS_WAN_FRAGMENT               (0x4001000AL)
72#define RNDIS_STATUS_MEDIA_CONNECT              (0x4001000BL)
73#define RNDIS_STATUS_MEDIA_DISCONNECT           (0x4001000CL)
74#define RNDIS_STATUS_HARDWARE_LINE_UP           (0x4001000DL)
75#define RNDIS_STATUS_HARDWARE_LINE_DOWN         (0x4001000EL)
76#define RNDIS_STATUS_INTERFACE_UP               (0x4001000FL)
77#define RNDIS_STATUS_INTERFACE_DOWN             (0x40010010L)
78#define RNDIS_STATUS_MEDIA_BUSY                 (0x40010011L)
79#define RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION  (0x40010012L)
80#define RNDIS_STATUS_WW_INDICATION        RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION
81#define RNDIS_STATUS_LINK_SPEED_CHANGE          (0x40010013L)
82
83#define RNDIS_STATUS_NOT_RESETTABLE             (0x80010001L)
84#define RNDIS_STATUS_SOFT_ERRORS                (0x80010003L)
85#define RNDIS_STATUS_HARD_ERRORS                (0x80010004L)
86#define RNDIS_STATUS_BUFFER_OVERFLOW            (STATUS_BUFFER_OVERFLOW)
87
88#define RNDIS_STATUS_FAILURE                    (STATUS_UNSUCCESSFUL)
89#define RNDIS_STATUS_RESOURCES                  (STATUS_INSUFFICIENT_RESOURCES)
90#define RNDIS_STATUS_CLOSING                    (0xC0010002L)
91#define RNDIS_STATUS_BAD_VERSION                (0xC0010004L)
92#define RNDIS_STATUS_BAD_CHARACTERISTICS        (0xC0010005L)
93#define RNDIS_STATUS_ADAPTER_NOT_FOUND          (0xC0010006L)
94#define RNDIS_STATUS_OPEN_FAILED                (0xC0010007L)
95#define RNDIS_STATUS_DEVICE_FAILED              (0xC0010008L)
96#define RNDIS_STATUS_MULTICAST_FULL             (0xC0010009L)
97#define RNDIS_STATUS_MULTICAST_EXISTS           (0xC001000AL)
98#define RNDIS_STATUS_MULTICAST_NOT_FOUND        (0xC001000BL)
99#define RNDIS_STATUS_REQUEST_ABORTED            (0xC001000CL)
100#define RNDIS_STATUS_RESET_IN_PROGRESS          (0xC001000DL)
101#define RNDIS_STATUS_CLOSING_INDICATING         (0xC001000EL)
102#define RNDIS_STATUS_NOT_SUPPORTED              (STATUS_NOT_SUPPORTED)
103#define RNDIS_STATUS_INVALID_PACKET             (0xC001000FL)
104#define RNDIS_STATUS_OPEN_LIST_FULL             (0xC0010010L)
105#define RNDIS_STATUS_ADAPTER_NOT_READY          (0xC0010011L)
106#define RNDIS_STATUS_ADAPTER_NOT_OPEN           (0xC0010012L)
107#define RNDIS_STATUS_NOT_INDICATING             (0xC0010013L)
108#define RNDIS_STATUS_INVALID_LENGTH             (0xC0010014L)
109#define RNDIS_STATUS_INVALID_DATA               (0xC0010015L)
110#define RNDIS_STATUS_BUFFER_TOO_SHORT           (0xC0010016L)
111#define RNDIS_STATUS_INVALID_OID                (0xC0010017L)
112#define RNDIS_STATUS_ADAPTER_REMOVED            (0xC0010018L)
113#define RNDIS_STATUS_UNSUPPORTED_MEDIA          (0xC0010019L)
114#define RNDIS_STATUS_GROUP_ADDRESS_IN_USE       (0xC001001AL)
115#define RNDIS_STATUS_FILE_NOT_FOUND             (0xC001001BL)
116#define RNDIS_STATUS_ERROR_READING_FILE         (0xC001001CL)
117#define RNDIS_STATUS_ALREADY_MAPPED             (0xC001001DL)
118#define RNDIS_STATUS_RESOURCE_CONFLICT          (0xC001001EL)
119#define RNDIS_STATUS_NO_CABLE                   (0xC001001FL)
120
121#define RNDIS_STATUS_INVALID_SAP                (0xC0010020L)
122#define RNDIS_STATUS_SAP_IN_USE                 (0xC0010021L)
123#define RNDIS_STATUS_INVALID_ADDRESS            (0xC0010022L)
124#define RNDIS_STATUS_VC_NOT_ACTIVATED           (0xC0010023L)
125#define RNDIS_STATUS_DEST_OUT_OF_ORDER          (0xC0010024L)
126#define RNDIS_STATUS_VC_NOT_AVAILABLE           (0xC0010025L)
127#define RNDIS_STATUS_CELLRATE_NOT_AVAILABLE     (0xC0010026L)
128#define RNDIS_STATUS_INCOMPATABLE_QOS           (0xC0010027L)
129#define RNDIS_STATUS_AAL_PARAMS_UNSUPPORTED     (0xC0010028L)
130#define RNDIS_STATUS_NO_ROUTE_TO_DESTINATION    (0xC0010029L)
131
132#define RNDIS_STATUS_TOKEN_RING_OPEN_ERROR      (0xC0011000L)
133
134
135/*
136 * Object Identifiers used by NdisRequest Query/Set Information
137 */
138
139/*
140 * General Objects
141 */
142
143#define RNDIS_OID_GEN_SUPPORTED_LIST                    0x00010101
144#define RNDIS_OID_GEN_HARDWARE_STATUS                   0x00010102
145#define RNDIS_OID_GEN_MEDIA_SUPPORTED                   0x00010103
146#define RNDIS_OID_GEN_MEDIA_IN_USE                      0x00010104
147#define RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD                 0x00010105
148#define RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE                0x00010106
149#define RNDIS_OID_GEN_LINK_SPEED                        0x00010107
150#define RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE             0x00010108
151#define RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE              0x00010109
152#define RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE               0x0001010A
153#define RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE                0x0001010B
154#define RNDIS_OID_GEN_VENDOR_ID                         0x0001010C
155#define RNDIS_OID_GEN_VENDOR_DESCRIPTION                0x0001010D
156#define RNDIS_OID_GEN_CURRENT_PACKET_FILTER             0x0001010E
157#define RNDIS_OID_GEN_CURRENT_LOOKAHEAD                 0x0001010F
158#define RNDIS_OID_GEN_DRIVER_VERSION                    0x00010110
159#define RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE                0x00010111
160#define RNDIS_OID_GEN_PROTOCOL_OPTIONS                  0x00010112
161#define RNDIS_OID_GEN_MAC_OPTIONS                       0x00010113
162#define RNDIS_OID_GEN_MEDIA_CONNECT_STATUS              0x00010114
163#define RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS              0x00010115
164#define RNDIS_OID_GEN_VENDOR_DRIVER_VERSION             0x00010116
165#define RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES           0x00010118
166#define RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET           0x00010119
167#define RNDIS_OID_GEN_MACHINE_NAME                      0x0001021A
168#define RNDIS_OID_GEN_RNDIS_CONFIG_PARAMETER            0x0001021B
169
170/*
171 * For receive side scale
172 */
173/* Query only */
174#define RNDIS_OID_GEN_RSS_CAPABILITIES			0x00010203
175/* Query and set */
176#define RNDIS_OID_GEN_RSS_PARAMETERS			0x00010204
177
178#define RNDIS_OID_GEN_XMIT_OK                           0x00020101
179#define RNDIS_OID_GEN_RCV_OK                            0x00020102
180#define RNDIS_OID_GEN_XMIT_ERROR                        0x00020103
181#define RNDIS_OID_GEN_RCV_ERROR                         0x00020104
182#define RNDIS_OID_GEN_RCV_NO_BUFFER                     0x00020105
183
184#define RNDIS_OID_GEN_DIRECTED_BYTES_XMIT               0x00020201
185#define RNDIS_OID_GEN_DIRECTED_FRAMES_XMIT              0x00020202
186#define RNDIS_OID_GEN_MULTICAST_BYTES_XMIT              0x00020203
187#define RNDIS_OID_GEN_MULTICAST_FRAMES_XMIT             0x00020204
188#define RNDIS_OID_GEN_BROADCAST_BYTES_XMIT              0x00020205
189#define RNDIS_OID_GEN_BROADCAST_FRAMES_XMIT             0x00020206
190#define RNDIS_OID_GEN_DIRECTED_BYTES_RCV                0x00020207
191#define RNDIS_OID_GEN_DIRECTED_FRAMES_RCV               0x00020208
192#define RNDIS_OID_GEN_MULTICAST_BYTES_RCV               0x00020209
193#define RNDIS_OID_GEN_MULTICAST_FRAMES_RCV              0x0002020A
194#define RNDIS_OID_GEN_BROADCAST_BYTES_RCV               0x0002020B
195#define RNDIS_OID_GEN_BROADCAST_FRAMES_RCV              0x0002020C
196
197#define RNDIS_OID_GEN_RCV_CRC_ERROR                     0x0002020D
198#define RNDIS_OID_GEN_TRANSMIT_QUEUE_LENGTH             0x0002020E
199
200#define RNDIS_OID_GEN_GET_TIME_CAPS                     0x0002020F
201#define RNDIS_OID_GEN_GET_NETCARD_TIME                  0x00020210
202
203/*
204 * These are connection-oriented general OIDs.
205 * These replace the above OIDs for connection-oriented media.
206 */
207#define RNDIS_OID_GEN_CO_SUPPORTED_LIST                 0x00010101
208#define RNDIS_OID_GEN_CO_HARDWARE_STATUS                0x00010102
209#define RNDIS_OID_GEN_CO_MEDIA_SUPPORTED                0x00010103
210#define RNDIS_OID_GEN_CO_MEDIA_IN_USE                   0x00010104
211#define RNDIS_OID_GEN_CO_LINK_SPEED                     0x00010105
212#define RNDIS_OID_GEN_CO_VENDOR_ID                      0x00010106
213#define RNDIS_OID_GEN_CO_VENDOR_DESCRIPTION             0x00010107
214#define RNDIS_OID_GEN_CO_DRIVER_VERSION                 0x00010108
215#define RNDIS_OID_GEN_CO_PROTOCOL_OPTIONS               0x00010109
216#define RNDIS_OID_GEN_CO_MAC_OPTIONS                    0x0001010A
217#define RNDIS_OID_GEN_CO_MEDIA_CONNECT_STATUS           0x0001010B
218#define RNDIS_OID_GEN_CO_VENDOR_DRIVER_VERSION          0x0001010C
219#define RNDIS_OID_GEN_CO_MINIMUM_LINK_SPEED             0x0001010D
220
221#define RNDIS_OID_GEN_CO_GET_TIME_CAPS                  0x00010201
222#define RNDIS_OID_GEN_CO_GET_NETCARD_TIME               0x00010202
223
224/*
225 * These are connection-oriented statistics OIDs.
226 */
227#define RNDIS_OID_GEN_CO_XMIT_PDUS_OK                   0x00020101
228#define RNDIS_OID_GEN_CO_RCV_PDUS_OK                    0x00020102
229#define RNDIS_OID_GEN_CO_XMIT_PDUS_ERROR                0x00020103
230#define RNDIS_OID_GEN_CO_RCV_PDUS_ERROR                 0x00020104
231#define RNDIS_OID_GEN_CO_RCV_PDUS_NO_BUFFER             0x00020105
232
233
234#define RNDIS_OID_GEN_CO_RCV_CRC_ERROR                  0x00020201
235#define RNDIS_OID_GEN_CO_TRANSMIT_QUEUE_LENGTH          0x00020202
236#define RNDIS_OID_GEN_CO_BYTES_XMIT                     0x00020203
237#define RNDIS_OID_GEN_CO_BYTES_RCV                      0x00020204
238#define RNDIS_OID_GEN_CO_BYTES_XMIT_OUTSTANDING         0x00020205
239#define RNDIS_OID_GEN_CO_NETCARD_LOAD                   0x00020206
240
241/*
242 * These are objects for Connection-oriented media call-managers.
243 */
244#define RNDIS_OID_CO_ADD_PVC                            0xFF000001
245#define RNDIS_OID_CO_DELETE_PVC                         0xFF000002
246#define RNDIS_OID_CO_GET_CALL_INFORMATION               0xFF000003
247#define RNDIS_OID_CO_ADD_ADDRESS                        0xFF000004
248#define RNDIS_OID_CO_DELETE_ADDRESS                     0xFF000005
249#define RNDIS_OID_CO_GET_ADDRESSES                      0xFF000006
250#define RNDIS_OID_CO_ADDRESS_CHANGE                     0xFF000007
251#define RNDIS_OID_CO_SIGNALING_ENABLED                  0xFF000008
252#define RNDIS_OID_CO_SIGNALING_DISABLED                 0xFF000009
253
254
255/*
256 * 802.3 Objects (Ethernet)
257 */
258
259#define RNDIS_OID_802_3_PERMANENT_ADDRESS               0x01010101
260#define RNDIS_OID_802_3_CURRENT_ADDRESS                 0x01010102
261#define RNDIS_OID_802_3_MULTICAST_LIST                  0x01010103
262#define RNDIS_OID_802_3_MAXIMUM_LIST_SIZE               0x01010104
263#define RNDIS_OID_802_3_MAC_OPTIONS                     0x01010105
264
265/*
266 *
267 */
268#define NDIS_802_3_MAC_OPTION_PRIORITY                  0x00000001
269
270#define RNDIS_OID_802_3_RCV_ERROR_ALIGNMENT             0x01020101
271#define RNDIS_OID_802_3_XMIT_ONE_COLLISION              0x01020102
272#define RNDIS_OID_802_3_XMIT_MORE_COLLISIONS            0x01020103
273
274#define RNDIS_OID_802_3_XMIT_DEFERRED                   0x01020201
275#define RNDIS_OID_802_3_XMIT_MAX_COLLISIONS             0x01020202
276#define RNDIS_OID_802_3_RCV_OVERRUN                     0x01020203
277#define RNDIS_OID_802_3_XMIT_UNDERRUN                   0x01020204
278#define RNDIS_OID_802_3_XMIT_HEARTBEAT_FAILURE          0x01020205
279#define RNDIS_OID_802_3_XMIT_TIMES_CRS_LOST             0x01020206
280#define RNDIS_OID_802_3_XMIT_LATE_COLLISIONS            0x01020207
281
282
283/*
284 * RNDIS MP custom OID for test
285 */
286#define OID_RNDISMP_GET_RECEIVE_BUFFERS                 0xFFA0C90D // Query only
287
288
289/*
290 * Remote NDIS message types
291 */
292#define REMOTE_NDIS_PACKET_MSG                          0x00000001
293#define REMOTE_NDIS_INITIALIZE_MSG                      0x00000002
294#define REMOTE_NDIS_HALT_MSG                            0x00000003
295#define REMOTE_NDIS_QUERY_MSG                           0x00000004
296#define REMOTE_NDIS_SET_MSG                             0x00000005
297#define REMOTE_NDIS_RESET_MSG                           0x00000006
298#define REMOTE_NDIS_INDICATE_STATUS_MSG                 0x00000007
299#define REMOTE_NDIS_KEEPALIVE_MSG                       0x00000008
300
301#define REMOTE_CONDIS_MP_CREATE_VC_MSG                  0x00008001
302#define REMOTE_CONDIS_MP_DELETE_VC_MSG                  0x00008002
303#define REMOTE_CONDIS_MP_ACTIVATE_VC_MSG                0x00008005
304#define REMOTE_CONDIS_MP_DEACTIVATE_VC_MSG              0x00008006
305#define REMOTE_CONDIS_INDICATE_STATUS_MSG               0x00008007
306
307/*
308 * Remote NDIS message completion types
309 */
310#define REMOTE_NDIS_INITIALIZE_CMPLT                    0x80000002
311#define REMOTE_NDIS_QUERY_CMPLT                         0x80000004
312#define REMOTE_NDIS_SET_CMPLT                           0x80000005
313#define REMOTE_NDIS_RESET_CMPLT                         0x80000006
314#define REMOTE_NDIS_KEEPALIVE_CMPLT                     0x80000008
315
316#define REMOTE_CONDIS_MP_CREATE_VC_CMPLT                0x80008001
317#define REMOTE_CONDIS_MP_DELETE_VC_CMPLT                0x80008002
318#define REMOTE_CONDIS_MP_ACTIVATE_VC_CMPLT              0x80008005
319#define REMOTE_CONDIS_MP_DEACTIVATE_VC_CMPLT            0x80008006
320
321/*
322 * Reserved message type for private communication between lower-layer
323 * host driver and remote device, if necessary.
324 */
325#define REMOTE_NDIS_BUS_MSG                             0xff000001
326
327/*
328 * Defines for DeviceFlags in rndis_initialize_complete
329 */
330#define RNDIS_DF_CONNECTIONLESS                         0x00000001
331#define RNDIS_DF_CONNECTION_ORIENTED                    0x00000002
332#define RNDIS_DF_RAW_DATA                               0x00000004
333
334/*
335 * Remote NDIS medium types.
336 */
337#define RNDIS_MEDIUM_802_3                              0x00000000
338#define RNDIS_MEDIUM_802_5                              0x00000001
339#define RNDIS_MEDIUM_FDDI                               0x00000002
340#define RNDIS_MEDIUM_WAN                                0x00000003
341#define RNDIS_MEDIUM_LOCAL_TALK                         0x00000004
342#define RNDIS_MEDIUM_ARCNET_RAW                         0x00000006
343#define RNDIS_MEDIUM_ARCNET_878_2                       0x00000007
344#define RNDIS_MEDIUM_ATM                                0x00000008
345#define RNDIS_MEDIUM_WIRELESS_WAN                       0x00000009
346#define RNDIS_MEDIUM_IRDA                               0x0000000a
347#define RNDIS_MEDIUM_CO_WAN                             0x0000000b
348/* Not a real medium, defined as an upper bound */
349#define RNDIS_MEDIUM_MAX                                0x0000000d
350
351/*
352 * Remote NDIS medium connection states.
353 */
354#define RNDIS_MEDIA_STATE_CONNECTED                     0x00000000
355#define RNDIS_MEDIA_STATE_DISCONNECTED                  0x00000001
356
357/*
358 * Remote NDIS version numbers
359 */
360#define RNDIS_MAJOR_VERSION                             0x00000001
361#define RNDIS_MINOR_VERSION                             0x00000000
362
363
364/*
365 * Remote NDIS offload parameters
366 */
367#define RNDIS_OBJECT_TYPE_DEFAULT			0x80
368
369#define RNDIS_OFFLOAD_PARAMETERS_REVISION_3		3
370#define RNDIS_OFFLOAD_PARAMETERS_NO_CHANGE		0
371#define RNDIS_OFFLOAD_PARAMETERS_LSOV2_DISABLED		1
372#define RNDIS_OFFLOAD_PARAMETERS_LSOV2_ENABLED 		2
373#define RNDIS_OFFLOAD_PARAMETERS_LSOV1_ENABLED		2
374#define RNDIS_OFFLOAD_PARAMETERS_RSC_DISABLED		1
375#define RNDIS_OFFLOAD_PARAMETERS_RSC_ENABLED		2
376#define RNDIS_OFFLOAD_PARAMETERS_TX_RX_DISABLED		1
377#define RNDIS_OFFLOAD_PARAMETERS_TX_ENABLED_RX_DISABLED	2
378#define RNDIS_OFFLOAD_PARAMETERS_RX_ENABLED_TX_DISABLED	3
379#define RNDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED		4
380
381#define RNDIS_TCP_LARGE_SEND_OFFLOAD_V2_TYPE		1
382#define RNDIS_TCP_LARGE_SEND_OFFLOAD_IPV4		0
383#define RNDIS_TCP_LARGE_SEND_OFFLOAD_IPV6		1
384
385
386#define RNDIS_OID_TCP_OFFLOAD_CURRENT_CONFIG		0xFC01020B /* query only */
387#define RNDIS_OID_TCP_OFFLOAD_PARAMETERS		0xFC01020C /* set only */
388#define RNDIS_OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES	0xFC01020D/* query only */
389#define RNDIS_OID_TCP_CONNECTION_OFFLOAD_CURRENT_CONFIG	0xFC01020E /* query only */
390#define RNDIS_OID_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES	0xFC01020F /* query */
391#define RNDIS_OID_OFFLOAD_ENCAPSULATION			0x0101010A /* set/query */
392
393/*
394 * NdisInitialize message
395 */
396typedef struct rndis_initialize_request_ {
397    /* RNDIS request ID */
398    uint32_t                                request_id;
399    uint32_t                                major_version;
400    uint32_t                                minor_version;
401    uint32_t                                max_xfer_size;
402} rndis_initialize_request;
403
404/*
405 * Response to NdisInitialize
406 */
407typedef struct rndis_initialize_complete_ {
408    /* RNDIS request ID */
409    uint32_t                                request_id;
410    /* RNDIS status */
411    uint32_t                                status;
412    uint32_t                                major_version;
413    uint32_t                                minor_version;
414    uint32_t                                device_flags;
415    /* RNDIS medium */
416    uint32_t                                medium;
417    uint32_t                                max_pkts_per_msg;
418    uint32_t                                max_xfer_size;
419    uint32_t                                pkt_align_factor;
420    uint32_t                                af_list_offset;
421    uint32_t                                af_list_size;
422} rndis_initialize_complete;
423
424/*
425 * Call manager devices only: Information about an address family
426 * supported by the device is appended to the response to NdisInitialize.
427 */
428typedef struct rndis_co_address_family_ {
429    /* RNDIS AF */
430    uint32_t                                address_family;
431    uint32_t                                major_version;
432    uint32_t                                minor_version;
433} rndis_co_address_family;
434
435/*
436 * NdisHalt message
437 */
438typedef struct rndis_halt_request_ {
439    /* RNDIS request ID */
440    uint32_t                                request_id;
441} rndis_halt_request;
442
443/*
444 * NdisQueryRequest message
445 */
446typedef struct rndis_query_request_ {
447    /* RNDIS request ID */
448    uint32_t                                request_id;
449    /* RNDIS OID */
450    uint32_t                                oid;
451    uint32_t                                info_buffer_length;
452    uint32_t                                info_buffer_offset;
453    /* RNDIS handle */
454    uint32_t                                device_vc_handle;
455} rndis_query_request;
456
457/*
458 * Response to NdisQueryRequest
459 */
460typedef struct rndis_query_complete_ {
461    /* RNDIS request ID */
462    uint32_t                                request_id;
463    /* RNDIS status */
464    uint32_t                                status;
465    uint32_t                                info_buffer_length;
466    uint32_t                                info_buffer_offset;
467} rndis_query_complete;
468
469/*
470 * NdisSetRequest message
471 */
472typedef struct rndis_set_request_ {
473    /* RNDIS request ID */
474    uint32_t                                request_id;
475    /* RNDIS OID */
476    uint32_t                                oid;
477    uint32_t                                info_buffer_length;
478    uint32_t                                info_buffer_offset;
479    /* RNDIS handle */
480    uint32_t                                device_vc_handle;
481} rndis_set_request;
482
483/*
484 * Response to NdisSetRequest
485 */
486typedef struct rndis_set_complete_ {
487    /* RNDIS request ID */
488    uint32_t                                request_id;
489    /* RNDIS status */
490    uint32_t                                status;
491} rndis_set_complete;
492
493/*
494 * NdisReset message
495 */
496typedef struct rndis_reset_request_ {
497    uint32_t                                reserved;
498} rndis_reset_request;
499
500/*
501 * Response to NdisReset
502 */
503typedef struct rndis_reset_complete_ {
504    /* RNDIS status */
505    uint32_t                                status;
506    uint32_t                                addressing_reset;
507} rndis_reset_complete;
508
509/*
510 * NdisMIndicateStatus message
511 */
512typedef struct rndis_indicate_status_ {
513    /* RNDIS status */
514    uint32_t                                status;
515    uint32_t                                status_buf_length;
516    uint32_t                                status_buf_offset;
517} rndis_indicate_status;
518
519/*
520 * Diagnostic information passed as the status buffer in
521 * rndis_indicate_status messages signifying error conditions.
522 */
523typedef struct rndis_diagnostic_info_ {
524    /* RNDIS status */
525    uint32_t                                diag_status;
526    uint32_t                                error_offset;
527} rndis_diagnostic_info;
528
529/*
530 * NdisKeepAlive message
531 */
532typedef struct rndis_keepalive_request_ {
533    /* RNDIS request ID */
534    uint32_t                                request_id;
535} rndis_keepalive_request;
536
537/*
538 * Response to NdisKeepAlive
539 */
540typedef struct rndis_keepalive_complete_ {
541    /* RNDIS request ID */
542    uint32_t                                request_id;
543    /* RNDIS status */
544    uint32_t                                status;
545} rndis_keepalive_complete;
546
547/*
548 * Data message. All offset fields contain byte offsets from the beginning
549 * of the rndis_packet structure. All length fields are in bytes.
550 * VcHandle is set to 0 for connectionless data, otherwise it
551 * contains the VC handle.
552 */
553typedef struct rndis_packet_ {
554    uint32_t                                data_offset;
555    uint32_t                                data_length;
556    uint32_t                                oob_data_offset;
557    uint32_t                                oob_data_length;
558    uint32_t                                num_oob_data_elements;
559    uint32_t                                per_pkt_info_offset;
560    uint32_t                                per_pkt_info_length;
561    /* RNDIS handle */
562    uint32_t                                vc_handle;
563    uint32_t                                reserved;
564} rndis_packet;
565
566typedef struct rndis_packet_ex_ {
567    uint32_t                                data_offset;
568    uint32_t                                data_length;
569    uint32_t                                oob_data_offset;
570    uint32_t                                oob_data_length;
571    uint32_t                                num_oob_data_elements;
572    uint32_t                                per_pkt_info_offset;
573    uint32_t                                per_pkt_info_length;
574    /* RNDIS handle */
575    uint32_t                                vc_handle;
576    uint32_t                                reserved;
577    uint64_t                                data_buf_id;
578    uint32_t                                data_buf_offset;
579    uint64_t                                next_header_buf_id;
580    uint32_t                                next_header_byte_offset;
581    uint32_t                                next_header_byte_count;
582} rndis_packet_ex;
583
584/*
585 * Optional Out of Band data associated with a Data message.
586 */
587typedef struct rndis_oobd_ {
588    uint32_t                                size;
589    /* RNDIS class ID */
590    uint32_t                                type;
591    uint32_t                                class_info_offset;
592} rndis_oobd;
593
594/*
595 * Packet extension field contents associated with a Data message.
596 */
597typedef struct rndis_per_packet_info_ {
598    uint32_t                                size;
599    uint32_t                                type;
600    uint32_t                                per_packet_info_offset;
601} rndis_per_packet_info;
602
603typedef enum ndis_per_pkt_infotype_ {
604	tcpip_chksum_info,
605	ipsec_info,
606	tcp_large_send_info,
607	classification_handle_info,
608	ndis_reserved,
609	sgl_info,
610	ieee_8021q_info,
611	original_pkt_info,
612	pkt_cancel_id,
613	original_netbuf_list,
614	cached_netbuf_list,
615	short_pkt_padding_info,
616	max_perpkt_info
617} ndis_per_pkt_infotype;
618
619#define nbl_hash_value	pkt_cancel_id
620#define nbl_hash_info	original_netbuf_list
621
622typedef struct ndis_8021q_info_ {
623	union {
624		struct {
625			uint32_t   user_pri : 3;  /* User Priority */
626			uint32_t   cfi      : 1;  /* Canonical Format ID */
627			uint32_t   vlan_id  : 12;
628			uint32_t   reserved : 16;
629		} s1;
630		uint32_t    value;
631	} u1;
632} ndis_8021q_info;
633
634struct rndis_object_header {
635	uint8_t type;
636	uint8_t revision;
637	uint16_t size;
638};
639
640typedef struct rndis_offload_params_ {
641	struct rndis_object_header header;
642	uint8_t ipv4_csum;
643	uint8_t tcp_ipv4_csum;
644	uint8_t udp_ipv4_csum;
645	uint8_t tcp_ipv6_csum;
646	uint8_t udp_ipv6_csum;
647	uint8_t lso_v1;
648	uint8_t ip_sec_v1;
649	uint8_t lso_v2_ipv4;
650	uint8_t lso_v2_ipv6;
651	uint8_t tcp_connection_ipv4;
652	uint8_t tcp_connection_ipv6;
653	uint32_t flags;
654	uint8_t ip_sec_v2;
655	uint8_t ip_sec_v2_ipv4;
656	struct {
657		uint8_t rsc_ipv4;
658		uint8_t rsc_ipv6;
659	};
660	struct {
661		uint8_t encapsulated_packet_task_offload;
662		uint8_t encapsulation_types;
663	};
664
665} rndis_offload_params;
666
667
668typedef struct rndis_tcp_ip_csum_info_ {
669	union {
670		struct {
671			uint32_t is_ipv4:1;
672			uint32_t is_ipv6:1;
673			uint32_t tcp_csum:1;
674			uint32_t udp_csum:1;
675			uint32_t ip_header_csum:1;
676			uint32_t reserved:11;
677			uint32_t tcp_header_offset:10;
678		} xmit;
679		struct {
680			uint32_t tcp_csum_failed:1;
681			uint32_t udp_csum_failed:1;
682			uint32_t ip_csum_failed:1;
683			uint32_t tcp_csum_succeeded:1;
684			uint32_t udp_csum_succeeded:1;
685			uint32_t ip_csum_succeeded:1;
686			uint32_t loopback:1;
687			uint32_t tcp_csum_value_invalid:1;
688			uint32_t ip_csum_value_invalid:1;
689		} receive;
690		uint32_t  value;
691	};
692} rndis_tcp_ip_csum_info;
693
694struct rndis_hash_value {
695	uint32_t	hash_value;
696} __packed;
697
698struct rndis_hash_info {
699	uint32_t	hash_info;
700} __packed;
701
702#define NDIS_HASH_FUNCTION_MASK		0x000000FF	/* see hash function */
703#define NDIS_HASH_TYPE_MASK		0x00FFFF00	/* see hash type */
704
705/* hash function */
706#define NDIS_HASH_FUNCTION_TOEPLITZ	0x00000001
707
708/* hash type */
709#define NDIS_HASH_IPV4			0x00000100
710#define NDIS_HASH_TCP_IPV4		0x00000200
711#define NDIS_HASH_IPV6			0x00000400
712#define NDIS_HASH_IPV6_EX		0x00000800
713#define NDIS_HASH_TCP_IPV6		0x00001000
714#define NDIS_HASH_TCP_IPV6_EX		0x00002000
715
716typedef struct rndis_tcp_tso_info_ {
717	union {
718		struct {
719			uint32_t unused:30;
720			uint32_t type:1;
721			uint32_t reserved2:1;
722		} xmit;
723		struct {
724			uint32_t mss:20;
725			uint32_t tcp_header_offset:10;
726			uint32_t type:1;
727			uint32_t reserved2:1;
728		} lso_v1_xmit;
729		struct {
730			uint32_t tcp_payload:30;
731			uint32_t type:1;
732			uint32_t reserved2:1;
733		} lso_v1_xmit_complete;
734		struct {
735			uint32_t mss:20;
736			uint32_t tcp_header_offset:10;
737			uint32_t type:1;
738			uint32_t ip_version:1;
739		} lso_v2_xmit;
740		struct {
741			uint32_t reserved:30;
742			uint32_t type:1;
743			uint32_t reserved2:1;
744		} lso_v2_xmit_complete;
745		uint32_t  value;
746	};
747} rndis_tcp_tso_info;
748
749#define RNDIS_HASHVAL_PPI_SIZE	(sizeof(rndis_per_packet_info) + \
750				sizeof(struct rndis_hash_value))
751
752#define RNDIS_VLAN_PPI_SIZE	(sizeof(rndis_per_packet_info) + \
753				sizeof(ndis_8021q_info))
754
755#define RNDIS_CSUM_PPI_SIZE	(sizeof(rndis_per_packet_info) + \
756				sizeof(rndis_tcp_ip_csum_info))
757
758#define RNDIS_TSO_PPI_SIZE	(sizeof(rndis_per_packet_info) + \
759				sizeof(rndis_tcp_tso_info))
760
761/*
762 * Format of Information buffer passed in a SetRequest for the OID
763 * OID_GEN_RNDIS_CONFIG_PARAMETER.
764 */
765typedef struct rndis_config_parameter_info_ {
766    uint32_t                                parameter_name_offset;
767    uint32_t                                parameter_name_length;
768    uint32_t                                parameter_type;
769    uint32_t                                parameter_value_offset;
770    uint32_t                                parameter_value_length;
771} rndis_config_parameter_info;
772
773/*
774 * Values for ParameterType in rndis_config_parameter_info
775 */
776#define RNDIS_CONFIG_PARAM_TYPE_INTEGER     0
777#define RNDIS_CONFIG_PARAM_TYPE_STRING      2
778
779
780/*
781 * CONDIS Miniport messages for connection oriented devices
782 * that do not implement a call manager.
783 */
784
785/*
786 * CoNdisMiniportCreateVc message
787 */
788typedef struct rcondis_mp_create_vc_ {
789    /* RNDIS request ID */
790    uint32_t                                request_id;
791    /* RNDIS handle */
792    uint32_t                                ndis_vc_handle;
793} rcondis_mp_create_vc;
794
795/*
796 * Response to CoNdisMiniportCreateVc
797 */
798typedef struct rcondis_mp_create_vc_complete_ {
799    /* RNDIS request ID */
800    uint32_t                                request_id;
801    /* RNDIS handle */
802    uint32_t                                device_vc_handle;
803    /* RNDIS status */
804    uint32_t                                status;
805} rcondis_mp_create_vc_complete;
806
807/*
808 * CoNdisMiniportDeleteVc message
809 */
810typedef struct rcondis_mp_delete_vc_ {
811    /* RNDIS request ID */
812    uint32_t                                request_id;
813    /* RNDIS handle */
814    uint32_t                                device_vc_handle;
815} rcondis_mp_delete_vc;
816
817/*
818 * Response to CoNdisMiniportDeleteVc
819 */
820typedef struct rcondis_mp_delete_vc_complete_ {
821    /* RNDIS request ID */
822    uint32_t                                request_id;
823    /* RNDIS status */
824    uint32_t                                status;
825} rcondis_mp_delete_vc_complete;
826
827/*
828 * CoNdisMiniportQueryRequest message
829 */
830typedef struct rcondis_mp_query_request_ {
831    /* RNDIS request ID */
832    uint32_t                                request_id;
833    /* RNDIS request type */
834    uint32_t                                request_type;
835    /* RNDIS OID */
836    uint32_t                                oid;
837    /* RNDIS handle */
838    uint32_t                                device_vc_handle;
839    uint32_t                                info_buf_length;
840    uint32_t                                info_buf_offset;
841} rcondis_mp_query_request;
842
843/*
844 * CoNdisMiniportSetRequest message
845 */
846typedef struct rcondis_mp_set_request_ {
847    /* RNDIS request ID */
848    uint32_t                                request_id;
849    /* RNDIS request type */
850    uint32_t                                request_type;
851    /* RNDIS OID */
852    uint32_t                                oid;
853    /* RNDIS handle */
854    uint32_t                                device_vc_handle;
855    uint32_t                                info_buf_length;
856    uint32_t                                info_buf_offset;
857} rcondis_mp_set_request;
858
859/*
860 * CoNdisIndicateStatus message
861 */
862typedef struct rcondis_indicate_status_ {
863    /* RNDIS handle */
864    uint32_t                                ndis_vc_handle;
865    /* RNDIS status */
866    uint32_t                                status;
867    uint32_t                                status_buf_length;
868    uint32_t                                status_buf_offset;
869} rcondis_indicate_status;
870
871/*
872 * CONDIS Call/VC parameters
873 */
874
875typedef struct rcondis_specific_parameters_ {
876    uint32_t                                parameter_type;
877    uint32_t                                parameter_length;
878    uint32_t                                parameter_offset;
879} rcondis_specific_parameters;
880
881typedef struct rcondis_media_parameters_ {
882    uint32_t                                flags;
883    uint32_t                                reserved1;
884    uint32_t                                reserved2;
885    rcondis_specific_parameters             media_specific;
886} rcondis_media_parameters;
887
888typedef struct rndis_flowspec_ {
889    uint32_t                                token_rate;
890    uint32_t                                token_bucket_size;
891    uint32_t                                peak_bandwidth;
892    uint32_t                                latency;
893    uint32_t                                delay_variation;
894    uint32_t                                service_type;
895    uint32_t                                max_sdu_size;
896    uint32_t                                minimum_policed_size;
897} rndis_flowspec;
898
899typedef struct rcondis_call_manager_parameters_ {
900    rndis_flowspec                          transmit;
901    rndis_flowspec                          receive;
902    rcondis_specific_parameters             call_mgr_specific;
903} rcondis_call_manager_parameters;
904
905/*
906 * CoNdisMiniportActivateVc message
907 */
908typedef struct rcondis_mp_activate_vc_request_ {
909    /* RNDIS request ID */
910    uint32_t                                request_id;
911    uint32_t                                flags;
912    /* RNDIS handle */
913    uint32_t                                device_vc_handle;
914    uint32_t                                media_params_offset;
915    uint32_t                                media_params_length;
916    uint32_t                                call_mgr_params_offset;
917    uint32_t                                call_mgr_params_length;
918} rcondis_mp_activate_vc_request;
919
920/*
921 * Response to CoNdisMiniportActivateVc
922 */
923typedef struct rcondis_mp_activate_vc_complete_ {
924    /* RNDIS request ID */
925    uint32_t                                request_id;
926    /* RNDIS status */
927    uint32_t                                status;
928} rcondis_mp_activate_vc_complete;
929
930/*
931 * CoNdisMiniportDeactivateVc message
932 */
933typedef struct rcondis_mp_deactivate_vc_request_ {
934    /* RNDIS request ID */
935    uint32_t                                request_id;
936    uint32_t                                flags;
937    /* RNDIS handle */
938    uint32_t                                device_vc_handle;
939} rcondis_mp_deactivate_vc_request;
940
941/*
942 * Response to CoNdisMiniportDeactivateVc
943 */
944typedef struct rcondis_mp_deactivate_vc_complete_ {
945    /* RNDIS request ID */
946    uint32_t                                request_id;
947    /* RNDIS status */
948    uint32_t                                status;
949} rcondis_mp_deactivate_vc_complete;
950
951/*
952 * union with all of the RNDIS messages
953 */
954typedef union rndis_msg_container_ {
955    rndis_packet                            packet;
956    rndis_initialize_request                init_request;
957    rndis_halt_request                      halt_request;
958    rndis_query_request                     query_request;
959    rndis_set_request                       set_request;
960    rndis_reset_request                     reset_request;
961    rndis_keepalive_request                 keepalive_request;
962    rndis_indicate_status                   indicate_status;
963    rndis_initialize_complete               init_complete;
964    rndis_query_complete                    query_complete;
965    rndis_set_complete                      set_complete;
966    rndis_reset_complete                    reset_complete;
967    rndis_keepalive_complete                keepalive_complete;
968    rcondis_mp_create_vc                    co_miniport_create_vc;
969    rcondis_mp_delete_vc                    co_miniport_delete_vc;
970    rcondis_indicate_status                 co_miniport_status;
971    rcondis_mp_activate_vc_request          co_miniport_activate_vc;
972    rcondis_mp_deactivate_vc_request        co_miniport_deactivate_vc;
973    rcondis_mp_create_vc_complete           co_miniport_create_vc_complete;
974    rcondis_mp_delete_vc_complete           co_miniport_delete_vc_complete;
975    rcondis_mp_activate_vc_complete         co_miniport_activate_vc_complete;
976    rcondis_mp_deactivate_vc_complete       co_miniport_deactivate_vc_complete;
977    rndis_packet_ex                         packet_ex;
978} rndis_msg_container;
979
980/*
981 * Remote NDIS message format
982 */
983typedef struct rndis_msg_ {
984    uint32_t                                ndis_msg_type;
985
986    /*
987     * Total length of this message, from the beginning
988     * of the rndis_msg struct, in bytes.
989     */
990    uint32_t                                msg_len;
991
992    /* Actual message */
993    rndis_msg_container                     msg;
994} rndis_msg;
995
996
997/*
998 * Handy macros
999 */
1000
1001/*
1002 * get the size of an RNDIS message. Pass in the message type,
1003 * rndis_set_request, rndis_packet for example
1004 */
1005#define RNDIS_MESSAGE_SIZE(message)                             \
1006    (sizeof(message) + (sizeof(rndis_msg) - sizeof(rndis_msg_container)))
1007
1008/*
1009 * get pointer to info buffer with message pointer
1010 */
1011#define MESSAGE_TO_INFO_BUFFER(message)                         \
1012    (((PUCHAR)(message)) + message->InformationBufferOffset)
1013
1014/*
1015 * get pointer to status buffer with message pointer
1016 */
1017#define MESSAGE_TO_STATUS_BUFFER(message)                       \
1018    (((PUCHAR)(message)) + message->StatusBufferOffset)
1019
1020/*
1021 * get pointer to OOBD buffer with message pointer
1022 */
1023#define MESSAGE_TO_OOBD_BUFFER(message)                         \
1024    (((PUCHAR)(message)) + message->OOBDataOffset)
1025
1026/*
1027 * get pointer to data buffer with message pointer
1028 */
1029#define MESSAGE_TO_DATA_BUFFER(message)                         \
1030    (((PUCHAR)(message)) + message->PerPacketInfoOffset)
1031
1032/*
1033 * get pointer to contained message from NDIS_MESSAGE pointer
1034 */
1035#define RNDIS_MESSAGE_PTR_TO_MESSAGE_PTR(rndis_message)         \
1036    ((void *) &rndis_message->Message)
1037
1038/*
1039 * get pointer to contained message from NDIS_MESSAGE pointer
1040 */
1041#define RNDIS_MESSAGE_RAW_PTR_TO_MESSAGE_PTR(rndis_message)     \
1042    ((void *) rndis_message)
1043
1044
1045
1046/*
1047 * Structures used in OID_RNDISMP_GET_RECEIVE_BUFFERS
1048 */
1049
1050#define RNDISMP_RECEIVE_BUFFER_ELEM_FLAG_VMQ_RECEIVE_BUFFER 0x00000001
1051
1052typedef struct rndismp_rx_buf_elem_ {
1053    uint32_t                            flags;
1054    uint32_t                            length;
1055    uint64_t                            rx_buf_id;
1056    uint32_t                            gpadl_handle;
1057    void                                *rx_buf;
1058} rndismp_rx_buf_elem;
1059
1060typedef struct rndismp_rx_bufs_info_ {
1061    uint32_t                            num_rx_bufs;
1062    rndismp_rx_buf_elem                 rx_buf_elems[1];
1063} rndismp_rx_bufs_info;
1064
1065
1066
1067#define RNDIS_HEADER_SIZE (sizeof(rndis_msg) - sizeof(rndis_msg_container))
1068
1069#define NDIS_PACKET_TYPE_DIRECTED	0x00000001
1070#define NDIS_PACKET_TYPE_MULTICAST	0x00000002
1071#define NDIS_PACKET_TYPE_ALL_MULTICAST	0x00000004
1072#define NDIS_PACKET_TYPE_BROADCAST	0x00000008
1073#define NDIS_PACKET_TYPE_SOURCE_ROUTING	0x00000010
1074#define NDIS_PACKET_TYPE_PROMISCUOUS	0x00000020
1075#define NDIS_PACKET_TYPE_SMT		0x00000040
1076#define NDIS_PACKET_TYPE_ALL_LOCAL	0x00000080
1077#define NDIS_PACKET_TYPE_GROUP		0x00000100
1078#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL	0x00000200
1079#define NDIS_PACKET_TYPE_FUNCTIONAL	0x00000400
1080#define NDIS_PACKET_TYPE_MAC_FRAME	0x00000800
1081
1082/*
1083 * Externs
1084 */
1085struct hv_vmbus_channel;
1086
1087int netvsc_recv(struct hv_vmbus_channel *chan,
1088    netvsc_packet *packet, const rndis_tcp_ip_csum_info *csum_info,
1089    const struct rndis_hash_info *hash_info,
1090    const struct rndis_hash_value *hash_value);
1091void netvsc_channel_rollup(struct hv_vmbus_channel *chan);
1092
1093void* hv_set_rppi_data(rndis_msg *rndis_mesg,
1094    uint32_t rppi_size,
1095    int pkt_type);
1096
1097void* hv_get_ppi_data(rndis_packet *rpkt, uint32_t type);
1098
1099#endif  /* __HV_RNDIS_H__ */
1100
1101