]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Protocol/Usb2HostController.h
Formalize comments for Protocols and PPIs.
[mirror_edk2.git] / MdePkg / Include / Protocol / Usb2HostController.h
index 1b1245cb8b15c8a6baa368d084c40f8cc9756703..84c40a01dc4284f43ecd3d9b1479df1bb338a93d 100644 (file)
@@ -1,31 +1,78 @@
 /** @file\r
   EFI_USB2_HC_PROTOCOL as defined in UEFI 2.0.\r
+  The USB Host Controller Protocol is used by code, typically USB bus drivers, \r
+  running in the EFI boot services environment, to perform data transactions over \r
+  a USB bus. In addition, it provides an abstraction for the root hub of the USB bus.\r
 \r
-  Copyright (c) 2006, Intel Corporation                                                         \r
-  All rights reserved. This program and the accompanying materials                          \r
-  are licensed and made available under the terms and conditions of the BSD License         \r
-  which accompanies this distribution.  The full text of the license may be found at        \r
-  http://opensource.org/licenses/bsd-license.php                                            \r
+  Copyright (c) 2006 - 2008, Intel Corporation\r
+  All rights reserved. This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
 \r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-  Module Name:  Usb2HostController.h\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
 **/\r
 \r
 #ifndef _USB2_HOSTCONTROLLER_H_\r
 #define _USB2_HOSTCONTROLLER_H_\r
 \r
+#include <IndustryStandard/Usb.h>\r
+#include <Protocol/UsbIo.h>\r
+\r
 #define EFI_USB2_HC_PROTOCOL_GUID \\r
   { \\r
     0x3e745226, 0x9818, 0x45b6, {0xa2, 0xac, 0xd7, 0xcd, 0xe, 0x8b, 0xa2, 0xbc } \\r
   }\r
 \r
+///\r
+/// Forward reference for pure ANSI compatability\r
+///\r
+typedef struct _EFI_USB2_HC_PROTOCOL EFI_USB2_HC_PROTOCOL;\r
+\r
+\r
+typedef struct {\r
+  UINT16          PortStatus;\r
+  UINT16          PortChangeStatus;\r
+} EFI_USB_PORT_STATUS;\r
+\r
 //\r
-// Forward reference for pure ANSI compatability\r
+// Constant value for Port Status & Port Change Status\r
 //\r
-typedef struct _EFI_USB2_HC_PROTOCOL EFI_USB2_HC_PROTOCOL;\r
+#define USB_PORT_STAT_CONNECTION    0x0001\r
+#define USB_PORT_STAT_ENABLE        0x0002\r
+#define USB_PORT_STAT_SUSPEND       0x0004\r
+#define USB_PORT_STAT_OVERCURRENT   0x0008\r
+#define USB_PORT_STAT_RESET         0x0010\r
+#define USB_PORT_STAT_POWER         0x0100\r
+#define USB_PORT_STAT_LOW_SPEED     0x0200\r
+#define USB_PORT_STAT_HIGH_SPEED    0x0400\r
+#define USB_PORT_STAT_OWNER         0x0800\r
+\r
+#define USB_PORT_STAT_C_CONNECTION  0x0001\r
+#define USB_PORT_STAT_C_ENABLE      0x0002\r
+#define USB_PORT_STAT_C_SUSPEND     0x0004\r
+#define USB_PORT_STAT_C_OVERCURRENT 0x0008\r
+#define USB_PORT_STAT_C_RESET       0x0010\r
+\r
+\r
+//\r
+// Usb port features\r
+//\r
+typedef enum {\r
+  EfiUsbPortEnable            = 1,\r
+  EfiUsbPortSuspend           = 2,\r
+  EfiUsbPortReset             = 4,\r
+  EfiUsbPortPower             = 8,\r
+  EfiUsbPortOwner             = 13,\r
+  EfiUsbPortConnectChange     = 16,\r
+  EfiUsbPortEnableChange      = 17,\r
+  EfiUsbPortSuspendChange     = 18,\r
+  EfiUsbPortOverCurrentChange = 19,\r
+  EfiUsbPortResetChange       = 20\r
+} EFI_USB_PORT_FEATURE;\r
+\r
 \r
 #define EFI_USB_SPEED_FULL      0x0000  // 12 Mb/s, USB 1.1 OHCI and UHCI HC.\r
 #define EFI_USB_SPEED_LOW       0x0001  // 1 Mb/s, USB 1.1 OHCI and UHCI HC.\r
