1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2012-12-24 heyuanjie87 first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #ifndef __RNDIS_H__ 12*10465441SEvalZero #define __RNDIS_H__ 13*10465441SEvalZero 14*10465441SEvalZero #include <rtthread.h> 15*10465441SEvalZero 16*10465441SEvalZero #define USB_ETH_MTU 1500+14 17*10465441SEvalZero #define RNDIS_MESSAGE_BUFFER_SIZE 128 18*10465441SEvalZero 19*10465441SEvalZero #define RESPONSE_AVAILABLE 0x00000001 20*10465441SEvalZero 21*10465441SEvalZero /* Remote NDIS version numbers */ 22*10465441SEvalZero #define RNDIS_MAJOR_VERSION 1 23*10465441SEvalZero #define RNDIS_MINOR_VERSION 0 24*10465441SEvalZero 25*10465441SEvalZero /* common status values */ 26*10465441SEvalZero #define RNDIS_STATUS_SUCCESS 0X00000000 27*10465441SEvalZero #define RNDIS_STATUS_FAILURE 0XC0000001 28*10465441SEvalZero #define RNDIS_STATUS_INVALID_DATA 0XC0010015 29*10465441SEvalZero #define RNDIS_STATUS_NOT_SUPPORTED 0XC00000BB 30*10465441SEvalZero #define RNDIS_STATUS_MEDIA_CONNECT 0X4001000B 31*10465441SEvalZero #define RNDIS_STATUS_MEDIA_DISCONNECT 0X4001000C 32*10465441SEvalZero 33*10465441SEvalZero /* Remote NDIS message types */ 34*10465441SEvalZero #define REMOTE_NDIS_PACKET_MSG 0x00000001 35*10465441SEvalZero #define REMOTE_NDIS_INITIALIZE_MSG 0X00000002 36*10465441SEvalZero #define REMOTE_NDIS_HALT_MSG 0X00000003 37*10465441SEvalZero #define REMOTE_NDIS_QUERY_MSG 0X00000004 38*10465441SEvalZero #define REMOTE_NDIS_SET_MSG 0X00000005 39*10465441SEvalZero #define REMOTE_NDIS_RESET_MSG 0X00000006 40*10465441SEvalZero #define REMOTE_NDIS_INDICATE_STATUS_MSG 0X00000007 41*10465441SEvalZero #define REMOTE_NDIS_KEEPALIVE_MSG 0X00000008 42*10465441SEvalZero #define REMOTE_NDIS_INITIALIZE_CMPLT 0X80000002 43*10465441SEvalZero #define REMOTE_NDIS_QUERY_CMPLT 0X80000004 44*10465441SEvalZero #define REMOTE_NDIS_SET_CMPLT 0X80000005 45*10465441SEvalZero #define REMOTE_NDIS_RESET_CMPLT 0X80000006 46*10465441SEvalZero #define REMOTE_NDIS_KEEPALIVE_CMPLT 0X80000008 47*10465441SEvalZero 48*10465441SEvalZero /* device flags */ 49*10465441SEvalZero #define RNDIS_DF_CONNECTIONLESS 0x00000001 50*10465441SEvalZero #define RNDIS_DF_CONNECTION_ORIENTED 0x00000002 51*10465441SEvalZero /* mediums */ 52*10465441SEvalZero #define RNDIS_MEDIUM_802_3 0x00000000 53*10465441SEvalZero 54*10465441SEvalZero struct ucls_rndis 55*10465441SEvalZero { 56*10465441SEvalZero uep_t notify; 57*10465441SEvalZero rt_uint32_t filter; 58*10465441SEvalZero rt_bool_t header; 59*10465441SEvalZero rt_uint8_t rndis_state; 60*10465441SEvalZero rt_uint8_t media_state; 61*10465441SEvalZero rt_uint8_t ethaddr[6]; 62*10465441SEvalZero }; 63*10465441SEvalZero 64*10465441SEvalZero /* Remote NDIS generic message type */ 65*10465441SEvalZero struct rndis_gen_msg 66*10465441SEvalZero { 67*10465441SEvalZero rt_uint32_t MessageType; 68*10465441SEvalZero rt_uint32_t MessageLength; 69*10465441SEvalZero }; 70*10465441SEvalZero typedef struct rndis_gen_msg* rndis_gen_msg_t; 71*10465441SEvalZero 72*10465441SEvalZero struct rndis_packet_msg 73*10465441SEvalZero { 74*10465441SEvalZero rt_uint32_t MessageType; 75*10465441SEvalZero rt_uint32_t MessageLength; 76*10465441SEvalZero rt_uint32_t DataOffset; 77*10465441SEvalZero rt_uint32_t DataLength; 78*10465441SEvalZero rt_uint32_t OOBDataOffset; 79*10465441SEvalZero rt_uint32_t OOBDataLength; 80*10465441SEvalZero rt_uint32_t NumOOBDataElements; 81*10465441SEvalZero rt_uint32_t PerPacketInfoOffset; 82*10465441SEvalZero rt_uint32_t PerPacketInfoLength; 83*10465441SEvalZero rt_uint32_t VcHandle; 84*10465441SEvalZero rt_uint32_t Reserved; 85*10465441SEvalZero }; 86*10465441SEvalZero typedef struct rndis_packet_msg* rndis_packet_msg_t; 87*10465441SEvalZero 88*10465441SEvalZero /* Remote NDIS Initialize Message */ 89*10465441SEvalZero struct rndis_init_msg 90*10465441SEvalZero { 91*10465441SEvalZero rt_uint32_t MessageType; 92*10465441SEvalZero rt_uint32_t MessageLength; 93*10465441SEvalZero rt_uint32_t RequestId; 94*10465441SEvalZero rt_uint32_t MajorVersion; 95*10465441SEvalZero rt_uint32_t MinorVersion; 96*10465441SEvalZero rt_uint32_t MaxTransferSize; 97*10465441SEvalZero }; 98*10465441SEvalZero typedef struct rndis_init_msg* rndis_init_msg_t; 99*10465441SEvalZero 100*10465441SEvalZero /* Response */ 101*10465441SEvalZero struct rndis_init_cmplt 102*10465441SEvalZero { 103*10465441SEvalZero rt_uint32_t MessageType; 104*10465441SEvalZero rt_uint32_t MessageLength; 105*10465441SEvalZero rt_uint32_t RequestId; 106*10465441SEvalZero rt_uint32_t Status; 107*10465441SEvalZero rt_uint32_t MajorVersion; 108*10465441SEvalZero rt_uint32_t MinorVersion; 109*10465441SEvalZero rt_uint32_t DeviceFlags; 110*10465441SEvalZero rt_uint32_t Medium; 111*10465441SEvalZero rt_uint32_t MaxPacketsPerTransfer; 112*10465441SEvalZero rt_uint32_t MaxTransferSize; 113*10465441SEvalZero rt_uint32_t PacketAlignmentFactor; 114*10465441SEvalZero rt_uint32_t AfListOffset; 115*10465441SEvalZero rt_uint32_t AfListSize; 116*10465441SEvalZero }; 117*10465441SEvalZero typedef struct rndis_init_cmplt* rndis_init_cmplt_t; 118*10465441SEvalZero 119*10465441SEvalZero /* Remote NDIS Halt Message */ 120*10465441SEvalZero struct rndis_halt_msg 121*10465441SEvalZero { 122*10465441SEvalZero rt_uint32_t MessageType; 123*10465441SEvalZero rt_uint32_t MessageLength; 124*10465441SEvalZero rt_uint32_t RequestId; 125*10465441SEvalZero }; 126*10465441SEvalZero 127*10465441SEvalZero /* Remote NDIS Query Message */ 128*10465441SEvalZero struct rndis_query_msg 129*10465441SEvalZero { 130*10465441SEvalZero rt_uint32_t MessageType; 131*10465441SEvalZero rt_uint32_t MessageLength; 132*10465441SEvalZero rt_uint32_t RequestId; 133*10465441SEvalZero rt_uint32_t Oid; 134*10465441SEvalZero rt_uint32_t InformationBufferLength; 135*10465441SEvalZero rt_uint32_t InformationBufferOffset; 136*10465441SEvalZero rt_uint32_t DeviceVcHandle; 137*10465441SEvalZero }; 138*10465441SEvalZero typedef struct rndis_query_msg* rndis_query_msg_t; 139*10465441SEvalZero 140*10465441SEvalZero /* Response */ 141*10465441SEvalZero struct rndis_query_cmplt 142*10465441SEvalZero { 143*10465441SEvalZero rt_uint32_t MessageType; 144*10465441SEvalZero rt_uint32_t MessageLength; 145*10465441SEvalZero rt_uint32_t RequestId; 146*10465441SEvalZero rt_uint32_t Status; 147*10465441SEvalZero rt_uint32_t InformationBufferLength; 148*10465441SEvalZero rt_uint32_t InformationBufferOffset; 149*10465441SEvalZero }; 150*10465441SEvalZero typedef struct rndis_query_cmplt* rndis_query_cmplt_t; 151*10465441SEvalZero 152*10465441SEvalZero /* Remote NDIS Set Message */ 153*10465441SEvalZero struct rndis_set_msg 154*10465441SEvalZero { 155*10465441SEvalZero rt_uint32_t MessageType; 156*10465441SEvalZero rt_uint32_t MessageLength; 157*10465441SEvalZero rt_uint32_t RequestId; 158*10465441SEvalZero rt_uint32_t Oid; 159*10465441SEvalZero rt_uint32_t InformationBufferLength; 160*10465441SEvalZero rt_uint32_t InformationBufferOffset; 161*10465441SEvalZero rt_uint32_t DeviceVcHandle; 162*10465441SEvalZero }; 163*10465441SEvalZero typedef struct rndis_set_msg* rndis_set_msg_t; 164*10465441SEvalZero 165*10465441SEvalZero /* Response */ 166*10465441SEvalZero struct rndis_set_cmplt 167*10465441SEvalZero { 168*10465441SEvalZero rt_uint32_t MessageType; 169*10465441SEvalZero rt_uint32_t MessageLength; 170*10465441SEvalZero rt_uint32_t RequestId; 171*10465441SEvalZero rt_uint32_t Status; 172*10465441SEvalZero }; 173*10465441SEvalZero typedef struct rndis_set_cmplt* rndis_set_cmplt_t; 174*10465441SEvalZero 175*10465441SEvalZero /* Remote NDIS Soft Reset Message */ 176*10465441SEvalZero struct rndis_reset_msg 177*10465441SEvalZero { 178*10465441SEvalZero rt_uint32_t MessageType; 179*10465441SEvalZero rt_uint32_t MessageLength; 180*10465441SEvalZero rt_uint32_t Reserved; 181*10465441SEvalZero }; 182*10465441SEvalZero 183*10465441SEvalZero /* Remote NDIS Indicate Status Message */ 184*10465441SEvalZero struct rndis_indicate_status_msg 185*10465441SEvalZero { 186*10465441SEvalZero rt_uint32_t MessageType; 187*10465441SEvalZero rt_uint32_t MessageLength; 188*10465441SEvalZero rt_uint32_t Status; 189*10465441SEvalZero rt_uint32_t StatusBufferLength; 190*10465441SEvalZero rt_uint32_t StatusBufferOffset; 191*10465441SEvalZero }; 192*10465441SEvalZero typedef struct rndis_indicate_status_msg* rndis_indicate_status_msg_t; 193*10465441SEvalZero 194*10465441SEvalZero struct rndis_keepalive_msg 195*10465441SEvalZero { 196*10465441SEvalZero rt_uint32_t MessageType; 197*10465441SEvalZero rt_uint32_t MessageLength; 198*10465441SEvalZero rt_uint32_t RequestID; 199*10465441SEvalZero }; 200*10465441SEvalZero typedef struct rndis_keepalive_msg* rndis_keepalive_msg_t; 201*10465441SEvalZero 202*10465441SEvalZero /* Response: */ 203*10465441SEvalZero struct rndis_keepalive_cmplt 204*10465441SEvalZero { 205*10465441SEvalZero rt_uint32_t MessageType; 206*10465441SEvalZero rt_uint32_t MessageLength; 207*10465441SEvalZero rt_uint32_t RequestId; 208*10465441SEvalZero rt_uint32_t Status; 209*10465441SEvalZero }; 210*10465441SEvalZero typedef struct rndis_keepalive_cmplt* rndis_keepalive_cmplt_t; 211*10465441SEvalZero 212*10465441SEvalZero 213*10465441SEvalZero 214*10465441SEvalZero 215*10465441SEvalZero 216*10465441SEvalZero 217*10465441SEvalZero 218*10465441SEvalZero #endif 219