308 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			308 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /**
 | ||
|  |  * \file rndis_protocol.h | ||
|  |  *         RNDIS Defines | ||
|  |  * | ||
|  |  * \author | ||
|  |  *         Colin O'Flynn <coflynn@newae.com> | ||
|  |  * | ||
|  |  * \addtogroup usbstick | ||
|  |  */ | ||
|  | 
 | ||
|  | /* Copyright (c) 2008  Colin O'Flynn
 | ||
|  | 
 | ||
|  |    Redistribution and use in source and binary forms, with or without | ||
|  |    modification, are permitted provided that the following conditions are met: | ||
|  | 
 | ||
|  |    * Redistributions of source code must retain the above copyright | ||
|  |      notice, this list of conditions and the following disclaimer. | ||
|  |    * 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. | ||
|  |    * Neither the name of the copyright holders nor the names of | ||
|  |      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 AND CONTRIBUTORS "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 OWNER OR CONTRIBUTORS 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. | ||
|  | */ | ||
|  | 
 | ||
|  | #ifndef _RNDIS_H
 | ||
|  | #define _RNDIS_H
 | ||
|  | 
 | ||
|  | /** 
 | ||
|  |   \addtogroup RNDIS | ||
|  |   @{ | ||
|  |   */ | ||
|  | 
 | ||
|  | #include <stdint.h>
 | ||
|  | 
 | ||
|  | #define RNDIS_MAJOR_VERSION	1
 | ||
|  | #define RNDIS_MINOR_VERSION 0
 | ||
|  | 
 | ||
|  | #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
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /* Message set for Connectionless (802.3) Devices */ | ||
|  | #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
 | ||
|  | 
 | ||
|  | typedef uint32_t rndis_MessageType_t; | ||
|  | typedef uint32_t rndis_MessageLength_t; | ||
|  | typedef uint32_t rndis_RequestId_t; | ||
|  | typedef uint32_t rndis_MajorVersion_t; | ||
|  | typedef uint32_t rndis_MinorVersion_t; | ||
|  | typedef uint32_t rndis_MaxTransferSize_t; | ||
|  | typedef uint32_t rndis_Status_t; | ||
|  | 
 | ||
|  | 
 | ||
|  | /* Device Flags */ | ||
|  | #define RNDIS_DF_CONNECTIONLESS      0x00000001
 | ||
|  | #define RNDIS_DF_CONNECTION_ORIENTED 0x00000002
 | ||
|  | typedef uint32_t rndis_DeviceFlags_t; | ||
|  | 
 | ||
|  | /* Mediums */ | ||
|  | #define RNDIS_MEDIUM_802_3           0x00000000
 | ||
|  | typedef uint32_t rndis_Medium_t; | ||
|  | 
 | ||
|  | 
 | ||
|  | typedef uint32_t rndis_MaxPacketsPerTransfer_t; | ||
|  | typedef uint32_t rndis_PacketAlignmentFactor_t; | ||
|  | typedef uint32_t rndis_AfListOffset_t; | ||
|  | typedef uint32_t rndis_AfListSize_t; | ||
|  | 
 | ||
|  | /*** Remote NDIS Generic Message type ***/ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	} rndis_generic_msg_t; | ||
|  | 
 | ||
|  | 
 | ||
|  | /*** Remote NDIS Initialize Message ***/ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t 	MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	rndis_MajorVersion_t	MajorVersion; | ||
|  | 	rndis_MinorVersion_t	MinorVersion; | ||
|  | 	rndis_MaxTransferSize_t	MaxTransferSize; | ||
|  | 	} rndis_initialize_msg_t; | ||
|  | 	 | ||
|  | /* Response: */ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	rndis_Status_t			Status; | ||
|  | 	rndis_MajorVersion_t	MajorVersion; | ||
|  | 	rndis_MinorVersion_t	MinorVersion; | ||
|  | 	rndis_DeviceFlags_t		DeviceFlags; | ||
|  | 	rndis_Medium_t			Medium; | ||
|  | 	rndis_MaxPacketsPerTransfer_t 	MaxPacketsPerTransfer; | ||
|  | 	rndis_MaxTransferSize_t			MaxTransferSize; | ||
|  | 	rndis_PacketAlignmentFactor_t 	PacketAlignmentFactor; | ||
|  | 	rndis_AfListOffset_t	AfListOffset; | ||
|  | 	rndis_AfListSize_t		AfListSize; | ||
|  | 	} rndis_initialize_cmplt_t; | ||
|  | 	 | ||
|  | 
 | ||
