]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Bus/Usb/UsbBus/Dxe/usb.c
Retiring the ANT/JAVA build and removing the older EDK II packages that required...
[mirror_edk2.git] / EdkModulePkg / Bus / Usb / UsbBus / Dxe / usb.c
diff --git a/EdkModulePkg/Bus/Usb/UsbBus/Dxe/usb.c b/EdkModulePkg/Bus/Usb/UsbBus/Dxe/usb.c
deleted file mode 100644 (file)
index 2721610..0000000
+++ /dev/null
@@ -1,825 +0,0 @@
-/*++\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
-                                                                                          \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:\r
-\r
-    Usb.c\r
-\r
-  Abstract:\r
-\r
-    Parse usb device configurations.\r
-\r
-  Revision History\r
-\r
---*/\r
-\r
-#include "usbbus.h"\r
-\r
-//\r
-// Here are some internal helper functions\r
-//\r
-STATIC\r
-EFI_STATUS\r
-GetExpectedDescriptor (\r
-  IN  UINT8     *Buffer,\r
-  IN  UINTN     Length,\r
-  IN  UINT8     DescType,\r
-  IN  UINT8     DescLength,\r
-  OUT UINTN     *ParsedBytes\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-ParseThisEndpoint (\r
-  IN  ENDPOINT_DESC_LIST_ENTRY     *EndpointEntry,\r
-  IN  UINT8                        *Buffer,\r
-  IN  UINTN                        BufferLength,\r
-  OUT UINTN                        *ParsedBytes\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-ParseThisInterface (\r
-  IN  INTERFACE_DESC_LIST_ENTRY      *InterfaceEntry,\r
-  IN  UINT8                          *Buffer,\r
-  IN  UINTN                          *BufferLen,\r
-  OUT UINTN                          *ParsedBytes\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-ParseThisConfig (\r
-  IN CONFIG_DESC_LIST_ENTRY     *ConfigDescEntry,\r
-  IN UINT8                      *Buffer,\r
-  IN UINTN                      Length\r
-  );\r
-\r
-//\r
-// Implementations\r
-//\r
-BOOLEAN\r
-IsHub (\r
-  IN USB_IO_CONTROLLER_DEVICE     *Dev\r
-  )\r
-/*++\r
-  \r
-  Routine Description:\r
-    Tell if a usb controller is a hub controller.\r
-    \r
-  Arguments:\r
-    Dev - UsbIoController device structure.\r
-    \r
-  Returns:\r
-    TRUE/FALSE\r
---*/\r
-{\r
-  EFI_USB_INTERFACE_DESCRIPTOR  Interface;\r
-  EFI_USB_IO_PROTOCOL           *UsbIo;\r
-  EFI_USB_ENDPOINT_DESCRIPTOR   EndpointDescriptor;\r
-  UINT8                         Index;\r
-\r
-  if (Dev == NULL) {\r
-    return FALSE;\r
-  }\r
-\r
-  UsbIo = &Dev->UsbIo;\r
-\r
-  UsbIo->UsbGetInterfaceDescriptor (\r
-          UsbIo,\r
-          &Interface\r
-          );\r
-\r
-  //\r
-  // Check classcode\r
-  //\r
-  if (Interface.InterfaceClass != 0x09) {\r
-    return FALSE;\r
-  }\r
-  \r
-  //\r
-  // Check protocol\r
-  //\r
-  if (Interface.InterfaceProtocol != 0x0) {\r
-    return FALSE;\r
-  }\r
-\r
-  for (Index = 0; Index < Interface.NumEndpoints; Index++) {\r
-    UsbIo->UsbGetEndpointDescriptor (\r
-            UsbIo,\r
-            Index,\r
-            &EndpointDescriptor\r
-            );\r
-\r
-    if ((EndpointDescriptor.EndpointAddress & 0x80) == 0) {\r
-      continue;\r
-    }\r
-\r
-    if (EndpointDescriptor.Attributes != 0x03) {\r
-      continue;\r
-    }\r
-\r
-    Dev->HubEndpointAddress = EndpointDescriptor.EndpointAddress;\r
-    return TRUE;\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-EFI_STATUS\r
-UsbGetStringtable (\r
-  IN USB_IO_DEVICE     *Dev\r
-  )\r
-/*++\r
-  \r
-  Routine Description:\r
-    Get the string table stored in a usb device.\r
-    \r
-  Arguments:\r
-    Dev     -     UsbIoController device structure.\r
-    \r
-  Returns:\r
-    EFI_SUCCESS\r
-    EFI_UNSUPPORTED\r
-    EFI_OUT_OF_RESOURCES\r
-    \r
---*/\r
-{\r
-  EFI_STATUS                  Result;\r
-  UINT32                      Status;\r
-  EFI_USB_SUPPORTED_LANGUAGES *LanguageTable;\r
-  UINT8                       *Buffer;\r
-  UINT8                       *ptr;\r
-  UINTN                       Index;\r
-  UINTN                       LangTableSize;\r
-  EFI_USB_IO_PROTOCOL         *UsbIo;\r
-  UINT16                      TempBuffer;\r
-\r
-  UsbIo = &(Dev->UsbController[0]->UsbIo);\r
-\r
-  //\r
-  // We get first 2 byte of langID table,\r
-  // so we can have the whole table length\r
-  //\r
-  Result = UsbGetString (\r
-            UsbIo,\r
-            0,\r
-            0,\r
-            &TempBuffer,\r
-            2,\r
-            &Status\r
-            );\r
-  if (EFI_ERROR (Result)) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  LanguageTable = (EFI_USB_SUPPORTED_LANGUAGES *) &TempBuffer;\r
-\r
-  if (LanguageTable->Length == 0) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-  //\r
-  // If length is 2, then there is no string table\r
-  //\r
-  if (LanguageTable->Length == 2) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  Buffer = AllocateZeroPool (LanguageTable->Length);\r
-  if (Buffer == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  \r
-  //\r
-  // Now we get the whole LangID table\r
-  //\r
-  Result = UsbGetString (\r
-            UsbIo,\r
-            0,\r
-            0,\r
-            Buffer,\r
-            LanguageTable->Length,\r
-            &Status\r
-            );\r
-  if (EFI_ERROR (Result)) {\r
-    gBS->FreePool (Buffer);\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  LanguageTable = (EFI_USB_SUPPORTED_LANGUAGES *) Buffer;\r
-\r
-  //\r
-  // ptr point to the LangID table\r
-  //\r
-  ptr           = Buffer + 2;\r
-  LangTableSize = (LanguageTable->Length - 2) / 2;\r
-\r
-  for (Index = 0; Index < LangTableSize && Index < USB_MAXLANID; Index++) {\r
-    Dev->LangID[Index] = *((UINT16 *) ptr);\r
-    ptr += 2;\r
-  }\r
-\r
-  gBS->FreePool (Buffer);\r
-  LanguageTable = NULL;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-\r
-EFI_STATUS\r
-UsbGetAllConfigurations (\r
-  IN USB_IO_DEVICE     *UsbIoDevice\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    This function is to parse all the configuration descriptor.\r
-    \r
-  Arguments:\r
-    UsbIoDevice  -  USB_IO_DEVICE device structure.\r
-    \r
-  Returns:\r
-    EFI_SUCCESS\r
-    EFI_DEVICE_ERROR\r
-    EFI_OUT_OF_RESOURCES  \r
-\r
---*/\r
-{\r
-  EFI_STATUS              Result;\r
-  UINT32                  Status;\r
-  UINTN                   Index;\r
-  UINTN                   TotalLength;\r
-  UINT8                   *Buffer;\r
-  CONFIG_DESC_LIST_ENTRY  *ConfigDescEntry;\r
-  EFI_USB_IO_PROTOCOL     *UsbIo;\r
-\r
-  InitializeListHead (&UsbIoDevice->ConfigDescListHead);\r
-  UsbIo = &(UsbIoDevice->UsbController[0]->UsbIo);\r
-\r
-  for (Index = 0; Index < UsbIoDevice->DeviceDescriptor.NumConfigurations; Index++) {\r
-    ConfigDescEntry = NULL;\r
-\r
-    ConfigDescEntry = AllocateZeroPool (sizeof (CONFIG_DESC_LIST_ENTRY));\r
-    if (ConfigDescEntry == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-    //\r
-    // 1st only get 1st 4 bytes config descriptor,\r
-    // so we can know the whole length\r
-    //\r
-    Result = UsbGetDescriptor (\r
-              UsbIo,\r
-              (UINT16) ((USB_DT_CONFIG << 8) | Index),\r
-              0,\r
-              4,\r
-              &ConfigDescEntry->CongfigDescriptor,\r
-              &Status\r
-              );\r
-    if (EFI_ERROR (Result)) {\r
-      DEBUG ((gUSBErrorLevel, "First get config descriptor error\n"));\r
-      gBS->FreePool (ConfigDescEntry);\r
-      return EFI_DEVICE_ERROR;\r
-    }\r
-\r
-    TotalLength = ConfigDescEntry->CongfigDescriptor.TotalLength;\r
-\r
-    Buffer      = AllocateZeroPool (TotalLength);\r
-    if (Buffer == NULL) {\r
-      gBS->FreePool (ConfigDescEntry);\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-    //\r
-    // Then we get the total descriptors for this configuration\r
-    //\r
-    Result = UsbGetDescriptor (\r
-              UsbIo,\r
-              (UINT16) ((USB_DT_CONFIG << 8) | Index),\r
-              0,\r
-              (UINT16) TotalLength,\r
-              Buffer,\r
-              &Status\r
-              );\r
-    if (EFI_ERROR (Result)) {\r
-      DEBUG ((gUSBErrorLevel, "Get whole config descriptor error\n"));\r
-      gBS->FreePool (ConfigDescEntry);\r
-      gBS->FreePool (Buffer);\r
-      return EFI_DEVICE_ERROR;\r
-    }\r
-\r
-    InitializeListHead (&ConfigDescEntry->InterfaceDescListHead);\r
-\r
-    //\r
-    // Parse this whole configuration\r
-    //\r
-    Result = ParseThisConfig (ConfigDescEntry, Buffer, TotalLength);\r
-\r
-    if (EFI_ERROR (Result)) {\r
-      //\r
-      // Ignore this configuration, parse next one\r
-      //\r
-      gBS->FreePool (ConfigDescEntry);\r
-      gBS->FreePool (Buffer);\r
-      continue;\r
-    }\r
-\r
-    InsertTailList (&UsbIoDevice->ConfigDescListHead, &ConfigDescEntry->Link);\r
-\r
-    gBS->FreePool (Buffer);\r
-\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-GetExpectedDescriptor (\r
-  IN  UINT8     *Buffer,\r
-  IN  UINTN     Length,\r
-  IN  UINT8     DescType,\r
-  IN  UINT8     DescLength,\r
-  OUT UINTN     *ParsedBytes\r
-  )\r
-/*++\r
-  \r
-  Routine Description:\r
-    Get the start position of next wanted descriptor.\r
-    \r
-  Arguments:\r
-    Buffer      - Buffer to parse\r
-    Length      - Buffer length \r
-    DescType    - Descriptor type \r
-    DescLength  - Descriptor length\r
-    ParsedBytes - Parsed Bytes to return\r
-  Returns:\r
-    EFI_SUCCESS\r
-    EFI_DEVICE_ERROR\r
-\r
---*/\r
-{\r
-  UINT16  DescriptorHeader;\r
-  UINT8   Len;\r
-  UINT8   *ptr;\r
-  UINTN   Parsed;\r
-\r
-  Parsed  = 0;\r
-  ptr     = Buffer;\r
-\r
-  while (TRUE) {\r
-    //\r
-    // Buffer length should not less than Desc length\r
-    //\r
-    if (Length < DescLength) {\r
-      return EFI_DEVICE_ERROR;\r
-    }\r
-    //\r
-    // DescriptorHeader = *((UINT16 *)ptr), compatible with IPF\r
-    //\r
-    DescriptorHeader  = (UINT16) ((*(ptr + 1) << 8) | *ptr);\r
-\r
-    Len               = ptr[0];\r
-\r
-    //\r
-    // Check to see if it is a start of expected descriptor\r
-    //\r
-    if (DescriptorHeader == ((DescType << 8) | DescLength)) {\r
-      break;\r
-    }\r
-\r
-    if ((UINT8) (DescriptorHeader >> 8) == DescType) {\r
-      if (Len > DescLength) {\r
-        return EFI_DEVICE_ERROR;\r
-      }\r
-    }\r
-    //\r
-    // Descriptor length should be at least 2\r
-    // and should not exceed the buffer length\r
-    //\r
-    if (Len < 2) {\r
-      return EFI_DEVICE_ERROR;\r
-    }\r
-\r
-    if (Len > Length) {\r
-      return EFI_DEVICE_ERROR;\r
-    }\r
-    //\r
-    // Skip this mismatch descriptor\r
-    //\r
-    Length -= Len;\r
-    ptr += Len;\r
-    Parsed += Len;\r
-  }\r
-\r
-  *ParsedBytes = Parsed;\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-\r
-STATIC\r
-EFI_STATUS\r
-ParseThisEndpoint (\r
-  IN  ENDPOINT_DESC_LIST_ENTRY     *EndpointEntry,\r
-  IN  UINT8                        *Buffer,\r
-  IN  UINTN                        BufferLength,\r
-  OUT UINTN                        *ParsedBytes\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Get the start position of next wanted endpoint descriptor.\r
-\r
-  Arguments:\r
-    EndpointEntry - ENDPOINT_DESC_LIST_ENTRY\r
-    Buffer        - Buffer to parse \r
-    BufferLength  - Buffer Length\r
-    ParsedBytes   - Parsed Bytes to return\r
-  Returns:\r
-    EFI_SUCCESS\r
-    EFI_DEVICE_ERROR\r
-\r
---*/\r
-{\r
-  UINT8       *ptr;\r
-  EFI_STATUS  Status;\r
-  UINTN       SkipBytes;\r
-\r
-  //\r
-  // Skip some data for this interface\r
-  //\r
-  Status = GetExpectedDescriptor (\r
-            Buffer,\r
-            BufferLength,\r
-            USB_DT_ENDPOINT,\r
-            sizeof (EFI_USB_ENDPOINT_DESCRIPTOR),\r
-            &SkipBytes\r
-            );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  ptr           = Buffer + SkipBytes;\r
-  *ParsedBytes  = SkipBytes;\r
-\r
-  CopyMem (\r
-    &EndpointEntry->EndpointDescriptor,\r
-    ptr,\r
-    sizeof (EFI_USB_ENDPOINT_DESCRIPTOR)\r
-    );\r
-\r
-  *ParsedBytes += sizeof (EFI_USB_ENDPOINT_DESCRIPTOR);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-ParseThisInterface (\r
-  IN  INTERFACE_DESC_LIST_ENTRY     *InterfaceEntry,\r
-  IN  UINT8                         *Buffer,\r
-  IN  UINTN                         *BufferLen,\r
-  OUT UINTN                         *ParsedBytes\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Get the start position of next wanted interface descriptor.\r
-\r
-  Arguments:\r
-    InterfaceEntry - INTERFACE_DESC_LIST_ENTRY\r
-    Buffer         - Buffer to parse \r
-    BufferLength   - Buffer Length\r
-    ParsedBytes    - Parsed Bytes to return\r
-\r
-  Returns:\r
-    EFI_SUCCESS\r
-    EFI_DEVICE_ERROR\r
-\r
---*/\r
-{\r
-  UINT8                     *ptr;\r
-  UINTN                     SkipBytes;\r
-  UINTN                     Index;\r
-  UINTN                     Length;\r
-  UINTN                     Parsed;\r
-  ENDPOINT_DESC_LIST_ENTRY  *EndpointEntry;\r
-  EFI_STATUS                Status;\r
-\r
-  Parsed = 0;\r
-\r
-  //\r
-  // Skip some data for this interface\r
-  //\r
-  Status = GetExpectedDescriptor (\r
-            Buffer,\r
-            *BufferLen,\r
-            USB_DT_INTERFACE,\r
-            sizeof (EFI_USB_INTERFACE_DESCRIPTOR),\r
-            &SkipBytes\r
-            );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  ptr           = Buffer + SkipBytes;\r
-  *ParsedBytes  = SkipBytes;\r
-\r
-  //\r
-  // Copy the interface descriptor\r
-  //\r
-  CopyMem (\r
-    &InterfaceEntry->InterfaceDescriptor,\r
-    ptr,\r
-    sizeof (EFI_USB_INTERFACE_DESCRIPTOR)\r
-    );\r
-\r
-  ptr = Buffer + sizeof (EFI_USB_INTERFACE_DESCRIPTOR);\r
-  *ParsedBytes += sizeof (EFI_USB_INTERFACE_DESCRIPTOR);\r
-\r
-  InitializeListHead (&InterfaceEntry->EndpointDescListHead);\r
-\r
-  Length = *BufferLen - SkipBytes - sizeof (EFI_USB_INTERFACE_DESCRIPTOR);\r
-\r
-  for (Index = 0; Index < InterfaceEntry->InterfaceDescriptor.NumEndpoints; Index++) {\r
-    EndpointEntry = AllocateZeroPool (sizeof (ENDPOINT_DESC_LIST_ENTRY));\r
-    if (EndpointEntry == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-    \r
-    //\r
-    // Parses all the endpoint descriptors within this interface.\r
-    //\r
-    Status = ParseThisEndpoint (EndpointEntry, ptr, Length, &Parsed);\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      gBS->FreePool (EndpointEntry);\r
-      return Status;\r
-    }\r
-\r
-    InsertTailList (\r
-      &InterfaceEntry->EndpointDescListHead,\r
-      &EndpointEntry->Link\r
-      );\r
-\r
-    Length -= Parsed;\r
-    ptr += Parsed;\r
-    *ParsedBytes += Parsed;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-ParseThisConfig (\r
-  IN CONFIG_DESC_LIST_ENTRY     *ConfigDescEntry,\r
-  IN UINT8                      *Buffer,\r
-  IN UINTN                      Length\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Parse the current configuration descriptior.\r
-\r
-  Arguments:\r
-    ConfigDescEntry - CONFIG_DESC_LIST_ENTRY\r
-    Buffer          - Buffer to parse \r
-    Length          - Buffer Length\r
-\r
-  Returns\r
-    EFI_SUCCESS\r
-    EFI_DEVICE_ERROR\r
-\r
---*/\r
-{\r
-  UINT8                     *ptr;\r
-  UINT8                     NumInterface;\r
-  UINTN                     Index;\r
-  INTERFACE_DESC_LIST_ENTRY *InterfaceEntry;\r
-  UINTN                     SkipBytes;\r
-  UINTN                     Parsed;\r
-  EFI_STATUS                Status;\r
-  UINTN                     LengthLeft;\r
-\r
-  Parsed = 0;\r
-\r
-  //\r
-  //  First skip the current config descriptor;\r
-  //\r
-  Status = GetExpectedDescriptor (\r
-            Buffer,\r
-            Length,\r
-            USB_DT_CONFIG,\r
-            sizeof (EFI_USB_CONFIG_DESCRIPTOR),\r
-            &SkipBytes\r
-            );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  ptr = Buffer + SkipBytes;\r
-\r
-  CopyMem (\r
-    &ConfigDescEntry->CongfigDescriptor,\r
-    ptr,\r
-    sizeof (EFI_USB_CONFIG_DESCRIPTOR)\r
-    );\r
-\r
-  NumInterface = ConfigDescEntry->CongfigDescriptor.NumInterfaces;\r
-\r
-  //\r
-  // Skip size of Configuration Descriptor\r
-  //\r
-  ptr += sizeof (EFI_USB_CONFIG_DESCRIPTOR);\r
-\r
-  LengthLeft = Length - SkipBytes - sizeof (EFI_USB_CONFIG_DESCRIPTOR);\r
-\r
-  for (Index = 0; Index < NumInterface; Index++) {\r
-    //\r
-    // Parse all Interface\r
-    //\r
-    InterfaceEntry = AllocateZeroPool (sizeof (INTERFACE_DESC_LIST_ENTRY));\r
-    if (InterfaceEntry == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-\r
-    Status = ParseThisInterface (InterfaceEntry, ptr, &LengthLeft, &Parsed);\r
-    if (EFI_ERROR (Status)) {\r
-      gBS->FreePool (InterfaceEntry);\r
-      return Status;\r
-    }\r
-\r
-    InsertTailList (\r
-      &ConfigDescEntry->InterfaceDescListHead,\r
-      &InterfaceEntry->Link\r
-      );\r
-\r
-    //\r
-    // Parsed for next interface\r
-    //\r
-    LengthLeft -= Parsed;\r
-    ptr += Parsed;\r
-  }\r
-  //\r
-  // Parse for additional alt setting;\r
-  //\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-UsbSetConfiguration (\r
-  IN USB_IO_DEVICE     *UsbIoDev,\r
-  IN UINTN             ConfigurationValue\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Set the device to a configuration value.\r
-    \r
-  Arguments:\r
-    UsbIoDev            -   USB_IO_DEVICE to be set configuration\r
-    ConfigrationValue   -   The configuration value to be set to that device\r
-    \r
-  Returns:\r
-    EFI_SUCCESS\r
-    EFI_DEVICE_ERROR\r
-    \r
---*/\r
-{\r
-  LIST_ENTRY              *NextEntry;\r
-  CONFIG_DESC_LIST_ENTRY  *ConfigEntry;\r
-  UINT32                  Status;\r
-  EFI_STATUS              Result;\r
-  EFI_USB_IO_PROTOCOL     *UsbIo;\r
-\r
-  UsbIo     = &(UsbIoDev->UsbController[0]->UsbIo);\r
-  NextEntry = UsbIoDev->ConfigDescListHead.ForwardLink;\r
-\r
-  while (NextEntry != &UsbIoDev->ConfigDescListHead) {\r
-    //\r
-    // Get one entry\r
-    //\r
-    ConfigEntry = (CONFIG_DESC_LIST_ENTRY *) NextEntry;\r
-    if (ConfigEntry->CongfigDescriptor.ConfigurationValue == ConfigurationValue) {\r
-      //\r
-      // Find one, set to the active configuration\r
-      //\r
-      UsbIoDev->ActiveConfig = ConfigEntry;\r
-      break;\r
-    }\r
-\r
-    NextEntry = NextEntry->ForwardLink;\r
-  }\r
-  //\r
-  // Next Entry should not be null\r
-  //\r
-  Result = UsbSetDeviceConfiguration (\r
-            UsbIo,\r
-            (UINT16) ConfigurationValue,\r
-            &Status\r
-            );\r
-\r
-  return Result;\r
-}\r
-\r
-EFI_STATUS\r
-UsbSetDefaultConfiguration (\r
-  IN  USB_IO_DEVICE      *UsbIoDev\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Set the device to a default configuration value.\r
-    \r
-  Arguments:\r
-    UsbIoDev       -    USB_IO_DEVICE to be set configuration\r
-    \r
-  Returns\r
-    EFI_SUCCESS\r
-    EFI_DEVICE_ERROR\r
-    \r
---*/\r
-{\r
-  CONFIG_DESC_LIST_ENTRY  *ConfigEntry;\r
-  UINT16                  ConfigValue;\r
-  LIST_ENTRY              *NextEntry;\r
-\r
-  if (IsListEmpty (&UsbIoDev->ConfigDescListHead)) {\r
-    return EFI_DEVICE_ERROR;\r
-  }\r
-\r
-  NextEntry   = UsbIoDev->ConfigDescListHead.ForwardLink;\r
-\r
-  ConfigEntry = (CONFIG_DESC_LIST_ENTRY *) NextEntry;\r
-  ConfigValue = ConfigEntry->CongfigDescriptor.ConfigurationValue;\r
-\r
-  return UsbSetConfiguration (UsbIoDev, ConfigValue);\r
-}\r
-\r
-VOID\r
-UsbDestroyAllConfiguration (\r
-  IN  USB_IO_DEVICE      *UsbIoDevice\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Delete all configuration data when device is not used.\r
-    \r
-  Arguments:\r
-    UsbIoDevice  - USB_IO_DEVICE to be set configuration\r
-  \r
-  Returns:\r
-    N/A\r
-    \r
---*/\r
-{\r
-  CONFIG_DESC_LIST_ENTRY    *ConfigEntry;\r
-  INTERFACE_DESC_LIST_ENTRY *InterfaceEntry;\r
-  ENDPOINT_DESC_LIST_ENTRY  *EndpointEntry;\r
-  LIST_ENTRY                *NextEntry;\r
-\r
-  //\r
-  // Delete all configuration descriptor data\r
-  //\r
-  ConfigEntry = (CONFIG_DESC_LIST_ENTRY *) UsbIoDevice->ConfigDescListHead.ForwardLink;\r
-\r
-  while (ConfigEntry != (CONFIG_DESC_LIST_ENTRY *) &UsbIoDevice->ConfigDescListHead) {\r
-    //\r
-    // Delete all its interface descriptors\r
-    //\r
-    InterfaceEntry = (INTERFACE_DESC_LIST_ENTRY *) ConfigEntry->InterfaceDescListHead.ForwardLink;\r
-\r
-    while (InterfaceEntry != (INTERFACE_DESC_LIST_ENTRY *) &ConfigEntry->InterfaceDescListHead) {\r
-      //\r
-      // Delete all its endpoint descriptors\r
-      //\r
-      EndpointEntry = (ENDPOINT_DESC_LIST_ENTRY *) InterfaceEntry->EndpointDescListHead.ForwardLink;\r
-      while (EndpointEntry != (ENDPOINT_DESC_LIST_ENTRY *) &InterfaceEntry->EndpointDescListHead) {\r
-        NextEntry = ((LIST_ENTRY *) EndpointEntry)->ForwardLink;\r
-        RemoveEntryList ((LIST_ENTRY *) EndpointEntry);\r
-        gBS->FreePool (EndpointEntry);\r
-        EndpointEntry = (ENDPOINT_DESC_LIST_ENTRY *) NextEntry;\r
-      }\r
-\r
-      NextEntry = ((LIST_ENTRY *) InterfaceEntry)->ForwardLink;\r
-      RemoveEntryList ((LIST_ENTRY *) InterfaceEntry);\r
-      gBS->FreePool (InterfaceEntry);\r
-      InterfaceEntry = (INTERFACE_DESC_LIST_ENTRY *) NextEntry;\r
-    }\r
-\r
-    NextEntry = ((LIST_ENTRY *) ConfigEntry)->ForwardLink;\r
-    RemoveEntryList ((LIST_ENTRY *) ConfigEntry);\r
-    gBS->FreePool (ConfigEntry);\r
-    ConfigEntry = (CONFIG_DESC_LIST_ENTRY *) NextEntry;\r
-  }\r
-}\r