@ -39,33 +39,33 @@
static const uint32_t PROGMEM AdapterSupportedOIDList [ ] =
static const uint32_t PROGMEM AdapterSupportedOIDList [ ] =
{
{
OID_GEN_SUPPORTED_LIST ,
CPU_TO_LE32 ( OID_GEN_SUPPORTED_LIST ) ,
OID_GEN_PHYSICAL_MEDIUM ,
CPU_TO_LE32 ( OID_GEN_PHYSICAL_MEDIUM ) ,
OID_GEN_HARDWARE_STATUS ,
CPU_TO_LE32 ( OID_GEN_HARDWARE_STATUS ) ,
OID_GEN_MEDIA_SUPPORTED ,
CPU_TO_LE32 ( OID_GEN_MEDIA_SUPPORTED ) ,
OID_GEN_MEDIA_IN_USE ,
CPU_TO_LE32 ( OID_GEN_MEDIA_IN_USE ) ,
OID_GEN_MAXIMUM_FRAME_SIZE ,
CPU_TO_LE32 ( OID_GEN_MAXIMUM_FRAME_SIZE ) ,
OID_GEN_MAXIMUM_TOTAL_SIZE ,
CPU_TO_LE32 ( OID_GEN_MAXIMUM_TOTAL_SIZE ) ,
OID_GEN_LINK_SPEED ,
CPU_TO_LE32 ( OID_GEN_LINK_SPEED ) ,
OID_GEN_TRANSMIT_BLOCK_SIZE ,
CPU_TO_LE32 ( OID_GEN_TRANSMIT_BLOCK_SIZE ) ,
OID_GEN_RECEIVE_BLOCK_SIZE ,
CPU_TO_LE32 ( OID_GEN_RECEIVE_BLOCK_SIZE ) ,
OID_GEN_VENDOR_ID ,
CPU_TO_LE32 ( OID_GEN_VENDOR_ID ) ,
OID_GEN_VENDOR_DESCRIPTION ,
CPU_TO_LE32 ( OID_GEN_VENDOR_DESCRIPTION ) ,
OID_GEN_CURRENT_PACKET_FILTER ,
CPU_TO_LE32 ( OID_GEN_CURRENT_PACKET_FILTER ) ,
OID_GEN_MAXIMUM_TOTAL_SIZE ,
CPU_TO_LE32 ( OID_GEN_MAXIMUM_TOTAL_SIZE ) ,
OID_GEN_MEDIA_CONNECT_STATUS ,
CPU_TO_LE32 ( OID_GEN_MEDIA_CONNECT_STATUS ) ,
OID_GEN_XMIT_OK ,
CPU_TO_LE32 ( OID_GEN_XMIT_OK ) ,
OID_GEN_RCV_OK ,
CPU_TO_LE32 ( OID_GEN_RCV_OK ) ,
OID_GEN_XMIT_ERROR ,
CPU_TO_LE32 ( OID_GEN_XMIT_ERROR ) ,
OID_GEN_RCV_ERROR ,
CPU_TO_LE32 ( OID_GEN_RCV_ERROR ) ,
OID_GEN_RCV_NO_BUFFER ,
CPU_TO_LE32 ( OID_GEN_RCV_NO_BUFFER ) ,
OID_802_3_PERMANENT_ADDRESS ,
CPU_TO_LE32 ( OID_802_3_PERMANENT_ADDRESS ) ,
OID_802_3_CURRENT_ADDRESS ,
CPU_TO_LE32 ( OID_802_3_CURRENT_ADDRESS ) ,
OID_802_3_MULTICAST_LIST ,
CPU_TO_LE32 ( OID_802_3_MULTICAST_LIST ) ,
OID_802_3_MAXIMUM_LIST_SIZE ,
CPU_TO_LE32 ( OID_802_3_MAXIMUM_LIST_SIZE ) ,
OID_802_3_RCV_ERROR_ALIGNMENT ,
CPU_TO_LE32 ( OID_802_3_RCV_ERROR_ALIGNMENT ) ,
OID_802_3_XMIT_ONE_COLLISION ,
CPU_TO_LE32 ( OID_802_3_XMIT_ONE_COLLISION ) ,
OID_802_3_XMIT_MORE_COLLISIONS ,
CPU_TO_LE32 ( OID_802_3_XMIT_MORE_COLLISIONS ) ,
} ;
} ;
void RNDIS_Device_ProcessControlRequest ( USB_ClassInfo_RNDIS_Device_t * const RNDISInterfaceInfo )
void RNDIS_Device_ProcessControlRequest ( USB_ClassInfo_RNDIS_Device_t * const RNDISInterfaceInfo )
@ -97,14 +97,14 @@ void RNDIS_Device_ProcessControlRequest(USB_ClassInfo_RNDIS_Device_t* const RNDI
if ( ! ( MessageHeader - > MessageLength ) )
if ( ! ( MessageHeader - > MessageLength ) )
{
{
RNDISInterfaceInfo - > State . RNDISMessageBuffer [ 0 ] = 0 ;
RNDISInterfaceInfo - > State . RNDISMessageBuffer [ 0 ] = 0 ;
MessageHeader - > MessageLength = 1 ;
MessageHeader - > MessageLength = CPU_TO_LE32 ( 1 ) ;
}
}
Endpoint_ClearSETUP ( ) ;
Endpoint_ClearSETUP ( ) ;
Endpoint_Write_Control_Stream_LE ( RNDISInterfaceInfo - > State . RNDISMessageBuffer , MessageHeader - > MessageLength ) ;
Endpoint_Write_Control_Stream_LE ( RNDISInterfaceInfo - > State . RNDISMessageBuffer , le32_to_cpu ( MessageHeader - > MessageLength ) ) ;
Endpoint_ClearOUT ( ) ;
Endpoint_ClearOUT ( ) ;
MessageHeader - > MessageLength = 0 ;
MessageHeader - > MessageLength = CPU_TO_LE32 ( 0 ) ;
}
}
break ;
break ;
@ -171,9 +171,9 @@ void RNDIS_Device_USBTask(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfaceInfo
{
{
. bmRequestType = ( REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE ) ,
. bmRequestType = ( REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE ) ,
. bRequest = RNDIS_NOTIF_ResponseAvailable ,
. bRequest = RNDIS_NOTIF_ResponseAvailable ,
. wValue = 0 ,
. wValue = CPU_TO_LE16 ( 0 ) ,
. wIndex = 0 ,
. wIndex = CPU_TO_LE16 ( 0 ) ,
. wLength = 0 ,
. wLength = CPU_TO_LE16 ( 0 ) ,
} ;
} ;
Endpoint_Write_Stream_LE ( & Notification , sizeof ( USB_Request_Header_t ) , NULL ) ;
Endpoint_Write_Stream_LE ( & Notification , sizeof ( USB_Request_Header_t ) , NULL ) ;
@ -191,7 +191,7 @@ void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const
RNDIS_Message_Header_t * MessageHeader = ( RNDIS_Message_Header_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RNDIS_Message_Header_t * MessageHeader = ( RNDIS_Message_Header_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
switch ( MessageHeader - > MessageType )
switch ( le32_to_cpu ( MessageHeader - > MessageType ) )
{
{
case REMOTE_NDIS_INITIALIZE_MSG :
case REMOTE_NDIS_INITIALIZE_MSG :
RNDISInterfaceInfo - > State . ResponseReady = true ;
RNDISInterfaceInfo - > State . ResponseReady = true ;
@ -201,61 +201,60 @@ void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const
RNDIS_Initialize_Complete_t * INITIALIZE_Response =
RNDIS_Initialize_Complete_t * INITIALIZE_Response =
( RNDIS_Initialize_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
( RNDIS_Initialize_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
INITIALIZE_Response - > MessageType = REMOTE_NDIS_INITIALIZE_CMPLT ;
INITIALIZE_Response - > MessageType = CPU_TO_LE32 ( REMOTE_NDIS_INITIALIZE_CMPLT ) ;
INITIALIZE_Response - > MessageLength = sizeof ( RNDIS_Initialize_Complete_t ) ;
INITIALIZE_Response - > MessageLength = CPU_TO_LE32 ( sizeof ( RNDIS_Initialize_Complete_t ) ) ;
INITIALIZE_Response - > RequestId = INITIALIZE_Message - > RequestId ;
INITIALIZE_Response - > RequestId = INITIALIZE_Message - > RequestId ;
INITIALIZE_Response - > Status = REMOTE_NDIS_STATUS_SUCCESS ;
INITIALIZE_Response - > Status = CPU_TO_LE32 ( REMOTE_NDIS_STATUS_SUCCESS ) ;
INITIALIZE_Response - > MajorVersion = REMOTE_NDIS_VERSION_MAJOR ;
INITIALIZE_Response - > MajorVersion = CPU_TO_LE32 ( REMOTE_NDIS_VERSION_MAJOR ) ;
INITIALIZE_Response - > MinorVersion = REMOTE_NDIS_VERSION_MINOR ;
INITIALIZE_Response - > MinorVersion = CPU_TO_LE32 ( REMOTE_NDIS_VERSION_MINOR ) ;
INITIALIZE_Response - > DeviceFlags = REMOTE_NDIS_DF_CONNECTIONLESS ;
INITIALIZE_Response - > DeviceFlags = CPU_TO_LE32 ( REMOTE_NDIS_DF_CONNECTIONLESS ) ;
INITIALIZE_Response - > Medium = REMOTE_NDIS_MEDIUM_802_3 ;
INITIALIZE_Response - > Medium = CPU_TO_LE32 ( REMOTE_NDIS_MEDIUM_802_3 ) ;
INITIALIZE_Response - > MaxPacketsPerTransfer = 1 ;
INITIALIZE_Response - > MaxPacketsPerTransfer = CPU_TO_LE32 ( 1 ) ;
INITIALIZE_Response - > MaxTransferSize = ( sizeof ( RNDIS_Packet_Message_t ) + ETHERNET_FRAME_SIZE_MAX ) ;
INITIALIZE_Response - > MaxTransferSize = CPU_TO_LE32 ( sizeof ( RNDIS_Packet_Message_t ) + ETHERNET_FRAME_SIZE_MAX ) ;
INITIALIZE_Response - > PacketAlignmentFactor = 0 ;
INITIALIZE_Response - > PacketAlignmentFactor = CPU_TO_LE32 ( 0 ) ;
INITIALIZE_Response - > AFListOffset = 0 ;
INITIALIZE_Response - > AFListOffset = CPU_TO_LE32 ( 0 ) ;
INITIALIZE_Response - > AFListSize = 0 ;
INITIALIZE_Response - > AFListSize = CPU_TO_LE32 ( 0 ) ;
RNDISInterfaceInfo - > State . CurrRNDISState = RNDIS_Initialized ;
RNDISInterfaceInfo - > State . CurrRNDISState = RNDIS_Initialized ;
break ;
break ;
case REMOTE_NDIS_HALT_MSG :
case REMOTE_NDIS_HALT_MSG :
RNDISInterfaceInfo - > State . ResponseReady = false ;
RNDISInterfaceInfo - > State . ResponseReady = false ;
MessageHeader - > MessageLength = 0 ;
RNDISInterfaceInfo- > State . CurrRNDISState = RNDIS_Uninitialized ;
MessageHeader- > MessageLength = CPU_TO_LE32 ( 0 ) ;
RNDISInterfaceInfo - > State . CurrRNDISState = RNDIS_Uninitialized ;
break ;
break ;
case REMOTE_NDIS_QUERY_MSG :
case REMOTE_NDIS_QUERY_MSG :
RNDISInterfaceInfo - > State . ResponseReady = true ;
RNDISInterfaceInfo - > State . ResponseReady = true ;
RNDIS_Query_Message_t * QUERY_Message = ( RNDIS_Query_Message_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RNDIS_Query_Message_t * QUERY_Message = ( RNDIS_Query_Message_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RNDIS_Query_Complete_t * QUERY_Response = ( RNDIS_Query_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RNDIS_Query_Complete_t * QUERY_Response = ( RNDIS_Query_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
uint32_t Query_Oid = QUERY_Message - > Oid ;
uint32_t Query_Oid = CPU_TO_LE32 ( QUERY_Message - > Oid ) ;
void * QueryData = & RNDISInterfaceInfo - > State . RNDISMessageBuffer [ sizeof ( RNDIS_Message_Header_t ) +
void * QueryData = & RNDISInterfaceInfo - > State . RNDISMessageBuffer [ sizeof ( RNDIS_Message_Header_t ) +
QUERY_Message - > InformationBufferOffset ] ;
le32_to_cpu ( QUERY_Message - > InformationBufferOffset ) ] ;
void * ResponseData = & RNDISInterfaceInfo - > State . RNDISMessageBuffer [ sizeof ( RNDIS_Query_Complete_t ) ] ;
void * ResponseData = & RNDISInterfaceInfo - > State . RNDISMessageBuffer [ sizeof ( RNDIS_Query_Complete_t ) ] ;
uint16_t ResponseSize ;
uint16_t ResponseSize ;
QUERY_Response - > MessageType = REMOTE_NDIS_QUERY_CMPLT ;
QUERY_Response - > MessageType = CPU_TO_LE32 ( REMOTE_NDIS_QUERY_CMPLT ) ;
QUERY_Response - > MessageLength = sizeof ( RNDIS_Query_Complete_t ) ;
if ( RNDIS_Device_ProcessNDISQuery ( RNDISInterfaceInfo , Query_Oid , QueryData , QUERY_Message - > InformationBufferLength ,
if ( RNDIS_Device_ProcessNDISQuery ( RNDISInterfaceInfo , Query_Oid , QueryData , le32_to_cpu ( QUERY_Message - > InformationBufferLength ) ,
ResponseData , & ResponseSize ) )
ResponseData , & ResponseSize ) )
{
{
QUERY_Response - > Status = REMOTE_NDIS_STATUS_SUCCESS ;
QUERY_Response - > Status = CPU_TO_LE32 ( REMOTE_NDIS_STATUS_SUCCESS ) ;
QUERY_Response - > MessageLength + = ResponseSize ;
QUERY_Response - > MessageLength = cpu_to_le32 ( sizeof ( RNDIS_Query_Complete_t ) + ResponseSize ) ;
QUERY_Response - > InformationBufferLength = ResponseSize ;
QUERY_Response - > InformationBufferLength = CPU_TO_LE32 ( ResponseSize ) ;
QUERY_Response - > InformationBufferOffset = ( sizeof ( RNDIS_Query_Complete_t ) - sizeof ( RNDIS_Message_Header_t ) ) ;
QUERY_Response - > InformationBufferOffset = CPU_TO_LE32 ( sizeof ( RNDIS_Query_Complete_t ) - sizeof ( RNDIS_Message_Header_t ) ) ;
}
}
else
else
{
{
QUERY_Response - > Status = REMOTE_NDIS_STATUS_NOT_SUPPORTED ;
QUERY_Response - > Status = CPU_TO_LE32 ( REMOTE_NDIS_STATUS_NOT_SUPPORTED ) ;
QUERY_Response - > MessageLength = CPU_TO_LE32 ( sizeof ( RNDIS_Query_Complete_t ) ) ;
QUERY_Response - > InformationBufferLength = 0 ;
QUERY_Response - > InformationBufferLength = CPU_TO_LE32 ( 0 ) ;
QUERY_Response - > InformationBufferOffset = 0 ;
QUERY_Response - > InformationBufferOffset = CPU_TO_LE32 ( 0 ) ;
}
}
break ;
break ;
@ -264,17 +263,17 @@ void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const
RNDIS_Set_Message_t * SET_Message = ( RNDIS_Set_Message_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RNDIS_Set_Message_t * SET_Message = ( RNDIS_Set_Message_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RNDIS_Set_Complete_t * SET_Response = ( RNDIS_Set_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RNDIS_Set_Complete_t * SET_Response = ( RNDIS_Set_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
uint32_t SET_Oid = SET_Message - > Oid ;
uint32_t SET_Oid = le32_to_cpu ( SET_Message - > Oid ) ;
SET_Response - > MessageType = REMOTE_NDIS_SET_CMPLT ;
SET_Response - > MessageType = CPU_TO_LE32 ( REMOTE_NDIS_SET_CMPLT ) ;
SET_Response - > MessageLength = sizeof ( RNDIS_Set_Complete_t ) ;
SET_Response - > MessageLength = CPU_TO_LE32 ( sizeof ( RNDIS_Set_Complete_t ) ) ;
SET_Response - > RequestId = SET_Message - > RequestId ;
SET_Response - > RequestId = SET_Message - > RequestId ;
void * SetData = & RNDISInterfaceInfo - > State . RNDISMessageBuffer [ sizeof ( RNDIS_Message_Header_t ) +
void * SetData = & RNDISInterfaceInfo - > State . RNDISMessageBuffer [ sizeof ( RNDIS_Message_Header_t ) +
SET_Message - > InformationBufferOffset ] ;
le32_to_cpu ( SET_Message - > InformationBufferOffset ) ] ;
SET_Response - > Status = RNDIS_Device_ProcessNDISSet ( RNDISInterfaceInfo , SET_Oid , SetData ,
SET_Response - > Status = RNDIS_Device_ProcessNDISSet ( RNDISInterfaceInfo , SET_Oid , SetData ,
SET_Message - > InformationBufferLength ) ?
le32_to_cpu ( SET_Message - > InformationBufferLength ) ) ?
REMOTE_NDIS_STATUS_SUCCESS : REMOTE_NDIS_STATUS_NOT_SUPPORTED ;
REMOTE_NDIS_STATUS_SUCCESS : REMOTE_NDIS_STATUS_NOT_SUPPORTED ;
break ;
break ;
case REMOTE_NDIS_RESET_MSG :
case REMOTE_NDIS_RESET_MSG :
@ -282,10 +281,10 @@ void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const
RNDIS_Reset_Complete_t * RESET_Response = ( RNDIS_Reset_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RNDIS_Reset_Complete_t * RESET_Response = ( RNDIS_Reset_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
RESET_Response - > MessageType = REMOTE_NDIS_RESET_CMPLT ;
RESET_Response - > MessageType = CPU_TO_LE32 ( REMOTE_NDIS_RESET_CMPLT ) ;
RESET_Response - > MessageLength = sizeof ( RNDIS_Reset_Complete_t ) ;
RESET_Response - > MessageLength = CPU_TO_LE32 ( sizeof ( RNDIS_Reset_Complete_t ) ) ;
RESET_Response - > Status = REMOTE_NDIS_STATUS_SUCCESS ;
RESET_Response - > Status = CPU_TO_LE32 ( REMOTE_NDIS_STATUS_SUCCESS ) ;
RESET_Response - > AddressingReset = 0 ;
RESET_Response - > AddressingReset = CPU_TO_LE32 ( 0 ) ;
break ;
break ;
case REMOTE_NDIS_KEEPALIVE_MSG :
case REMOTE_NDIS_KEEPALIVE_MSG :
@ -296,10 +295,10 @@ void RNDIS_Device_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_Device_t* const
RNDIS_KeepAlive_Complete_t * KEEPALIVE_Response =
RNDIS_KeepAlive_Complete_t * KEEPALIVE_Response =
( RNDIS_KeepAlive_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
( RNDIS_KeepAlive_Complete_t * ) & RNDISInterfaceInfo - > State . RNDISMessageBuffer ;
KEEPALIVE_Response - > MessageType = REMOTE_NDIS_KEEPALIVE_CMPLT ;
KEEPALIVE_Response - > MessageType = CPU_TO_LE32 ( REMOTE_NDIS_KEEPALIVE_CMPLT ) ;
KEEPALIVE_Response - > MessageLength = sizeof ( RNDIS_KeepAlive_Complete_t ) ;
KEEPALIVE_Response - > MessageLength = CPU_TO_LE32 ( sizeof ( RNDIS_KeepAlive_Complete_t ) ) ;
KEEPALIVE_Response - > RequestId = KEEPALIVE_Message - > RequestId ;
KEEPALIVE_Response - > RequestId = KEEPALIVE_Message - > RequestId ;
KEEPALIVE_Response - > Status = REMOTE_NDIS_STATUS_SUCCESS ;
KEEPALIVE_Response - > Status = CPU_TO_LE32 ( REMOTE_NDIS_STATUS_SUCCESS ) ;
break ;
break ;
}
}
@ -327,27 +326,27 @@ static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RN
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
/* Indicate that the device is a true ethernet link */
/* Indicate that the device is a true ethernet link */
* ( ( uint32_t * ) ResponseData ) = 0 ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( 0 ) ;
return true ;
return true ;
case OID_GEN_HARDWARE_STATUS :
case OID_GEN_HARDWARE_STATUS :
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
* ( ( uint32_t * ) ResponseData ) = NDIS_HardwareStatus_Ready ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( NDIS_HardwareStatus_Ready ) ;
return true ;
return true ;
case OID_GEN_MEDIA_SUPPORTED :
case OID_GEN_MEDIA_SUPPORTED :
case OID_GEN_MEDIA_IN_USE :
case OID_GEN_MEDIA_IN_USE :
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
* ( ( uint32_t * ) ResponseData ) = REMOTE_NDIS_MEDIUM_802_3 ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( REMOTE_NDIS_MEDIUM_802_3 ) ;
return true ;
return true ;
case OID_GEN_VENDOR_ID :
case OID_GEN_VENDOR_ID :
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
/* Vendor ID 0x0xFFFFFF is reserved for vendors who have not purchased a NDIS VID */
/* Vendor ID 0x0xFFFFFF is reserved for vendors who have not purchased a NDIS VID */
* ( ( uint32_t * ) ResponseData ) = 0x00FFFFFF ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( 0x00FFFFFF ) ;
return true ;
return true ;
case OID_GEN_MAXIMUM_FRAME_SIZE :
case OID_GEN_MAXIMUM_FRAME_SIZE :
@ -355,7 +354,7 @@ static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RN
case OID_GEN_RECEIVE_BLOCK_SIZE :
case OID_GEN_RECEIVE_BLOCK_SIZE :
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
* ( ( uint32_t * ) ResponseData ) = ETHERNET_FRAME_SIZE_MAX ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( ETHERNET_FRAME_SIZE_MAX ) ;
return true ;
return true ;
case OID_GEN_VENDOR_DESCRIPTION :
case OID_GEN_VENDOR_DESCRIPTION :
@ -367,14 +366,14 @@ static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RN
case OID_GEN_MEDIA_CONNECT_STATUS :
case OID_GEN_MEDIA_CONNECT_STATUS :
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
* ( ( uint32_t * ) ResponseData ) = REMOTE_NDIS_MEDIA_STATE_CONNECTED ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( REMOTE_NDIS_MEDIA_STATE_CONNECTED ) ;
return true ;
return true ;
case OID_GEN_LINK_SPEED :
case OID_GEN_LINK_SPEED :
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
/* Indicate 10Mb/s link speed */
/* Indicate 10Mb/s link speed */
* ( ( uint32_t * ) ResponseData ) = 100000 ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( 100000 ) ;
return true ;
return true ;
case OID_802_3_PERMANENT_ADDRESS :
case OID_802_3_PERMANENT_ADDRESS :
@ -388,13 +387,13 @@ static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RN
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
/* Indicate only one multicast address supported */
/* Indicate only one multicast address supported */
* ( ( uint32_t * ) ResponseData ) = 1 ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( 1 ) ;
return true ;
return true ;
case OID_GEN_CURRENT_PACKET_FILTER :
case OID_GEN_CURRENT_PACKET_FILTER :
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
* ( ( uint32_t * ) ResponseData ) = RNDISInterfaceInfo - > State . CurrPacketFilter ;
* ( ( uint32_t * ) ResponseData ) = cpu_to_le32 ( RNDISInterfaceInfo - > State . CurrPacketFilter ) ;
return true ;
return true ;
case OID_GEN_XMIT_OK :
case OID_GEN_XMIT_OK :
@ -408,14 +407,14 @@ static bool RNDIS_Device_ProcessNDISQuery(USB_ClassInfo_RNDIS_Device_t* const RN
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
/* Unused statistic OIDs - always return 0 for each */
/* Unused statistic OIDs - always return 0 for each */
* ( ( uint32_t * ) ResponseData ) = 0 ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( 0 ) ;
return true ;
return true ;
case OID_GEN_MAXIMUM_TOTAL_SIZE :
case OID_GEN_MAXIMUM_TOTAL_SIZE :
* ResponseSize = sizeof ( uint32_t ) ;
* ResponseSize = sizeof ( uint32_t ) ;
/* Indicate maximum overall buffer (Ethernet frame and RNDIS header) the adapter can handle */
/* Indicate maximum overall buffer (Ethernet frame and RNDIS header) the adapter can handle */
* ( ( uint32_t * ) ResponseData ) = ( RNDIS_MESSAGE_BUFFER_SIZE + ETHERNET_FRAME_SIZE_MAX ) ;
* ( ( uint32_t * ) ResponseData ) = CPU_TO_LE32 ( RNDIS_MESSAGE_BUFFER_SIZE + ETHERNET_FRAME_SIZE_MAX ) ;
return true ;
return true ;
default :
default :
@ -433,8 +432,8 @@ static bool RNDIS_Device_ProcessNDISSet(USB_ClassInfo_RNDIS_Device_t* const RNDI
switch ( OId )
switch ( OId )
{
{
case OID_GEN_CURRENT_PACKET_FILTER :
case OID_GEN_CURRENT_PACKET_FILTER :
RNDISInterfaceInfo - > State . CurrPacketFilter = * ( ( uint32_t * ) SetData ) ;
RNDISInterfaceInfo - > State . CurrPacketFilter = le32_to_cpu ( * ( ( uint32_t * ) SetData ) ) ;
RNDISInterfaceInfo - > State . CurrRNDISState = ( ( RNDISInterfaceInfo - > State . CurrPacketFilter ) ?
RNDISInterfaceInfo - > State . CurrRNDISState = le32_to_cpu ( ( RNDISInterfaceInfo - > State . CurrPacketFilter ) ?
RNDIS_Data_Initialized : RNDIS_Data_Initialized ) ;
RNDIS_Data_Initialized : RNDIS_Data_Initialized ) ;
return true ;
return true ;
@ -479,16 +478,16 @@ uint8_t RNDIS_Device_ReadPacket(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfa
RNDIS_Packet_Message_t RNDISPacketHeader ;
RNDIS_Packet_Message_t RNDISPacketHeader ;
Endpoint_Read_Stream_LE ( & RNDISPacketHeader , sizeof ( RNDIS_Packet_Message_t ) , NULL ) ;
Endpoint_Read_Stream_LE ( & RNDISPacketHeader , sizeof ( RNDIS_Packet_Message_t ) , NULL ) ;
if ( RNDISPacketHeader . DataLength > ETHERNET_FRAME_SIZE_MAX )
if ( le32_to_cpu ( RNDISPacketHeader . DataLength ) > ETHERNET_FRAME_SIZE_MAX )
{
{
Endpoint_StallTransaction ( ) ;
Endpoint_StallTransaction ( ) ;
return RNDIS_ERROR_LOGICAL_CMD_FAILED ;
return RNDIS_ERROR_LOGICAL_CMD_FAILED ;
}
}
* PacketLength = ( uint16_t ) RNDISPacketHeader . DataLength ;
* PacketLength = ( uint16_t ) le32_to_cpu ( RNDISPacketHeader . DataLength ) ;
Endpoint_Read_Stream_LE ( Buffer , RNDIS PacketHeader. Data Length, NULL ) ;
Endpoint_Read_Stream_LE ( Buffer , * PacketLength, NULL ) ;
Endpoint_ClearOUT ( ) ;
Endpoint_ClearOUT ( ) ;
return ENDPOINT_RWSTREAM_NoError ;
return ENDPOINT_RWSTREAM_NoError ;
@ -515,10 +514,10 @@ uint8_t RNDIS_Device_SendPacket(USB_ClassInfo_RNDIS_Device_t* const RNDISInterfa
memset ( & RNDISPacketHeader , 0 , sizeof ( RNDIS_Packet_Message_t ) ) ;
memset ( & RNDISPacketHeader , 0 , sizeof ( RNDIS_Packet_Message_t ) ) ;
RNDISPacketHeader . MessageType = REMOTE_NDIS_PACKET_MSG ;
RNDISPacketHeader . MessageType = CPU_TO_LE32 ( REMOTE_NDIS_PACKET_MSG ) ;
RNDISPacketHeader . MessageLength = ( sizeof ( RNDIS_Packet_Message_t ) + PacketLength ) ;
RNDISPacketHeader . MessageLength = cpu_to_le32 ( sizeof ( RNDIS_Packet_Message_t ) + PacketLength ) ;
RNDISPacketHeader . DataOffset = ( sizeof ( RNDIS_Packet_Message_t ) - sizeof ( RNDIS_Message_Header_t ) ) ;
RNDISPacketHeader . DataOffset = CPU_TO_LE32 ( sizeof ( RNDIS_Packet_Message_t ) - sizeof ( RNDIS_Message_Header_t ) ) ;
RNDISPacketHeader . DataLength = PacketLength ;
RNDISPacketHeader . DataLength = cpu_to_le32 ( PacketLength ) ;
Endpoint_Write_Stream_LE ( & RNDISPacketHeader , sizeof ( RNDIS_Packet_Message_t ) , NULL ) ;
Endpoint_Write_Stream_LE ( & RNDISPacketHeader , sizeof ( RNDIS_Packet_Message_t ) , NULL ) ;
Endpoint_Write_Stream_LE ( Buffer , PacketLength , NULL ) ;
Endpoint_Write_Stream_LE ( Buffer , PacketLength , NULL ) ;