diff options
Diffstat (limited to 'lib/lufa/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h')
| -rw-r--r-- | lib/lufa/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h | 411 |
1 files changed, 411 insertions, 0 deletions
diff --git a/lib/lufa/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h b/lib/lufa/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h new file mode 100644 index 000000000..ade1af067 --- /dev/null +++ b/lib/lufa/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h | |||
| @@ -0,0 +1,411 @@ | |||
| 1 | /* | ||
| 2 | LUFA Library | ||
| 3 | Copyright (C) Dean Camera, 2017. | ||
| 4 | |||
| 5 | dean [at] fourwalledcubicle [dot] com | ||
| 6 | www.lufa-lib.org | ||
| 7 | */ | ||
| 8 | |||
| 9 | /* | ||
| 10 | Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||
| 11 | |||
| 12 | Permission to use, copy, modify, distribute, and sell this | ||
| 13 | software and its documentation for any purpose is hereby granted | ||
| 14 | without fee, provided that the above copyright notice appear in | ||
| 15 | all copies and that both that the copyright notice and this | ||
| 16 | permission notice and warranty disclaimer appear in supporting | ||
| 17 | documentation, and that the name of the author not be used in | ||
| 18 | advertising or publicity pertaining to distribution of the | ||
| 19 | software without specific, written prior permission. | ||
| 20 | |||
| 21 | The author disclaims all warranties with regard to this | ||
| 22 | software, including all implied warranties of merchantability | ||
| 23 | and fitness. In no event shall the author be liable for any | ||
| 24 | special, indirect or consequential damages or any damages | ||
| 25 | whatsoever resulting from loss of use, data or profits, whether | ||
| 26 | in an action of contract, negligence or other tortious action, | ||
| 27 | arising out of or in connection with the use or performance of | ||
| 28 | this software. | ||
| 29 | */ | ||
| 30 | |||
| 31 | /** \file | ||
| 32 | * \brief Common definitions and declarations for the library USB RNDIS Class driver. | ||
| 33 | * | ||
| 34 | * Common definitions and declarations for the library USB RNDIS Class driver. | ||
| 35 | * | ||
| 36 | * \note This file should not be included directly. It is automatically included as needed by the USB module driver | ||
| 37 | * dispatch header located in LUFA/Drivers/USB.h. | ||
| 38 | */ | ||
| 39 | |||
| 40 | /** \ingroup Group_USBClassRNDIS | ||
| 41 | * \defgroup Group_USBClassRNDISCommon Common Class Definitions | ||
| 42 | * | ||
| 43 | * \section Sec_USBClassRNDISCommon_ModDescription Module Description | ||
| 44 | * Constants, Types and Enum definitions that are common to both Device and Host modes for the USB | ||
| 45 | * RNDIS Class. | ||
| 46 | * | ||
| 47 | * @{ | ||
| 48 | */ | ||
| 49 | |||
| 50 | #ifndef _RNDIS_CLASS_COMMON_H_ | ||
| 51 | #define _RNDIS_CLASS_COMMON_H_ | ||
| 52 | |||
| 53 | /* Macros: */ | ||
| 54 | #define __INCLUDE_FROM_CDC_DRIVER | ||
| 55 | |||
| 56 | /* Includes: */ | ||
| 57 | #include "../../Core/StdDescriptors.h" | ||
| 58 | #include "CDCClassCommon.h" | ||
| 59 | |||
| 60 | /* Enable C linkage for C++ Compilers: */ | ||
| 61 | #if defined(__cplusplus) | ||
| 62 | extern "C" { | ||
| 63 | #endif | ||
| 64 | |||
| 65 | /* Preprocessor Checks: */ | ||
| 66 | #if !defined(__INCLUDE_FROM_RNDIS_DRIVER) | ||
| 67 | #error Do not include this file directly. Include LUFA/Drivers/USB.h instead. | ||
| 68 | #endif | ||
| 69 | |||
| 70 | /* Macros: */ | ||
| 71 | /** Additional error code for RNDIS functions when a device returns a logical command failure. */ | ||
| 72 | #define RNDIS_ERROR_LOGICAL_CMD_FAILED 0x80 | ||
| 73 | |||
| 74 | /** Implemented RNDIS Version Major. */ | ||
| 75 | #define REMOTE_NDIS_VERSION_MAJOR 0x01 | ||
| 76 | |||
| 77 | /** Implemented RNDIS Version Minor. */ | ||
| 78 | #define REMOTE_NDIS_VERSION_MINOR 0x00 | ||
| 79 | |||
| 80 | /** \name RNDIS Message Values */ | ||
| 81 | //@{ | ||
| 82 | #define REMOTE_NDIS_PACKET_MSG 0x00000001UL | ||
| 83 | #define REMOTE_NDIS_INITIALIZE_MSG 0x00000002UL | ||
| 84 | #define REMOTE_NDIS_HALT_MSG 0x00000003UL | ||
| 85 | #define REMOTE_NDIS_QUERY_MSG 0x00000004UL | ||
| 86 | #define REMOTE_NDIS_SET_MSG 0x00000005UL | ||
| 87 | #define REMOTE_NDIS_RESET_MSG 0x00000006UL | ||
| 88 | #define REMOTE_NDIS_INDICATE_STATUS_MSG 0x00000007UL | ||
| 89 | #define REMOTE_NDIS_KEEPALIVE_MSG 0x00000008UL | ||
| 90 | //@} | ||
| 91 | |||
| 92 | /** \name RNDIS Response Values */ | ||
| 93 | //@{ | ||
| 94 | #define REMOTE_NDIS_INITIALIZE_CMPLT 0x80000002UL | ||
| 95 | #define REMOTE_NDIS_QUERY_CMPLT 0x80000004UL | ||
| 96 | #define REMOTE_NDIS_SET_CMPLT 0x80000005UL | ||
| 97 | #define REMOTE_NDIS_RESET_CMPLT 0x80000006UL | ||
| 98 | #define REMOTE_NDIS_KEEPALIVE_CMPLT 0x80000008UL | ||
| 99 | //@} | ||
| 100 | |||
| 101 | /** \name RNDIS Status Values */ | ||
| 102 | //@{ | ||
| 103 | #define REMOTE_NDIS_STATUS_SUCCESS 0x00000000UL | ||
| 104 | #define REMOTE_NDIS_STATUS_FAILURE 0xC0000001UL | ||
| 105 | #define REMOTE_NDIS_STATUS_INVALID_DATA 0xC0010015UL | ||
| 106 | #define REMOTE_NDIS_STATUS_NOT_SUPPORTED 0xC00000BBUL | ||
| 107 | #define REMOTE_NDIS_STATUS_MEDIA_CONNECT 0x4001000BUL | ||
| 108 | #define REMOTE_NDIS_STATUS_MEDIA_DISCONNECT 0x4001000CUL | ||
| 109 | //@} | ||
| 110 | |||
| 111 | /** \name RNDIS Media States */ | ||
| 112 | //@{ | ||
| 113 | #define REMOTE_NDIS_MEDIA_STATE_CONNECTED 0x00000000UL | ||
| 114 | #define REMOTE_NDIS_MEDIA_STATE_DISCONNECTED 0x00000001UL | ||
| 115 | //@} | ||
| 116 | |||
| 117 | /** \name RNDIS Media Types */ | ||
| 118 | //@{ | ||
| 119 | #define REMOTE_NDIS_MEDIUM_802_3 0x00000000UL | ||
| 120 | //@} | ||
| 121 | |||
| 122 | /** \name RNDIS Connection Types */ | ||
| 123 | //@{ | ||
| 124 | #define REMOTE_NDIS_DF_CONNECTIONLESS 0x00000001UL | ||
| 125 | #define REMOTE_NDIS_DF_CONNECTION_ORIENTED 0x00000002UL | ||
| 126 | //@} | ||
| 127 | |||
| 128 | /** \name RNDIS Packet Types */ | ||
| 129 | //@{ | ||
| 130 | #define REMOTE_NDIS_PACKET_DIRECTED 0x00000001UL | ||
| 131 | #define REMOTE_NDIS_PACKET_MULTICAST 0x00000002UL | ||
| 132 | #define REMOTE_NDIS_PACKET_ALL_MULTICAST 0x00000004UL | ||
| 133 | #define REMOTE_NDIS_PACKET_BROADCAST 0x00000008UL | ||
| 134 | #define REMOTE_NDIS_PACKET_SOURCE_ROUTING 0x00000010UL | ||
| 135 | #define REMOTE_NDIS_PACKET_PROMISCUOUS 0x00000020UL | ||
| 136 | #define REMOTE_NDIS_PACKET_SMT 0x00000040UL | ||
| 137 | #define REMOTE_NDIS_PACKET_ALL_LOCAL 0x00000080UL | ||
| 138 | #define REMOTE_NDIS_PACKET_GROUP 0x00001000UL | ||
| 139 | #define REMOTE_NDIS_PACKET_ALL_FUNCTIONAL 0x00002000UL | ||
| 140 | #define REMOTE_NDIS_PACKET_FUNCTIONAL 0x00004000UL | ||
| 141 | #define REMOTE_NDIS_PACKET_MAC_FRAME 0x00008000UL | ||
| 142 | //@} | ||
| 143 | |||
| 144 | /** \name RNDIS OID Values */ | ||
| 145 | //@{ | ||
| 146 | #define OID_GEN_SUPPORTED_LIST 0x00010101UL | ||
| 147 | #define OID_GEN_HARDWARE_STATUS 0x00010102UL | ||
| 148 | #define OID_GEN_MEDIA_SUPPORTED 0x00010103UL | ||
| 149 | #define OID_GEN_MEDIA_IN_USE 0x00010104UL | ||
| 150 | #define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106UL | ||
| 151 | #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111UL | ||
| 152 | #define OID_GEN_LINK_SPEED 0x00010107UL | ||
| 153 | #define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010AUL | ||
| 154 | #define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010BUL | ||
| 155 | #define OID_GEN_VENDOR_ID 0x0001010CUL | ||
| 156 | #define OID_GEN_VENDOR_DESCRIPTION 0x0001010DUL | ||
| 157 | #define OID_GEN_CURRENT_PACKET_FILTER 0x0001010EUL | ||
| 158 | #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111UL | ||
| 159 | #define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114UL | ||
| 160 | #define OID_GEN_PHYSICAL_MEDIUM 0x00010202UL | ||
| 161 | #define OID_GEN_XMIT_OK 0x00020101UL | ||
| 162 | #define OID_GEN_RCV_OK 0x00020102UL | ||
| 163 | #define OID_GEN_XMIT_ERROR 0x00020103UL | ||
| 164 | #define OID_GEN_RCV_ERROR 0x00020104UL | ||
| 165 | #define OID_GEN_RCV_NO_BUFFER 0x00020105UL | ||
| 166 | #define OID_802_3_PERMANENT_ADDRESS 0x01010101UL | ||
| 167 | #define OID_802_3_CURRENT_ADDRESS 0x01010102UL | ||
| 168 | #define OID_802_3_MULTICAST_LIST 0x01010103UL | ||
| 169 | #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104UL | ||
| 170 | #define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101UL | ||
| 171 | #define OID_802_3_XMIT_ONE_COLLISION 0x01020102UL | ||
| 172 | #define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103UL | ||
| 173 | //@} | ||
| 174 | |||
| 175 | /** Maximum size in bytes of an Ethernet frame according to the Ethernet standard. */ | ||
| 176 | #define ETHERNET_FRAME_SIZE_MAX 1500 | ||
| 177 | |||
| 178 | /* Enums: */ | ||
| 179 | /** Enum for the RNDIS class specific control requests that can be issued by the USB bus host. */ | ||
| 180 | enum RNDIS_ClassRequests_t | ||
| 181 | { | ||
| 182 | RNDIS_REQ_SendEncapsulatedCommand = 0x00, /**< RNDIS request to issue a host-to-device NDIS command. */ | ||
| 183 | RNDIS_REQ_GetEncapsulatedResponse = 0x01, /**< RNDIS request to issue a device-to-host NDIS response. */ | ||
| 184 | }; | ||
| 185 | |||
| 186 | /** Enum for the possible NDIS adapter states. */ | ||
| 187 | enum RNDIS_States_t | ||
| 188 | { | ||
| 189 | RNDIS_Uninitialized = 0, /**< Adapter currently uninitialized. */ | ||
| 190 | RNDIS_Initialized = 1, /**< Adapter currently initialized but not ready for data transfers. */ | ||
| 191 | RNDIS_Data_Initialized = 2, /**< Adapter currently initialized and ready for data transfers. */ | ||
| 192 | }; | ||
| 193 | |||
| 194 | /** Enum for the RNDIS class specific notification requests that can be issued by a RNDIS device to a host. */ | ||
| 195 | enum RNDIS_ClassNotifications_t | ||
| 196 | { | ||
| 197 | RNDIS_NOTIF_ResponseAvailable = 0x01, /**< Notification request value for a RNDIS Response Available notification. */ | ||
| 198 | }; | ||
| 199 | |||
| 200 | /** Enum for the NDIS hardware states. */ | ||
| 201 | enum NDIS_Hardware_Status_t | ||
| 202 | { | ||
| 203 | NDIS_HardwareStatus_Ready, /**< Hardware Ready to accept commands from the host. */ | ||
| 204 | NDIS_HardwareStatus_Initializing, /**< Hardware busy initializing. */ | ||
| 205 | NDIS_HardwareStatus_Reset, /**< Hardware reset. */ | ||
| 206 | NDIS_HardwareStatus_Closing, /**< Hardware currently closing. */ | ||
| 207 | NDIS_HardwareStatus_NotReady /**< Hardware not ready to accept commands from the host. */ | ||
| 208 | }; | ||
| 209 | |||
| 210 | /* Type Defines: */ | ||
| 211 | /** \brief MAC Address Structure. | ||
| 212 | * | ||
| 213 | * Type define for a physical MAC address of a device on a network. | ||
| 214 | */ | ||
| 215 | typedef struct | ||
| 216 | { | ||
| 217 | uint8_t Octets[6]; /**< Individual bytes of a MAC address */ | ||
| 218 | } ATTR_PACKED MAC_Address_t; | ||
| 219 | |||
| 220 | /** \brief RNDIS Common Message Header Structure. | ||
| 221 | * | ||
| 222 | * Type define for a RNDIS message header, sent before RNDIS messages. | ||
| 223 | * | ||
| 224 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 225 | */ | ||
| 226 | typedef struct | ||
| 227 | { | ||
| 228 | uint32_t MessageType; /**< RNDIS message type, a \c REMOTE_NDIS_*_MSG constant */ | ||
| 229 | uint32_t MessageLength; /**< Total length of the RNDIS message, in bytes */ | ||
| 230 | } ATTR_PACKED RNDIS_Message_Header_t; | ||
| 231 | |||
| 232 | /** \brief RNDIS Message Structure. | ||
| 233 | * | ||
| 234 | * Type define for a RNDIS packet message, used to encapsulate Ethernet packets sent to and from the adapter. | ||
| 235 | * | ||
| 236 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 237 | */ | ||
| 238 | typedef struct | ||
| 239 | { | ||
| 240 | uint32_t MessageType; | ||
| 241 | uint32_t MessageLength; | ||
| 242 | uint32_t DataOffset; | ||
| 243 | uint32_t DataLength; | ||
| 244 | uint32_t OOBDataOffset; | ||
| 245 | uint32_t OOBDataLength; | ||
| 246 | uint32_t NumOOBDataElements; | ||
| 247 | uint32_t PerPacketInfoOffset; | ||
| 248 | uint32_t PerPacketInfoLength; | ||
| 249 | uint32_t VcHandle; | ||
| 250 | uint32_t Reserved; | ||
| 251 | } ATTR_PACKED RNDIS_Packet_Message_t; | ||
| 252 | |||
| 253 | /** \brief RNDIS Initialization Message Structure. | ||
| 254 | * | ||
| 255 | * Type define for a RNDIS Initialize command message. | ||
| 256 | * | ||
| 257 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 258 | */ | ||
| 259 | typedef struct | ||
| 260 | { | ||
| 261 | uint32_t MessageType; | ||
| 262 | uint32_t MessageLength; | ||
| 263 | uint32_t RequestId; | ||
| 264 | |||
| 265 | uint32_t MajorVersion; | ||
| 266 | uint32_t MinorVersion; | ||
| 267 | uint32_t MaxTransferSize; | ||
| 268 | } ATTR_PACKED RNDIS_Initialize_Message_t; | ||
| 269 | |||
| 270 | /** \brief RNDIS Initialize Complete Message Structure. | ||
| 271 | * | ||
| 272 | * Type define for a RNDIS Initialize Complete response message. | ||
| 273 | * | ||
| 274 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 275 | */ | ||
| 276 | typedef struct | ||
| 277 | { | ||
| 278 | uint32_t MessageType; | ||
| 279 | uint32_t MessageLength; | ||
| 280 | uint32_t RequestId; | ||
| 281 | uint32_t Status; | ||
| 282 | |||
| 283 | uint32_t MajorVersion; | ||
| 284 | uint32_t MinorVersion; | ||
| 285 | uint32_t DeviceFlags; | ||
| 286 | uint32_t Medium; | ||
| 287 | uint32_t MaxPacketsPerTransfer; | ||
| 288 | uint32_t MaxTransferSize; | ||
| 289 | uint32_t PacketAlignmentFactor; | ||
| 290 | uint32_t AFListOffset; | ||
| 291 | uint32_t AFListSize; | ||
| 292 | } ATTR_PACKED RNDIS_Initialize_Complete_t; | ||
| 293 | |||
| 294 | /** \brief RNDIS Keep Alive Message Structure. | ||
| 295 | * | ||
| 296 | * Type define for a RNDIS Keep Alive command message. | ||
| 297 | * | ||
| 298 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 299 | */ | ||
| 300 | typedef struct | ||
| 301 | { | ||
| 302 | uint32_t MessageType; | ||
| 303 | uint32_t MessageLength; | ||
| 304 | uint32_t RequestId; | ||
| 305 | } ATTR_PACKED RNDIS_KeepAlive_Message_t; | ||
| 306 | |||
| 307 | /** \brief RNDIS Keep Alive Complete Message Structure. | ||
| 308 | * | ||
| 309 | * Type define for a RNDIS Keep Alive Complete response message. | ||
| 310 | * | ||
| 311 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 312 | */ | ||
| 313 | typedef struct | ||
| 314 | { | ||
| 315 | uint32_t MessageType; | ||
| 316 | uint32_t MessageLength; | ||
| 317 | uint32_t RequestId; | ||
| 318 | uint32_t Status; | ||
| 319 | } ATTR_PACKED RNDIS_KeepAlive_Complete_t; | ||
| 320 | |||
| 321 | /** \brief RNDIS Reset Complete Message Structure. | ||
| 322 | * | ||
| 323 | * Type define for a RNDIS Reset Complete response message. | ||
| 324 | * | ||
| 325 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 326 | */ | ||
| 327 | typedef struct | ||
| 328 | { | ||
| 329 | uint32_t MessageType; | ||
| 330 | uint32_t MessageLength; | ||
| 331 | uint32_t Status; | ||
| 332 | |||
| 333 | uint32_t AddressingReset; | ||
| 334 | } ATTR_PACKED RNDIS_Reset_Complete_t; | ||
| 335 | |||
| 336 | /** \brief RNDIS OID Property Set Message Structure. | ||
| 337 | * | ||
| 338 | * Type define for a RNDIS OID Property Set command message. | ||
| 339 | * | ||
| 340 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 341 | */ | ||
| 342 | typedef struct | ||
| 343 | { | ||
| 344 | uint32_t MessageType; | ||
| 345 | uint32_t MessageLength; | ||
| 346 | uint32_t RequestId; | ||
| 347 | |||
| 348 | uint32_t Oid; | ||
| 349 | uint32_t InformationBufferLength; | ||
| 350 | uint32_t InformationBufferOffset; | ||
| 351 | uint32_t DeviceVcHandle; | ||
| 352 | } ATTR_PACKED RNDIS_Set_Message_t; | ||
| 353 | |||
| 354 | /** \brief RNDIS OID Property Set Complete Message Structure. | ||
| 355 | * | ||
| 356 | * Type define for a RNDIS OID Property Set Complete response message. | ||
| 357 | * | ||
| 358 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 359 | */ | ||
| 360 | typedef struct | ||
| 361 | { | ||
| 362 | uint32_t MessageType; | ||
| 363 | uint32_t MessageLength; | ||
| 364 | uint32_t RequestId; | ||
| 365 | uint32_t Status; | ||
| 366 | } ATTR_PACKED RNDIS_Set_Complete_t; | ||
| 367 | |||
| 368 | /** \brief RNDIS OID Property Query Message Structure. | ||
| 369 | * | ||
| 370 | * Type define for a RNDIS OID Property Query command message. | ||
| 371 | * | ||
| 372 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 373 | */ | ||
| 374 | typedef struct | ||
| 375 | { | ||
| 376 | uint32_t MessageType; | ||
| 377 | uint32_t MessageLength; | ||
| 378 | uint32_t RequestId; | ||
| 379 | |||
| 380 | uint32_t Oid; | ||
| 381 | uint32_t InformationBufferLength; | ||
| 382 | uint32_t InformationBufferOffset; | ||
| 383 | uint32_t DeviceVcHandle; | ||
| 384 | } ATTR_PACKED RNDIS_Query_Message_t; | ||
| 385 | |||
| 386 | /** \brief RNDIS OID Property Query Complete Message Structure. | ||
| 387 | * | ||
| 388 | * Type define for a RNDIS OID Property Query Complete response message. | ||
| 389 | * | ||
| 390 | * \note Regardless of CPU architecture, these values should be stored as little endian. | ||
| 391 | */ | ||
| 392 | typedef struct | ||
| 393 | { | ||
| 394 | uint32_t MessageType; | ||
| 395 | uint32_t MessageLength; | ||
| 396 | uint32_t RequestId; | ||
| 397 | uint32_t Status; | ||
| 398 | |||
| 399 | uint32_t InformationBufferLength; | ||
| 400 | uint32_t InformationBufferOffset; | ||
| 401 | } ATTR_PACKED RNDIS_Query_Complete_t; | ||
| 402 | |||
| 403 | /* Disable C linkage for C++ Compilers: */ | ||
| 404 | #if defined(__cplusplus) | ||
| 405 | } | ||
| 406 | #endif | ||
| 407 | |||
| 408 | #endif | ||
| 409 | |||
| 410 | /** @} */ | ||
| 411 | |||
