/* * Copyright (c) 2006-2023, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2012-12-24 heyuanjie87 first version */ #ifndef __RNDIS_H__ #define __RNDIS_H__ #include #define USB_ETH_MTU 1500+14 #define RNDIS_MESSAGE_BUFFER_SIZE 128 #define RESPONSE_AVAILABLE 0x00000001 /* Remote NDIS version numbers */ #define RNDIS_MAJOR_VERSION 1 #define RNDIS_MINOR_VERSION 0 /* common status values */ #define RNDIS_STATUS_SUCCESS 0X00000000 #define RNDIS_STATUS_FAILURE 0XC0000001 #define RNDIS_STATUS_INVALID_DATA 0XC0010015 #define RNDIS_STATUS_NOT_SUPPORTED 0XC00000BB #define RNDIS_STATUS_MEDIA_CONNECT 0X4001000B #define RNDIS_STATUS_MEDIA_DISCONNECT 0X4001000C /* Remote NDIS message types */ #define REMOTE_NDIS_PACKET_MSG 0x00000001 #define REMOTE_NDIS_INITIALIZE_MSG 0X00000002 #define REMOTE_NDIS_HALT_MSG 0X00000003 #define REMOTE_NDIS_QUERY_MSG 0X00000004 #define REMOTE_NDIS_SET_MSG 0X00000005 #define REMOTE_NDIS_RESET_MSG 0X00000006 #define REMOTE_NDIS_INDICATE_STATUS_MSG 0X00000007 #define REMOTE_NDIS_KEEPALIVE_MSG 0X00000008 #define REMOTE_NDIS_INITIALIZE_CMPLT 0X80000002 #define REMOTE_NDIS_QUERY_CMPLT 0X80000004 #define REMOTE_NDIS_SET_CMPLT 0X80000005 #define REMOTE_NDIS_RESET_CMPLT 0X80000006 #define REMOTE_NDIS_KEEPALIVE_CMPLT 0X80000008 /* device flags */ #define RNDIS_DF_CONNECTIONLESS 0x00000001 #define RNDIS_DF_CONNECTION_ORIENTED 0x00000002 /* mediums */ #define RNDIS_MEDIUM_802_3 0x00000000 struct ucls_rndis { uep_t notify; rt_uint32_t filter; rt_bool_t header; rt_uint8_t rndis_state; rt_uint8_t media_state; rt_uint8_t ethaddr[6]; }; /* Remote NDIS generic message type */ struct rndis_gen_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; }; typedef struct rndis_gen_msg* rndis_gen_msg_t; struct rndis_packet_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t DataOffset; rt_uint32_t DataLength; rt_uint32_t OOBDataOffset; rt_uint32_t OOBDataLength; rt_uint32_t NumOOBDataElements; rt_uint32_t PerPacketInfoOffset; rt_uint32_t PerPacketInfoLength; rt_uint32_t VcHandle; rt_uint32_t Reserved; }; typedef struct rndis_packet_msg* rndis_packet_msg_t; /* Remote NDIS Initialize Message */ struct rndis_init_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestId; rt_uint32_t MajorVersion; rt_uint32_t MinorVersion; rt_uint32_t MaxTransferSize; }; typedef struct rndis_init_msg* rndis_init_msg_t; /* Response */ struct rndis_init_cmplt { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestId; rt_uint32_t Status; rt_uint32_t MajorVersion; rt_uint32_t MinorVersion; rt_uint32_t DeviceFlags; rt_uint32_t Medium; rt_uint32_t MaxPacketsPerTransfer; rt_uint32_t MaxTransferSize; rt_uint32_t PacketAlignmentFactor; rt_uint32_t AfListOffset; rt_uint32_t AfListSize; }; typedef struct rndis_init_cmplt* rndis_init_cmplt_t; /* Remote NDIS Halt Message */ struct rndis_halt_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestId; }; /* Remote NDIS Query Message */ struct rndis_query_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestId; rt_uint32_t Oid; rt_uint32_t InformationBufferLength; rt_uint32_t InformationBufferOffset; rt_uint32_t DeviceVcHandle; }; typedef struct rndis_query_msg* rndis_query_msg_t; /* Response */ struct rndis_query_cmplt { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestId; rt_uint32_t Status; rt_uint32_t InformationBufferLength; rt_uint32_t InformationBufferOffset; }; typedef struct rndis_query_cmplt* rndis_query_cmplt_t; /* Remote NDIS Set Message */ struct rndis_set_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestId; rt_uint32_t Oid; rt_uint32_t InformationBufferLength; rt_uint32_t InformationBufferOffset; rt_uint32_t DeviceVcHandle; }; typedef struct rndis_set_msg* rndis_set_msg_t; /* Response */ struct rndis_set_cmplt { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestId; rt_uint32_t Status; }; typedef struct rndis_set_cmplt* rndis_set_cmplt_t; /* Remote NDIS Soft Reset Message */ struct rndis_reset_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t Reserved; }; /* Remote NDIS Soft Reset Response */ struct rndis_reset_cmplt { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t Status; rt_uint32_t AddressingReset; }; /* Remote NDIS Indicate Status Message */ struct rndis_indicate_status_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t Status; rt_uint32_t StatusBufferLength; rt_uint32_t StatusBufferOffset; }; typedef struct rndis_indicate_status_msg* rndis_indicate_status_msg_t; struct rndis_keepalive_msg { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestID; }; typedef struct rndis_keepalive_msg* rndis_keepalive_msg_t; /* Response: */ struct rndis_keepalive_cmplt { rt_uint32_t MessageType; rt_uint32_t MessageLength; rt_uint32_t RequestId; rt_uint32_t Status; }; typedef struct rndis_keepalive_cmplt* rndis_keepalive_cmplt_t; #endif