TianoCore EDK2 master
|
#include "UsbRndis.h"
Go to the source code of this file.
Variables | |
UINT16 | gStopBulkInCnt = 0 |
UINT16 | gBlockBulkInCnt = 0 |
BIT_MAP | gTable [] |
This file contains code for USB Ethernet descriptor and specific requests implement.
Copyright (c) 2023, American Megatrends International LLC. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file UsbRndisFunction.c.
Converts PXE filter settings to RNDIS values
[in] | Value | PXE filter data. |
[out] | CdcFilter | A pointer to the Ethernet Packet Filter Bitmap value converted by PXE_OPFLAGS. |
Definition at line 796 of file UsbRndisFunction.c.
VOID GetEndpoint | ( | IN EFI_USB_IO_PROTOCOL * | UsbIo, |
IN OUT USB_RNDIS_DEVICE * | UsbRndisDevice | ||
) |
Get USB Ethernet IO endpoint and USB CDC data IO endpoint.
[in] | UsbIo | A pointer to the EFI_USB_IO_PROTOCOL instance. |
[in,out] | UsbRndisDevice | A pointer to the USB_RNDIS_DEVICE instance. |
Definition at line 169 of file UsbRndisFunction.c.
EFI_STATUS GetFunctionalDescriptor | ( | IN EFI_USB_CONFIG_DESCRIPTOR * | Config, |
IN UINT8 | FunDescriptorType, | ||
OUT VOID * | DataBuffer | ||
) |
Read Function descriptor
[in] | Config | A pointer to all of configuration. |
[in] | FunDescriptorType | USB CDC class descriptor SubType. |
[out] | DataBuffer | A pointer to the Data of corresponding to device capability. |
EFI_SUCCESS | The device capability descriptor was retrieved successfully. |
EFI_UNSUPPORTED | No supported. |
EFI_NOT_FOUND | The device capability descriptor was not found. |
Definition at line 112 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI GetRndisStatistic | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
IN UINT16 | FeatureSelector, | ||
OUT VOID * | Statistic | ||
) |
This request is used to retrieve a statistic based on the feature selector.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[in] | FeatureSelector | Value of the feature selector. |
[out] | Statistic | A pointer to the 32 bit unsigned integer. |
EFI_SUCCESS | The request executed successfully. |
EFI_TIMEOUT | A timeout occurred executing the request. |
EFI_DEVICE_ERROR | The request failed due to a device error. |
EFI_INVALID_PARAMETER | One of the parameters has an invalid value. |
EFI_UNSUPPORTED | Not supported. |
Definition at line 929 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI GetUsbEthMacAddress | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
OUT EFI_MAC_ADDRESS * | MacAddress | ||
) |
Retrieves the USB Ethernet Mac Address.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[out] | MacAddress | A pointer to the caller allocated USB Ethernet Mac Address. |
EFI_SUCCESS | The USB Header Functional descriptor was retrieved successfully. |
EFI_INVALID_PARAMETER | UsbHeaderFunDescriptor is NULL. |
EFI_NOT_FOUND | The USB Header Functional descriptor was not found. |
Definition at line 382 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI GetUsbHeaderFunDescriptor | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
OUT USB_HEADER_FUN_DESCRIPTOR * | UsbHeaderFunDescriptor | ||
) |
Retrieves the USB Header functional Descriptor.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[out] | UsbHeaderFunDescriptor | A pointer to the caller allocated USB Header Functional Descriptor. |
EFI_SUCCESS | The USB Header Functional descriptor was retrieved successfully. |
EFI_INVALID_PARAMETER | UsbHeaderFunDescriptor is NULL. |
EFI_NOT_FOUND | The USB Header Functional descriptor was not found. |
Definition at line 532 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI GetUsbRndisFunDescriptor | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
OUT USB_ETHERNET_FUN_DESCRIPTOR * | UsbEthFunDescriptor | ||
) |
Retrieves the USB Ethernet functional Descriptor.
This function get the Mac Address, Ethernet statistics, maximum segment size, number of multicast filters, and number of pattern filters from Ethernet functional Descriptor.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[out] | UsbEthFunDescriptor | A pointer to the caller allocated USB Ethernet Functional Descriptor. |
EFI_SUCCESS | The USB Ethernet Functional descriptor was retrieved successfully. |
EFI_INVALID_PARAMETER | UsbEthFunDescriptor is NULL. |
EFI_NOT_FOUND | The USB Ethernet Functional descriptor was not found. |
Definition at line 606 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI GetUsbRndisPowerFilter | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
IN UINT16 | Value, | ||
OUT BOOLEAN * | PatternActive | ||
) |
This request retrieves the status of the specified Ethernet power management pattern filter from the device.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[in] | Value | The filter number. |
[out] | PatternActive | A pointer to the pattern active boolean. |
EFI_SUCCESS | The request executed successfully. |
EFI_TIMEOUT | A timeout occurred executing the request. |
EFI_DEVICE_ERROR | The request failed due to a device error. |
EFI_INVALID_PARAMETER | One of the parameters has an invalid value. |
EFI_UNSUPPORTED | Not supported. |
Definition at line 750 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI GetUsbUnionFunDescriptor | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
OUT USB_UNION_FUN_DESCRIPTOR * | UsbUnionFunDescriptor | ||
) |
Retrieves the USB Union functional Descriptor.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[out] | UsbUnionFunDescriptor | A pointer to the caller allocated USB Union Functional Descriptor. |
EFI_SUCCESS | The USB Union Functional descriptor was retrieved successfully. |
EFI_INVALID_PARAMETER | UsbUnionFunDescriptor is NULL. |
EFI_NOT_FOUND | The USB Union Functional descriptor was not found. |
Definition at line 567 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI InterruptCallback | ( | IN VOID * | Data, |
IN UINTN | DataLength, | ||
IN VOID * | Context, | ||
IN UINT32 | Status | ||
) |
Async USB transfer callback routine.
[in] | Data | Data received or sent via the USB Asynchronous Transfer, if the transfer completed successfully. |
[in] | DataLength | The length of Data received or sent via the Asynchronous Transfer, if transfer successfully completes. |
[in] | Context | Data passed from UsbAsyncInterruptTransfer() request. |
[in] | Status | Indicates the result of the asynchronous transfer. |
EFI_SUCCESS | The asynchronous USB transfer request has been successfully executed. |
EFI_DEVICE_ERROR | The asynchronous USB transfer request failed. |
Definition at line 239 of file UsbRndisFunction.c.
EFI_STATUS LoadAllDescriptor | ( | IN EFI_USB_IO_PROTOCOL * | UsbIo, |
OUT EFI_USB_CONFIG_DESCRIPTOR ** | ConfigDesc | ||
) |
Load All of device descriptor.
[in] | UsbIo | A pointer to the EFI_USB_IO_PROTOCOL instance. |
[out] | ConfigDesc | A pointer to the configuration descriptor. |
EFI_SUCCESS | The request executed successfully. |
EFI_OUT_OF_RESOURCES | The request could not be completed because the buffer specified by DescriptorLength and Descriptor is not large enough to hold the result of the request. |
EFI_TIMEOUT | A timeout occurred executing the request. |
EFI_DEVICE_ERROR | The request failed due to a device error. The transfer status is returned in Status. |
Definition at line 29 of file UsbRndisFunction.c.
BOOLEAN NextDescriptor | ( | IN EFI_USB_CONFIG_DESCRIPTOR * | Desc, |
IN OUT UINTN * | Offset | ||
) |
Returns pointer to the next descriptor for the pack of USB descriptors located in continues memory segment
[in] | Desc | A pointer to the CONFIG_DESCRIPTOR instance. |
[in,out] | Offset | A pointer to the sum of descriptor length. |
TRUE | The request executed successfully. |
FALSE | No next descriptor. |
Definition at line 77 of file UsbRndisFunction.c.
VOID PrintRndisMsg | ( | IN REMOTE_NDIS_MSG_HEADER * | RndisMsg | ) |
Prints RNDIS Header and Data
[in] | RndisMsg | A pointer to the REMOTE_NDIS_MSG_HEADER data. |
Definition at line 1635 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI ReadRndisResponseInterrupt | ( | IN USB_RNDIS_DEVICE * | UsbRndisDevice | ) |
This function is used to read USB interrupt transfer before the response RNDIS message.
[in] | UsbRndisDevice | A pointer to the USB_RNDIS_DEVICE instance. |
EFI_SUCCESS | The USB interrupt transfer has been successfully executed. |
EFI_DEVICE_ERROR | The USB interrupt transfer failed. |
Definition at line 344 of file UsbRndisFunction.c.
EFI_STATUS RndisControlMsg | ( | IN USB_RNDIS_DEVICE * | UsbRndisDevice, |
IN REMOTE_NDIS_MSG_HEADER * | RndisMsg, | ||
OUT REMOTE_NDIS_MSG_HEADER * | RndisMsgResponse | ||
) |
This function send the RNDIS command through the device's control endpoint
[in] | UsbRndisDevice | A pointer to the USB_RNDIS_DEVICE instance. |
[in] | RndisMsg | A pointer to the REMOTE_NDIS_MSG_HEADER data. |
[out] | RndisMsgResponse | A pointer to the REMOTE_NDIS_MSG_HEADER data for getting responses. |
EFI_SUCCESS | The bulk transfer has been successfully executed. |
Definition at line 1433 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisDummyReturn | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
This is a dummy function which just returns. Unimplemented EDKII_USB_ETHERNET_PROTOCOL functions point to this function.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 1413 of file UsbRndisFunction.c.
EFI_STATUS RndisReceiveDataMsg | ( | IN USB_RNDIS_DEVICE * | UsbRndisDevice, |
IN OUT REMOTE_NDIS_MSG_HEADER * | RndisMsg, | ||
IN OUT UINTN * | TransferLength | ||
) |
This function send the RNDIS command through the device's Data endpoint
[in] | UsbRndisDevice | A pointer to the USB_RNDIS_DEVICE instance. |
[in,out] | RndisMsg | A pointer to the REMOTE_NDIS_MSG_HEADER to send out. |
[in,out] | TransferLength | The length of the RndisMsg data to transfer. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 1581 of file UsbRndisFunction.c.
EFI_STATUS RndisTransmitDataMsg | ( | IN USB_RNDIS_DEVICE * | UsbRndisDevice, |
IN REMOTE_NDIS_MSG_HEADER * | RndisMsg, | ||
IN OUT UINTN * | TransferLength | ||
) |
This function send the RNDIS command through the device's Data endpoint
[in] | UsbRndisDevice | A pointer to the USB_RNDIS_DEVICE instance. |
[in] | RndisMsg | A pointer to the REMOTE_NDIS_MSG_HEADER to send out. |
[in,out] | TransferLength | The length of the RndisMsg data to transfer. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 1539 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiGetConfigInfo | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
This function is called when RndisUndiGetConfigInfo is invoked.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 1042 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiGetInitInfo | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
This function is called when UndiGetInitInfo is invoked.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 1004 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiGetStatus | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
Update the Media connection.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 1218 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiInitialize | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
This function is called when UndiInitialize is invoked.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
EFI_UNSUPPORTED | Not supported. |
Definition at line 1063 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiReceive | ( | IN PXE_CDB * | Cdb, |
IN EDKII_USB_ETHERNET_PROTOCOL * | This, | ||
IN OUT VOID * | BulkInData, | ||
IN OUT UINTN * | DataLength | ||
) |
Receives and removes RNDIS header and returns the raw data.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[in,out] | BulkInData | A pointer to the buffer of data that will be transmitted to USB device or received from USB device. |
[in,out] | DataLength | A pointer to the PacketLength. |
EFI_SUCCESS | The request executed successfully. |
EFI_BUFFER_TOO_SMALL | The user provided buffer is too small |
EFI_NOT_FOUND | No buffer was found in the list. |
Definition at line 1304 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiReceiveFilter | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
Updates Filter settings on the device.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_STATUS |
Definition at line 825 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiReset | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
This function is called when UndiReset is invoked.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
EFI_DEVICE_ERROR | The request failed due to a device error. |
Definition at line 1130 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiShutdown | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
This function is called when UndiShutdown is invoked.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 1177 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiStart | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
This function is called when UndiStart is invoked.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 949 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiStop | ( | IN PXE_CDB * | Cdb, |
IN NIC_DATA * | Nic | ||
) |
This function is called when Undistop is invoked.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | Nic | A pointer to the Network interface controller data. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 984 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI RndisUndiTransmit | ( | IN PXE_CDB * | Cdb, |
IN EDKII_USB_ETHERNET_PROTOCOL * | This, | ||
IN VOID * | BulkOutData, | ||
IN OUT UINTN * | DataLength | ||
) |
Transmit the data after appending RNDIS header.
[in] | Cdb | A pointer to the command descriptor block. |
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[in] | BulkOutData | A pointer to the buffer of data that will be transmitted to USB device or received from USB device. |
[in,out] | DataLength | A pointer to the PacketLength. |
EFI_SUCCESS | The request executed successfully. |
Definition at line 1241 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI SetUsbRndisMcastFilter | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
IN UINT16 | Value, | ||
IN VOID * | McastAddr | ||
) |
This request sets the Ethernet device multicast filters as specified in the sequential list of 48 bit Ethernet multicast addresses.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[in] | Value | Number of filters. |
[in] | McastAddr | A pointer to the value of the multicast addresses. |
EFI_SUCCESS | The request executed successfully. |
EFI_TIMEOUT | A timeout occurred executing the request. |
EFI_DEVICE_ERROR | The request failed due to a device error. |
EFI_INVALID_PARAMETER | One of the parameters has an invalid value. |
EFI_UNSUPPORTED | Not supported. |
Definition at line 645 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI SetUsbRndisPacketFilter | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
IN UINT16 | Value | ||
) |
This request is used to configure device Ethernet packet filter settings.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[in] | Value | Packet Filter Bitmap. |
EFI_SUCCESS | The request executed successfully. |
EFI_TIMEOUT | A timeout occurred executing the request. |
EFI_DEVICE_ERROR | The request failed due to a device error. |
EFI_INVALID_PARAMETER | One of the parameters has an invalid value. |
EFI_UNSUPPORTED | Not supported. |
Definition at line 905 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI SetUsbRndisPowerFilter | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
IN UINT16 | Value, | ||
IN UINT16 | Length, | ||
IN VOID * | PatternFilter | ||
) |
This request sets up the specified Ethernet power management pattern filter as described in the data structure.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[in] | Value | Number of filters. |
[in] | Length | Size of the power management pattern filter data. |
[in] | PatternFilter | A pointer to the power management pattern filter structure. |
EFI_SUCCESS | The request executed successfully. |
EFI_TIMEOUT | A timeout occurred executing the request. |
EFI_DEVICE_ERROR | The request failed due to a device error. |
EFI_INVALID_PARAMETER | One of the parameters has an invalid value. |
EFI_UNSUPPORTED | Not supported. |
Definition at line 703 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI UsbEthBulkSize | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
OUT UINTN * | BulkSize | ||
) |
Retrieves the USB Ethernet Bulk transfer data size.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[out] | BulkSize | A pointer to the Bulk transfer data size. |
EFI_SUCCESS | The bulk transfer data size was retrieved successfully. |
other | Failed to retrieve the bulk transfer data size. |
Definition at line 473 of file UsbRndisFunction.c.
EFI_STATUS EFIAPI UsbRndisInterrupt | ( | IN EDKII_USB_ETHERNET_PROTOCOL * | This, |
IN BOOLEAN | IsNewTransfer, | ||
IN UINTN | PollingInterval, | ||
IN EFI_USB_DEVICE_REQUEST * | Requst | ||
) |
This function is used to manage a USB device with an interrupt transfer pipe.
[in] | This | A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. |
[in] | IsNewTransfer | If TRUE, a new transfer will be submitted to USB controller. If FALSE, the interrupt transfer is deleted from the device's interrupt transfer queue. |
[in] | PollingInterval | Indicates the periodic rate, in milliseconds, that the transfer is to be executed.This parameter is required when IsNewTransfer is TRUE. The value must be between 1 to 255, otherwise EFI_INVALID_PARAMETER is returned. The units are in milliseconds. |
[in] | Requst | A pointer to the EFI_USB_DEVICE_REQUEST data. |
EFI_SUCCESS | The asynchronous USB transfer request transfer has been successfully executed. |
EFI_DEVICE_ERROR | The asynchronous USB transfer request failed. |
Definition at line 280 of file UsbRndisFunction.c.
UINT16 gBlockBulkInCnt = 0 |
Definition at line 12 of file UsbRndisFunction.c.
UINT16 gStopBulkInCnt = 0 |
Definition at line 11 of file UsbRndisFunction.c.
BIT_MAP gTable[] |
Definition at line 779 of file UsbRndisFunction.c.