|  | /*** Remote NDIS Halt Message ***/ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	} rndis_halt_msg_t; | ||
|  | 	 | ||
|  | typedef uint32_t rndis_Oid_t; | ||
|  | typedef uint32_t rndis_InformationBufferLength_t; | ||
|  | typedef uint32_t rndis_InformationBufferOffset_t; | ||
|  | typedef uint32_t rndis_DeviceVcHandle_t; | ||
|  | 
 | ||
|  | /*** Remote NDIS Query Message ***/ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	rndis_Oid_t				Oid; | ||
|  | 	rndis_InformationBufferLength_t	InformationBufferLength; | ||
|  | 	rndis_InformationBufferOffset_t	InformationBufferOffset; | ||
|  | 	rndis_DeviceVcHandle_t			DeviceVcHandle; | ||
|  | 	}  rndis_query_msg_t; | ||
|  | 	 | ||
|  | /* Response: */ | ||
|  | 
 | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	rndis_Status_t			Status; | ||
|  | 	rndis_InformationBufferLength_t	InformationBufferLength; | ||
|  | 	rndis_InformationBufferOffset_t	InformationBufferOffset; | ||
|  | 	} rndis_query_cmplt_t; | ||
|  | 	 | ||
|  | /*** Remote NDIS Set Message ***/ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	rndis_Oid_t				Oid; | ||
|  | 	rndis_InformationBufferLength_t	InformationBufferLength; | ||
|  | 	rndis_InformationBufferOffset_t	InformationBufferOffset; | ||
|  | 	rndis_DeviceVcHandle_t			DeviceVcHandle; | ||
|  | 	} rndis_set_msg_t; | ||
|  | 	 | ||
|  | /* Response */ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	rndis_Status_t			Status; | ||
|  | 	}rndis_set_cmplt_t; | ||
|  | 
 | ||
|  | /* Information buffer layout for OID_GEN_RNDIS_CONFIG_PARAMETER */ | ||
|  | typedef uint32_t rndis_ParameterNameOffset_t; | ||
|  | typedef uint32_t rndis_ParameterNameLength_t; | ||
|  | typedef uint32_t rndis_ParameterType_t; | ||
|  | typedef uint32_t rndis_ParameterValueOffset_t; | ||
|  | typedef uint32_t rndis_ParameterValueLength_t; | ||
|  | 
 | ||
|  | #define PARAMETER_TYPE_STRING		2
 | ||
|  | #define PARAMETER_TYPE_NUMERICAL	0
 | ||
|  | 
 | ||
|  | typedef struct{ | ||
|  | 	rndis_ParameterNameOffset_t		ParameterNameOffset; | ||
|  | 	rndis_ParameterNameLength_t		ParameterNameLength; | ||
|  | 	rndis_ParameterType_t			ParameterType; | ||
|  | 	rndis_ParameterValueOffset_t	ParameterValueOffset; | ||
|  | 	rndis_ParameterValueLength_t	ParameterValueLength;	 | ||
|  | 	}rndis_config_parameter_t; | ||
|  | 	 | ||
|  | typedef uint32_t rndis_Reserved_t; | ||
|  | 
 | ||
|  | /*** Remote NDIS Soft Reset Message ***/ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_Reserved_t		Reserved; | ||
|  | 	} rndis_reset_msg_t; | ||
|  | 	 | ||
|  | typedef uint32_t rndis_AddressingReset_t; | ||
|  | 
 | ||
