| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |     @file     cdc_rndis.h | 
					
						
							|  |  |  |     @author   hathach (tinyusb.org) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @section LICENSE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Software License Agreement (BSD License) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Copyright (c) 2013, hathach (tinyusb.org) | 
					
						
							|  |  |  |     All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Redistribution and use in source and binary forms, with or without | 
					
						
							|  |  |  |     modification, are permitted provided that the following conditions are met: | 
					
						
							|  |  |  |     1. Redistributions of source code must retain the above copyright | 
					
						
							|  |  |  |     notice, this list of conditions and the following disclaimer. | 
					
						
							|  |  |  |     2. Redistributions in binary form must reproduce the above copyright | 
					
						
							|  |  |  |     notice, this list of conditions and the following disclaimer in the | 
					
						
							|  |  |  |     documentation and/or other materials provided with the distribution. | 
					
						
							|  |  |  |     3. Neither the name of the copyright holders nor the | 
					
						
							|  |  |  |     names of its contributors may be used to endorse or promote products | 
					
						
							|  |  |  |     derived from this software without specific prior written permission. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY | 
					
						
							|  |  |  |     EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 
					
						
							|  |  |  |     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 
					
						
							|  |  |  |     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY | 
					
						
							|  |  |  |     DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 
					
						
							|  |  |  |     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 
					
						
							|  |  |  |     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 
					
						
							|  |  |  |     ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
					
						
							|  |  |  |     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 
					
						
							|  |  |  |     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This file is part of the tinyusb stack. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** \ingroup TBD
 | 
					
						
							|  |  |  |  *  \defgroup TBD | 
					
						
							|  |  |  |  *  \brief TBD | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  @{ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _TUSB_CDC_RNDIS_H_
 | 
					
						
							|  |  |  | #define _TUSB_CDC_RNDIS_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "cdc.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  |  extern "C" { | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef enum { | 
					
						
							|  |  |  |   RNDIS_MSG_PACKET           = 0x00000001UL, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   RNDIS_MSG_INITIALIZE       = 0x00000002UL, | 
					
						
							|  |  |  |   RNDIS_MSG_INITIALIZE_CMPLT = 0x80000002UL, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   RNDIS_MSG_HALT             = 0x00000003UL, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   RNDIS_MSG_QUERY            = 0x00000004UL, | 
					
						
							|  |  |  |   RNDIS_MSG_QUERY_CMPLT      = 0x80000004UL, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   RNDIS_MSG_SET              = 0x00000005UL, | 
					
						
							| 
									
										
										
										
											2013-09-11 15:03:37 +07:00
										 |  |  |   RNDIS_MSG_SET_CMPLT        = 0x80000005UL, | 
					
						
							| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   RNDIS_MSG_RESET            = 0x00000006UL, | 
					
						
							|  |  |  |   RNDIS_MSG_RESET_CMPLT      = 0x80000006UL, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   RNDIS_MSG_INDICATE_STATUS  = 0x00000007UL, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   RNDIS_MSG_KEEP_ALIVE       = 0x00000008UL, | 
					
						
							|  |  |  |   RNDIS_MSG_KEEP_ALIVE_CMPLT = 0x80000008UL | 
					
						
							|  |  |  | }rndis_msg_type_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef enum { | 
					
						
							|  |  |  |   RNDIS_STATUS_SUCCESS          = 0x00000000UL, | 
					
						
							|  |  |  |   RNDIS_STATUS_FAILURE          = 0xC0000001UL, | 
					
						
							|  |  |  |   RNDIS_STATUS_INVALID_DATA     = 0xC0010015UL, | 
					
						
							|  |  |  |   RNDIS_STATUS_NOT_SUPPORTED    = 0xC00000BBUL, | 
					
						
							|  |  |  |   RNDIS_STATUS_MEDIA_CONNECT    = 0x4001000BUL, | 
					
						
							|  |  |  |   RNDIS_STATUS_MEDIA_DISCONNECT = 0x4001000CUL | 
					
						
							|  |  |  | }rndis_msg_status_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //--------------------------------------------------------------------+
 | 
					
						
							|  |  |  | // MESSAGE STRUCTURE
 | 
					
						
							|  |  |  | //--------------------------------------------------------------------+
 | 
					
						
							| 
									
										
										
										
											2013-07-19 01:52:56 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | //------------- Initialize -------------//
 | 
					
						
							| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t request_id; | 
					
						
							|  |  |  |   uint32_t major_version; | 
					
						
							|  |  |  |   uint32_t minor_version; | 
					
						
							|  |  |  |   uint32_t max_xfer_size; | 
					
						
							|  |  |  | }rndis_msg_initialize_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-19 01:52:56 +07:00
										 |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t request_id; | 
					
						
							|  |  |  |   uint32_t status; | 
					
						
							|  |  |  |   uint32_t major_version; | 
					
						
							|  |  |  |   uint32_t minor_version; | 
					
						
							|  |  |  |   uint32_t device_flags; | 
					
						
							|  |  |  |   uint32_t medium; // medium type, is 0x00 for RNDIS_MEDIUM_802_3
 | 
					
						
							|  |  |  |   uint32_t max_packet_per_xfer; | 
					
						
							|  |  |  |   uint32_t max_xfer_size; | 
					
						
							|  |  |  |   uint32_t packet_alignment_factor; | 
					
						
							|  |  |  |   uint32_t reserved[2]; | 
					
						
							|  |  |  | } rndis_msg_initialize_cmplt_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //------------- Query -------------//
 | 
					
						
							| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t request_id; | 
					
						
							|  |  |  |   uint32_t oid; | 
					
						
							|  |  |  |   uint32_t buffer_length; | 
					
						
							| 
									
										
										
										
											2013-07-19 01:52:56 +07:00
										 |  |  |   uint32_t buffer_offset; // from beginning of request_id field
 | 
					
						
							| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  |   uint32_t reserved; | 
					
						
							| 
									
										
										
										
											2013-07-19 01:52:56 +07:00
										 |  |  |   uint8_t  oid_buffer[]; // flexible array member
 | 
					
						
							| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  | } rndis_msg_query_t, rndis_msg_set_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-19 01:52:56 +07:00
										 |  |  | STATIC_ASSERT(sizeof(rndis_msg_query_t) == 28, "Make sure flexible array member does not affect layout"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t request_id; | 
					
						
							|  |  |  |   uint32_t status; | 
					
						
							|  |  |  |   uint32_t buffer_length; | 
					
						
							|  |  |  |   uint32_t buffer_offset; | 
					
						
							|  |  |  |   uint8_t  oid_buffer[]; // flexible array member
 | 
					
						
							|  |  |  | } rndis_msg_query_cmplt_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | STATIC_ASSERT(sizeof(rndis_msg_query_cmplt_t) == 24, "Make sure flexible array member does not affect layout"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //------------- Reset -------------//
 | 
					
						
							| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t reserved; | 
					
						
							|  |  |  | } rndis_msg_reset_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-19 01:52:56 +07:00
										 |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t status; | 
					
						
							|  |  |  |   uint32_t addressing_reset; | 
					
						
							|  |  |  | } rndis_msg_reset_cmplt_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  | //typedef struct {
 | 
					
						
							|  |  |  | //  uint32_t type;
 | 
					
						
							|  |  |  | //  uint32_t length;
 | 
					
						
							|  |  |  | //  uint32_t status;
 | 
					
						
							|  |  |  | //  uint32_t buffer_length;
 | 
					
						
							|  |  |  | //  uint32_t buffer_offset;
 | 
					
						
							|  |  |  | //  uint32_t diagnostic_status; // optional
 | 
					
						
							|  |  |  | //  uint32_t diagnostic_error_offset; // optional
 | 
					
						
							|  |  |  | //  uint32_t status_buffer[0]; // optional
 | 
					
						
							|  |  |  | //} rndis_msg_indicate_status_t;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t request_id; | 
					
						
							|  |  |  | } rndis_msg_keep_alive_t, rndis_msg_halt_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t request_id; | 
					
						
							|  |  |  |   uint32_t status; | 
					
						
							|  |  |  | } rndis_msg_set_cmplt_t, rndis_msg_keep_alive_cmplt_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t length; | 
					
						
							|  |  |  |   uint32_t data_offset; | 
					
						
							|  |  |  |   uint32_t data_length; | 
					
						
							|  |  |  |   uint32_t out_of_band_data_offet; | 
					
						
							|  |  |  |   uint32_t out_of_band_data_length; | 
					
						
							|  |  |  |   uint32_t num_out_of_band_data_elements; | 
					
						
							|  |  |  |   uint32_t per_packet_info_offset; | 
					
						
							|  |  |  |   uint32_t per_packet_info_length; | 
					
						
							|  |  |  |   uint32_t reserved[2]; | 
					
						
							|  |  |  |   uint32_t payload_and_padding[0]; // Additional bytes of zeros added at the end of the message to comply with
 | 
					
						
							|  |  |  |   // the internal and external padding requirements. Internal padding SHOULD be as per the
 | 
					
						
							|  |  |  |   // specification of the out-of-band data record and per-packet-info data record. The external
 | 
					
						
							|  |  |  |   //padding size SHOULD be determined based on the PacketAlignmentFactor field specification
 | 
					
						
							|  |  |  |   //in REMOTE_NDIS_INITIALIZE_CMPLT message by the device, when multiple
 | 
					
						
							|  |  |  |   //REMOTE_NDIS_PACKET_MSG messages are bundled together in a single bus-native message.
 | 
					
						
							|  |  |  |   //In this case, all but the very last REMOTE_NDIS_PACKET_MSG MUST respect the
 | 
					
						
							|  |  |  |   //PacketAlignmentFactor field.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // rndis_msg_packet_t [0] : (optional) more packet if multiple packet per bus transaction is supported
 | 
					
						
							|  |  |  | } rndis_msg_packet_t; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |   uint32_t size; | 
					
						
							|  |  |  |   uint32_t type; | 
					
						
							|  |  |  |   uint32_t offset; | 
					
						
							|  |  |  |   uint32_t data[0]; | 
					
						
							|  |  |  | } rndis_msg_out_of_band_data_t, rndis_msg_per_packet_info_t; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-13 00:11:17 +07:00
										 |  |  | //--------------------------------------------------------------------+
 | 
					
						
							|  |  |  | // NDIS Object ID
 | 
					
						
							|  |  |  | //--------------------------------------------------------------------+
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //------------- General Required OIDs -------------//
 | 
					
						
							|  |  |  | #define OID_GEN_SUPPORTED_LIST                  0x00010101
 | 
					
						
							|  |  |  | #define OID_GEN_HARDWARE_STATUS                 0x00010102
 | 
					
						
							|  |  |  | #define OID_GEN_MEDIA_SUPPORTED                 0x00010103
 | 
					
						
							|  |  |  | #define OID_GEN_MEDIA_IN_USE                    0x00010104
 | 
					
						
							|  |  |  | #define OID_GEN_MAXIMUM_LOOKAHEAD               0x00010105
 | 
					
						
							|  |  |  | #define OID_GEN_MAXIMUM_FRAME_SIZE              0x00010106
 | 
					
						
							|  |  |  | #define OID_GEN_LINK_SPEED                      0x00010107
 | 
					
						
							|  |  |  | #define OID_GEN_TRANSMIT_BUFFER_SPACE           0x00010108
 | 
					
						
							|  |  |  | #define OID_GEN_RECEIVE_BUFFER_SPACE            0x00010109
 | 
					
						
							|  |  |  | #define OID_GEN_TRANSMIT_BLOCK_SIZE             0x0001010A
 | 
					
						
							|  |  |  | #define OID_GEN_RECEIVE_BLOCK_SIZE              0x0001010B
 | 
					
						
							|  |  |  | #define OID_GEN_VENDOR_ID                       0x0001010C
 | 
					
						
							|  |  |  | #define OID_GEN_VENDOR_DESCRIPTION              0x0001010D
 | 
					
						
							|  |  |  | #define OID_GEN_CURRENT_PACKET_FILTER           0x0001010E
 | 
					
						
							|  |  |  | #define OID_GEN_CURRENT_LOOKAHEAD               0x0001010F
 | 
					
						
							|  |  |  | #define OID_GEN_DRIVER_VERSION                  0x00010110
 | 
					
						
							|  |  |  | #define OID_GEN_MAXIMUM_TOTAL_SIZE              0x00010111
 | 
					
						
							|  |  |  | #define OID_GEN_PROTOCOL_OPTIONS                0x00010112
 | 
					
						
							|  |  |  | #define OID_GEN_MAC_OPTIONS                     0x00010113
 | 
					
						
							|  |  |  | #define OID_GEN_MEDIA_CONNECT_STATUS            0x00010114
 | 
					
						
							|  |  |  | #define OID_GEN_MAXIMUM_SEND_PACKETS            0x00010115
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //------------- General Optional OIDs -------------//
 | 
					
						
							|  |  |  | #define OID_GEN_VENDOR_DRIVER_VERSION           0x00010116
 | 
					
						
							|  |  |  | #define OID_GEN_SUPPORTED_GUIDS                 0x00010117
 | 
					
						
							|  |  |  | #define OID_GEN_NETWORK_LAYER_ADDRESSES         0x00010118  // Set only
 | 
					
						
							|  |  |  | #define OID_GEN_TRANSPORT_HEADER_OFFSET         0x00010119  // Set only
 | 
					
						
							|  |  |  | #define OID_GEN_MEDIA_CAPABILITIES              0x00010201
 | 
					
						
							|  |  |  | #define OID_GEN_PHYSICAL_MEDIUM                 0x00010202
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //------------- 802.3 Objects (Ethernet) -------------//
 | 
					
						
							|  |  |  | #define OID_802_3_PERMANENT_ADDRESS             0x01010101
 | 
					
						
							|  |  |  | #define OID_802_3_CURRENT_ADDRESS               0x01010102
 | 
					
						
							|  |  |  | #define OID_802_3_MULTICAST_LIST                0x01010103
 | 
					
						
							|  |  |  | #define OID_802_3_MAXIMUM_LIST_SIZE             0x01010104
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-14 08:33:39 +07:00
										 |  |  | //
 | 
					
						
							|  |  |  | // Ndis Packet Filter Bits (OID_GEN_CURRENT_PACKET_FILTER).
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_DIRECTED               0x00000001
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_MULTICAST              0x00000002
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_BROADCAST              0x00000008
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_SMT                    0x00000040
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_GROUP                  0x00001000
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000
 | 
					
						
							|  |  |  | #define NDIS_PACKET_TYPE_NO_LOCAL               0x00010000
 | 
					
						
							| 
									
										
										
										
											2013-07-13 00:11:17 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-02 14:45:42 +07:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  |  } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* _TUSB_CDC_RNDIS_H_ */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** @} */ |