1250199Sgrehan/*- 2250199Sgrehan * Copyright (c) 2009-2012 Microsoft Corp. 3250199Sgrehan * Copyright (c) 2010-2012 Citrix Inc. 4250199Sgrehan * Copyright (c) 2012 NetApp Inc. 5250199Sgrehan * All rights reserved. 6250199Sgrehan * 7250199Sgrehan * Redistribution and use in source and binary forms, with or without 8250199Sgrehan * modification, are permitted provided that the following conditions 9250199Sgrehan * are met: 10250199Sgrehan * 1. Redistributions of source code must retain the above copyright 11250199Sgrehan * notice unmodified, this list of conditions, and the following 12250199Sgrehan * disclaimer. 13250199Sgrehan * 2. Redistributions in binary form must reproduce the above copyright 14250199Sgrehan * notice, this list of conditions and the following disclaimer in the 15250199Sgrehan * documentation and/or other materials provided with the distribution. 16250199Sgrehan * 17250199Sgrehan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18250199Sgrehan * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19250199Sgrehan * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20250199Sgrehan * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21250199Sgrehan * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22250199Sgrehan * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23250199Sgrehan * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24250199Sgrehan * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25250199Sgrehan * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26250199Sgrehan * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27285236Swhu * 28285236Swhu * $FreeBSD: releng/10.3/sys/dev/hyperv/netvsc/hv_rndis.h 295948 2016-02-24 01:30:50Z sephe $ 29250199Sgrehan */ 30250199Sgrehan 31250199Sgrehan#ifndef __HV_RNDIS_H__ 32250199Sgrehan#define __HV_RNDIS_H__ 33250199Sgrehan 34250199Sgrehan 35250199Sgrehan/* 36250199Sgrehan * NDIS protocol version numbers 37250199Sgrehan */ 38250199Sgrehan#define NDIS_VERSION_5_0 0x00050000 39250199Sgrehan#define NDIS_VERSION_5_1 0x00050001 40250199Sgrehan#define NDIS_VERSION_6_0 0x00060000 41285236Swhu#define NDIS_VERSION_6_1 0x00060001 42285236Swhu#define NDIS_VERSION_6_30 0x0006001e 43285236Swhu 44250199Sgrehan#define NDIS_VERSION (NDIS_VERSION_5_1) 45250199Sgrehan 46250199Sgrehan/* 47250199Sgrehan * Status codes 48250199Sgrehan */ 49250199Sgrehan 50250199Sgrehan#define STATUS_SUCCESS (0x00000000L) 51250199Sgrehan#define STATUS_UNSUCCESSFUL (0xC0000001L) 52250199Sgrehan#define STATUS_PENDING (0x00000103L) 53250199Sgrehan#define STATUS_INSUFFICIENT_RESOURCES (0xC000009AL) 54250199Sgrehan#define STATUS_BUFFER_OVERFLOW (0x80000005L) 55250199Sgrehan#define STATUS_NOT_SUPPORTED (0xC00000BBL) 56250199Sgrehan 57250199Sgrehan#define RNDIS_STATUS_SUCCESS (STATUS_SUCCESS) 58250199Sgrehan#define RNDIS_STATUS_PENDING (STATUS_PENDING) 59250199Sgrehan#define RNDIS_STATUS_NOT_RECOGNIZED (0x00010001L) 60250199Sgrehan#define RNDIS_STATUS_NOT_COPIED (0x00010002L) 61250199Sgrehan#define RNDIS_STATUS_NOT_ACCEPTED (0x00010003L) 62250199Sgrehan#define RNDIS_STATUS_CALL_ACTIVE (0x00010007L) 63250199Sgrehan 64250199Sgrehan#define RNDIS_STATUS_ONLINE (0x40010003L) 65250199Sgrehan#define RNDIS_STATUS_RESET_START (0x40010004L) 66250199Sgrehan#define RNDIS_STATUS_RESET_END (0x40010005L) 67250199Sgrehan#define RNDIS_STATUS_RING_STATUS (0x40010006L) 68250199Sgrehan#define RNDIS_STATUS_CLOSED (0x40010007L) 69250199Sgrehan#define RNDIS_STATUS_WAN_LINE_UP (0x40010008L) 70250199Sgrehan#define RNDIS_STATUS_WAN_LINE_DOWN (0x40010009L) 71250199Sgrehan#define RNDIS_STATUS_WAN_FRAGMENT (0x4001000AL) 72250199Sgrehan#define RNDIS_STATUS_MEDIA_CONNECT (0x4001000BL) 73250199Sgrehan#define RNDIS_STATUS_MEDIA_DISCONNECT (0x4001000CL) 74250199Sgrehan#define RNDIS_STATUS_HARDWARE_LINE_UP (0x4001000DL) 75250199Sgrehan#define RNDIS_STATUS_HARDWARE_LINE_DOWN (0x4001000EL) 76250199Sgrehan#define RNDIS_STATUS_INTERFACE_UP (0x4001000FL) 77250199Sgrehan#define RNDIS_STATUS_INTERFACE_DOWN (0x40010010L) 78250199Sgrehan#define RNDIS_STATUS_MEDIA_BUSY (0x40010011L) 79250199Sgrehan#define RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION (0x40010012L) 80250199Sgrehan#define RNDIS_STATUS_WW_INDICATION RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION 81250199Sgrehan#define RNDIS_STATUS_LINK_SPEED_CHANGE (0x40010013L) 82250199Sgrehan 83250199Sgrehan#define RNDIS_STATUS_NOT_RESETTABLE (0x80010001L) 84250199Sgrehan#define RNDIS_STATUS_SOFT_ERRORS (0x80010003L) 85250199Sgrehan#define RNDIS_STATUS_HARD_ERRORS (0x80010004L) 86250199Sgrehan#define RNDIS_STATUS_BUFFER_OVERFLOW (STATUS_BUFFER_OVERFLOW) 87250199Sgrehan 88250199Sgrehan#define RNDIS_STATUS_FAILURE (STATUS_UNSUCCESSFUL) 89250199Sgrehan#define RNDIS_STATUS_RESOURCES (STATUS_INSUFFICIENT_RESOURCES) 90250199Sgrehan#define RNDIS_STATUS_CLOSING (0xC0010002L) 91250199Sgrehan#define RNDIS_STATUS_BAD_VERSION (0xC0010004L) 92250199Sgrehan#define RNDIS_STATUS_BAD_CHARACTERISTICS (0xC0010005L) 93250199Sgrehan#define RNDIS_STATUS_ADAPTER_NOT_FOUND (0xC0010006L) 94250199Sgrehan#define RNDIS_STATUS_OPEN_FAILED (0xC0010007L) 95250199Sgrehan#define RNDIS_STATUS_DEVICE_FAILED (0xC0010008L) 96250199Sgrehan#define RNDIS_STATUS_MULTICAST_FULL (0xC0010009L) 97250199Sgrehan#define RNDIS_STATUS_MULTICAST_EXISTS (0xC001000AL) 98250199Sgrehan#define RNDIS_STATUS_MULTICAST_NOT_FOUND (0xC001000BL) 99250199Sgrehan#define RNDIS_STATUS_REQUEST_ABORTED (0xC001000CL) 100250199Sgrehan#define RNDIS_STATUS_RESET_IN_PROGRESS (0xC001000DL) 101250199Sgrehan#define RNDIS_STATUS_CLOSING_INDICATING (0xC001000EL) 102250199Sgrehan#define RNDIS_STATUS_NOT_SUPPORTED (STATUS_NOT_SUPPORTED) 103250199Sgrehan#define RNDIS_STATUS_INVALID_PACKET (0xC001000FL) 104250199Sgrehan#define RNDIS_STATUS_OPEN_LIST_FULL (0xC0010010L) 105250199Sgrehan#define RNDIS_STATUS_ADAPTER_NOT_READY (0xC0010011L) 106250199Sgrehan#define RNDIS_STATUS_ADAPTER_NOT_OPEN (0xC0010012L) 107250199Sgrehan#define RNDIS_STATUS_NOT_INDICATING (0xC0010013L) 108250199Sgrehan#define RNDIS_STATUS_INVALID_LENGTH (0xC0010014L) 109250199Sgrehan#define RNDIS_STATUS_INVALID_DATA (0xC0010015L) 110250199Sgrehan#define RNDIS_STATUS_BUFFER_TOO_SHORT (0xC0010016L) 111250199Sgrehan#define RNDIS_STATUS_INVALID_OID (0xC0010017L) 112250199Sgrehan#define RNDIS_STATUS_ADAPTER_REMOVED (0xC0010018L) 113250199Sgrehan#define RNDIS_STATUS_UNSUPPORTED_MEDIA (0xC0010019L) 114250199Sgrehan#define RNDIS_STATUS_GROUP_ADDRESS_IN_USE (0xC001001AL) 115250199Sgrehan#define RNDIS_STATUS_FILE_NOT_FOUND (0xC001001BL) 116250199Sgrehan#define RNDIS_STATUS_ERROR_READING_FILE (0xC001001CL) 117250199Sgrehan#define RNDIS_STATUS_ALREADY_MAPPED (0xC001001DL) 118250199Sgrehan#define RNDIS_STATUS_RESOURCE_CONFLICT (0xC001001EL) 119250199Sgrehan#define RNDIS_STATUS_NO_CABLE (0xC001001FL) 120250199Sgrehan 121250199Sgrehan#define RNDIS_STATUS_INVALID_SAP (0xC0010020L) 122250199Sgrehan#define RNDIS_STATUS_SAP_IN_USE (0xC0010021L) 123250199Sgrehan#define RNDIS_STATUS_INVALID_ADDRESS (0xC0010022L) 124250199Sgrehan#define RNDIS_STATUS_VC_NOT_ACTIVATED (0xC0010023L) 125250199Sgrehan#define RNDIS_STATUS_DEST_OUT_OF_ORDER (0xC0010024L) 126250199Sgrehan#define RNDIS_STATUS_VC_NOT_AVAILABLE (0xC0010025L) 127250199Sgrehan#define RNDIS_STATUS_CELLRATE_NOT_AVAILABLE (0xC0010026L) 128250199Sgrehan#define RNDIS_STATUS_INCOMPATABLE_QOS (0xC0010027L) 129250199Sgrehan#define RNDIS_STATUS_AAL_PARAMS_UNSUPPORTED (0xC0010028L) 130250199Sgrehan#define RNDIS_STATUS_NO_ROUTE_TO_DESTINATION (0xC0010029L) 131250199Sgrehan 132250199Sgrehan#define RNDIS_STATUS_TOKEN_RING_OPEN_ERROR (0xC0011000L) 133250199Sgrehan 134250199Sgrehan 135250199Sgrehan/* 136250199Sgrehan * Object Identifiers used by NdisRequest Query/Set Information 137250199Sgrehan */ 138250199Sgrehan 139250199Sgrehan/* 140250199Sgrehan * General Objects 141250199Sgrehan */ 142250199Sgrehan 143250199Sgrehan#define RNDIS_OID_GEN_SUPPORTED_LIST 0x00010101 144250199Sgrehan#define RNDIS_OID_GEN_HARDWARE_STATUS 0x00010102 145250199Sgrehan#define RNDIS_OID_GEN_MEDIA_SUPPORTED 0x00010103 146250199Sgrehan#define RNDIS_OID_GEN_MEDIA_IN_USE 0x00010104 147250199Sgrehan#define RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105 148250199Sgrehan#define RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106 149250199Sgrehan#define RNDIS_OID_GEN_LINK_SPEED 0x00010107 150250199Sgrehan#define RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108 151250199Sgrehan#define RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109 152250199Sgrehan#define RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A 153250199Sgrehan#define RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B 154250199Sgrehan#define RNDIS_OID_GEN_VENDOR_ID 0x0001010C 155250199Sgrehan#define RNDIS_OID_GEN_VENDOR_DESCRIPTION 0x0001010D 156250199Sgrehan#define RNDIS_OID_GEN_CURRENT_PACKET_FILTER 0x0001010E 157250199Sgrehan#define RNDIS_OID_GEN_CURRENT_LOOKAHEAD 0x0001010F 158250199Sgrehan#define RNDIS_OID_GEN_DRIVER_VERSION 0x00010110 159250199Sgrehan#define RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111 160250199Sgrehan#define RNDIS_OID_GEN_PROTOCOL_OPTIONS 0x00010112 161250199Sgrehan#define RNDIS_OID_GEN_MAC_OPTIONS 0x00010113 162250199Sgrehan#define RNDIS_OID_GEN_MEDIA_CONNECT_STATUS 0x00010114 163250199Sgrehan#define RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115 164250199Sgrehan#define RNDIS_OID_GEN_VENDOR_DRIVER_VERSION 0x00010116 165250199Sgrehan#define RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118 166250199Sgrehan#define RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119 167250199Sgrehan#define RNDIS_OID_GEN_MACHINE_NAME 0x0001021A 168250199Sgrehan#define RNDIS_OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B 169250199Sgrehan 170250199Sgrehan#define RNDIS_OID_GEN_XMIT_OK 0x00020101 171250199Sgrehan#define RNDIS_OID_GEN_RCV_OK 0x00020102 172250199Sgrehan#define RNDIS_OID_GEN_XMIT_ERROR 0x00020103 173250199Sgrehan#define RNDIS_OID_GEN_RCV_ERROR 0x00020104 174250199Sgrehan#define RNDIS_OID_GEN_RCV_NO_BUFFER 0x00020105 175250199Sgrehan 176250199Sgrehan#define RNDIS_OID_GEN_DIRECTED_BYTES_XMIT 0x00020201 177250199Sgrehan#define RNDIS_OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202 178250199Sgrehan#define RNDIS_OID_GEN_MULTICAST_BYTES_XMIT 0x00020203 179250199Sgrehan#define RNDIS_OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204 180250199Sgrehan#define RNDIS_OID_GEN_BROADCAST_BYTES_XMIT 0x00020205 181250199Sgrehan#define RNDIS_OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206 182250199Sgrehan#define RNDIS_OID_GEN_DIRECTED_BYTES_RCV 0x00020207 183250199Sgrehan#define RNDIS_OID_GEN_DIRECTED_FRAMES_RCV 0x00020208 184250199Sgrehan#define RNDIS_OID_GEN_MULTICAST_BYTES_RCV 0x00020209 185250199Sgrehan#define RNDIS_OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A 186250199Sgrehan#define RNDIS_OID_GEN_BROADCAST_BYTES_RCV 0x0002020B 187250199Sgrehan#define RNDIS_OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C 188250199Sgrehan 189250199Sgrehan#define RNDIS_OID_GEN_RCV_CRC_ERROR 0x0002020D 190250199Sgrehan#define RNDIS_OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E 191250199Sgrehan 192250199Sgrehan#define RNDIS_OID_GEN_GET_TIME_CAPS 0x0002020F 193250199Sgrehan#define RNDIS_OID_GEN_GET_NETCARD_TIME 0x00020210 194250199Sgrehan 195250199Sgrehan/* 196250199Sgrehan * These are connection-oriented general OIDs. 197250199Sgrehan * These replace the above OIDs for connection-oriented media. 198250199Sgrehan */ 199250199Sgrehan#define RNDIS_OID_GEN_CO_SUPPORTED_LIST 0x00010101 200250199Sgrehan#define RNDIS_OID_GEN_CO_HARDWARE_STATUS 0x00010102 201250199Sgrehan#define RNDIS_OID_GEN_CO_MEDIA_SUPPORTED 0x00010103 202250199Sgrehan#define RNDIS_OID_GEN_CO_MEDIA_IN_USE 0x00010104 203250199Sgrehan#define RNDIS_OID_GEN_CO_LINK_SPEED 0x00010105 204250199Sgrehan#define RNDIS_OID_GEN_CO_VENDOR_ID 0x00010106 205250199Sgrehan#define RNDIS_OID_GEN_CO_VENDOR_DESCRIPTION 0x00010107 206250199Sgrehan#define RNDIS_OID_GEN_CO_DRIVER_VERSION 0x00010108 207250199Sgrehan#define RNDIS_OID_GEN_CO_PROTOCOL_OPTIONS 0x00010109 208250199Sgrehan#define RNDIS_OID_GEN_CO_MAC_OPTIONS 0x0001010A 209250199Sgrehan#define RNDIS_OID_GEN_CO_MEDIA_CONNECT_STATUS 0x0001010B 210250199Sgrehan#define RNDIS_OID_GEN_CO_VENDOR_DRIVER_VERSION 0x0001010C 211250199Sgrehan#define RNDIS_OID_GEN_CO_MINIMUM_LINK_SPEED 0x0001010D 212250199Sgrehan 213250199Sgrehan#define RNDIS_OID_GEN_CO_GET_TIME_CAPS 0x00010201 214250199Sgrehan#define RNDIS_OID_GEN_CO_GET_NETCARD_TIME 0x00010202 215250199Sgrehan 216250199Sgrehan/* 217250199Sgrehan * These are connection-oriented statistics OIDs. 218250199Sgrehan */ 219250199Sgrehan#define RNDIS_OID_GEN_CO_XMIT_PDUS_OK 0x00020101 220250199Sgrehan#define RNDIS_OID_GEN_CO_RCV_PDUS_OK 0x00020102 221250199Sgrehan#define RNDIS_OID_GEN_CO_XMIT_PDUS_ERROR 0x00020103 222250199Sgrehan#define RNDIS_OID_GEN_CO_RCV_PDUS_ERROR 0x00020104 223250199Sgrehan#define RNDIS_OID_GEN_CO_RCV_PDUS_NO_BUFFER 0x00020105 224250199Sgrehan 225250199Sgrehan 226250199Sgrehan#define RNDIS_OID_GEN_CO_RCV_CRC_ERROR 0x00020201 227250199Sgrehan#define RNDIS_OID_GEN_CO_TRANSMIT_QUEUE_LENGTH 0x00020202 228250199Sgrehan#define RNDIS_OID_GEN_CO_BYTES_XMIT 0x00020203 229250199Sgrehan#define RNDIS_OID_GEN_CO_BYTES_RCV 0x00020204 230250199Sgrehan#define RNDIS_OID_GEN_CO_BYTES_XMIT_OUTSTANDING 0x00020205 231250199Sgrehan#define RNDIS_OID_GEN_CO_NETCARD_LOAD 0x00020206 232250199Sgrehan 233250199Sgrehan/* 234250199Sgrehan * These are objects for Connection-oriented media call-managers. 235250199Sgrehan */ 236250199Sgrehan#define RNDIS_OID_CO_ADD_PVC 0xFF000001 237250199Sgrehan#define RNDIS_OID_CO_DELETE_PVC 0xFF000002 238250199Sgrehan#define RNDIS_OID_CO_GET_CALL_INFORMATION 0xFF000003 239250199Sgrehan#define RNDIS_OID_CO_ADD_ADDRESS 0xFF000004 240250199Sgrehan#define RNDIS_OID_CO_DELETE_ADDRESS 0xFF000005 241250199Sgrehan#define RNDIS_OID_CO_GET_ADDRESSES 0xFF000006 242250199Sgrehan#define RNDIS_OID_CO_ADDRESS_CHANGE 0xFF000007 243250199Sgrehan#define RNDIS_OID_CO_SIGNALING_ENABLED 0xFF000008 244250199Sgrehan#define RNDIS_OID_CO_SIGNALING_DISABLED 0xFF000009 245250199Sgrehan 246250199Sgrehan 247250199Sgrehan/* 248250199Sgrehan * 802.3 Objects (Ethernet) 249250199Sgrehan */ 250250199Sgrehan 251250199Sgrehan#define RNDIS_OID_802_3_PERMANENT_ADDRESS 0x01010101 252250199Sgrehan#define RNDIS_OID_802_3_CURRENT_ADDRESS 0x01010102 253250199Sgrehan#define RNDIS_OID_802_3_MULTICAST_LIST 0x01010103 254250199Sgrehan#define RNDIS_OID_802_3_MAXIMUM_LIST_SIZE 0x01010104 255250199Sgrehan#define RNDIS_OID_802_3_MAC_OPTIONS 0x01010105 256250199Sgrehan 257250199Sgrehan/* 258250199Sgrehan * 259250199Sgrehan */ 260250199Sgrehan#define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001 261250199Sgrehan 262250199Sgrehan#define RNDIS_OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101 263250199Sgrehan#define RNDIS_OID_802_3_XMIT_ONE_COLLISION 0x01020102 264250199Sgrehan#define RNDIS_OID_802_3_XMIT_MORE_COLLISIONS 0x01020103 265250199Sgrehan 266250199Sgrehan#define RNDIS_OID_802_3_XMIT_DEFERRED 0x01020201 267250199Sgrehan#define RNDIS_OID_802_3_XMIT_MAX_COLLISIONS 0x01020202 268250199Sgrehan#define RNDIS_OID_802_3_RCV_OVERRUN 0x01020203 269250199Sgrehan#define RNDIS_OID_802_3_XMIT_UNDERRUN 0x01020204 270250199Sgrehan#define RNDIS_OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205 271250199Sgrehan#define RNDIS_OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206 272250199Sgrehan#define RNDIS_OID_802_3_XMIT_LATE_COLLISIONS 0x01020207 273250199Sgrehan 274250199Sgrehan 275250199Sgrehan/* 276250199Sgrehan * RNDIS MP custom OID for test 277250199Sgrehan */ 278250199Sgrehan#define OID_RNDISMP_GET_RECEIVE_BUFFERS 0xFFA0C90D // Query only 279250199Sgrehan 280250199Sgrehan 281250199Sgrehan/* 282250199Sgrehan * Remote NDIS message types 283250199Sgrehan */ 284250199Sgrehan#define REMOTE_NDIS_PACKET_MSG 0x00000001 285250199Sgrehan#define REMOTE_NDIS_INITIALIZE_MSG 0x00000002 286250199Sgrehan#define REMOTE_NDIS_HALT_MSG 0x00000003 287250199Sgrehan#define REMOTE_NDIS_QUERY_MSG 0x00000004 288250199Sgrehan#define REMOTE_NDIS_SET_MSG 0x00000005 289250199Sgrehan#define REMOTE_NDIS_RESET_MSG 0x00000006 290250199Sgrehan#define REMOTE_NDIS_INDICATE_STATUS_MSG 0x00000007 291250199Sgrehan#define REMOTE_NDIS_KEEPALIVE_MSG 0x00000008 292250199Sgrehan 293250199Sgrehan#define REMOTE_CONDIS_MP_CREATE_VC_MSG 0x00008001 294250199Sgrehan#define REMOTE_CONDIS_MP_DELETE_VC_MSG 0x00008002 295250199Sgrehan#define REMOTE_CONDIS_MP_ACTIVATE_VC_MSG 0x00008005 296250199Sgrehan#define REMOTE_CONDIS_MP_DEACTIVATE_VC_MSG 0x00008006 297250199Sgrehan#define REMOTE_CONDIS_INDICATE_STATUS_MSG 0x00008007 298250199Sgrehan 299250199Sgrehan/* 300250199Sgrehan * Remote NDIS message completion types 301250199Sgrehan */ 302250199Sgrehan#define REMOTE_NDIS_INITIALIZE_CMPLT 0x80000002 303250199Sgrehan#define REMOTE_NDIS_QUERY_CMPLT 0x80000004 304250199Sgrehan#define REMOTE_NDIS_SET_CMPLT 0x80000005 305250199Sgrehan#define REMOTE_NDIS_RESET_CMPLT 0x80000006 306250199Sgrehan#define REMOTE_NDIS_KEEPALIVE_CMPLT 0x80000008 307250199Sgrehan 308250199Sgrehan#define REMOTE_CONDIS_MP_CREATE_VC_CMPLT 0x80008001 309250199Sgrehan#define REMOTE_CONDIS_MP_DELETE_VC_CMPLT 0x80008002 310250199Sgrehan#define REMOTE_CONDIS_MP_ACTIVATE_VC_CMPLT 0x80008005 311250199Sgrehan#define REMOTE_CONDIS_MP_DEACTIVATE_VC_CMPLT 0x80008006 312250199Sgrehan 313250199Sgrehan/* 314250199Sgrehan * Reserved message type for private communication between lower-layer 315250199Sgrehan * host driver and remote device, if necessary. 316250199Sgrehan */ 317250199Sgrehan#define REMOTE_NDIS_BUS_MSG 0xff000001 318250199Sgrehan 319250199Sgrehan/* 320250199Sgrehan * Defines for DeviceFlags in rndis_initialize_complete 321250199Sgrehan */ 322250199Sgrehan#define RNDIS_DF_CONNECTIONLESS 0x00000001 323250199Sgrehan#define RNDIS_DF_CONNECTION_ORIENTED 0x00000002 324250199Sgrehan#define RNDIS_DF_RAW_DATA 0x00000004 325250199Sgrehan 326250199Sgrehan/* 327250199Sgrehan * Remote NDIS medium types. 328250199Sgrehan */ 329250199Sgrehan#define RNDIS_MEDIUM_802_3 0x00000000 330250199Sgrehan#define RNDIS_MEDIUM_802_5 0x00000001 331250199Sgrehan#define RNDIS_MEDIUM_FDDI 0x00000002 332250199Sgrehan#define RNDIS_MEDIUM_WAN 0x00000003 333250199Sgrehan#define RNDIS_MEDIUM_LOCAL_TALK 0x00000004 334250199Sgrehan#define RNDIS_MEDIUM_ARCNET_RAW 0x00000006 335250199Sgrehan#define RNDIS_MEDIUM_ARCNET_878_2 0x00000007 336250199Sgrehan#define RNDIS_MEDIUM_ATM 0x00000008 337250199Sgrehan#define RNDIS_MEDIUM_WIRELESS_WAN 0x00000009 338250199Sgrehan#define RNDIS_MEDIUM_IRDA 0x0000000a 339250199Sgrehan#define RNDIS_MEDIUM_CO_WAN 0x0000000b 340250199Sgrehan/* Not a real medium, defined as an upper bound */ 341250199Sgrehan#define RNDIS_MEDIUM_MAX 0x0000000d 342250199Sgrehan 343250199Sgrehan/* 344250199Sgrehan * Remote NDIS medium connection states. 345250199Sgrehan */ 346250199Sgrehan#define RNDIS_MEDIA_STATE_CONNECTED 0x00000000 347250199Sgrehan#define RNDIS_MEDIA_STATE_DISCONNECTED 0x00000001 348250199Sgrehan 349250199Sgrehan/* 350250199Sgrehan * Remote NDIS version numbers 351250199Sgrehan */ 352250199Sgrehan#define RNDIS_MAJOR_VERSION 0x00000001 353250199Sgrehan#define RNDIS_MINOR_VERSION 0x00000000 354250199Sgrehan 355285236Swhu 356250199Sgrehan/* 357285236Swhu * Remote NDIS offload parameters 358285236Swhu */ 359285236Swhu#define RNDIS_OBJECT_TYPE_DEFAULT 0x80 360285236Swhu 361285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_REVISION_3 3 362285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_NO_CHANGE 0 363285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_LSOV2_DISABLED 1 364285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_LSOV2_ENABLED 2 365285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_LSOV1_ENABLED 2 366285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_RSC_DISABLED 1 367285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_RSC_ENABLED 2 368285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_TX_RX_DISABLED 1 369285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_TX_ENABLED_RX_DISABLED 2 370285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_RX_ENABLED_TX_DISABLED 3 371285236Swhu#define RNDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED 4 372285236Swhu 373285236Swhu#define RNDIS_TCP_LARGE_SEND_OFFLOAD_V2_TYPE 1 374285236Swhu#define RNDIS_TCP_LARGE_SEND_OFFLOAD_IPV4 0 375285236Swhu#define RNDIS_TCP_LARGE_SEND_OFFLOAD_IPV6 1 376285236Swhu 377285236Swhu 378285236Swhu#define RNDIS_OID_TCP_OFFLOAD_CURRENT_CONFIG 0xFC01020B /* query only */ 379285236Swhu#define RNDIS_OID_TCP_OFFLOAD_PARAMETERS 0xFC01020C /* set only */ 380285236Swhu#define RNDIS_OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES 0xFC01020D/* query only */ 381285236Swhu#define RNDIS_OID_TCP_CONNECTION_OFFLOAD_CURRENT_CONFIG 0xFC01020E /* query only */ 382285236Swhu#define RNDIS_OID_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES 0xFC01020F /* query */ 383285236Swhu#define RNDIS_OID_OFFLOAD_ENCAPSULATION 0x0101010A /* set/query */ 384285236Swhu 385285236Swhu/* 386250199Sgrehan * NdisInitialize message 387250199Sgrehan */ 388250199Sgrehantypedef struct rndis_initialize_request_ { 389250199Sgrehan /* RNDIS request ID */ 390250199Sgrehan uint32_t request_id; 391250199Sgrehan uint32_t major_version; 392250199Sgrehan uint32_t minor_version; 393250199Sgrehan uint32_t max_xfer_size; 394250199Sgrehan} rndis_initialize_request; 395250199Sgrehan 396250199Sgrehan/* 397250199Sgrehan * Response to NdisInitialize 398250199Sgrehan */ 399250199Sgrehantypedef struct rndis_initialize_complete_ { 400250199Sgrehan /* RNDIS request ID */ 401250199Sgrehan uint32_t request_id; 402250199Sgrehan /* RNDIS status */ 403250199Sgrehan uint32_t status; 404250199Sgrehan uint32_t major_version; 405250199Sgrehan uint32_t minor_version; 406250199Sgrehan uint32_t device_flags; 407250199Sgrehan /* RNDIS medium */ 408250199Sgrehan uint32_t medium; 409250199Sgrehan uint32_t max_pkts_per_msg; 410250199Sgrehan uint32_t max_xfer_size; 411250199Sgrehan uint32_t pkt_align_factor; 412250199Sgrehan uint32_t af_list_offset; 413250199Sgrehan uint32_t af_list_size; 414250199Sgrehan} rndis_initialize_complete; 415250199Sgrehan 416250199Sgrehan/* 417250199Sgrehan * Call manager devices only: Information about an address family 418250199Sgrehan * supported by the device is appended to the response to NdisInitialize. 419250199Sgrehan */ 420250199Sgrehantypedef struct rndis_co_address_family_ { 421250199Sgrehan /* RNDIS AF */ 422250199Sgrehan uint32_t address_family; 423250199Sgrehan uint32_t major_version; 424250199Sgrehan uint32_t minor_version; 425250199Sgrehan} rndis_co_address_family; 426250199Sgrehan 427250199Sgrehan/* 428250199Sgrehan * NdisHalt message 429250199Sgrehan */ 430250199Sgrehantypedef struct rndis_halt_request_ { 431250199Sgrehan /* RNDIS request ID */ 432250199Sgrehan uint32_t request_id; 433250199Sgrehan} rndis_halt_request; 434250199Sgrehan 435250199Sgrehan/* 436250199Sgrehan * NdisQueryRequest message 437250199Sgrehan */ 438250199Sgrehantypedef struct rndis_query_request_ { 439250199Sgrehan /* RNDIS request ID */ 440250199Sgrehan uint32_t request_id; 441250199Sgrehan /* RNDIS OID */ 442250199Sgrehan uint32_t oid; 443250199Sgrehan uint32_t info_buffer_length; 444250199Sgrehan uint32_t info_buffer_offset; 445250199Sgrehan /* RNDIS handle */ 446250199Sgrehan uint32_t device_vc_handle; 447250199Sgrehan} rndis_query_request; 448250199Sgrehan 449250199Sgrehan/* 450250199Sgrehan * Response to NdisQueryRequest 451250199Sgrehan */ 452250199Sgrehantypedef struct rndis_query_complete_ { 453250199Sgrehan /* RNDIS request ID */ 454250199Sgrehan uint32_t request_id; 455250199Sgrehan /* RNDIS status */ 456250199Sgrehan uint32_t status; 457250199Sgrehan uint32_t info_buffer_length; 458250199Sgrehan uint32_t info_buffer_offset; 459250199Sgrehan} rndis_query_complete; 460250199Sgrehan 461250199Sgrehan/* 462250199Sgrehan * NdisSetRequest message 463250199Sgrehan */ 464250199Sgrehantypedef struct rndis_set_request_ { 465250199Sgrehan /* RNDIS request ID */ 466250199Sgrehan uint32_t request_id; 467250199Sgrehan /* RNDIS OID */ 468250199Sgrehan uint32_t oid; 469250199Sgrehan uint32_t info_buffer_length; 470250199Sgrehan uint32_t info_buffer_offset; 471250199Sgrehan /* RNDIS handle */ 472250199Sgrehan uint32_t device_vc_handle; 473250199Sgrehan} rndis_set_request; 474250199Sgrehan 475250199Sgrehan/* 476250199Sgrehan * Response to NdisSetRequest 477250199Sgrehan */ 478250199Sgrehantypedef struct rndis_set_complete_ { 479250199Sgrehan /* RNDIS request ID */ 480250199Sgrehan uint32_t request_id; 481250199Sgrehan /* RNDIS status */ 482250199Sgrehan uint32_t status; 483250199Sgrehan} rndis_set_complete; 484250199Sgrehan 485250199Sgrehan/* 486250199Sgrehan * NdisReset message 487250199Sgrehan */ 488250199Sgrehantypedef struct rndis_reset_request_ { 489250199Sgrehan uint32_t reserved; 490250199Sgrehan} rndis_reset_request; 491250199Sgrehan 492250199Sgrehan/* 493250199Sgrehan * Response to NdisReset 494250199Sgrehan */ 495250199Sgrehantypedef struct rndis_reset_complete_ { 496250199Sgrehan /* RNDIS status */ 497250199Sgrehan uint32_t status; 498250199Sgrehan uint32_t addressing_reset; 499250199Sgrehan} rndis_reset_complete; 500250199Sgrehan 501250199Sgrehan/* 502250199Sgrehan * NdisMIndicateStatus message 503250199Sgrehan */ 504250199Sgrehantypedef struct rndis_indicate_status_ { 505250199Sgrehan /* RNDIS status */ 506250199Sgrehan uint32_t status; 507250199Sgrehan uint32_t status_buf_length; 508250199Sgrehan uint32_t status_buf_offset; 509250199Sgrehan} rndis_indicate_status; 510250199Sgrehan 511250199Sgrehan/* 512250199Sgrehan * Diagnostic information passed as the status buffer in 513250199Sgrehan * rndis_indicate_status messages signifying error conditions. 514250199Sgrehan */ 515250199Sgrehantypedef struct rndis_diagnostic_info_ { 516250199Sgrehan /* RNDIS status */ 517250199Sgrehan uint32_t diag_status; 518250199Sgrehan uint32_t error_offset; 519250199Sgrehan} rndis_diagnostic_info; 520250199Sgrehan 521250199Sgrehan/* 522250199Sgrehan * NdisKeepAlive message 523250199Sgrehan */ 524250199Sgrehantypedef struct rndis_keepalive_request_ { 525250199Sgrehan /* RNDIS request ID */ 526250199Sgrehan uint32_t request_id; 527250199Sgrehan} rndis_keepalive_request; 528250199Sgrehan 529250199Sgrehan/* 530250199Sgrehan * Response to NdisKeepAlive 531250199Sgrehan */ 532250199Sgrehantypedef struct rndis_keepalive_complete_ { 533250199Sgrehan /* RNDIS request ID */ 534250199Sgrehan uint32_t request_id; 535250199Sgrehan /* RNDIS status */ 536250199Sgrehan uint32_t status; 537250199Sgrehan} rndis_keepalive_complete; 538250199Sgrehan 539250199Sgrehan/* 540250199Sgrehan * Data message. All offset fields contain byte offsets from the beginning 541250199Sgrehan * of the rndis_packet structure. All length fields are in bytes. 542250199Sgrehan * VcHandle is set to 0 for connectionless data, otherwise it 543250199Sgrehan * contains the VC handle. 544250199Sgrehan */ 545250199Sgrehantypedef struct rndis_packet_ { 546250199Sgrehan uint32_t data_offset; 547250199Sgrehan uint32_t data_length; 548250199Sgrehan uint32_t oob_data_offset; 549250199Sgrehan uint32_t oob_data_length; 550250199Sgrehan uint32_t num_oob_data_elements; 551250199Sgrehan uint32_t per_pkt_info_offset; 552250199Sgrehan uint32_t per_pkt_info_length; 553250199Sgrehan /* RNDIS handle */ 554250199Sgrehan uint32_t vc_handle; 555250199Sgrehan uint32_t reserved; 556250199Sgrehan} rndis_packet; 557250199Sgrehan 558250199Sgrehantypedef struct rndis_packet_ex_ { 559250199Sgrehan uint32_t data_offset; 560250199Sgrehan uint32_t data_length; 561250199Sgrehan uint32_t oob_data_offset; 562250199Sgrehan uint32_t oob_data_length; 563250199Sgrehan uint32_t num_oob_data_elements; 564250199Sgrehan uint32_t per_pkt_info_offset; 565250199Sgrehan uint32_t per_pkt_info_length; 566250199Sgrehan /* RNDIS handle */ 567250199Sgrehan uint32_t vc_handle; 568250199Sgrehan uint32_t reserved; 569250199Sgrehan uint64_t data_buf_id; 570250199Sgrehan uint32_t data_buf_offset; 571250199Sgrehan uint64_t next_header_buf_id; 572250199Sgrehan uint32_t next_header_byte_offset; 573250199Sgrehan uint32_t next_header_byte_count; 574250199Sgrehan} rndis_packet_ex; 575250199Sgrehan 576250199Sgrehan/* 577250199Sgrehan * Optional Out of Band data associated with a Data message. 578250199Sgrehan */ 579250199Sgrehantypedef struct rndis_oobd_ { 580250199Sgrehan uint32_t size; 581250199Sgrehan /* RNDIS class ID */ 582250199Sgrehan uint32_t type; 583250199Sgrehan uint32_t class_info_offset; 584250199Sgrehan} rndis_oobd; 585250199Sgrehan 586250199Sgrehan/* 587250199Sgrehan * Packet extension field contents associated with a Data message. 588250199Sgrehan */ 589250199Sgrehantypedef struct rndis_per_packet_info_ { 590250199Sgrehan uint32_t size; 591250199Sgrehan uint32_t type; 592250199Sgrehan uint32_t per_packet_info_offset; 593250199Sgrehan} rndis_per_packet_info; 594250199Sgrehan 595250199Sgrehantypedef enum ndis_per_pkt_infotype_ { 596250199Sgrehan tcpip_chksum_info, 597250199Sgrehan ipsec_info, 598250199Sgrehan tcp_large_send_info, 599250199Sgrehan classification_handle_info, 600250199Sgrehan ndis_reserved, 601250199Sgrehan sgl_info, 602250199Sgrehan ieee_8021q_info, 603250199Sgrehan original_pkt_info, 604250199Sgrehan pkt_cancel_id, 605250199Sgrehan original_netbuf_list, 606250199Sgrehan cached_netbuf_list, 607250199Sgrehan short_pkt_padding_info, 608250199Sgrehan max_perpkt_info 609250199Sgrehan} ndis_per_pkt_infotype; 610250199Sgrehan 611250199Sgrehantypedef struct ndis_8021q_info_ { 612250199Sgrehan union { 613250199Sgrehan struct { 614250199Sgrehan uint32_t user_pri : 3; /* User Priority */ 615250199Sgrehan uint32_t cfi : 1; /* Canonical Format ID */ 616250199Sgrehan uint32_t vlan_id : 12; 617250199Sgrehan uint32_t reserved : 16; 618250199Sgrehan } s1; 619250199Sgrehan uint32_t value; 620250199Sgrehan } u1; 621250199Sgrehan} ndis_8021q_info; 622250199Sgrehan 623285236Swhustruct rndis_object_header { 624285236Swhu uint8_t type; 625285236Swhu uint8_t revision; 626285236Swhu uint16_t size; 627285236Swhu}; 628285236Swhu 629285236Swhutypedef struct rndis_offload_params_ { 630285236Swhu struct rndis_object_header header; 631285236Swhu uint8_t ipv4_csum; 632285236Swhu uint8_t tcp_ipv4_csum; 633285236Swhu uint8_t udp_ipv4_csum; 634285236Swhu uint8_t tcp_ipv6_csum; 635285236Swhu uint8_t udp_ipv6_csum; 636285236Swhu uint8_t lso_v1; 637285236Swhu uint8_t ip_sec_v1; 638285236Swhu uint8_t lso_v2_ipv4; 639285236Swhu uint8_t lso_v2_ipv6; 640285236Swhu uint8_t tcp_connection_ipv4; 641285236Swhu uint8_t tcp_connection_ipv6; 642285236Swhu uint32_t flags; 643285236Swhu uint8_t ip_sec_v2; 644285236Swhu uint8_t ip_sec_v2_ipv4; 645285236Swhu struct { 646285236Swhu uint8_t rsc_ipv4; 647285236Swhu uint8_t rsc_ipv6; 648285236Swhu }; 649285236Swhu struct { 650285236Swhu uint8_t encapsulated_packet_task_offload; 651285236Swhu uint8_t encapsulation_types; 652285236Swhu }; 653285236Swhu 654285236Swhu} rndis_offload_params; 655285236Swhu 656285236Swhu 657285236Swhutypedef struct rndis_tcp_ip_csum_info_ { 658285236Swhu union { 659285236Swhu struct { 660285236Swhu uint32_t is_ipv4:1; 661285236Swhu uint32_t is_ipv6:1; 662285236Swhu uint32_t tcp_csum:1; 663285236Swhu uint32_t udp_csum:1; 664285236Swhu uint32_t ip_header_csum:1; 665285236Swhu uint32_t reserved:11; 666285236Swhu uint32_t tcp_header_offset:10; 667285236Swhu } xmit; 668285236Swhu struct { 669285236Swhu uint32_t tcp_csum_failed:1; 670285236Swhu uint32_t udp_csum_failed:1; 671285236Swhu uint32_t ip_csum_failed:1; 672285236Swhu uint32_t tcp_csum_succeeded:1; 673285236Swhu uint32_t udp_csum_succeeded:1; 674285236Swhu uint32_t ip_csum_succeeded:1; 675285236Swhu uint32_t loopback:1; 676285236Swhu uint32_t tcp_csum_value_invalid:1; 677285236Swhu uint32_t ip_csum_value_invalid:1; 678285236Swhu } receive; 679285236Swhu uint32_t value; 680285236Swhu }; 681285236Swhu} rndis_tcp_ip_csum_info; 682285236Swhu 683285236Swhutypedef struct rndis_tcp_tso_info_ { 684285236Swhu union { 685285236Swhu struct { 686285236Swhu uint32_t unused:30; 687285236Swhu uint32_t type:1; 688285236Swhu uint32_t reserved2:1; 689285236Swhu } xmit; 690285236Swhu struct { 691285236Swhu uint32_t mss:20; 692285236Swhu uint32_t tcp_header_offset:10; 693285236Swhu uint32_t type:1; 694285236Swhu uint32_t reserved2:1; 695285236Swhu } lso_v1_xmit; 696285236Swhu struct { 697285236Swhu uint32_t tcp_payload:30; 698285236Swhu uint32_t type:1; 699285236Swhu uint32_t reserved2:1; 700285236Swhu } lso_v1_xmit_complete; 701285236Swhu struct { 702285236Swhu uint32_t mss:20; 703285236Swhu uint32_t tcp_header_offset:10; 704285236Swhu uint32_t type:1; 705285236Swhu uint32_t ip_version:1; 706285236Swhu } lso_v2_xmit; 707285236Swhu struct { 708285236Swhu uint32_t reserved:30; 709285236Swhu uint32_t type:1; 710285236Swhu uint32_t reserved2:1; 711285236Swhu } lso_v2_xmit_complete; 712285236Swhu uint32_t value; 713285236Swhu }; 714285236Swhu} rndis_tcp_tso_info; 715285236Swhu 716285236Swhu#define RNDIS_VLAN_PPI_SIZE (sizeof(rndis_per_packet_info) + \ 717285236Swhu sizeof(ndis_8021q_info)) 718285236Swhu 719285236Swhu#define RNDIS_CSUM_PPI_SIZE (sizeof(rndis_per_packet_info) + \ 720285236Swhu sizeof(rndis_tcp_ip_csum_info)) 721285236Swhu 722285236Swhu#define RNDIS_TSO_PPI_SIZE (sizeof(rndis_per_packet_info) + \ 723285236Swhu sizeof(rndis_tcp_tso_info)) 724285236Swhu 725250199Sgrehan/* 726250199Sgrehan * Format of Information buffer passed in a SetRequest for the OID 727250199Sgrehan * OID_GEN_RNDIS_CONFIG_PARAMETER. 728250199Sgrehan */ 729250199Sgrehantypedef struct rndis_config_parameter_info_ { 730250199Sgrehan uint32_t parameter_name_offset; 731250199Sgrehan uint32_t parameter_name_length; 732250199Sgrehan uint32_t parameter_type; 733250199Sgrehan uint32_t parameter_value_offset; 734250199Sgrehan uint32_t parameter_value_length; 735250199Sgrehan} rndis_config_parameter_info; 736250199Sgrehan 737250199Sgrehan/* 738250199Sgrehan * Values for ParameterType in rndis_config_parameter_info 739250199Sgrehan */ 740250199Sgrehan#define RNDIS_CONFIG_PARAM_TYPE_INTEGER 0 741250199Sgrehan#define RNDIS_CONFIG_PARAM_TYPE_STRING 2 742250199Sgrehan 743250199Sgrehan 744250199Sgrehan/* 745250199Sgrehan * CONDIS Miniport messages for connection oriented devices 746250199Sgrehan * that do not implement a call manager. 747250199Sgrehan */ 748250199Sgrehan 749250199Sgrehan/* 750250199Sgrehan * CoNdisMiniportCreateVc message 751250199Sgrehan */ 752250199Sgrehantypedef struct rcondis_mp_create_vc_ { 753250199Sgrehan /* RNDIS request ID */ 754250199Sgrehan uint32_t request_id; 755250199Sgrehan /* RNDIS handle */ 756250199Sgrehan uint32_t ndis_vc_handle; 757250199Sgrehan} rcondis_mp_create_vc; 758250199Sgrehan 759250199Sgrehan/* 760250199Sgrehan * Response to CoNdisMiniportCreateVc 761250199Sgrehan */ 762250199Sgrehantypedef struct rcondis_mp_create_vc_complete_ { 763250199Sgrehan /* RNDIS request ID */ 764250199Sgrehan uint32_t request_id; 765250199Sgrehan /* RNDIS handle */ 766250199Sgrehan uint32_t device_vc_handle; 767250199Sgrehan /* RNDIS status */ 768250199Sgrehan uint32_t status; 769250199Sgrehan} rcondis_mp_create_vc_complete; 770250199Sgrehan 771250199Sgrehan/* 772250199Sgrehan * CoNdisMiniportDeleteVc message 773250199Sgrehan */ 774250199Sgrehantypedef struct rcondis_mp_delete_vc_ { 775250199Sgrehan /* RNDIS request ID */ 776250199Sgrehan uint32_t request_id; 777250199Sgrehan /* RNDIS handle */ 778250199Sgrehan uint32_t device_vc_handle; 779250199Sgrehan} rcondis_mp_delete_vc; 780250199Sgrehan 781250199Sgrehan/* 782250199Sgrehan * Response to CoNdisMiniportDeleteVc 783250199Sgrehan */ 784250199Sgrehantypedef struct rcondis_mp_delete_vc_complete_ { 785250199Sgrehan /* RNDIS request ID */ 786250199Sgrehan uint32_t request_id; 787250199Sgrehan /* RNDIS status */ 788250199Sgrehan uint32_t status; 789250199Sgrehan} rcondis_mp_delete_vc_complete; 790250199Sgrehan 791250199Sgrehan/* 792250199Sgrehan * CoNdisMiniportQueryRequest message 793250199Sgrehan */ 794250199Sgrehantypedef struct rcondis_mp_query_request_ { 795250199Sgrehan /* RNDIS request ID */ 796250199Sgrehan uint32_t request_id; 797250199Sgrehan /* RNDIS request type */ 798250199Sgrehan uint32_t request_type; 799250199Sgrehan /* RNDIS OID */ 800250199Sgrehan uint32_t oid; 801250199Sgrehan /* RNDIS handle */ 802250199Sgrehan uint32_t device_vc_handle; 803250199Sgrehan uint32_t info_buf_length; 804250199Sgrehan uint32_t info_buf_offset; 805250199Sgrehan} rcondis_mp_query_request; 806250199Sgrehan 807250199Sgrehan/* 808250199Sgrehan * CoNdisMiniportSetRequest message 809250199Sgrehan */ 810250199Sgrehantypedef struct rcondis_mp_set_request_ { 811250199Sgrehan /* RNDIS request ID */ 812250199Sgrehan uint32_t request_id; 813250199Sgrehan /* RNDIS request type */ 814250199Sgrehan uint32_t request_type; 815250199Sgrehan /* RNDIS OID */ 816250199Sgrehan uint32_t oid; 817250199Sgrehan /* RNDIS handle */ 818250199Sgrehan uint32_t device_vc_handle; 819250199Sgrehan uint32_t info_buf_length; 820250199Sgrehan uint32_t info_buf_offset; 821250199Sgrehan} rcondis_mp_set_request; 822250199Sgrehan 823250199Sgrehan/* 824250199Sgrehan * CoNdisIndicateStatus message 825250199Sgrehan */ 826250199Sgrehantypedef struct rcondis_indicate_status_ { 827250199Sgrehan /* RNDIS handle */ 828250199Sgrehan uint32_t ndis_vc_handle; 829250199Sgrehan /* RNDIS status */ 830250199Sgrehan uint32_t status; 831250199Sgrehan uint32_t status_buf_length; 832250199Sgrehan uint32_t status_buf_offset; 833250199Sgrehan} rcondis_indicate_status; 834250199Sgrehan 835250199Sgrehan/* 836250199Sgrehan * CONDIS Call/VC parameters 837250199Sgrehan */ 838250199Sgrehan 839250199Sgrehantypedef struct rcondis_specific_parameters_ { 840250199Sgrehan uint32_t parameter_type; 841250199Sgrehan uint32_t parameter_length; 842250199Sgrehan uint32_t parameter_offset; 843250199Sgrehan} rcondis_specific_parameters; 844250199Sgrehan 845250199Sgrehantypedef struct rcondis_media_parameters_ { 846250199Sgrehan uint32_t flags; 847250199Sgrehan uint32_t reserved1; 848250199Sgrehan uint32_t reserved2; 849250199Sgrehan rcondis_specific_parameters media_specific; 850250199Sgrehan} rcondis_media_parameters; 851250199Sgrehan 852250199Sgrehantypedef struct rndis_flowspec_ { 853250199Sgrehan uint32_t token_rate; 854250199Sgrehan uint32_t token_bucket_size; 855250199Sgrehan uint32_t peak_bandwidth; 856250199Sgrehan uint32_t latency; 857250199Sgrehan uint32_t delay_variation; 858250199Sgrehan uint32_t service_type; 859250199Sgrehan uint32_t max_sdu_size; 860250199Sgrehan uint32_t minimum_policed_size; 861250199Sgrehan} rndis_flowspec; 862250199Sgrehan 863250199Sgrehantypedef struct rcondis_call_manager_parameters_ { 864250199Sgrehan rndis_flowspec transmit; 865250199Sgrehan rndis_flowspec receive; 866250199Sgrehan rcondis_specific_parameters call_mgr_specific; 867250199Sgrehan} rcondis_call_manager_parameters; 868250199Sgrehan 869250199Sgrehan/* 870250199Sgrehan * CoNdisMiniportActivateVc message 871250199Sgrehan */ 872250199Sgrehantypedef struct rcondis_mp_activate_vc_request_ { 873250199Sgrehan /* RNDIS request ID */ 874250199Sgrehan uint32_t request_id; 875250199Sgrehan uint32_t flags; 876250199Sgrehan /* RNDIS handle */ 877250199Sgrehan uint32_t device_vc_handle; 878250199Sgrehan uint32_t media_params_offset; 879250199Sgrehan uint32_t media_params_length; 880250199Sgrehan uint32_t call_mgr_params_offset; 881250199Sgrehan uint32_t call_mgr_params_length; 882250199Sgrehan} rcondis_mp_activate_vc_request; 883250199Sgrehan 884250199Sgrehan/* 885250199Sgrehan * Response to CoNdisMiniportActivateVc 886250199Sgrehan */ 887250199Sgrehantypedef struct rcondis_mp_activate_vc_complete_ { 888250199Sgrehan /* RNDIS request ID */ 889250199Sgrehan uint32_t request_id; 890250199Sgrehan /* RNDIS status */ 891250199Sgrehan uint32_t status; 892250199Sgrehan} rcondis_mp_activate_vc_complete; 893250199Sgrehan 894250199Sgrehan/* 895250199Sgrehan * CoNdisMiniportDeactivateVc message 896250199Sgrehan */ 897250199Sgrehantypedef struct rcondis_mp_deactivate_vc_request_ { 898250199Sgrehan /* RNDIS request ID */ 899250199Sgrehan uint32_t request_id; 900250199Sgrehan uint32_t flags; 901250199Sgrehan /* RNDIS handle */ 902250199Sgrehan uint32_t device_vc_handle; 903250199Sgrehan} rcondis_mp_deactivate_vc_request; 904250199Sgrehan 905250199Sgrehan/* 906250199Sgrehan * Response to CoNdisMiniportDeactivateVc 907250199Sgrehan */ 908250199Sgrehantypedef struct rcondis_mp_deactivate_vc_complete_ { 909250199Sgrehan /* RNDIS request ID */ 910250199Sgrehan uint32_t request_id; 911250199Sgrehan /* RNDIS status */ 912250199Sgrehan uint32_t status; 913250199Sgrehan} rcondis_mp_deactivate_vc_complete; 914250199Sgrehan 915250199Sgrehan/* 916250199Sgrehan * union with all of the RNDIS messages 917250199Sgrehan */ 918250199Sgrehantypedef union rndis_msg_container_ { 919250199Sgrehan rndis_packet packet; 920250199Sgrehan rndis_initialize_request init_request; 921250199Sgrehan rndis_halt_request halt_request; 922250199Sgrehan rndis_query_request query_request; 923250199Sgrehan rndis_set_request set_request; 924250199Sgrehan rndis_reset_request reset_request; 925250199Sgrehan rndis_keepalive_request keepalive_request; 926250199Sgrehan rndis_indicate_status indicate_status; 927250199Sgrehan rndis_initialize_complete init_complete; 928250199Sgrehan rndis_query_complete query_complete; 929250199Sgrehan rndis_set_complete set_complete; 930250199Sgrehan rndis_reset_complete reset_complete; 931250199Sgrehan rndis_keepalive_complete keepalive_complete; 932250199Sgrehan rcondis_mp_create_vc co_miniport_create_vc; 933250199Sgrehan rcondis_mp_delete_vc co_miniport_delete_vc; 934250199Sgrehan rcondis_indicate_status co_miniport_status; 935250199Sgrehan rcondis_mp_activate_vc_request co_miniport_activate_vc; 936250199Sgrehan rcondis_mp_deactivate_vc_request co_miniport_deactivate_vc; 937250199Sgrehan rcondis_mp_create_vc_complete co_miniport_create_vc_complete; 938250199Sgrehan rcondis_mp_delete_vc_complete co_miniport_delete_vc_complete; 939250199Sgrehan rcondis_mp_activate_vc_complete co_miniport_activate_vc_complete; 940250199Sgrehan rcondis_mp_deactivate_vc_complete co_miniport_deactivate_vc_complete; 941250199Sgrehan rndis_packet_ex packet_ex; 942250199Sgrehan} rndis_msg_container; 943250199Sgrehan 944250199Sgrehan/* 945250199Sgrehan * Remote NDIS message format 946250199Sgrehan */ 947250199Sgrehantypedef struct rndis_msg_ { 948250199Sgrehan uint32_t ndis_msg_type; 949250199Sgrehan 950250199Sgrehan /* 951250199Sgrehan * Total length of this message, from the beginning 952250199Sgrehan * of the rndis_msg struct, in bytes. 953250199Sgrehan */ 954250199Sgrehan uint32_t msg_len; 955250199Sgrehan 956250199Sgrehan /* Actual message */ 957250199Sgrehan rndis_msg_container msg; 958250199Sgrehan} rndis_msg; 959250199Sgrehan 960250199Sgrehan 961250199Sgrehan/* 962250199Sgrehan * Handy macros 963250199Sgrehan */ 964250199Sgrehan 965250199Sgrehan/* 966250199Sgrehan * get the size of an RNDIS message. Pass in the message type, 967250199Sgrehan * rndis_set_request, rndis_packet for example 968250199Sgrehan */ 969250199Sgrehan#define RNDIS_MESSAGE_SIZE(message) \ 970250199Sgrehan (sizeof(message) + (sizeof(rndis_msg) - sizeof(rndis_msg_container))) 971250199Sgrehan 972250199Sgrehan/* 973250199Sgrehan * get pointer to info buffer with message pointer 974250199Sgrehan */ 975250199Sgrehan#define MESSAGE_TO_INFO_BUFFER(message) \ 976250199Sgrehan (((PUCHAR)(message)) + message->InformationBufferOffset) 977250199Sgrehan 978250199Sgrehan/* 979250199Sgrehan * get pointer to status buffer with message pointer 980250199Sgrehan */ 981250199Sgrehan#define MESSAGE_TO_STATUS_BUFFER(message) \ 982250199Sgrehan (((PUCHAR)(message)) + message->StatusBufferOffset) 983250199Sgrehan 984250199Sgrehan/* 985250199Sgrehan * get pointer to OOBD buffer with message pointer 986250199Sgrehan */ 987250199Sgrehan#define MESSAGE_TO_OOBD_BUFFER(message) \ 988250199Sgrehan (((PUCHAR)(message)) + message->OOBDataOffset) 989250199Sgrehan 990250199Sgrehan/* 991250199Sgrehan * get pointer to data buffer with message pointer 992250199Sgrehan */ 993250199Sgrehan#define MESSAGE_TO_DATA_BUFFER(message) \ 994250199Sgrehan (((PUCHAR)(message)) + message->PerPacketInfoOffset) 995250199Sgrehan 996250199Sgrehan/* 997250199Sgrehan * get pointer to contained message from NDIS_MESSAGE pointer 998250199Sgrehan */ 999250199Sgrehan#define RNDIS_MESSAGE_PTR_TO_MESSAGE_PTR(rndis_message) \ 1000250199Sgrehan ((void *) &rndis_message->Message) 1001250199Sgrehan 1002250199Sgrehan/* 1003250199Sgrehan * get pointer to contained message from NDIS_MESSAGE pointer 1004250199Sgrehan */ 1005250199Sgrehan#define RNDIS_MESSAGE_RAW_PTR_TO_MESSAGE_PTR(rndis_message) \ 1006250199Sgrehan ((void *) rndis_message) 1007250199Sgrehan 1008250199Sgrehan 1009250199Sgrehan 1010250199Sgrehan/* 1011250199Sgrehan * Structures used in OID_RNDISMP_GET_RECEIVE_BUFFERS 1012250199Sgrehan */ 1013250199Sgrehan 1014250199Sgrehan#define RNDISMP_RECEIVE_BUFFER_ELEM_FLAG_VMQ_RECEIVE_BUFFER 0x00000001 1015250199Sgrehan 1016250199Sgrehantypedef struct rndismp_rx_buf_elem_ { 1017250199Sgrehan uint32_t flags; 1018250199Sgrehan uint32_t length; 1019250199Sgrehan uint64_t rx_buf_id; 1020250199Sgrehan uint32_t gpadl_handle; 1021250199Sgrehan void *rx_buf; 1022250199Sgrehan} rndismp_rx_buf_elem; 1023250199Sgrehan 1024250199Sgrehantypedef struct rndismp_rx_bufs_info_ { 1025250199Sgrehan uint32_t num_rx_bufs; 1026250199Sgrehan rndismp_rx_buf_elem rx_buf_elems[1]; 1027250199Sgrehan} rndismp_rx_bufs_info; 1028250199Sgrehan 1029250199Sgrehan 1030250199Sgrehan 1031250199Sgrehan#define RNDIS_HEADER_SIZE (sizeof(rndis_msg) - sizeof(rndis_msg_container)) 1032250199Sgrehan 1033250199Sgrehan#define NDIS_PACKET_TYPE_DIRECTED 0x00000001 1034250199Sgrehan#define NDIS_PACKET_TYPE_MULTICAST 0x00000002 1035250199Sgrehan#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004 1036250199Sgrehan#define NDIS_PACKET_TYPE_BROADCAST 0x00000008 1037250199Sgrehan#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010 1038250199Sgrehan#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020 1039250199Sgrehan#define NDIS_PACKET_TYPE_SMT 0x00000040 1040250199Sgrehan#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080 1041250199Sgrehan#define NDIS_PACKET_TYPE_GROUP 0x00000100 1042250199Sgrehan#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00000200 1043250199Sgrehan#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00000400 1044250199Sgrehan#define NDIS_PACKET_TYPE_MAC_FRAME 0x00000800 1045250199Sgrehan 1046285236Swhu/* 1047285236Swhu * Externs 1048285236Swhu */ 1049285236Swhuint netvsc_recv(struct hv_device *device_ctx, 1050285236Swhu netvsc_packet *packet, 1051285236Swhu rndis_tcp_ip_csum_info *csum_info); 1052295789Ssephevoid netvsc_recv_rollup(struct hv_device *device_ctx); 1053295948Ssephevoid netvsc_channel_rollup(struct hv_device *device_ctx); 1054250199Sgrehan 1055285236Swhuvoid* hv_set_rppi_data(rndis_msg *rndis_mesg, 1056285236Swhu uint32_t rppi_size, 1057285236Swhu int pkt_type); 1058285236Swhu 1059285236Swhuvoid* hv_get_ppi_data(rndis_packet *rpkt, uint32_t type); 1060285236Swhu 1061250199Sgrehan#endif /* __HV_RNDIS_H__ */ 1062250199Sgrehan 1063