@@ -57,14 +104,17 @@ typedef struct {
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY)(\r
   IN  EFI_USB2_HC_PROTOCOL  *This,\r
   OUT UINT8                 *MaxSpeed,\r
   OUT UINT8                 *PortNumber,\r
   OUT UINT8                 *Is64BitCapable\r
-  )\r
-;\r
+  );\r
 \r
+#define EFI_USB_HC_RESET_GLOBAL             0x0001\r
+#define EFI_USB_HC_RESET_HOST_CONTROLLER    0x0002\r
+#define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG  0x0004\r
+#define EFI_USB_HC_RESET_HOST_WITH_DEBUG    0x0008\r
 /**\r
   Provides software reset for the USB host controller.\r
 \r
@@ -85,11 +135,45 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_RESET) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_RESET)(\r
   IN EFI_USB2_HC_PROTOCOL   *This,\r
   IN UINT16                 Attributes\r
-  )\r
-;\r
+  );\r
+\r
+/**\r
+  Enumration value for status of USB HC.\r
+**/\r
+typedef enum {\r
+  EfiUsbHcStateHalt,                ///< The host controller is in halt\r
+                                    ///< state. No USB transactions can occur\r
+                                    ///< while in this state. The host\r
+                                    ///< controller can enter this state for\r
+                                    ///< three reasons: 1) After host\r
+                                    ///< controller hardware reset. 2)\r
+                                    ///< Explicitly set by software. 3)\r
+                                    ///< Triggered by a fatal error such as\r
+                                    ///< consistency check failure.\r
+                                    \r
+  EfiUsbHcStateOperational,         ///< The host controller is in an\r
+                                    ///< operational state. When in\r
+                                    ///< this state, the host\r
+                                    ///< controller can execute bus\r
+                                    ///< traffic. This state must be\r
+                                    ///< explicitly set to enable the\r
+                                    ///< USB bus traffic.\r
+                                    \r
+  EfiUsbHcStateSuspend,             ///< The host controller is in the\r
+                                    ///< suspend state. No USB\r
+                                    ///< transactions can occur while in\r
+                                    ///< this state. The host controller\r
+                                    ///< enters this state for the\r
+                                    ///< following reasons: 1) Explicitly\r
+                                    ///< set by software. 2) Triggered\r
+                                    ///< when there is no bus traffic for\r
+                                    ///< 3 microseconds.\r
+                                    \r
+  EfiUsbHcStateMaximum              ///< Maximum value for enumration value of HC status.\r
+} EFI_USB_HC_STATE;\r
 \r
 /**\r
   Retrieves current state of the USB host controller.\r
@@ -101,16 +185,15 @@ EFI_STATUS
   @retval EFI_SUCCESS           The state information of the host controller was returned in State.\r
   @retval EFI_INVALID_PARAMETER State is NULL.\r
   @retval EFI_DEVICE_ERROR      An error was encountered while attempting to retrieve the\r
-                                host controller¡¯s current state.\r
+                                host controller's current state.\r
 \r
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE) (\r
-  IN  EFI_USB2_HC_PROTOCOL    *This,\r
-  OUT EFI_USB_HC_STATE        *State\r
-  )\r
-;  \r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE)(\r
+  IN CONST  EFI_USB2_HC_PROTOCOL    *This,\r
+  OUT       EFI_USB_HC_STATE        *State\r
+);\r
 \r
 /**\r
   Sets the USB host controller to a specific state.\r
@@ -126,11 +209,10 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE)(\r
   IN EFI_USB2_HC_PROTOCOL    *This,\r
   IN EFI_USB_HC_STATE        State\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Submits control transfer to a target USB device.\r
@@ -147,9 +229,9 @@ EFI_STATUS
                               received from USB device.\r
   @param  DataLength          On input, indicates the size, in bytes, of the data buffer specified by Data.\r
                               On output, indicates the amount of data actually transferred.\r
-  @param  Translator          A pointer to the transaction translator data.\r
   @param  TimeOut             Indicates the maximum time, in milliseconds, which the transfer is\r
                               allowed to complete.\r
+  @param  Translator          A pointer to the transaction translator data.\r
   @param  TransferResult      A pointer to the detailed result information generated by this control\r
                               transfer.\r
 \r
@@ -163,7 +245,7 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER)(\r
   IN     EFI_USB2_HC_PROTOCOL               *This,\r
   IN     UINT8                              DeviceAddress,\r
   IN     UINT8                              DeviceSpeed,\r
@@ -175,8 +257,7 @@ EFI_STATUS
   IN     UINTN                              TimeOut,\r
   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
   OUT    UINT32                             *TransferResult\r
-  )\r
-;  \r
+  );\r
 \r
 #define EFI_USB_MAX_BULK_BUFFER_NUM 10\r
 \r
@@ -196,9 +277,9 @@ EFI_STATUS
   @param  DataLength          When input, indicates the size, in bytes, of the data buffers specified by\r
                               Data. When output, indicates the actually transferred data size.\r
   @param  DataToggle          A pointer to the data toggle value.\r
-  @param  Translator          A pointer to the transaction translator data.\r
   @param  TimeOut             Indicates the maximum time, in milliseconds, which the transfer is\r
                               allowed to complete.\r
+  @param  Translator          A pointer to the transaction translator data.\r
   @param  TransferResult      A pointer to the detailed result information of the bulk transfer.\r
 \r
   @retval EFI_SUCCESS           The bulk transfer was completed successfully.\r
@@ -211,7 +292,7 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER)(\r
   IN     EFI_USB2_HC_PROTOCOL               *This,\r
   IN     UINT8                              DeviceAddress,\r
   IN     UINT8                              EndPointAddress,\r
@@ -224,13 +305,12 @@ EFI_STATUS
   IN     UINTN                              TimeOut,\r
   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
   OUT    UINT32                             *TransferResult\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Submits an asynchronous interrupt transfer to an interrupt endpoint of a USB device.\r
   Translator parameter doesn't exist in UEFI2.0 spec, but it will be updated in the following specification version.\r
-  \r
+\r
   @param  This                A pointer to the EFI_USB2_HC_PROTOCOL instance.\r
   @param  DeviceAddress       Represents the address of the target device on the USB.\r
   @param  EndPointAddress     The combination of an endpoint number and an endpoint direction of the\r
@@ -261,7 +341,7 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER)(\r
   IN     EFI_USB2_HC_PROTOCOL                                *This,\r
   IN     UINT8                                               DeviceAddress,\r
   IN     UINT8                                               EndPointAddress,\r
@@ -274,8 +354,7 @@ EFI_STATUS
   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR                  *Translator      OPTIONAL,\r
   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK                     CallBackFunction OPTIONAL,\r
   IN     VOID                                                *Context         OPTIONAL\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Submits synchronous interrupt transfer to an interrupt endpoint of a USB device.\r
@@ -309,7 +388,7 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER)(\r
   IN     EFI_USB2_HC_PROTOCOL                        *This,\r
   IN     UINT8                                       DeviceAddress,\r
   IN     UINT8                                       EndPointAddress,\r
@@ -321,8 +400,7 @@ EFI_STATUS
   IN     UINTN                                       TimeOut,\r
   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR          *Translator,\r
   OUT    UINT32                                      *TransferResult\r
-  )\r
-;\r
+  );\r
 \r
 #define EFI_USB_MAX_ISO_BUFFER_NUM  7\r
 #define EFI_USB_MAX_ISO_BUFFER_NUM1 2\r
@@ -355,7 +433,7 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER)(\r
   IN     EFI_USB2_HC_PROTOCOL               *This,\r
   IN     UINT8                              DeviceAddress,\r
   IN     UINT8                              EndPointAddress,\r
@@ -366,8 +444,7 @@ EFI_STATUS
   IN     UINTN                              DataLength,\r
   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
   OUT    UINT32                             *TransferResult\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Submits nonblocking isochronous transfer to an isochronous endpoint of a USB device.\r
@@ -399,7 +476,7 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER)(\r
   IN     EFI_USB2_HC_PROTOCOL               *This,\r
   IN     UINT8                              DeviceAddress,\r
   IN     UINT8                              EndPointAddress,\r
@@ -411,8 +488,7 @@ EFI_STATUS
   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK    IsochronousCallBack,\r
   IN     VOID                               *Context OPTIONAL\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Retrieves the current status of a USB root hub port.\r
@@ -429,12 +505,11 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS) (\r
-  IN EFI_USB2_HC_PROTOCOL    *This,\r
-  IN  UINT8                  PortNumber,\r
-  OUT EFI_USB_PORT_STATUS    *PortStatus\r
-  )\r
-;  \r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS)(\r
+  IN CONST  EFI_USB2_HC_PROTOCOL    *This,\r
+  IN CONST  UINT8                   PortNumber,\r
+  OUT       EFI_USB_PORT_STATUS     *PortStatus\r
+  );\r
 \r
 /**\r
   Sets a feature for the specified root hub port.\r
@@ -451,12 +526,11 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE)(\r
   IN EFI_USB2_HC_PROTOCOL    *This,\r
   IN UINT8                   PortNumber,\r
   IN EFI_USB_PORT_FEATURE    PortFeature\r
-  )\r
-;  \r
+  );\r
 \r
 /**\r
   Clears a feature for the specified root hub port.\r
@@ -473,13 +547,20 @@ EFI_STATUS
 **/\r
 typedef\r
 EFI_STATUS\r
