#ifndef _TUSB_CDC_RNDIS_H_
#define _TUSB_CDC_RNDIS_H_
#include "cdc.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __CC_ARM
#pragma diag_suppress 66
#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, RNDIS_MSG_SET_CMPLT = 0x80000005UL,
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;
#ifdef __CC_ARM
#pragma diag_default 66
#endif
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;
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 ; 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;
typedef struct {
uint32_t type ; uint32_t length ; uint32_t request_id ; uint32_t oid ; uint32_t buffer_length ; uint32_t buffer_offset ; uint32_t reserved ;
uint8_t oid_buffer[] ; } rndis_msg_query_t, rndis_msg_set_t;
TU_VERIFY_STATIC(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[] ; } rndis_msg_query_cmplt_t;
TU_VERIFY_STATIC(sizeof(rndis_msg_query_cmplt_t) == 24, "Make sure flexible array member does not affect layout");
typedef struct {
uint32_t type ; uint32_t length ; uint32_t reserved ;
} rndis_msg_reset_t;
typedef struct {
uint32_t type ; uint32_t length ; uint32_t status ; uint32_t addressing_reset ; } rndis_msg_reset_cmplt_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[0] ;
} 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;
typedef enum
{
RNDIS_OID_GEN_SUPPORTED_LIST = 0x00010101, RNDIS_OID_GEN_HARDWARE_STATUS = 0x00010102, RNDIS_OID_GEN_MEDIA_SUPPORTED = 0x00010103, RNDIS_OID_GEN_MEDIA_IN_USE = 0x00010104, RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD = 0x00010105, RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE = 0x00010106, RNDIS_OID_GEN_LINK_SPEED = 0x00010107, RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE = 0x00010108, RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE = 0x00010109, RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE = 0x0001010A, RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE = 0x0001010B, RNDIS_OID_GEN_VENDOR_ID = 0x0001010C, RNDIS_OID_GEN_VENDOR_DESCRIPTION = 0x0001010D, RNDIS_OID_GEN_CURRENT_PACKET_FILTER = 0x0001010E, RNDIS_OID_GEN_CURRENT_LOOKAHEAD = 0x0001010F, RNDIS_OID_GEN_DRIVER_VERSION = 0x00010110, RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE = 0x00010111, RNDIS_OID_GEN_PROTOCOL_OPTIONS = 0x00010112, RNDIS_OID_GEN_MAC_OPTIONS = 0x00010113, RNDIS_OID_GEN_MEDIA_CONNECT_STATUS = 0x00010114, RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS = 0x00010115,
RNDIS_OID_GEN_VENDOR_DRIVER_VERSION = 0x00010116, RNDIS_OID_GEN_SUPPORTED_GUIDS = 0x00010117, RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES = 0x00010118, RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET = 0x00010119, RNDIS_OID_GEN_MEDIA_CAPABILITIES = 0x00010201, RNDIS_OID_GEN_PHYSICAL_MEDIUM = 0x00010202,
RNDIS_OID_802_3_PERMANENT_ADDRESS = 0x01010101, RNDIS_OID_802_3_CURRENT_ADDRESS = 0x01010102, RNDIS_OID_802_3_MULTICAST_LIST = 0x01010103, RNDIS_OID_802_3_MAXIMUM_LIST_SIZE = 0x01010104, } rndis_oid_type_t;
typedef enum
{
RNDIS_PACKET_TYPE_DIRECTED = 0x00000001, RNDIS_PACKET_TYPE_MULTICAST = 0x00000002, RNDIS_PACKET_TYPE_ALL_MULTICAST = 0x00000004, RNDIS_PACKET_TYPE_BROADCAST = 0x00000008, RNDIS_PACKET_TYPE_SOURCE_ROUTING = 0x00000010, RNDIS_PACKET_TYPE_PROMISCUOUS = 0x00000020, RNDIS_PACKET_TYPE_SMT = 0x00000040, RNDIS_PACKET_TYPE_ALL_LOCAL = 0x00000080, RNDIS_PACKET_TYPE_GROUP = 0x00001000, RNDIS_PACKET_TYPE_ALL_FUNCTIONAL = 0x00002000, RNDIS_PACKET_TYPE_FUNCTIONAL = 0x00004000, RNDIS_PACKET_TYPE_MAC_FRAME = 0x00008000, RNDIS_PACKET_TYPE_NO_LOCAL = 0x00010000,
} rndis_packet_filter_type_t;
#ifdef __cplusplus
}
#endif
#endif