|  | /* Response: */ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_Status_t			Status; | ||
|  | 	rndis_AddressingReset_t	AddressingReset; | ||
|  | 	}  rndis_reset_cmplt_t; | ||
|  | 	 | ||
|  | /*** Remote NDIS Indicate Status Message ***/ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_Status_t			Status; | ||
|  | 	rndis_Status_t			StatusBufferLength; | ||
|  | 	rndis_Status_t			StatusBufferOffset; | ||
|  | 	}  rndis_indicate_status_t; | ||
|  | 	 | ||
|  | typedef uint32_t rndis_DiagStatus_t; | ||
|  | typedef uint32_t rndis_ErrorOffset_t; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  | 	rndis_DiagStatus_t		DiagStatus; | ||
|  | 	rndis_ErrorOffset_t		ErrorOffset; | ||
|  | 	}rndis_diagnostic_info_t; | ||
|  | 	 | ||
|  | /*** Remote NDIS Keepalive Message */ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	}rndis_keepalive_msg_t; | ||
|  | 	 | ||
|  | /* Response: */ | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t		MessageType; | ||
|  | 	rndis_MessageLength_t	MessageLength; | ||
|  | 	rndis_RequestId_t		RequestId; | ||
|  | 	rndis_Status_t			Status; | ||
|  | 	}rndis_keepalive_cmplt_t; | ||
|  | 
 | ||
|  | /*** Remote NDIS Data Packet ***/ | ||
|  | 
 | ||
|  | typedef uint32_t rndis_DataOffset_t; | ||
|  | typedef uint32_t rndis_DataLength_t; | ||
|  | typedef uint32_t rndis_OOBDataOffset_t; | ||
|  | typedef uint32_t rndis_OOBDataLength_t; | ||
|  | typedef uint32_t rndis_NumOOBDataElements_t; | ||
|  | typedef uint32_t rndis_PerPacketInfoOffset_t; | ||
|  | typedef uint32_t rndis_PerPacketInfoLength_t; | ||
|  | 
 | ||
|  | typedef struct{ | ||
|  | 	rndis_MessageType_t			MessageType; | ||
|  | 	rndis_MessageLength_t		MessageLength; | ||
|  | 	rndis_DataOffset_t			DataOffset; | ||
|  | 	rndis_DataLength_t			DataLength; | ||
|  | 	rndis_OOBDataOffset_t		OOBDataOffset; | ||
|  | 	rndis_OOBDataLength_t		OOBDataLength; | ||
|  | 	rndis_NumOOBDataElements_t	NumOOBDataElements; | ||
|  | 	rndis_PerPacketInfoOffset_t	PerPacketInfoOffset; | ||
|  | 	rndis_PerPacketInfoLength_t PerPacketInfoLength; | ||
|  | 	rndis_DeviceVcHandle_t		DeviceVcHandle; | ||
|  | 	rndis_Reserved_t			Reserved; | ||
|  | 	}rndis_data_packet_t; | ||
|  | 
 | ||
|  | typedef uint32_t rndis_ClassInformationOffset_t; | ||
|  | typedef uint32_t rndis_Size_t; | ||
|  | typedef uint32_t rndis_Type_t; | ||
|  | 
 | ||
|  | typedef struct{ | ||
|  | 	rndis_Size_t					Size; | ||
|  | 	rndis_Type_t					Type; | ||
|  | 	rndis_ClassInformationOffset_t	ClassInformationType; | ||
|  | 	}rndis_OOB_packet_t; | ||
|  | 
 | ||
|  | #include "ndis.h"
 | ||
|  | 
 | ||
|  | typedef enum rnids_state_e { | ||
|  | 	rndis_uninitialized, | ||
|  | 	rndis_initialized, | ||
|  | 	rndis_data_initialized | ||
|  | 	} rndis_state_t; | ||
|  | 
 | ||
|  | typedef struct { | ||
|  | 	uint32_t		txok; | ||
|  | 	uint32_t		rxok; | ||
|  | 	uint32_t		txbad; | ||
|  | 	uint32_t		rxbad; | ||
|  | } usb_eth_stat_t; | ||
|  | 
 | ||
|  | #endif /* _RNDIS_H */
 | ||
|  | 
 | ||
|  | /** @} */ |