-(EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE) (\r
+(EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE)(\r
   IN EFI_USB2_HC_PROTOCOL    *This,\r
   IN UINT8                   PortNumber,\r
   IN EFI_USB_PORT_FEATURE    PortFeature\r
-  )\r
-;  \r
-\r
+  );\r
+\r
+///\r
+/// The EFI_USB2_HC_PROTOCOL provides USB host controller management, basic \r
+/// data transactions over a USB bus, and USB root hub access. A device driver \r
+/// that wishes to manage a USB bus in a system retrieves the EFI_USB2_HC_PROTOCOL \r
+/// instance that is associated with the USB bus to be managed. A device handle \r
+/// for a USB host controller will minimally contain an EFI_DEVICE_PATH_PROTOCOL \r
+/// instance, and an EFI_USB2_HC_PROTOCOL instance.\r
+///\r
 struct _EFI_USB2_HC_PROTOCOL {\r
   EFI_USB2_HC_PROTOCOL_GET_CAPABILITY              GetCapability;\r
   EFI_USB2_HC_PROTOCOL_RESET                       Reset;\r
@@ -494,7 +575,19 @@ struct _EFI_USB2_HC_PROTOCOL {
   EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS     GetRootHubPortStatus;\r
   EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE    SetRootHubPortFeature;\r
   EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE  ClearRootHubPortFeature;\r
+  \r
+  ///\r
+  /// The major revision number of the USB host controller. The revision information \r
+  /// indicates the release of the Universal Serial Bus Specification with which the \r
+  /// host controller is compliant.\r
+  ///\r
   UINT16                                           MajorRevision;\r
+\r
+  ///\r
+  /// The minor revision number of the USB host controller. The revision information \r
+  /// indicates the release of the Universal Serial Bus Specification with which the \r
+  /// host controller is compliant.  \r
+  ///\r
   UINT16                                           MinorRevision;\r
 };\r
 \r