| /** @file | |
| Header file contains code for USB Ethernet Protocol | |
| definitions | |
| Copyright (c) 2023, American Megatrends International LLC. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef USB_ETHERNET_PROTOCOL_H_ | |
| #define USB_ETHERNET_PROTOCOL_H_ | |
| #define EDKII_USB_ETHERNET_PROTOCOL_GUID \ | |
| {0x8d8969cc, 0xfeb0, 0x4303, {0xb2, 0x1a, 0x1f, 0x11, 0x6f, 0x38, 0x56, 0x43}} | |
| typedef struct _EDKII_USB_ETHERNET_PROTOCOL EDKII_USB_ETHERNET_PROTOCOL; | |
| #define USB_CDC_CLASS 0x02 | |
| #define USB_CDC_ACM_SUBCLASS 0x02 | |
| #define USB_CDC_ECM_SUBCLASS 0x06 | |
| #define USB_CDC_NCM_SUBCLASS 0x0D | |
| #define USB_CDC_DATA_CLASS 0x0A | |
| #define USB_CDC_DATA_SUBCLASS 0x00 | |
| #define USB_NO_CLASS_PROTOCOL 0x00 | |
| #define USB_NCM_NTB_PROTOCOL 0x01 | |
| #define USB_VENDOR_PROTOCOL 0xFF | |
| #define USB_MISC_CLASS 0xEF | |
| #define USB_RNDIS_SUBCLASS 0x04 | |
| #define USB_RNDIS_ETHERNET_PROTOCOL 0x01 | |
| // Descriptor SubType in Functional Descriptors | |
| #define HEADER_FUN_DESCRIPTOR 0x00 | |
| #define UNION_FUN_DESCRIPTOR 0x06 | |
| #define ETHERNET_FUN_DESCRIPTOR 0x0F | |
| #define MAX_LAN_INTERFACE 0x10 | |
| // Table 20: Class-Specific Notification Codes | |
| #define USB_CDC_NETWORK_CONNECTION 0x00 | |
| // 6.3.1 NetworkConnection | |
| #define NETWORK_CONNECTED 0x01 | |
| #define NETWORK_DISCONNECT 0x00 | |
| #define MAC_FILTERS_MASK 0x7FFF | |
| // USB Header functional Descriptor | |
| typedef struct { | |
| UINT8 FunctionLength; | |
| UINT8 DescriptorType; | |
| UINT8 DescriptorSubtype; | |
| UINT16 BcdCdc; | |
| } USB_HEADER_FUN_DESCRIPTOR; | |
| // USB Union Functional Descriptor | |
| typedef struct { | |
| UINT8 FunctionLength; | |
| UINT8 DescriptorType; | |
| UINT8 DescriptorSubtype; | |
| UINT8 MasterInterface; | |
| UINT8 SlaveInterface; | |
| } USB_UNION_FUN_DESCRIPTOR; | |
| // USB Ethernet Functional Descriptor | |
| typedef struct { | |
| UINT8 FunctionLength; | |
| UINT8 DescriptorType; | |
| UINT8 DescriptorSubtype; | |
| UINT8 MacAddress; | |
| UINT32 EthernetStatistics; | |
| UINT16 MaxSegmentSize; | |
| UINT16 NumberMcFilters; | |
| UINT8 NumberPowerFilters; | |
| } USB_ETHERNET_FUN_DESCRIPTOR; | |
| typedef struct { | |
| UINT32 UsBitRate; | |
| UINT32 DsBitRate; | |
| } USB_CONNECT_SPEED_CHANGE; | |
| // Request Type Codes for USB Ethernet | |
| #define USB_ETHERNET_GET_REQ_TYPE 0xA1 | |
| #define USB_ETHERNET_SET_REQ_TYPE 0x21 | |
| // Class-Specific Request Codes for Ethernet subclass | |
| // USB ECM 1.2 specification, Section 6.2 | |
| #define SET_ETH_MULTICAST_FILTERS_REQ 0x40 | |
| #define SET_ETH_POWER_MANAGEMENT_PATTERN_FILTER_REQ 0x41 | |
| #define GET_ETH_POWER_MANAGEMENT_PATTERN_FILTER_REQ 0x42 | |
| #define SET_ETH_PACKET_FILTER_REQ 0x43 | |
| #define GET_ETH_STATISTIC_REQ 0x44 | |
| // USB ECM command request length | |
| #define USB_ETH_POWER_FILTER_LENGTH 2 // Section 6.2.3 | |
| #define USB_ETH_PACKET_FILTER_LENGTH 0 // Section 6.2.4 | |
| #define USB_ETH_STATISTIC 4 // Section 6.2.5 | |
| // USB Ethernet Packet Filter Bitmap | |
| // USB ECM 1.2 specification, Section 6.2.4 | |
| #define USB_ETH_PACKET_TYPE_PROMISCUOUS BIT0 | |
| #define USB_ETH_PACKET_TYPE_ALL_MULTICAST BIT1 | |
| #define USB_ETH_PACKET_TYPE_DIRECTED BIT2 | |
| #define USB_ETH_PACKET_TYPE_BROADCAST BIT3 | |
| #define USB_ETH_PACKET_TYPE_MULTICAST BIT4 | |
| // USB Ethernet Statistics Feature Selector Codes | |
| // USB ECM 1.2 specification, Section 6.2.5 | |
| #define USB_ETH_XMIT_OK 0x01 | |
| #define USB_ETH_RCV_OK 0x02 | |
| #define USB_ETH_XMIT_ERROR 0x03 | |
| #define USB_ETH_RCV_ERROR 0x04 | |
| #define USB_ETH_RCV_NO_BUFFER 0x05 | |
| #define USB_ETH_DIRECTED_BYTES_XMIT 0x06 | |
| #define USB_ETH_DIRECTED_FRAMES_XMIT 0x07 | |
| #define USB_ETH_MULTICAST_BYTES_XMIT 0x08 | |
| #define USB_ETH_MULTICAST_FRAMES_XMIT 0x09 | |
| #define USB_ETH_BROADCAST_BYTES_XMIT 0x0A | |
| #define USB_ETH_BROADCAST_FRAMES_XMIT 0x0B | |
| #define USB_ETH_DIRECTED_BYTES_RCV 0x0C | |
| #define USB_ETH_DIRECTED_FRAMES_RCV 0x0D | |
| #define USB_ETH_MULTICAST_BYTES_RCV 0x0E | |
| #define USB_ETH_MULTICAST_FRAMES_RCV 0x0F | |
| #define USB_ETH_BROADCAST_BYTES_RCV 0x10 | |
| #define USB_ETH_BROADCAST_FRAMES_RCV 0x11 | |
| #define USB_ETH_RCV_CRC_ERROR 0x12 | |
| #define USB_ETH_TRANSMIT_QUEUE_LENGTH 0x13 | |
| #define USB_ETH_RCV_ERROR_ALIGNMENT 0x14 | |
| #define USB_ETH_XMIT_ONE_COLLISION 0x15 | |
| #define USB_ETH_XMIT_MORE_COLLISIONS 0x16 | |
| #define USB_ETH_XMIT_DEFERRED 0x17 | |
| #define USB_ETH_XMIT_MAX_COLLISIONS 0x18 | |
| #define USB_ETH_RCV_OVERRUN 0x19 | |
| #define USB_ETH_XMIT_UNDERRUN 0x1A | |
| #define USB_ETH_XMIT_HEARTBEAT_FAILURE 0x1B | |
| #define USB_ETH_XMIT_TIMES_CRS_LOST 0x1C | |
| #define USB_ETH_XMIT_LATE_COLLISIONS 0x1D | |
| // NIC Information | |
| typedef struct { | |
| UINT32 Signature; | |
| EDKII_USB_ETHERNET_PROTOCOL *UsbEth; | |
| UINT16 InterrupOpFlag; | |
| UINT64 MappedAddr; | |
| PXE_MAC_ADDR McastList[MAX_MCAST_ADDRESS_CNT]; | |
| UINT8 McastCount; | |
| UINT64 MediaHeader[MAX_XMIT_BUFFERS]; | |
| UINT8 TxBufferCount; | |
| UINT16 State; | |
| BOOLEAN CanTransmit; | |
| UINT16 ReceiveStatus; | |
| UINT8 RxFilter; | |
| UINT32 RxFrame; | |
| UINT32 TxFrame; | |
| UINT16 NetworkConnect; | |
| UINT8 CableDetect; | |
| UINT16 MaxSegmentSize; | |
| EFI_MAC_ADDRESS MacAddr; | |
| PXE_CPB_START_31 PxeStart; | |
| PXE_CPB_INITIALIZE PxeInit; | |
| UINT8 PermNodeAddress[PXE_MAC_LENGTH]; | |
| UINT8 CurrentNodeAddress[PXE_MAC_LENGTH]; | |
| UINT8 BroadcastNodeAddress[PXE_MAC_LENGTH]; | |
| EFI_USB_DEVICE_REQUEST Request; | |
| EFI_EVENT RateLimiter; | |
| UINT32 RateLimitingCredit; | |
| UINT32 RateLimitingCreditCount; | |
| UINT32 RateLimitingPollTimer; | |
| BOOLEAN RateLimitingEnable; | |
| } NIC_DATA; | |
| #define NIC_DATA_SIGNATURE SIGNATURE_32('n', 'i', 'c', 'd') | |
| #define NIC_DATA_FROM_EDKII_USB_ETHERNET_PROTOCOL(a) CR (a, NIC_DATA, UsbEth, NIC_DATA_SIGNATURE) | |
| /** | |
| This command is used to determine the operational state of the UNDI. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_GET_STATE)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to change the UNDI operational state from stopped to started. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_START)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to change the UNDI operational state from started to stopped. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_STOP)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to retrieve initialization information that is | |
| needed by drivers and applications to initialized UNDI. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_GET_INIT_INFO)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to retrieve configuration information about | |
| the NIC being controlled by the UNDI. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_GET_CONFIG_INFO)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command resets the network adapter and initializes UNDI using | |
| the parameters supplied in the CPB. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_INITIALIZE)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command resets the network adapter and reinitializes the UNDI | |
| with the same parameters provided in the Initialize command. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_RESET)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| The Shutdown command resets the network adapter and leaves it in a | |
| safe state for another driver to initialize. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_SHUTDOWN)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| The Interrupt Enables command can be used to read and/or change | |
| the current external interrupt enable settings. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_INTERRUPT_ENABLE)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to read and change receive filters and, | |
| if supported, read and change the multicast MAC address filter list. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_RECEIVE_FILTER)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to get current station and broadcast MAC addresses | |
| and, if supported, to change the current station MAC address. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_STATION_ADDRESS)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to read and clear the NIC traffic statistics. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_STATISTICS)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| Translate a multicast IPv4 or IPv6 address to a multicast MAC address. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_MCAST_IPTOMAC)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to read and write (if supported by NIC H/W) | |
| nonvolatile storage on the NIC. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_NV_DATA)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command returns the current interrupt status and/or the | |
| transmitted buffer addresses and the current media status. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_GET_STATUS)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to fill the media header(s) in transmit packet(s). | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_FILL_HEADER)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| The Transmit command is used to place a packet into the transmit queue. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_TRANSMIT)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| When the network adapter has received a frame, this command is used | |
| to copy the frame into driver/application storage. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_UNDI_RECEIVE)( | |
| IN PXE_CDB *Cdb, | |
| IN NIC_DATA *Nic | |
| ); | |
| /** | |
| This command resets the network adapter and initializes UNDI using | |
| the parameters supplied in the CPB. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in, out] Nic A pointer to the Network interface controller data. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_INITIALIZE)( | |
| IN PXE_CDB *Cdb, | |
| IN OUT NIC_DATA *Nic | |
| ); | |
| /** | |
| This command is used to read and clear the NIC traffic statistics. | |
| @param[in] Nic A pointer to the Network interface controller data. | |
| @param[in] DbAddr Data Block Address. | |
| @param[in] DbSize Data Block Size. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_STATISTICS)( | |
| IN NIC_DATA *Nic, | |
| IN UINT64 DbAddr, | |
| IN UINT16 DbSize | |
| ); | |
| /** | |
| This function is used to manage a USB device with the bulk transfer pipe. The endpoint is Bulk in. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[in, out] Packet A pointer to the buffer of data that will be transmitted to USB | |
| device or received from USB device. | |
| @param[in, out] PacketLength A pointer to the PacketLength. | |
| @retval EFI_SUCCESS The bulk transfer has been successfully executed. | |
| @retval EFI_DEVICE_ERROR The transfer failed. The transfer status is returned in status. | |
| @retval EFI_INVALID_PARAMETER One or more parameters are invalid. | |
| @retval EFI_OUT_OF_RESOURCES The request could not be submitted due to a lack of resources. | |
| @retval EFI_TIMEOUT The control transfer fails due to timeout. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_RECEIVE)( | |
| IN PXE_CDB *Cdb, | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| IN OUT VOID *Packet, | |
| IN OUT UINTN *PacketLength | |
| ); | |
| /** | |
| This function is used to manage a USB device with the bulk transfer pipe. The endpoint is Bulk out. | |
| @param[in] Cdb A pointer to the command descriptor block. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[in, out] Packet A pointer to the buffer of data that will be transmitted to USB | |
| device or received from USB device. | |
| @param[in, out] PacketLength A pointer to the PacketLength. | |
| @retval EFI_SUCCESS The bulk transfer has been successfully executed. | |
| @retval EFI_DEVICE_ERROR The transfer failed. The transfer status is returned in status. | |
| @retval EFI_INVALID_PARAMETER One or more parameters are invalid. | |
| @retval EFI_OUT_OF_RESOURCES The request could not be submitted due to a lack of resources. | |
| @retval EFI_TIMEOUT The control transfer fails due to timeout. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_TRANSMIT)( | |
| IN PXE_CDB *Cdb, | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| IN OUT VOID *Packet, | |
| IN OUT UINTN *PacketLength | |
| ); | |
| /** | |
| This function is used to manage a USB device with an interrupt transfer pipe. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[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. | |
| @param[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. | |
| @param[in] Request A pointer to the EFI_USB_DEVICE_REQUEST data. | |
| @retval EFI_SUCCESS The asynchronous USB transfer request transfer has been successfully executed. | |
| @retval EFI_DEVICE_ERROR The asynchronous USB transfer request failed. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_INTERRUPT)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| IN BOOLEAN IsNewTransfer, | |
| IN UINTN PollingInterval, | |
| IN EFI_USB_DEVICE_REQUEST *Request | |
| ); | |
| /** | |
| Retrieves the USB Ethernet Mac Address. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[out] MacAddress A pointer to the caller allocated USB Ethernet Mac Address. | |
| @retval EFI_SUCCESS The USB Header Functional descriptor was retrieved successfully. | |
| @retval EFI_INVALID_PARAMETER UsbHeaderFunDescriptor is NULL. | |
| @retval EFI_NOT_FOUND The USB Header Functional descriptor was not found. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_GET_ETH_MAC_ADDRESS)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| OUT EFI_MAC_ADDRESS *MacAddress | |
| ); | |
| /** | |
| Retrieves the USB Ethernet Bulk transfer data size. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[out] BulkSize A pointer to the Bulk transfer data size. | |
| @retval EFI_SUCCESS The USB Header Functional descriptor was retrieved successfully. | |
| @retval EFI_INVALID_PARAMETER UsbHeaderFunDescriptor is NULL. | |
| @retval EFI_NOT_FOUND The USB Header Functional descriptor was not found. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETH_MAX_BULK_SIZE)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| OUT UINTN *BulkSize | |
| ); | |
| /** | |
| Retrieves the USB Header functional Descriptor. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[out] UsbHeaderFunDescriptor A pointer to the caller allocated USB Header Functional Descriptor. | |
| @retval EFI_SUCCESS The USB Header Functional descriptor was retrieved successfully. | |
| @retval EFI_INVALID_PARAMETER UsbHeaderFunDescriptor is NULL. | |
| @retval EFI_NOT_FOUND The USB Header Functional descriptor was not found. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_HEADER_FUNCTIONAL_DESCRIPTOR)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| OUT USB_HEADER_FUN_DESCRIPTOR *UsbHeaderFunDescriptor | |
| ); | |
| /** | |
| Retrieves the USB Union functional Descriptor. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[out] UsbUnionFunDescriptor A pointer to the caller allocated USB Union Functional Descriptor. | |
| @retval EFI_SUCCESS The USB Union Functional descriptor was retrieved successfully. | |
| @retval EFI_INVALID_PARAMETER UsbUnionFunDescriptor is NULL. | |
| @retval EFI_NOT_FOUND The USB Union Functional descriptor was not found. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_UNION_FUNCTIONAL_DESCRIPTOR)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| OUT USB_UNION_FUN_DESCRIPTOR *UsbUnionFunDescriptor | |
| ); | |
| /** | |
| Retrieves the USB Ethernet functional Descriptor. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[out] UsbEthFunDescriptor A pointer to the caller allocated USB Ethernet Functional Descriptor. | |
| @retval EFI_SUCCESS The USB Ethernet Functional descriptor was retrieved successfully. | |
| @retval EFI_INVALID_PARAMETER UsbEthFunDescriptor is NULL. | |
| @retval EFI_NOT_FOUND The USB Ethernet Functional descriptor was not found. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_FUNCTIONAL_DESCRIPTOR)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| OUT USB_ETHERNET_FUN_DESCRIPTOR *UsbEthFunDescriptor | |
| ); | |
| /** | |
| This request sets the Ethernet device multicast filters as specified in the | |
| sequential list of 48 bit Ethernet multicast addresses. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[in] Value Number of filters. | |
| @param[in] McastAddr A pointer to the value of the multicast addresses. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_SET_ETH_MULTICAST_FILTERS)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| IN UINT16 Value, | |
| IN VOID *McastAddr | |
| ); | |
| /** | |
| This request sets up the specified Ethernet power management pattern filter as | |
| described in the data structure. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[in] Value Number of filters. | |
| @param[in] Length Size of the power management pattern filter data. | |
| @param[in] PatternFilter A pointer to the power management pattern filter structure. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_SET_ETH_POWER_MANAGE_PATTERN_FILTER)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| IN UINT16 Value, | |
| IN UINT16 Length, | |
| IN VOID *PatternFilter | |
| ); | |
| /** | |
| This request retrieves the status of the specified Ethernet power management | |
| pattern filter from the device. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[in] Value The filter number. | |
| @param[out] PatternActive A pointer to the pattern active boolean. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_GET_ETH_POWER_MANAGE_PATTERN_FILTER)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| IN UINT16 Value, | |
| OUT BOOLEAN *PatternActive | |
| ); | |
| /** | |
| This request is used to configure device Ethernet packet filter settings. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[in] Value Packet Filter Bitmap. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_SET_ETH_PACKET_FILTER)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| IN UINT16 Value | |
| ); | |
| /** | |
| This request is used to retrieve a statistic based on the feature selector. | |
| @param[in] This A pointer to the EDKII_USB_ETHERNET_PROTOCOL instance. | |
| @param[in] FeatureSelector Value of the feature selector. | |
| @param[out] Statistic A pointer to the 32 bit unsigned integer. | |
| @retval EFI_SUCCESS The request executed successfully. | |
| @retval EFI_TIMEOUT A timeout occurred executing the request. | |
| @retval EFI_DEVICE_ERROR The request failed due to a device error. | |
| @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. | |
| @retval EFI_UNSUPPORTED Not supported. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EDKII_USB_ETHERNET_GET_ETH_STATISTIC)( | |
| IN EDKII_USB_ETHERNET_PROTOCOL *This, | |
| IN UINT16 FeatureSelector, | |
| OUT VOID *Statistic | |
| ); | |
| typedef struct { | |
| EDKII_USB_ETHERNET_UNDI_GET_STATE UsbEthUndiGetState; | |
| EDKII_USB_ETHERNET_UNDI_START UsbEthUndiStart; | |
| EDKII_USB_ETHERNET_UNDI_STOP UsbEthUndiStop; | |
| EDKII_USB_ETHERNET_UNDI_GET_INIT_INFO UsbEthUndiGetInitInfo; | |
| EDKII_USB_ETHERNET_UNDI_GET_CONFIG_INFO UsbEthUndiGetConfigInfo; | |
| EDKII_USB_ETHERNET_UNDI_INITIALIZE UsbEthUndiInitialize; | |
| EDKII_USB_ETHERNET_UNDI_RESET UsbEthUndiReset; | |
| EDKII_USB_ETHERNET_UNDI_SHUTDOWN UsbEthUndiShutdown; | |
| EDKII_USB_ETHERNET_UNDI_INTERRUPT_ENABLE UsbEthUndiInterruptEnable; | |
| EDKII_USB_ETHERNET_UNDI_RECEIVE_FILTER UsbEthUndiReceiveFilter; | |
| EDKII_USB_ETHERNET_UNDI_STATION_ADDRESS UsbEthUndiStationAddress; | |
| EDKII_USB_ETHERNET_UNDI_STATISTICS UsbEthUndiStatistics; | |
| EDKII_USB_ETHERNET_UNDI_MCAST_IPTOMAC UsbEthUndiMcastIp2Mac; | |
| EDKII_USB_ETHERNET_UNDI_NV_DATA UsbEthUndiNvData; | |
| EDKII_USB_ETHERNET_UNDI_GET_STATUS UsbEthUndiGetStatus; | |
| EDKII_USB_ETHERNET_UNDI_FILL_HEADER UsbEthUndiFillHeader; | |
| EDKII_USB_ETHERNET_UNDI_TRANSMIT UsbEthUndiTransmit; | |
| EDKII_USB_ETHERNET_UNDI_RECEIVE UsbEthUndiReceive; | |
| } EDKII_USB_ETHERNET_UNDI; | |
| // The EDKII_USB_ETHERNET_PROTOCOL provides some basic USB Ethernet device relevant | |
| // descriptor and specific requests. | |
| struct _EDKII_USB_ETHERNET_PROTOCOL { | |
| EDKII_USB_ETHERNET_UNDI UsbEthUndi; | |
| // for calling the UNDI child functions | |
| EDKII_USB_ETHERNET_INITIALIZE UsbEthInitialize; | |
| EDKII_USB_ETHERNET_STATISTICS UsbEthStatistics; | |
| EDKII_USB_ETHERNET_RECEIVE UsbEthReceive; | |
| EDKII_USB_ETHERNET_TRANSMIT UsbEthTransmit; | |
| EDKII_USB_ETHERNET_INTERRUPT UsbEthInterrupt; | |
| EDKII_USB_GET_ETH_MAC_ADDRESS UsbEthMacAddress; | |
| EDKII_USB_ETH_MAX_BULK_SIZE UsbEthMaxBulkSize; | |
| EDKII_USB_HEADER_FUNCTIONAL_DESCRIPTOR UsbHeaderFunDescriptor; | |
| EDKII_USB_UNION_FUNCTIONAL_DESCRIPTOR UsbUnionFunDescriptor; | |
| EDKII_USB_ETHERNET_FUNCTIONAL_DESCRIPTOR UsbEthFunDescriptor; | |
| EDKII_USB_ETHERNET_SET_ETH_MULTICAST_FILTERS SetUsbEthMcastFilter; | |
| EDKII_USB_ETHERNET_SET_ETH_POWER_MANAGE_PATTERN_FILTER SetUsbEthPowerPatternFilter; | |
| EDKII_USB_ETHERNET_GET_ETH_POWER_MANAGE_PATTERN_FILTER GetUsbEthPowerPatternFilter; | |
| EDKII_USB_ETHERNET_SET_ETH_PACKET_FILTER SetUsbEthPacketFilter; | |
| EDKII_USB_ETHERNET_GET_ETH_STATISTIC GetUsbEthStatistic; | |
| }; | |
| extern EFI_GUID gEdkIIUsbEthProtocolGuid; | |
| #endif |