X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FInclude%2FProtocol%2FUsb2HostController.h;h=5e56a24d2335a2dab3782371e3058441a80a440e;hp=2a9d02da07ab94009628f51bf46f6a5a067c431e;hb=4ca9b6c4e7dbbcf94f21b54f41f761cefc6b1086;hpb=562d28495df348923812281161e64bc9514e15e6 diff --git a/MdePkg/Include/Protocol/Usb2HostController.h b/MdePkg/Include/Protocol/Usb2HostController.h index 2a9d02da07..5e56a24d23 100644 --- a/MdePkg/Include/Protocol/Usb2HostController.h +++ b/MdePkg/Include/Protocol/Usb2HostController.h @@ -1,22 +1,26 @@ /** @file EFI_USB2_HC_PROTOCOL as defined in UEFI 2.0. + The USB Host Controller Protocol is used by code, typically USB bus drivers, + running in the EFI boot services environment, to perform data transactions over + a USB bus. In addition, it provides an abstraction for the root hub of the USB bus. - Copyright (c) 2006, Intel Corporation - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - - Module Name: Usb2HostController.h + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ #ifndef _USB2_HOSTCONTROLLER_H_ #define _USB2_HOSTCONTROLLER_H_ +#include +#include + #define EFI_USB2_HC_PROTOCOL_GUID \ { \ 0x3e745226, 0x9818, 0x45b6, {0xa2, 0xac, 0xd7, 0xcd, 0xe, 0x8b, 0xa2, 0xbc } \ @@ -27,6 +31,49 @@ // typedef struct _EFI_USB2_HC_PROTOCOL EFI_USB2_HC_PROTOCOL; + +typedef struct { + UINT16 PortStatus; + UINT16 PortChangeStatus; +} EFI_USB_PORT_STATUS; + +// +// Constant value for Port Status & Port Change Status +// +#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_OWNER 0x0800 + +#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 + + +// +// Usb port features +// +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; + + #define EFI_USB_SPEED_FULL 0x0000 // 12 Mb/s, USB 1.1 OHCI and UHCI HC. #define EFI_USB_SPEED_LOW 0x0001 // 1 Mb/s, USB 1.1 OHCI and UHCI HC. #define EFI_USB_SPEED_HIGH 0x0002 // 480 Mb/s, USB 2.0 EHCI HC. @@ -57,7 +104,7 @@ typedef struct { **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY)( IN EFI_USB2_HC_PROTOCOL *This, OUT UINT8 *MaxSpeed, OUT UINT8 *PortNumber, @@ -65,6 +112,10 @@ EFI_STATUS ) ; +#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 /** Provides software reset for the USB host controller. @@ -85,12 +136,52 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_RESET) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_RESET)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT16 Attributes ) ; +/** + + @param EfiUsbHcStateHalt The host controller is in halt + state. No USB transactions can occur + while in this state. The host + controller can enter this state for + three reasons: 1) After host + controller hardware reset. 2) + Explicitly set by software. 3) + Triggered by a fatal error such as + consistency check failure. + + + @param EfiUsbHcStateOperational The host controller is in an + operational state. When in + this state, the host + controller can execute bus + traffic. This state must be + explicitly set to enable the + USB bus traffic. + + + @param EfiUsbHcStateSuspend The host controller is in the + suspend state. No USB + transactions can occur while in + this state. The host controller + enters this state for the + following reasons: 1) Explicitly + set by software. 2) Triggered + when there is no bus traffic for + 3 microseconds. + +**/ +typedef enum { + EfiUsbHcStateHalt, + EfiUsbHcStateOperational, + EfiUsbHcStateSuspend, + EfiUsbHcStateMaximum +} EFI_USB_HC_STATE; + /** Retrieves current state of the USB host controller. @@ -101,16 +192,16 @@ EFI_STATUS @retval EFI_SUCCESS The state information of the host controller was returned in State. @retval EFI_INVALID_PARAMETER State is NULL. @retval EFI_DEVICE_ERROR An error was encountered while attempting to retrieve the - host controller¡¯s current state. + host controller's current state. **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE) ( - IN EFI_USB2_HC_PROTOCOL *This, - OUT EFI_USB_HC_STATE *State - ) -; +(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE)( + IN CONST EFI_USB2_HC_PROTOCOL *This, + OUT EFI_USB_HC_STATE *State +) +; /** Sets the USB host controller to a specific state. @@ -126,7 +217,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE)( IN EFI_USB2_HC_PROTOCOL *This, IN EFI_USB_HC_STATE State ) @@ -147,9 +238,9 @@ EFI_STATUS received from USB device. @param DataLength On input, indicates the size, in bytes, of the data buffer specified by Data. On output, indicates the amount of data actually transferred. - @param Translator A pointer to the transaction translator data. @param TimeOut Indicates the maximum time, in milliseconds, which the transfer is allowed to complete. + @param Translator A pointer to the transaction translator data. @param TransferResult A pointer to the detailed result information generated by this control transfer. @@ -163,7 +254,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT8 DeviceAddress, IN UINT8 DeviceSpeed, @@ -176,7 +267,7 @@ EFI_STATUS IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator, OUT UINT32 *TransferResult ) -; +; #define EFI_USB_MAX_BULK_BUFFER_NUM 10 @@ -196,9 +287,9 @@ EFI_STATUS @param DataLength When input, indicates the size, in bytes, of the data buffers specified by Data. When output, indicates the actually transferred data size. @param DataToggle A pointer to the data toggle value. - @param Translator A pointer to the transaction translator data. @param TimeOut Indicates the maximum time, in milliseconds, which the transfer is allowed to complete. + @param Translator A pointer to the transaction translator data. @param TransferResult A pointer to the detailed result information of the bulk transfer. @retval EFI_SUCCESS The bulk transfer was completed successfully. @@ -211,7 +302,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT8 DeviceAddress, IN UINT8 EndPointAddress, @@ -229,6 +320,7 @@ EFI_STATUS /** Submits an asynchronous interrupt transfer to an interrupt endpoint of a USB device. + Translator parameter doesn't exist in UEFI2.0 spec, but it will be updated in the following specification version. @param This A pointer to the EFI_USB2_HC_PROTOCOL instance. @param DeviceAddress Represents the address of the target device on the USB. @@ -246,6 +338,7 @@ EFI_STATUS transfer is polled. @param DataLength Indicates the length of data to be received at the rate specified by PollingInterval from the target asynchronous interrupt endpoint. + @param Translator A pointr to the transaction translator data. @param CallBackFunction The Callback function. This function is called at the rate specified by PollingInterval. @param Context The context that is passed to the CallBackFunction. This is an @@ -259,7 +352,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT8 DeviceAddress, IN UINT8 EndPointAddress, @@ -277,6 +370,7 @@ EFI_STATUS /** Submits synchronous interrupt transfer to an interrupt endpoint of a USB device. + Translator parameter doesn't exist in UEFI2.0 spec, but it will be updated in the following specification version. @param This A pointer to the EFI_USB2_HC_PROTOCOL instance. @param DeviceAddress Represents the address of the target device on the USB. @@ -292,6 +386,7 @@ EFI_STATUS @param DataToggle A pointer to the data toggle value. @param TimeOut Indicates the maximum time, in milliseconds, which the transfer is allowed to complete. + @param Translator A pointr to the transaction translator data. @param TransferResult A pointer to the detailed result information from the synchronous interrupt transfer. @@ -305,7 +400,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT8 DeviceAddress, IN UINT8 EndPointAddress, @@ -351,7 +446,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT8 DeviceAddress, IN UINT8 EndPointAddress, @@ -395,7 +490,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT8 DeviceAddress, IN UINT8 EndPointAddress, @@ -425,12 +520,12 @@ EFI_STATUS **/ 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 +(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS)( + IN CONST EFI_USB2_HC_PROTOCOL *This, + IN CONST UINT8 PortNumber, + OUT EFI_USB_PORT_STATUS *PortStatus ) -; +; /** Sets a feature for the specified root hub port. @@ -447,12 +542,12 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT8 PortNumber, IN EFI_USB_PORT_FEATURE PortFeature ) -; +; /** Clears a feature for the specified root hub port. @@ -469,13 +564,71 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE) ( +(EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE)( IN EFI_USB2_HC_PROTOCOL *This, IN UINT8 PortNumber, IN EFI_USB_PORT_FEATURE PortFeature ) -; +; + +/** + @par Protocol Description: + The EFI_USB2_HC_PROTOCOL provides USB host controller management, basic + data transactions over a USB bus, and USB root hub access. A device driver + that wishes to manage a USB bus in a system retrieves the EFI_USB2_HC_PROTOCOL + instance that is associated with the USB bus to be managed. A device handle + for a USB host controller will minimally contain an EFI_DEVICE_PATH_PROTOCOL + instance, and an EFI_USB2_HC_PROTOCOL instance. + + @param GetCapability + Retrieves the capabilities of the USB host controller. + + @param Reset + Software reset of USB. + + @param GetState + Retrieves the current state of the USB host controller. + + @param SetState + Sets the USB host controller to a specific state. + @param ControlTransfer + Submits a control transfer to a target USB device. + + @param BulkTransfer + Submits a bulk transfer to a bulk endpoint of a USB device. + + @param AsyncInterruptTransfer + Submits an asynchronous interrupt transfer to an interrupt endpoint of a USB device. + + @param SyncInterruptTransfer + Submits a synchronous interrupt transfer to an interrupt endpoint of a USB device. + + @param IsochronousTransfer + Submits isochronous transfer to an isochronous endpoint of a USB device. + + @param AsyncIsochronousTransfer + Submits nonblocking USB isochronous transfer. + + @param GetRootHubPortStatus + Retrieves the status of the specified root hub port. + + @param SetRootHubPortFeature + Sets the feature for the specified root hub port. + + @param ClearRootHubPortFeature + Clears the feature for the specified root hub port. + + @param MajorRevision + The major revision number of the USB host controller. The revision information + indicates the release of the Universal Serial Bus Specification with which the + host controller is compliant. + + @param MinorRevision + The minor revision number of the USB host controller. The revision information + indicates the release of the Universal Serial Bus Specification with which the + host controller is compliant. +**/ struct _EFI_USB2_HC_PROTOCOL { EFI_USB2_HC_PROTOCOL_GET_CAPABILITY GetCapability; EFI_USB2_HC_PROTOCOL_RESET Reset;