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 */
 | 
						|
 | 
						|
/** @} */
 |