mirror of https://github.com/acidanthera/audk.git
885 lines
35 KiB
C
885 lines
35 KiB
C
/** @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
|
|
|
|
// Type Values for the DescriptorType Field
|
|
#define CS_INTERFACE 0x24
|
|
#define CS_ENDPOINT 0x25
|
|
|
|
// 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
|