Full USB support
This commit is contained in:
parent
95d92244e7
commit
871b9a9287
2 changed files with 762 additions and 0 deletions
761
protocols/usb.h
Normal file
761
protocols/usb.h
Normal file
|
@ -0,0 +1,761 @@
|
|||
#ifndef EFI_PROTOCOLS_USB_H
|
||||
#define EFI_PROTOCOLS_USB_H
|
||||
|
||||
////
|
||||
// USB I/O Protocol
|
||||
///
|
||||
|
||||
#define EFI_USB_IO_PROTOCOL_GUID {0x2b2f68d6,0x0cd2,0x44cf, {0x8e,0x8b,0xbb,0xa2,0x0b,0x1b,0x5b,0x75}}
|
||||
|
||||
// USB Transfer result error codes
|
||||
#define EFI_USB_NOERROR 0x0000
|
||||
#define EFI_USB_ERR_NOTEXECUTE 0x0001
|
||||
#define EFI_USB_ERR_STALL 0x0002
|
||||
#define EFI_USB_ERR_BUFFER 0x0004
|
||||
#define EFI_USB_ERR_BABBLE 0x0008
|
||||
#define EFI_USB_ERR_NAK 0x0010
|
||||
#define EFI_USB_ERR_CRC 0x0020
|
||||
#define EFI_USB_ERR_TIMEOUT 0x0040
|
||||
#define EFI_USB_ERR_BITSTUFF 0x0080
|
||||
#define EFI_USB_ERR_SYSTEM 0x0100
|
||||
|
||||
typedef struct _EFI_USB_IO_PROTOCOL EFI_USB_IO_PROTOCOL;
|
||||
|
||||
typedef enum {
|
||||
EfiUsbDataIn,
|
||||
EfiUsbDataOut,
|
||||
EfiUsbNoData
|
||||
} EFI_USB_DATA_DIRECTION;
|
||||
|
||||
typedef struct {
|
||||
UINT8 RequestType;
|
||||
UINT8 Request;
|
||||
UINT16 Value;
|
||||
UINT16 Index;
|
||||
UINT16 Length;
|
||||
} EFI_USB_DEVICE_REQUEST;
|
||||
|
||||
typedef struct {
|
||||
UINT8 Length;
|
||||
UINT8 DescriptorType;
|
||||
UINT16 TotalLength;
|
||||
UINT8 NumInterfaces;
|
||||
UINT8 ConfigurationValue;
|
||||
UINT8 Configuration;
|
||||
UINT8 Attributes;
|
||||
UINT8 MaxPower;
|
||||
} EFI_USB_CONFIG_DESCRIPTOR;
|
||||
|
||||
typedef struct {
|
||||
UINT8 Length;
|
||||
UINT8 DescriptorType;
|
||||
UINT8 InterfaceNumber;
|
||||
UINT8 AlternateSetting;
|
||||
UINT8 NumEndpoints;
|
||||
UINT8 InterfaceClass;
|
||||
UINT8 InterfaceSubClass;
|
||||
UINT8 InterfaceProtocol;
|
||||
UINT8 Interface;
|
||||
} EFI_USB_INTERFACE_DESCRIPTOR;
|
||||
|
||||
typedef struct {
|
||||
UINT8 Length;
|
||||
UINT8 DescriptorType;
|
||||
UINT8 EndpointAddress;
|
||||
UINT8 Attributes;
|
||||
UINT16 MaxPacketSize;
|
||||
UINT8 Interval;
|
||||
} EFI_USB_ENDPOINT_DESCRIPTOR;
|
||||
|
||||
typedef struct {
|
||||
UINT8 Length;
|
||||
UINT8 DescriptorType;
|
||||
UINT16 BcdUSB;
|
||||
UINT8 DeviceClass;
|
||||
UINT8 DeviceSubClass;
|
||||
UINT8 DeviceProtocol;
|
||||
UINT8 MaxPacketSize0;
|
||||
UINT16 IdVendor;
|
||||
UINT16 IdProduct;
|
||||
UINT16 BcdDevice;
|
||||
UINT8 StrManufacturer;
|
||||
UINT8 StrProduct;
|
||||
UINT8 StrSerialNumber;
|
||||
UINT8 NumConfigurations;
|
||||
} EFI_USB_DEVICE_DESCRIPTOR;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_CONTROL_TRANSFER)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
IN EFI_USB_DEVICE_REQUEST *Request,
|
||||
IN EFI_USB_DATA_DIRECTION Direction,
|
||||
IN UINT32 Timeout,
|
||||
IN OUT VOID *Data OPTIONAL,
|
||||
IN UINTN DataLength OPTIONAL,
|
||||
OUT UINT32 *Status
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_BULK_TRANSFER)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
IN UINT8 DeviceEndpoint,
|
||||
IN OUT VOID *Data,
|
||||
IN OUT UINTN *DataLength,
|
||||
IN UINTN Timeout,
|
||||
OUT UINT32 *Status
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_ASYNC_USB_TRANSFER_CALLBACK)(
|
||||
IN VOID *Data,
|
||||
IN UINTN DataLength,
|
||||
IN VOID *Context,
|
||||
IN UINT32 Status
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_ASYNC_INTERRUPT_TRANSFER)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
IN UINT8 DeviceEndpoint,
|
||||
IN BOOLEAN IsNewTransfer,
|
||||
IN UINTN PollingInterval OPTIONAL,
|
||||
IN UINTN DataLength OPTIONAL,
|
||||
IN EFI_ASYNC_USB_TRANSFER_CALLBACK InterruptCallBack OPTIONAL,
|
||||
IN VOID *Context OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_SYNC_INTERRUPT_TRANSFER)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
IN UINT8 DeviceEndpoint,
|
||||
IN OUT VOID *Data,
|
||||
IN OUT UINTN *DataLength,
|
||||
IN UINTN Timeout,
|
||||
OUT UINT32 *Status
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_ISOCHRONOUS_TRANSFER)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
IN UINT8 DeviceEndpoint,
|
||||
IN OUT VOID *Data,
|
||||
IN UINTN DataLength,
|
||||
OUT UINT32 *Status
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_ASYNC_ISOCHRONOUS_TRANSFER)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
IN UINT8 DeviceEndpoint,
|
||||
IN OUT VOID *Data,
|
||||
IN UINTN DataLength,
|
||||
IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,
|
||||
IN VOID *Context OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_GET_DEVICE_DESCRIPTOR)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
OUT EFI_USB_DEVICE_DESCRIPTOR *DeviceDescriptor
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_GET_CONFIG_DESCRIPTOR)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
OUT EFI_USB_CONFIG_DESCRIPTOR *ConfigurationDescriptor
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_GET_INTERFACE_DESCRIPTOR)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
OUT EFI_USB_INTERFACE_DESCRIPTOR *InterfaceDescriptor
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_GET_ENDPOINT_DESCRIPTOR)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
IN UINT8 EndpointIndex,
|
||||
OUT EFI_USB_ENDPOINT_DESCRIPTOR *EndpointDescriptor
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_GET_STRING_DESCRIPTOR)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
IN UINT16 LangID,
|
||||
IN UINT8 StringID,
|
||||
OUT CHAR16 **String
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_GET_SUPPORTED_LANGUAGES)(
|
||||
IN EFI_USB_IO_PROTOCOL *This,
|
||||
OUT UINT16 **LangIDTable,
|
||||
OUT UINT16 *TableSize
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB_IO_PORT_RESET)(
|
||||
IN EFI_USB_IO_PROTOCOL *This
|
||||
);
|
||||
|
||||
typedef struct _EFI_USB_IO_PROTOCOL {
|
||||
EFI_USB_IO_CONTROL_TRANSFER UsbControlTransfer;
|
||||
EFI_USB_IO_BULK_TRANSFER UsbBulkTransfer;
|
||||
EFI_USB_IO_ASYNC_INTERRUPT_TRANSFER UsbAsyncInterruptTransfer;
|
||||
EFI_USB_IO_SYNC_INTERRUPT_TRANSFER UsbSyncInterruptTransfer;
|
||||
EFI_USB_IO_ISOCHRONOUS_TRANSFER UsbIsochronousTransfer;
|
||||
EFI_USB_IO_ASYNC_ISOCHRONOUS_TRANSFER UsbAsyncIsochronousTransfer;
|
||||
EFI_USB_IO_GET_DEVICE_DESCRIPTOR UsbGetDeviceDescriptor;
|
||||
EFI_USB_IO_GET_CONFIG_DESCRIPTOR UsbGetConfigDescriptor;
|
||||
EFI_USB_IO_GET_INTERFACE_DESCRIPTOR UsbGetInterfaceDescriptor;
|
||||
EFI_USB_IO_GET_ENDPOINT_DESCRIPTOR UsbGetEndpointDescriptor;
|
||||
EFI_USB_IO_GET_STRING_DESCRIPTOR UsbGetStringDescriptor;
|
||||
EFI_USB_IO_GET_SUPPORTED_LANGUAGES UsbGetSupportedLanguages;
|
||||
EFI_USB_IO_PORT_RESET UsbPortReset;
|
||||
} EFI_USB_IO_PROTOCOL;
|
||||
|
||||
////
|
||||
// USB2 Host Controller Protocol
|
||||
///
|
||||
|
||||
#define EFI_USB2_HC_PROTOCOL_GUID {0x3e745226,0x9818,0x45b6, {0xa2,0xac,0xd7,0xcd,0x0e,0x8b,0xa2,0xbc}}
|
||||
|
||||
#define EFI_USB_MAX_BULK_BUFFER_NUM 10
|
||||
|
||||
#define EFI_USB_SPEED_FULL 0x0000
|
||||
#define EFI_USB_SPEED_LOW 0x0001
|
||||
#define EFI_USB_SPEED_HIGH 0x0002
|
||||
#define EFI_USB_SPEED_SUPER 0x0003
|
||||
|
||||
#define EFI_USB_HC_RESET_GLOBAL 0x0001
|
||||
#define EFI_USB_HC_RESET_HOST_CONTROLLER 0x0002
|
||||
#define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG 0x0004
|
||||
#define EFI_USB_HC_RESET_HOST_WITH_DEBUG 0x0008
|
||||
|
||||
#define EFI_USB_MAX_ISO_BUFFER_NUM 7
|
||||
#define EFI_USB_MAX_ISO_BUFFER_NUM1 2
|
||||
|
||||
// EFI_USB_PORT_STATUS.PortStatus bit
|
||||
#define USB_PORT_STAT_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_RESET 0x0010
|
||||
#define USB_PORT_STAT_POWER 0x0100
|
||||
#define USB_PORT_STAT_LOW_SPEED 0x0200
|
||||
#define USB_PORT_STAT_HIGH_SPEED 0x0400
|
||||
#define USB_PORT_STAT_SUPER_SPEED 0x0800
|
||||
#define USB_PORT_STAT_OWNER 0x2000
|
||||
|
||||
// EFI_USB_PORT_STATUS.PortChangeStatus bit
|
||||
#define USB_PORT_STAT_C_CONNECTION 0x0001
|
||||
#define USB_PORT_STAT_C_ENABLE 0x0002
|
||||
#define USB_PORT_STAT_C_SUSPEND 0x0004
|
||||
#define USB_PORT_STAT_C_OVERCURRENT 0x0008
|
||||
#define USB_PORT_STAT_C_RESET 0x0010
|
||||
|
||||
typedef struct _EFI_USB2_HC_PROTOCOL EFI_USB2_HC_PROTOCOL;
|
||||
|
||||
typedef enum {
|
||||
EfiUsbHcStateHalt,
|
||||
EfiUsbHcStateOperational,
|
||||
EfiUsbHcStateSuspend,
|
||||
EfiUsbHcStateMaximum
|
||||
} EFI_USB_HC_STATE;
|
||||
|
||||
typedef enum {
|
||||
EfiUsbPortEnable = 1,
|
||||
EfiUsbPortSuspend = 2,
|
||||
EfiUsbPortReset = 4,
|
||||
EfiUsbPortPower = 8,
|
||||
EfiUsbPortOwner = 13,
|
||||
EfiUsbPortConnectChange = 16,
|
||||
EfiUsbPortEnableChange = 17,
|
||||
EfiUsbPortSuspendChange = 18,
|
||||
EfiUsbPortOverCurrentChange = 19,
|
||||
EfiUsbPortResetChange = 20
|
||||
} EFI_USB_PORT_FEATURE;
|
||||
|
||||
typedef struct {
|
||||
UINT8 TranslatorHubAddress;
|
||||
UINT8 TranslatorPortNumber;
|
||||
} EFI_USB2_HC_TRANSACTION_TRANSLATOR;
|
||||
|
||||
typedef struct {
|
||||
UINT16 PortStatus;
|
||||
UINT16 PortChangeStatus;
|
||||
} EFI_USB_PORT_STATUS;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
OUT UINT8 *MaxSpeed,
|
||||
OUT UINT8 *PortNumber,
|
||||
OUT UINT8 *Is64BitCapable
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_RESET)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT16 Attributes
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
OUT EFI_USB_HC_STATE *State
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN EFI_USB_HC_STATE State
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 DeviceAddress,
|
||||
IN UINT8 DeviceSpeed,
|
||||
IN UINTN MaximumPacketLength,
|
||||
IN EFI_USB_DEVICE_REQUEST *Request,
|
||||
IN EFI_USB_DATA_DIRECTION TransferDirection,
|
||||
IN OUT VOID *Data OPTIONAL,
|
||||
IN OUT UINTN *DataLength OPTIONAL,
|
||||
IN UINTN TimeOut,
|
||||
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
||||
OUT UINT32 *TransferResult
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 DeviceAddress,
|
||||
IN UINT8 EndPointAddress,
|
||||
IN UINT8 DeviceSpeed,
|
||||
IN UINTN MaximumPacketLength,
|
||||
IN UINT8 DataBuffersNumber,
|
||||
IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
|
||||
IN OUT UINTN *DataLength,
|
||||
IN OUT UINT8 *DataToggle,
|
||||
IN UINTN TimeOut,
|
||||
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
||||
OUT UINT32 *TransferResult
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 DeviceAddress,
|
||||
IN UINT8 EndPointAddress,
|
||||
IN UINT8 DeviceSpeed,
|
||||
IN UINTN MaximumPacketLength,
|
||||
IN BOOLEAN IsNewTransfer,
|
||||
IN OUT UINT8 *DataToggle,
|
||||
IN UINTN PollingInterval OPTIONAL,
|
||||
IN UINTN DataLength OPTIONAL,
|
||||
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator OPTIONAL,
|
||||
IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction OPTIONAL,
|
||||
IN VOID *Context OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 DeviceAddress,
|
||||
IN UINT8 EndPointAddress,
|
||||
IN UINT8 DeviceSpeed,
|
||||
IN UINTN MaximumPacketLength,
|
||||
IN OUT VOID *Data,
|
||||
IN OUT UINTN *DataLength,
|
||||
IN OUT UINT8 *DataToggle,
|
||||
IN UINTN TimeOut,
|
||||
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
||||
OUT UINT32 *TransferResult
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 DeviceAddress,
|
||||
IN UINT8 EndPointAddress,
|
||||
IN UINT8 DeviceSpeed,
|
||||
IN UINTN MaximumPacketLength,
|
||||
IN UINT8 DataBuffersNumber,
|
||||
IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
|
||||
IN UINTN DataLength,
|
||||
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
||||
OUT UINT32 *TransferResult
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 DeviceAddress,
|
||||
IN UINT8 EndPointAddress,
|
||||
IN UINT8 DeviceSpeed,
|
||||
IN UINTN MaximumPacketLength,
|
||||
IN UINT8 DataBuffersNumber,
|
||||
IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
|
||||
IN UINTN DataLength,
|
||||
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
|
||||
IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,
|
||||
IN VOID *Context OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 PortNumber,
|
||||
OUT EFI_USB_PORT_STATUS *PortStatus
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 PortNumber,
|
||||
IN EFI_USB_PORT_FEATURE PortFeature
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE)(
|
||||
IN EFI_USB2_HC_PROTOCOL *This,
|
||||
IN UINT8 PortNumber,
|
||||
IN EFI_USB_PORT_FEATURE PortFeature
|
||||
);
|
||||
|
||||
typedef struct _EFI_USB2_HC_PROTOCOL {
|
||||
EFI_USB2_HC_PROTOCOL_GET_CAPABILITY GetCapability;
|
||||
EFI_USB2_HC_PROTOCOL_RESET Reset;
|
||||
EFI_USB2_HC_PROTOCOL_GET_STATE GetState;
|
||||
EFI_USB2_HC_PROTOCOL_SET_STATE SetState;
|
||||
EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER ControlTransfer;
|
||||
EFI_USB2_HC_PROTOCOL_BULK_TRANSFER BulkTransfer;
|
||||
EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER AsyncInterruptTransfer;
|
||||
EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER SyncInterruptTransfer;
|
||||
EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER IsochronousTransfer;
|
||||
EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER AsyncIsochronousTransfer;
|
||||
EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS GetRootHubPortStatus;
|
||||
EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE SetRootHubPortFeature;
|
||||
EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE ClearRootHubPortFeature;
|
||||
UINT16 MajorRevision;
|
||||
UINT16 MinorRevision;
|
||||
} EFI_USB2_HC_PROTOCOL;
|
||||
|
||||
////
|
||||
// USB Function Protocol
|
||||
///
|
||||
|
||||
#define EFI_USBFN_IO_PROTOCOL_GUID {0x32d2963a,0xfe5d, 0x4f30, {0xb6,0x33,0x6e,0x5d,0xc5,0x58,0x3,0xcc}}
|
||||
|
||||
#define EFI_USBFN_IO_PROTOCOL_REVISION 0x00010001
|
||||
|
||||
typedef struct _EFI_USBFN_IO_PROTOCOL EFI_USBFN_IO_PROTOCOL;
|
||||
|
||||
typedef enum {
|
||||
EfiUsbUnknownPort = 0,
|
||||
EfiUsbStandardDownstreamPort,
|
||||
EfiUsbChargingDownstreamPort,
|
||||
EfiUsbDedicatedChargingPort,
|
||||
EfiUsbInvalidDedicatedChargingPort
|
||||
} EFI_USBFN_PORT_TYPE;
|
||||
|
||||
typedef enum {
|
||||
UsbEndpointControl = 0x00,
|
||||
// UsbEndpointIsochronous = 0x01,
|
||||
UsbEndpointBulk = 0x02,
|
||||
// UsbEndpointInterrupt = 0x03
|
||||
} EFI_USB_ENDPOINT_TYPE;
|
||||
|
||||
typedef enum {
|
||||
EfiUsbDeviceInfoUnknown = 0,
|
||||
EfiUsbDeviceInfoSerialNumber,
|
||||
EfiUsbDeviceInfoManufacturerName,
|
||||
EfiUsbDeviceInfoProductName
|
||||
} EFI_USBFN_DEVICE_INFO_ID;
|
||||
|
||||
typedef enum {
|
||||
EfiUsbEndpointDirectionHostOut = 0,
|
||||
EfiUsbEndpointDirectionHostIn,
|
||||
EfiUsbEndpointDirectionDeviceTx = EfiUsbEndpointDirectionHostIn,
|
||||
EfiUsbEndpointDirectionDeviceRx = EfiUsbEndpointDirectionHostOut
|
||||
} EFI_USBFN_ENDPOINT_DIRECTION;
|
||||
|
||||
typedef enum {
|
||||
// Nothing
|
||||
EfiUsbMsgNone = 0,
|
||||
// SETUP packet is received, returned Buffer contains
|
||||
// EFI_USB_DEVICE_REQUEST struct
|
||||
EfiUsbMsgSetupPacket,
|
||||
// Indicates that some of the requested data has been
|
||||
// received from the host. It is the responsibility of the
|
||||
// class driver to determine if it needs to wait for any
|
||||
// remaining data. Returned Buffer contains
|
||||
// EFI_USBFN_TRANSFER_RESULT struct containing endpoint
|
||||
// number, transfer status and count of bytes received.
|
||||
EfiUsbMsgEndpointStatusChangedRx,
|
||||
// Indicates that some of the requested data has been
|
||||
// transmitted to the host. It is the responsibility of the
|
||||
// class driver to determine if anyremaining data needs to be
|
||||
// resent. Returned Buffer contains
|
||||
// EFI_USBFN_TRANSFER_RESULT struct containing endpoint
|
||||
// number, transferstatus andcount of bytes sent.
|
||||
EfiUsbMsgEndpointStatusChangedTx,
|
||||
// DETACH bus event signaled
|
||||
EfiUsbMsgBusEventDetach,
|
||||
// ATTACH bus event signaled
|
||||
EfiUsbMsgBusEventAttach,
|
||||
// RESET bus event signaled
|
||||
EfiUsbMsgBusEventReset,
|
||||
// SUSPEND bus event signaled
|
||||
EfiUsbMsgBusEventSuspend,
|
||||
// RESUME bus event signaled
|
||||
EfiUsbMsgBusEventResume,
|
||||
// Bus speed updated, returned buffer indicated bus speed
|
||||
// using following enumeration named EFI_USB_BUS_SPEED
|
||||
EfiUsbMsgBusEventSpeed
|
||||
} EFI_USBFN_MESSAGE;
|
||||
|
||||
typedef enum {
|
||||
UsbTransferStatusUnknown = 0,
|
||||
UsbTransferStatusComplete,
|
||||
UsbTransferStatusAborted,
|
||||
UsbTransferStatusActive,
|
||||
UsbTransferStatusNone
|
||||
} EFI_USBFN_TRANSFER_STATUS;
|
||||
|
||||
typedef enum _EFI_USB_BUS_SPEED {
|
||||
UsbBusSpeedUnknown = 0,
|
||||
UsbBusSpeedLow,
|
||||
UsbBusSpeedFull,
|
||||
UsbBusSpeedHigh,
|
||||
UsbBusSpeedSuper,
|
||||
UsbBusSpeedMaximum = UsbBusSpeedSuper
|
||||
} EFI_USB_BUS_SPEED;
|
||||
|
||||
typedef enum {
|
||||
EfiUsbPolicyUndefined = 0,
|
||||
EfiUsbPolicyMaxTransactionSize,
|
||||
EfiUsbPolicyZeroLengthTerminationSupport,
|
||||
EfiUsbPolicyZeroLengthTermination
|
||||
} EFI_USBFN_POLICY_TYPE;
|
||||
|
||||
typedef struct _EFI_USBFN_TRANSFER_RESULT {
|
||||
UINTN BytesTransferred;
|
||||
EFI_USBFN_TRANSFER_STATUS TransferStatus;
|
||||
UINT8 EndpointIndex;
|
||||
EFI_USBFN_ENDPOINT_DIRECTION Direction;
|
||||
VOID *Buffer;
|
||||
} EFI_USBFN_TRANSFER_RESULT;
|
||||
|
||||
typedef union _EFI_USBFN_MESSAGE_PAYLOAD {
|
||||
EFI_USB_DEVICE_REQUEST udr;
|
||||
EFI_USBFN_TRANSFER_RESULT utr;
|
||||
EFI_USB_BUS_SPEED ubs;
|
||||
} EFI_USBFN_MESSAGE_PAYLOAD;
|
||||
|
||||
typedef struct {
|
||||
EFI_USB_INTERFACE_DESCRIPTOR *InterfaceDescriptor;
|
||||
EFI_USB_ENDPOINT_DESCRIPTOR **EndpointDescriptorTable;
|
||||
} EFI_USB_INTERFACE_INFO;
|
||||
|
||||
typedef struct {
|
||||
EFI_USB_CONFIG_DESCRIPTOR *ConfigDescriptor;
|
||||
EFI_USB_INTERFACE_INFO **InterfaceInfoTable;
|
||||
} EFI_USB_CONFIG_INFO;
|
||||
|
||||
typedef struct {
|
||||
EFI_USB_DEVICE_DESCRIPTOR *DeviceDescriptor;
|
||||
EFI_USB_CONFIG_INFO **ConfigInfoTable;
|
||||
} EFI_USB_DEVICE_INFO;
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_DETECT_PORT)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
OUT EFI_USBFN_PORT_TYPE *PortType
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_CONFIGURE_ENABLE_ENDPOINTS)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN EFI_USB_DEVICE_INFO *DeviceInfo
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_GET_ENDPOINT_MAXPACKET_SIZE)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN EFI_USB_ENDPOINT_TYPE EndpointType,
|
||||
IN EFI_USB_BUS_SPEED BusSpeed,
|
||||
OUT UINT16 *MaxPacketSize
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_GET_DEVICE_INFO)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN EFI_USBFN_DEVICE_INFO_ID Id,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT VOID *Buffer OPTIONAL
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_GET_VENDOR_ID_PRODUCT_ID)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
OUT UINT16 *Vid,
|
||||
OUT UINT16 *Pid
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_ABORT_TRANSFER)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN UINT8 EndpointIndex,
|
||||
IN EFI_USBFN_ENDPOINT_DIRECTION Direction
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_GET_ENDPOINT_STALL_STATE)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN UINT8 EndpointIndex,
|
||||
IN EFI_USBFN_ENDPOINT_DIRECTION Direction,
|
||||
IN OUT BOOLEAN *State
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_SET_ENDPOINT_STALL_STATE)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN UINT8 EndpointIndex,
|
||||
IN EFI_USBFN_ENDPOINT_DIRECTION Direction,
|
||||
IN BOOLEAN State
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_EVENTHANDLER)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
OUT EFI_USBFN_MESSAGE *Message,
|
||||
IN OUT UINTN *PayloadSize,
|
||||
OUT EFI_USBFN_MESSAGE_PAYLOAD *Payload
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_TRANSFER)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN UINT8 EndpointIndex,
|
||||
IN EFI_USBFN_ENDPOINT_DIRECTION Direction,
|
||||
IN OUT UINTN *BufferSize,
|
||||
IN OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_GET_MAXTRANSFER_SIZE)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
OUT UINTN *MaxTransferSize
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_ALLOCATE_TRANSFER_BUFFER)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN UINTN Size,
|
||||
OUT VOID **Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_FREE_TRANSFER_BUFFER)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_START_CONTROLLER)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_STOP_CONTROLLER)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_SET_ENDPOINT_POLICY)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN UINT8 EndpointIndex,
|
||||
IN EFI_USBFN_ENDPOINT_DIRECTION Direction,
|
||||
IN EFI_USBFN_POLICY_TYPE PolicyType,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_USBFN_IO_GET_ENDPOINT_POLICY)(
|
||||
IN EFI_USBFN_IO_PROTOCOL *This,
|
||||
IN UINT8 EndpointIndex,
|
||||
IN EFI_USBFN_ENDPOINT_DIRECTION Direction,
|
||||
IN EFI_USBFN_POLICY_TYPE PolicyType,
|
||||
IN OUT UINTN *BufferSize,
|
||||
IN OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef struct _EFI_USBFN_IO_PROTOCOL {
|
||||
UINT32 Revision;
|
||||
EFI_USBFN_IO_DETECT_PORT DetectPort;
|
||||
EFI_USBFN_IO_CONFIGURE_ENABLE_ENDPOINTS ConfigureEnableEndpoints;
|
||||
EFI_USBFN_IO_GET_ENDPOINT_MAXPACKET_SIZE GetEndpointMaxPacketSize;
|
||||
EFI_USBFN_IO_GET_DEVICE_INFO GetDeviceInfo;
|
||||
EFI_USBFN_IO_GET_VENDOR_ID_PRODUCT_ID GetVendorIdProductId;
|
||||
EFI_USBFN_IO_ABORT_TRANSFER AbortTransfer;
|
||||
EFI_USBFN_IO_GET_ENDPOINT_STALL_STATE GetEndpointStallState;
|
||||
EFI_USBFN_IO_SET_ENDPOINT_STALL_STATE SetEndpointStallState;
|
||||
EFI_USBFN_IO_EVENTHANDLER EventHandler;
|
||||
EFI_USBFN_IO_TRANSFER Transfer;
|
||||
EFI_USBFN_IO_GET_MAXTRANSFER_SIZE GetMaxTransferSize;
|
||||
EFI_USBFN_IO_ALLOCATE_TRANSFER_BUFFER AllocateTransferBuffer;
|
||||
EFI_USBFN_IO_FREE_TRANSFER_BUFFER FreeTransferBuffer;
|
||||
EFI_USBFN_IO_START_CONTROLLER StartController;
|
||||
EFI_USBFN_IO_STOP_CONTROLLER StopController;
|
||||
EFI_USBFN_IO_SET_ENDPOINT_POLICY SetEndpointPolicy;
|
||||
EFI_USBFN_IO_GET_ENDPOINT_POLICY GetEndpointPolicy;
|
||||
} EFI_USBFN_IO_PROTOCOL;
|
||||
|
||||
#endif /* EFI_PROTOCOLS_USB_H */
|
Loading…
Add table
Add a link
Reference in a new issue