]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/UefiUsbLib/UsbDxeLib.c
Update the copyright notice format
[mirror_edk2.git] / MdePkg / Library / UefiUsbLib / UsbDxeLib.c
index 3e764a34a68867f5af3032b734ce73fe680dbe50..db98c2f19ad7a5acea657b293f9ed3b5f0ebd143 100644 (file)
@@ -1,10 +1,10 @@
 /** @file\r
 \r
-  The library provides the USB descritor, interface and protocol\r
-  operations.\r
+  The library provides the USB Standard Device Requests defined \r
+  in Usb specification 9.4 section.\r
   \r
-  Copyright (c) 2004 - 2007, Intel Corporation All rights\r
-  reserved. This program and the accompanying materials are\r
+  Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>\r
+  This program and the accompanying materials are\r
   licensed and made available under the terms and conditions of\r
   the BSD License which accompanies this distribution.  The full\r
   text of the license may be found at\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
 \r
 **/\r
 \r
-#include <UefiUsbLibInternal.h>\r
+#include "UefiUsbLibInternal.h"\r
 \r
 \r
 /**\r
-  Usb Get Descriptor.\r
-\r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  Value                  Device Request Value.\r
-  @param  Index                  Device Request Index.\r
-  @param  DescriptorLength       Descriptor Length.\r
-  @param  Descriptor             Descriptor buffer to contain result.\r
-  @param  Status                 Transfer Status.\r
-\r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  Get the descriptor of the specified USB device.\r
+\r
+  Submit a USB get descriptor request for the USB device specified by UsbIo, Value,\r
+  and Index, and return the descriptor in the buffer specified by Descriptor.\r
+  The status of the transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If Descriptor is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
+\r
+  @param  UsbIo             A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  Value             The device request value.\r
+  @param  Index             The device request index.\r
+  @param  DescriptorLength  The size, in bytes, of Descriptor.\r
+  @param  Descriptor        A pointer to the descriptor buffer to get.\r
+  @param  Status            A pointer to the status of the transfer.\r
+\r
+  @retval EFI_SUCCESS           The request executed successfully.\r
+  @retval EFI_OUT_OF_RESOURCES  The request could not be completed because the\r
+                                buffer specified by DescriptorLength and Descriptor\r
+                                is not large enough to hold the result of the request.\r
+  @retval EFI_TIMEOUT           A timeout occurred executing the request.\r
+  @retval EFI_DEVICE_ERROR      The request failed due to a device error. The transfer\r
+                                status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -47,9 +57,9 @@ UsbGetDescriptor (
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (Descriptor != NULL);\r
+  ASSERT (Status != NULL);\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
@@ -63,7 +73,7 @@ UsbGetDescriptor (
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbDataIn,\r
-                  TIMEOUT_VALUE,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
                   Descriptor,\r
                   DescriptorLength,\r
                   Status\r
@@ -72,18 +82,26 @@ UsbGetDescriptor (
 \r
 \r
 /**\r
-  Usb Set Descriptor.\r
-\r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  Value                  Device Request Value.\r
-  @param  Index                  Device Request Index.\r
-  @param  DescriptorLength       Descriptor Length.\r
-  @param  Descriptor             Descriptor buffer to set.\r
-  @param  Status                 Transfer Status.\r
-\r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  Set the descriptor of the specified USB device.\r
+\r
+  Submit a USB set descriptor request for the USB device specified by UsbIo,\r
+  Value, and Index, and set the descriptor using the buffer specified by DesriptorLength\r
+  and Descriptor.  The status of the transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If Descriptor is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
+\r
+  @param  UsbIo             A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  Value             The device request value.\r
+  @param  Index             The device request index.\r
+  @param  DescriptorLength  The size, in bytes, of Descriptor.\r
+  @param  Descriptor        A pointer to the descriptor buffer to set.\r
+  @param  Status            A pointer to the status of the transfer.\r
+\r
+  @retval  EFI_SUCCESS       The request executed successfully.\r
+  @retval  EFI_TIMEOUT       A timeout occurred executing the request.\r
+  @retval  EFI_DEVICE_ERROR  The request failed due to a device error.\r
+                             The transfer status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -99,9 +117,9 @@ UsbSetDescriptor (
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (Descriptor != NULL);\r
+  ASSERT (Status != NULL);\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
@@ -115,7 +133,7 @@ UsbSetDescriptor (
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbDataOut,\r
-                  TIMEOUT_VALUE,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
                   Descriptor,\r
                   DescriptorLength,\r
                   Status\r
@@ -124,46 +142,56 @@ UsbSetDescriptor (
 \r
 \r
 /**\r
-  Usb Get Device Interface.\r
+  Get the interface setting of the specified USB device.\r
+\r
+  Submit a USB get interface request for the USB device specified by UsbIo,\r
+  and Interface, and place the result in the buffer specified by AlternateSetting.\r
+  The status of the transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If AlternateSetting is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
 \r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  Index                  Interface index value.\r
-  @param  AltSetting             Alternate setting.\r
-  @param  Status                 Trasnsfer status.\r
+  @param  UsbIo             A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  Interface         The interface index value.\r
+  @param  AlternateSetting  A pointer to the alternate setting to be retrieved.\r
+  @param  Status            A pointer to the status of the transfer.\r
 \r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  @retval EFI_SUCCESS       The request executed successfully.\r
+  @retval EFI_TIMEOUT       A timeout occurred executing the request.\r
+  @retval EFI_DEVICE_ERROR  The request failed due to a device error.\r
+                            The transfer status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 UsbGetInterface (\r
   IN  EFI_USB_IO_PROTOCOL     *UsbIo,\r
-  IN  UINT16                  Index,\r
-  OUT UINT8                   *AltSetting,\r
+  IN  UINT16                  Interface,\r
+  OUT UINT16                  *AlternateSetting,\r
   OUT UINT32                  *Status\r
   )\r
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (AlternateSetting != NULL);\r
+  ASSERT (Status != NULL);\r
+\r
+  *AlternateSetting = 0;\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
   DevReq.RequestType  = USB_DEV_GET_INTERFACE_REQ_TYPE;\r
   DevReq.Request      = USB_REQ_GET_INTERFACE;\r
-  DevReq.Index        = Index;\r
+  DevReq.Index        = Interface;\r
   DevReq.Length       = 1;\r
 \r
   return UsbIo->UsbControlTransfer (\r
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbDataIn,\r
-                  TIMEOUT_VALUE,\r
-                  AltSetting,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
+                  AlternateSetting,\r
                   1,\r
                   Status\r
                   );\r
@@ -171,46 +199,51 @@ UsbGetInterface (
 \r
 \r
 /**\r
-  Usb Set Device Interface.\r
+  Set the interface setting of the specified USB device.\r
+\r
+  Submit a USB set interface request for the USB device specified by UsbIo, and\r
+  Interface, and set the alternate setting to the value specified by AlternateSetting.\r
+  The status of the transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
 \r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  InterfaceNo            Interface Number.\r
-  @param  AltSetting             Alternate setting.\r
-  @param  Status                 Trasnsfer status.\r
+  @param  UsbIo             A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  Interface         The interface index value.\r
+  @param  AlternateSetting  The alternate setting to be set.\r
+  @param  Status            A pointer to the status of the transfer.\r
 \r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  @retval EFI_SUCCESS  The request executed successfully.\r
+  @retval EFI_TIMEOUT  A timeout occurred executing the request.\r
+  @retval EFI_SUCCESS  The request failed due to a device error.\r
+                       The transfer status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 UsbSetInterface (\r
   IN  EFI_USB_IO_PROTOCOL     *UsbIo,\r
-  IN  UINT16                  InterfaceNo,\r
-  IN  UINT16                  AltSetting,\r
+  IN  UINT16                  Interface,\r
+  IN  UINT16                  AlternateSetting,\r
   OUT UINT32                  *Status\r
   )\r
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (Status != NULL);\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
   DevReq.RequestType  = USB_DEV_SET_INTERFACE_REQ_TYPE;\r
   DevReq.Request      = USB_REQ_SET_INTERFACE;\r
-  DevReq.Value        = AltSetting;\r
-  DevReq.Index        = InterfaceNo;\r
-\r
+  DevReq.Value        = AlternateSetting;\r
+  DevReq.Index        = Interface;\r
 \r
   return UsbIo->UsbControlTransfer (\r
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbNoData,\r
-                  TIMEOUT_VALUE,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
                   NULL,\r
                   0,\r
                   Status\r
@@ -219,30 +252,40 @@ UsbSetInterface (
 \r
 \r
 /**\r
-  Usb Get Device Configuration.\r
+  Get the device configuration.\r
 \r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  ConfigValue            Config Value.\r
-  @param  Status                 Transfer Status.\r
+  Submit a USB get configuration request for the USB device specified by UsbIo\r
+  and place the result in the buffer specified by ConfigurationValue. The status\r
+  of the transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If ConfigurationValue is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
 \r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  @param  UsbIo               A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  ConfigurationValue  A pointer to the device configuration to be retrieved.\r
+  @param  Status              A pointer to the status of the transfer.\r
+\r
+  @retval EFI_SUCCESS        The request executed successfully.\r
+  @retval EFI_TIMEOUT        A timeout occurred executing the request.\r
+  @retval EFI_DEVICE_ERROR   The request failed due to a device error.\r
+                             The transfer status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 UsbGetConfiguration (\r
   IN  EFI_USB_IO_PROTOCOL     *UsbIo,\r
-  OUT UINT8                   *ConfigValue,\r
+  OUT UINT16                  *ConfigurationValue,\r
   OUT UINT32                  *Status\r
   )\r
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (ConfigurationValue != NULL);\r
+  ASSERT (Status != NULL);\r
+\r
+  *ConfigurationValue = 0;\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
@@ -254,8 +297,8 @@ UsbGetConfiguration (
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbDataIn,\r
-                  TIMEOUT_VALUE,\r
-                  ConfigValue,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
+                  ConfigurationValue,\r
                   1,\r
                   Status\r
                   );\r
@@ -263,42 +306,48 @@ UsbGetConfiguration (
 \r
 \r
 /**\r
-  Usb Set Device Configuration.\r
+  Set the device configuration.\r
 \r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  Value                  Configuration Value to set.\r
-  @param  Status                 Transfer status.\r
+  Submit a USB set configuration request for the USB device specified by UsbIo\r
+  and set the device configuration to the value specified by ConfigurationValue.\r
+  The status of the transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
 \r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  @param  UsbIo               A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  ConfigurationValue  The device configuration value to be set.\r
+  @param  Status              A pointer to the status of the transfer.\r
+\r
+  @retval EFI_SUCCESS       The request executed successfully.\r
+  @retval EFI_TIMEOUT       A timeout occurred executing the request.\r
+  @retval EFI_DEVICE_ERROR  The request failed due to a device error.\r
+                            The transfer status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 UsbSetConfiguration (\r
   IN  EFI_USB_IO_PROTOCOL     *UsbIo,\r
-  IN  UINT16                  Value,\r
+  IN  UINT16                  ConfigurationValue,\r
   OUT UINT32                  *Status\r
   )\r
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (Status != NULL);\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
   DevReq.RequestType  = USB_DEV_SET_CONFIGURATION_REQ_TYPE;\r
   DevReq.Request      = USB_REQ_SET_CONFIG;\r
-  DevReq.Value        = Value;\r
+  DevReq.Value        = ConfigurationValue;\r
 \r
   return UsbIo->UsbControlTransfer (\r
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbNoData,\r
-                  TIMEOUT_VALUE,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
                   NULL,\r
                   0,\r
                   Status\r
@@ -307,24 +356,33 @@ UsbSetConfiguration (
 \r
 \r
 /**\r
-  Usb Set Device Feature.\r
-\r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  Recipient              Interface/Device/Endpoint.\r
-  @param  Value                  Request value.\r
-  @param  Target                 Request Index.\r
-  @param  Status                 Transfer status.\r
-\r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  Set the specified feature of the specified device.\r
+\r
+  Submit a USB set device feature request for the USB device specified by UsbIo,\r
+  Recipient, and Target to the value specified by Value.  The status of the\r
+  transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
+\r
+  @param  UsbIo      A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  Recipient  The USB data recipient type (i.e. Device, Interface, Endpoint).\r
+                     Type USB_TYPES_DEFINITION is defined in the MDE Package Industry\r
+                     Standard include file Usb.h.\r
+  @param  Value      The value of the feature to be set.\r
+  @param  Target     The index of the device to be set.\r
+  @param  Status     A pointer to the status of the transfer.\r
+\r
+  @retval EFI_SUCCESS       The request executed successfully.\r
+  @retval EFI_TIMEOUT       A timeout occurred executing the request.\r
+  @retval EFI_DEVICE_ERROR  The request failed due to a device error.\r
+                            The transfer status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 UsbSetFeature (\r
   IN  EFI_USB_IO_PROTOCOL     *UsbIo,\r
-  IN  UINTN       Recipient,\r
+  IN  USB_TYPES_DEFINITION    Recipient,\r
   IN  UINT16                  Value,\r
   IN  UINT16                  Target,\r
   OUT UINT32                  *Status\r
@@ -332,9 +390,8 @@ UsbSetFeature (
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (Status != NULL);\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
@@ -351,6 +408,9 @@ UsbSetFeature (
   case USB_TARGET_ENDPOINT:\r
     DevReq.RequestType = USB_DEV_SET_FEATURE_REQ_TYPE_E;\r
     break;\r
+\r
+  default:\r
+    break;\r
   }\r
   //\r
   // Fill device request, see USB1.1 spec\r
@@ -364,7 +424,7 @@ UsbSetFeature (
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbNoData,\r
-                  TIMEOUT_VALUE,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
                   NULL,\r
                   0,\r
                   Status\r
@@ -373,24 +433,33 @@ UsbSetFeature (
 \r
 \r
 /**\r
-  Usb Clear Device Feature.\r
-\r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  Recipient              Interface/Device/Endpoint.\r
-  @param  Value                  Request value.\r
-  @param  Target                 Request Index.\r
-  @param  Status                 Transfer status.\r
-\r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  Clear the specified feature of the specified device.\r
+\r
+  Submit a USB clear device feature request for the USB device specified by UsbIo,\r
+  Recipient, and Target to the value specified by Value.  The status of the transfer\r
+  is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
+\r
+  @param  UsbIo      A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  Recipient  The USB data recipient type (i.e. Device, Interface, Endpoint).\r
+                     Type USB_TYPES_DEFINITION is defined in the MDE Package Industry Standard\r
+                     include file Usb.h.\r
+  @param  Value      The value of the feature to be cleared.\r
+  @param  Target     The index of the device to be cleared.\r
+  @param  Status     A pointer to the status of the transfer.\r
+\r
+  @retval EFI_SUCCESS       The request executed successfully.\r
+  @retval EFI_TIMEOUT       A timeout occurred executing the request.\r
+  @retval EFI_DEVICE_ERROR  The request failed due to a device error.\r
+                            The transfer status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 UsbClearFeature (\r
   IN  EFI_USB_IO_PROTOCOL     *UsbIo,\r
-  IN  UINTN       Recipient,\r
+  IN  USB_TYPES_DEFINITION    Recipient,\r
   IN  UINT16                  Value,\r
   IN  UINT16                  Target,\r
   OUT UINT32                  *Status\r
@@ -398,9 +467,9 @@ UsbClearFeature (
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (Status != NULL);\r
+\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
@@ -417,6 +486,9 @@ UsbClearFeature (
   case USB_TARGET_ENDPOINT:\r
     DevReq.RequestType = USB_DEV_CLEAR_FEATURE_REQ_TYPE_E;\r
     break;\r
+\r
+  default:\r
+    break;\r
   }\r
   //\r
   // Fill device request, see USB1.1 spec\r
@@ -430,7 +502,7 @@ UsbClearFeature (
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbNoData,\r
-                  TIMEOUT_VALUE,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
                   NULL,\r
                   0,\r
                   Status\r
@@ -439,34 +511,44 @@ UsbClearFeature (
 \r
 \r
 /**\r
-  Usb Get Device Status.\r
-\r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  Recipient              Interface/Device/Endpoint.\r
-  @param  Target                 Request index.\r
-  @param  DevStatus              Device status.\r
-  @param  Status                 Transfer status.\r
-\r
-  @retval EFI_INVALID_PARAMETER  Parameter is error.\r
-  @retval EFI_SUCCESS            Success.\r
-  @retval EFI_TIMEOUT            Device has no response.\r
+  Get the status of the specified device.\r
+\r
+  Submit a USB device get status request for the USB device specified by UsbIo,\r
+  Recipient, and Target and place the result in the buffer specified by DeviceStatus.\r
+  The status of the transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If DeviceStatus is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
+\r
+  @param  UsbIo         A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  Recipient     The USB data recipient type (i.e. Device, Interface, Endpoint).\r
+                        Type USB_TYPES_DEFINITION is defined in the MDE Package Industry Standard\r
+                        include file Usb.h.\r
+  @param  Target        The index of the device to be get the status of.\r
+  @param  DeviceStatus  A pointer to the device status to be retrieved.\r
+  @param  Status        A pointer to the status of the transfer.\r
+\r
+  @retval EFI_SUCCESS       The request executed successfully.\r
+  @retval EFI_TIMEOUT       A timeout occurred executing the request.\r
+  @retval EFI_DEVICE_ERROR  The request failed due to a device error.\r
+                            The transfer status is returned in Status.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 UsbGetStatus (\r
   IN  EFI_USB_IO_PROTOCOL     *UsbIo,\r
-  IN  UINTN       Recipient,\r
+  IN  USB_TYPES_DEFINITION    Recipient,\r
   IN  UINT16                  Target,\r
-  OUT UINT16                  *DevStatus,\r
+  OUT UINT16                  *DeviceStatus,\r
   OUT UINT32                  *Status\r
   )\r
 {\r
   EFI_USB_DEVICE_REQUEST  DevReq;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (DeviceStatus != NULL);\r
+  ASSERT (Status != NULL);\r
 \r
   ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));\r
 \r
@@ -483,6 +565,9 @@ UsbGetStatus (
   case USB_TARGET_ENDPOINT:\r
     DevReq.RequestType = USB_DEV_GET_STATUS_REQ_TYPE_E;\r
     break;\r
+\r
+  default:\r
+    break;\r
   }\r
   //\r
   // Fill device request, see USB1.1 spec\r
@@ -496,8 +581,8 @@ UsbGetStatus (
                   UsbIo,\r
                   &DevReq,\r
                   EfiUsbDataIn,\r
-                  TIMEOUT_VALUE,\r
-                  DevStatus,\r
+                  PcdGet32 (PcdUsbTransferTimeoutValue),\r
+                  DeviceStatus,\r
                   2,\r
                   Status\r
                   );\r
@@ -505,22 +590,31 @@ UsbGetStatus (
 \r
 \r
 /**\r
-  Clear endpoint stall.\r
+  Clear halt feature of the specified usb endpoint.\r
 \r
-  @param  UsbIo                  EFI_USB_IO_PROTOCOL.\r
-  @param  EndpointNo             Endpoint Number.\r
-  @param  Status                 Transfer Status.\r
+  Retrieve the USB endpoint descriptor specified by UsbIo and EndPoint.\r
+  If the USB endpoint descriptor can not be retrieved, then return EFI_NOT_FOUND.\r
+  If the endpoint descriptor is found, then clear the halt feature of this USB endpoint.\r
+  The status of the transfer is returned in Status.\r
+  If UsbIo is NULL, then ASSERT().\r
+  If Status is NULL, then ASSERT().\r
 \r
-  @retval EFI_NOT_FOUND          Can't find the Endpoint.\r
-  @retval EFI_DEVICE_ERROR       Hardware error.\r
-  @retval EFI_SUCCESS            Success.\r
+  @param  UsbIo     A pointer to the USB I/O Protocol instance for the specific USB target.\r
+  @param  Endpoint  The endpoint address.\r
+  @param  Status    A pointer to the status of the transfer.\r
+\r
+  @retval EFI_SUCCESS       The request executed successfully.\r
+  @retval EFI_TIMEOUT       A timeout occurred executing the request.\r
+  @retval EFI_DEVICE_ERROR  The request failed due to a device error.\r
+                            The transfer status is returned in Status.\r
+  @retval EFI_NOT_FOUND     The specified USB endpoint descriptor can not be found\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 UsbClearEndpointHalt (\r
   IN  EFI_USB_IO_PROTOCOL     *UsbIo,\r
-  IN  UINT8                   EndpointNo,\r
+  IN  UINT8                   Endpoint,\r
   OUT UINT32                  *Status\r
   )\r
 {\r
@@ -529,9 +623,8 @@ UsbClearEndpointHalt (
   EFI_USB_INTERFACE_DESCRIPTOR  InterfaceDescriptor;\r
   UINT8                         Index;\r
 \r
-  if (UsbIo == NULL) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }\r
+  ASSERT (UsbIo != NULL);\r
+  ASSERT (Status != NULL);\r
 \r
   ZeroMem (&EndpointDescriptor, sizeof (EFI_USB_ENDPOINT_DESCRIPTOR));\r
   //\r
@@ -555,7 +648,7 @@ UsbClearEndpointHalt (
       continue;\r
     }\r
 \r
-    if (EndpointDescriptor.EndpointAddress == EndpointNo) {\r
+    if (EndpointDescriptor.EndpointAddress == Endpoint) {\r
       break;\r
     }\r
   }\r