]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi1.c
Retiring the ANT/JAVA build and removing the older EDK II packages that required...
[mirror_edk2.git] / EdkModulePkg / Bus / Usb / UsbCbi / Dxe / Cbi1 / cbi1.c
diff --git a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi1.c b/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi1.c
deleted file mode 100644 (file)
index d98d022..0000000
+++ /dev/null
@@ -1,850 +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
-  cbi1.c\r
-\r
-Abstract:\r
-    cbi1 transportation protocol implementation files\r
-\r
---*/\r
-\r
-#include "cbi.h"\r
-\r
-//\r
-// CBI Function prototypes\r
-//\r
-STATIC\r
-EFI_STATUS\r
-CBI1CommandPhase (\r
-  IN  USB_CBI_DEVICE          *UsbCbiDev,\r
-  IN  VOID                    *Command,\r
-  IN  UINT8                   CommandSize,\r
-  OUT UINT32                  *Result\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-CBI1DataPhase (\r
-  IN  USB_CBI_DEVICE          *UsbCbiDev,\r
-  IN  UINT32                  DataSize,\r
-  IN  OUT VOID                *DataBuffer,\r
-  IN  EFI_USB_DATA_DIRECTION  Direction,\r
-  IN  UINT16                  Timeout,\r
-  OUT UINT32                  *Result\r
-  );\r
-\r
-//\r
-// USB Atapi implementation\r
-//\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1AtapiCommand (\r
-  IN  EFI_USB_ATAPI_PROTOCOL    *This,\r
-  IN  VOID                      *Command,\r
-  IN  UINT8                     CommandSize,\r
-  IN  VOID                      *DataBuffer,\r
-  IN  UINT32                    BufferLength,\r
-  IN  EFI_USB_DATA_DIRECTION    Direction,\r
-  IN  UINT16                    TimeOutInMilliSeconds\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1MassStorageReset (\r
-  IN  EFI_USB_ATAPI_PROTOCOL      *This,\r
-  IN  BOOLEAN                     ExtendedVerification\r
-  );\r
-\r
-//\r
-// CBI1 Driver Binding Protocol\r
-//\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1DriverBindingSupported (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN EFI_HANDLE                     ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1DriverBindingStart (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN EFI_HANDLE                     ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1DriverBindingStop (\r
-  IN  EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN  EFI_HANDLE                     ControllerHandle,\r
-  IN  UINTN                          NumberOfChildren,\r
-  IN  EFI_HANDLE                     *ChildHandleBuffer\r
-  );\r
-\r
-STATIC\r
-VOID\r
-Cbi1ReportStatusCode (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath,\r
-  IN EFI_STATUS_CODE_TYPE      CodeType,\r
-  IN EFI_STATUS_CODE_VALUE     Value\r
-  );\r
-\r
-\r
-EFI_DRIVER_BINDING_PROTOCOL   gUsbCbi1DriverBinding = {\r
-  CBI1DriverBindingSupported,\r
-  CBI1DriverBindingStart,\r
-  CBI1DriverBindingStop,\r
-  0xa,\r
-  NULL,\r
-  NULL\r
-};\r
-\r
-STATIC EFI_USB_ATAPI_PROTOCOL CBI1AtapiProtocol = {\r
-  CBI1AtapiCommand,\r
-  CBI1MassStorageReset,\r
-  0\r
-};\r
-\r
-//\r
-// CBI1 Driver Binding implementation\r
-//\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1DriverBindingSupported (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN EFI_HANDLE                     ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Test to see if this driver supports ControllerHandle. Any ControllerHandle \r
-    than contains a BlockIo and DiskIo protocol can be supported.\r
-\r
-  Arguments:\r
-    This                - Protocol instance pointer.\r
-    ControllerHandle    - Handle of device to test\r
-    RemainingDevicePath - Not used\r
-\r
-  Returns:\r
-    EFI_SUCCESS         - This driver supports this device\r
-    EFI_ALREADY_STARTED - This driver is already running on this device\r
-    other               - This driver does not support this device\r
-\r
---*/\r
-{\r
-  EFI_STATUS                    Status;\r
-  EFI_USB_IO_PROTOCOL           *UsbIo;\r
-  EFI_USB_INTERFACE_DESCRIPTOR  InterfaceDescriptor;\r
-\r
-  //\r
-  // Check if the Controller supports USB IO protocol\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiUsbIoProtocolGuid,\r
-                  (VOID **) &UsbIo,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-  //\r
-  // Get the Controller interface descriptor\r
-  //\r
-  Status = UsbIo->UsbGetInterfaceDescriptor (\r
-                    UsbIo,\r
-                    &InterfaceDescriptor\r
-                    );\r
-  if (EFI_ERROR (Status)) {\r
-    goto Exit;\r
-  }\r
-  //\r
-  // Bug here: just let Vendor specific CBI protocol get supported\r
-  //\r
-  if (!((InterfaceDescriptor.InterfaceClass == 0xFF) &&\r
-        (InterfaceDescriptor.InterfaceProtocol == 0))) {\r
-    Status = EFI_UNSUPPORTED;\r
-    goto Exit;\r
-  }\r
-\r
-Exit:\r
-  gBS->CloseProtocol (\r
-        ControllerHandle,\r
-        &gEfiUsbIoProtocolGuid,\r
-        This->DriverBindingHandle,\r
-        ControllerHandle\r
-        );\r
-  return Status;\r
-\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1DriverBindingStart (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN EFI_HANDLE                     ControllerHandle,\r
-  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Start this driver on ControllerHandle by opening a Block IO and Disk IO \r
-    protocol, reading Device Path, and creating a child handle with a \r
-    Disk IO and device path protocol.\r
-\r
-  Arguments:\r
-    This                - Protocol instance pointer.\r
-    ControllerHandle    - Handle of device to bind driver to\r
-    RemainingDevicePath - Not used\r
-\r
-  Returns:\r
-    EFI_SUCCESS         - This driver is added to DeviceHandle\r
-    EFI_ALREADY_STARTED - This driver is already running on DeviceHandle\r
-    other               - This driver does not support this device\r
-\r
---*/\r
-{\r
-  USB_CBI_DEVICE                *UsbCbiDev;\r
-  UINT8                         Index;\r
-  EFI_USB_ENDPOINT_DESCRIPTOR   EndpointDescriptor;\r
-  EFI_USB_INTERFACE_DESCRIPTOR  InterfaceDescriptor;\r
-  EFI_STATUS                    Status;\r
-  EFI_USB_IO_PROTOCOL           *UsbIo;\r
-  BOOLEAN                       Found;\r
-\r
-  Found = FALSE;\r
-  //\r
-  // Check if the Controller supports USB IO protocol\r
-  //\r
-  UsbCbiDev = NULL;\r
-\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiUsbIoProtocolGuid,\r
-                  (VOID **) &UsbIo,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-  //\r
-  // Get the controller interface descriptor\r
-  //\r
-  Status = UsbIo->UsbGetInterfaceDescriptor (\r
-                    UsbIo,\r
-                    &InterfaceDescriptor\r
-                    );\r
-  if (EFI_ERROR (Status)) {\r
-    goto ErrorExit;\r
-  }\r
-\r
-  CBI1AtapiProtocol.CommandProtocol = InterfaceDescriptor.InterfaceSubClass;\r
-\r
-  UsbCbiDev                         = AllocateZeroPool (sizeof (USB_CBI_DEVICE));\r
-  if (UsbCbiDev == NULL) {\r
-    Status = EFI_OUT_OF_RESOURCES;\r
-    goto ErrorExit;\r
-  }\r
-\r
-  UsbCbiDev->Signature            = USB_CBI_DEVICE_SIGNATURE;\r
-  UsbCbiDev->UsbIo                = UsbIo;\r
-  CopyMem (&UsbCbiDev->InterfaceDescriptor, &InterfaceDescriptor, sizeof (InterfaceDescriptor));\r
-  CopyMem (&UsbCbiDev->UsbAtapiProtocol   , &CBI1AtapiProtocol,   sizeof (CBI1AtapiProtocol));\r
-\r
-  //\r
-  // Get the Device Path Protocol on Controller's handle\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  (VOID **) &UsbCbiDev->DevicePath,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ErrorExit;\r
-  }\r
-\r
-  for (Index = 0; Index < InterfaceDescriptor.NumEndpoints; Index++) {\r
-    UsbIo->UsbGetEndpointDescriptor (\r
-            UsbIo,\r
-            Index,\r
-            &EndpointDescriptor\r
-            );\r
-\r
-    //\r
-    // We parse bulk endpoint\r
-    //\r
-    if (EndpointDescriptor.Attributes == 0x02) {\r
-      if (EndpointDescriptor.EndpointAddress & 0x80) {\r
-        CopyMem (&UsbCbiDev->BulkInEndpointDescriptor, &EndpointDescriptor, sizeof (EndpointDescriptor));\r
-         } else {\r
-        CopyMem (&UsbCbiDev->BulkOutEndpointDescriptor, &EndpointDescriptor, sizeof (EndpointDescriptor));\r
-         }\r
-\r
-      Found = TRUE;\r
-    }\r
-    //\r
-    // We parse interrupt endpoint\r
-    //\r
-    if (EndpointDescriptor.Attributes == 0x03) {\r
-      CopyMem (&UsbCbiDev->InterruptEndpointDescriptor, &EndpointDescriptor, sizeof (EndpointDescriptor));\r
-      Found = TRUE;\r
-    }\r
-\r
-  }\r
-  //\r
-  // Double check we have these\r
-  //\r
-  if (!Found) {\r
-    goto ErrorExit;\r
-  }\r
-  //\r
-  // After installing Usb-Atapi protocol onto this handle\r
-  // it will be called by upper layer drivers such as Fat\r
-  //\r
-  Cbi1ReportStatusCode (\r
-    UsbCbiDev->DevicePath,\r
-    EFI_PROGRESS_CODE,\r
-    (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_ENABLE)\r
-    );\r
-\r
-  Status = gBS->InstallProtocolInterface (\r
-                  &ControllerHandle,\r
-                  &gEfiUsbAtapiProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &UsbCbiDev->UsbAtapiProtocol\r
-                  );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ErrorExit;\r
-  }\r
-\r
-  UsbCbiDev->ControllerNameTable = NULL;\r
-  AddUnicodeString (\r
-    "eng",\r
-    gUsbCbi1ComponentName.SupportedLanguages,\r
-    &UsbCbiDev->ControllerNameTable,\r
-    (CHAR16 *) L"Usb Cbi1 Mass Storage"\r
-    );\r
-\r
-  return EFI_SUCCESS;\r
-\r
-ErrorExit:\r
-  gBS->CloseProtocol (\r
-        ControllerHandle,\r
-        &gEfiUsbIoProtocolGuid,\r
-        This->DriverBindingHandle,\r
-        ControllerHandle\r
-        );\r
-  if (UsbCbiDev != NULL) {\r
-    gBS->FreePool (UsbCbiDev);\r
-  }\r
-\r
-  return Status;\r
-\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1DriverBindingStop (\r
-  IN  EFI_DRIVER_BINDING_PROTOCOL    *This,\r
-  IN  EFI_HANDLE                     ControllerHandle,\r
-  IN  UINTN                          NumberOfChildren,\r
-  IN  EFI_HANDLE                     *ChildHandleBuffer\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Stop this driver on ControllerHandle. Support stoping any child handles \r
-    created by this driver.\r
-\r
-  Arguments:\r
-    This              - Protocol instance pointer.\r
-    ControllerHandle  - Handle of device to stop driver on \r
-    NumberOfChildren  - Number of Children in the ChildHandleBuffer\r
-    ChildHandleBuffer - List of handles for the children we need to stop.\r
-\r
-  Returns:\r
-    EFI_SUCCESS         - This driver is removed DeviceHandle\r
-    EFI_UNSUPPORTED     - Can't open the gEfiUsbAtapiProtocolGuid protocol \r
-    other               - This driver was not removed from this device\r
-   \r
---*/\r
-{\r
-  EFI_STATUS              Status;\r
-  EFI_USB_ATAPI_PROTOCOL  *CBI1AtapiProtocol;\r
-  USB_CBI_DEVICE          *UsbCbiDev;\r
-\r
-  //\r
-  // Get our context back.\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiUsbAtapiProtocolGuid,\r
-                  (VOID **) &CBI1AtapiProtocol,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
-\r
-  UsbCbiDev = USB_CBI_DEVICE_FROM_THIS (CBI1AtapiProtocol);\r
-\r
-  Cbi1ReportStatusCode (\r
-    UsbCbiDev->DevicePath,\r
-    EFI_PROGRESS_CODE,\r
-    (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_DISABLE)\r
-    );\r
-\r
-  Status = gBS->UninstallProtocolInterface (\r
-                  ControllerHandle,\r
-                  &gEfiUsbAtapiProtocolGuid,\r
-                  &UsbCbiDev->UsbAtapiProtocol\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  Status = gBS->CloseProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiUsbIoProtocolGuid,\r
-                  This->DriverBindingHandle,\r
-                  ControllerHandle\r
-                  );\r
-  gBS->FreePool (UsbCbiDev);\r
-\r
-  return Status;\r
-\r
-}\r
-//\r
-// CBI1 command\r
-//\r
-STATIC\r
-EFI_STATUS\r
-CBI1CommandPhase (\r
-  IN  USB_CBI_DEVICE          *UsbCbiDev,\r
-  IN  VOID                    *Command,\r
-  IN  UINT8                   CommandSize,\r
-  OUT UINT32                  *Result\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    In order to make consistence, CBI transportation protocol does only use\r
-     the first 3 parameters. Other parameters are not used here.\r
-\r
-  Arguments:\r
-    UsbCbiDev    - USB_CBI_DEVICE\r
-    Command      - Command to send \r
-    CommandSize  - Command Size\r
-    Result       - Result to return\r
-\r
-  Returns:\r
-    EFI_SUCCESS         - This driver is removed DeviceHandle\r
-    other               - This driver was not removed from this device \r
---*/\r
-{\r
-  EFI_STATUS              Status;\r
-  EFI_USB_IO_PROTOCOL     *UsbIo;\r
-  EFI_USB_DEVICE_REQUEST  Request;\r
-  UINT32                  TimeOutInMilliSeconds;\r
-\r
-  UsbIo = UsbCbiDev->UsbIo;\r
-\r
-  ZeroMem (&Request, sizeof (EFI_USB_DEVICE_REQUEST));\r
-\r
-  //\r
-  // Device request see CBI specification\r
-  //\r
-  Request.RequestType   = 0x21;\r
-  Request.Length        = CommandSize;\r
-\r
-  TimeOutInMilliSeconds = 1000;\r
-\r
-  Status = UsbIo->UsbControlTransfer (\r
-                    UsbIo,\r
-                    &Request,\r
-                    EfiUsbDataOut,\r
-                    TimeOutInMilliSeconds,\r
-                    Command,\r
-                    CommandSize,\r
-                    Result\r
-                    );\r
-\r
-  return Status;\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-CBI1DataPhase (\r
-  IN  USB_CBI_DEVICE              *UsbCbiDev,\r
-  IN  UINT32                      DataSize,\r
-  IN  OUT VOID                    *DataBuffer,\r
-  IN  EFI_USB_DATA_DIRECTION      Direction,\r
-  IN  UINT16                      Timeout,\r
-  OUT UINT32                      *Result\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  CBI1 Data Phase\r
-\r
-Arguments:\r
-\r
-  UsbCbiDev   - USB_CBI_DEVICE\r
-  DataSize    - Data Size\r
-  DataBuffer  - Data Buffer\r
-  Direction   - IN/OUT/NODATA\r
-  Timeout     - Time out value in milliseconds\r
-  Result      - Transfer result\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS - Success\r
-\r
---*/\r
-{\r
-  EFI_STATUS          Status;\r
-  EFI_USB_IO_PROTOCOL *UsbIo;\r
-  UINT8               EndpointAddr;\r
-  UINTN               Remain;\r
-  UINTN               Increment;\r
-  UINT32              MaxPacketLen;\r
-  UINT8               *BufferPtr;\r
-\r
-  UsbIo     = UsbCbiDev->UsbIo;\r
-\r
-  Remain    = DataSize;\r
-  BufferPtr = (UINT8 *) DataBuffer;\r
-\r
-  //\r
-  // retrieve the the max packet length of the given endpoint\r
-  //\r
-  if (Direction == EfiUsbDataIn) {\r
-    MaxPacketLen  = (UsbCbiDev->BulkInEndpointDescriptor).MaxPacketSize;\r
-    EndpointAddr  = (UsbCbiDev->BulkInEndpointDescriptor).EndpointAddress;\r
-  } else {\r
-    MaxPacketLen  = (UsbCbiDev->BulkOutEndpointDescriptor).MaxPacketSize;\r
-    EndpointAddr  = (UsbCbiDev->BulkOutEndpointDescriptor).EndpointAddress;\r
-  }\r
-\r
-  while (Remain > 0) {\r
-    //\r
-    // Using 15 packets to aVOID Bitstuff error\r
-    //\r
-    if (Remain > 15 * MaxPacketLen) {\r
-      Increment = 15 * MaxPacketLen;\r
-    } else {\r
-      Increment = Remain;\r
-    }\r
-\r
-    Status = UsbIo->UsbBulkTransfer (\r
-                      UsbIo,\r
-                      EndpointAddr,\r
-                      BufferPtr,\r
-                      &Increment,\r
-                      Timeout,\r
-                      Result\r
-                      );\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      goto ErrorExit;\r
-    }\r
-\r
-    BufferPtr += Increment;\r
-    Remain -= Increment;\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-\r
-ErrorExit:\r
-\r
-  if (Direction == EfiUsbDataIn) {\r
-    Cbi1ReportStatusCode (\r
-      UsbCbiDev->DevicePath,\r
-      EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
-      (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_EC_INPUT_ERROR)\r
-      );\r
-  } else {\r
-    Cbi1ReportStatusCode (\r
-      UsbCbiDev->DevicePath,\r
-      EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
-      (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_EC_OUTPUT_ERROR)\r
-      );\r
-  }\r
-\r
-  if (((*Result) & EFI_USB_ERR_STALL) == EFI_USB_ERR_STALL) {\r
-    //\r
-    // just endpoint stall happens\r
-    //\r
-    UsbClearEndpointHalt (\r
-      UsbIo,\r
-      EndpointAddr,\r
-      Result\r
-      );\r
-  }\r
-\r
-  return Status;\r
-}\r
-//\r
-// CBI1 USB ATAPI Protocol\r
-//\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1MassStorageReset (\r
-  IN  EFI_USB_ATAPI_PROTOCOL      *This,\r
-  IN  BOOLEAN                     ExtendedVerification\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Reset CBI Devices\r
-    \r
-  Arguments:\r
-    This                    - Protocol instance pointer.\r
-    ExtendedVerification    - TRUE if we need to do strictly reset.\r
-\r
-  Returns:\r
-    EFI_SUCCESS         - Command succeeded.\r
-    EFI_DEVICE_ERROR    - Command failed.\r
-\r
---*/\r
-{\r
-  UINT8               ResetCommand[12];\r
-  EFI_USB_IO_PROTOCOL *UsbIo;\r
-  USB_CBI_DEVICE      *UsbCbiDev;\r
-  UINT8               EndpointAddr;\r
-  UINT32              Result;\r
-\r
-  UsbCbiDev = USB_CBI_DEVICE_FROM_THIS (This);\r
-  UsbIo     = UsbCbiDev->UsbIo;\r
-\r
-  Cbi1ReportStatusCode (\r
-    UsbCbiDev->DevicePath,\r
-    EFI_PROGRESS_CODE,\r
-    (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_RESET)\r
-    );\r
-\r
-  if (ExtendedVerification) {\r
-    UsbIo->UsbPortReset (UsbIo);\r
-  }\r
-  //\r
-  // CBI reset command protocol\r
-  //\r
-  SetMem (ResetCommand, sizeof (ResetCommand), 0xff);\r
-  ResetCommand[0] = 0x1d;\r
-  ResetCommand[1] = 0x04;\r
-\r
-  CBI1CommandPhase (\r
-    UsbCbiDev,\r
-    ResetCommand,\r
-    12,\r
-    &Result\r
-    );\r
-\r
-  //\r
-  // clear bulk in endpoint stall feature\r
-  //\r
-  EndpointAddr = UsbCbiDev->BulkInEndpointDescriptor.EndpointAddress;\r
-  UsbClearEndpointHalt (\r
-    UsbIo,\r
-    EndpointAddr,\r
-    &Result\r
-    );\r
-\r
-  //\r
-  // clear bulk out endpoint stall feature\r
-  //\r
-  EndpointAddr = UsbCbiDev->BulkOutEndpointDescriptor.EndpointAddress;\r
-  UsbClearEndpointHalt (\r
-    UsbIo,\r
-    EndpointAddr,\r
-    &Result\r
-    );\r
-\r
-  return EFI_SUCCESS;\r
-\r
-}\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CBI1AtapiCommand (\r
-  IN  EFI_USB_ATAPI_PROTOCOL  *This,\r
-  IN  VOID                    *Command,\r
-  IN  UINT8                   CommandSize,\r
-  IN  VOID                    *DataBuffer,\r
-  IN  UINT32                  BufferLength,\r
-  IN  EFI_USB_DATA_DIRECTION  Direction,\r
-  IN  UINT16                  TimeOutInMilliSeconds\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Send ATAPI command using CBI1 protocol.\r
-    \r
-  Arguments:\r
-    This              - Protocol instance pointer.\r
-    Command           - Command buffer \r
-    CommandSize       - Size of Command Buffer\r
-    DataBuffer        - Data buffer\r
-    BufferLength      - Length of Data buffer\r
-    Direction         - Data direction of this command\r
-    TimeOutInMilliSeconds - Timeout value in ms\r
-\r
-  Returns:\r
-    EFI_SUCCESS         - Command succeeded.\r
-    EFI_DEVICE_ERROR    - Command failed.\r
-\r
---*/\r
-{\r
-  EFI_STATUS      Status;\r
-  USB_CBI_DEVICE  *UsbCbiDev;\r
-  UINT32          Result;\r
-  UINT8           Index;\r
-  UINT8           MaxRetryNum;\r
-\r
-  UsbCbiDev   = USB_CBI_DEVICE_FROM_THIS (This);\r
-\r
-  MaxRetryNum = 3;\r
-\r
-  for (Index = 0; Index < MaxRetryNum; Index++) {\r
-  \r
-    //\r
-    // First send ATAPI command through CBI1\r
-    //\r
-    Status = CBI1CommandPhase (\r
-              UsbCbiDev,\r
-              Command,\r
-              CommandSize,\r
-              &Result\r
-              );\r
-    if (EFI_ERROR (Status)) {\r
-\r
-      switch (Result) {\r
-\r
-      case EFI_USB_NOERROR:\r
-      case EFI_USB_ERR_STALL:\r
-      case EFI_USB_ERR_SYSTEM:\r
-        return EFI_DEVICE_ERROR;\r
-\r
-      default:\r
-        continue;\r
-        break;\r
-      }\r
-    } else {\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (Index == MaxRetryNum) {\r
-    return EFI_DEVICE_ERROR;\r
-  }\r
-\r
-  for (Index = 0; Index < MaxRetryNum; Index++) {\r
-    //\r
-    // Send/Get Data if there is a Data Stage\r
-    //\r
-    switch (Direction) {\r
-\r
-    case EfiUsbDataIn:\r
-    case EfiUsbDataOut:\r
-      Status = CBI1DataPhase (\r
-                UsbCbiDev,\r
-                BufferLength,\r
-                DataBuffer,\r
-                Direction,\r
-                TimeOutInMilliSeconds,\r
-                &Result\r
-                );\r
-\r
-      if (EFI_ERROR (Status)) {\r
-        switch (Result) {\r
-\r
-        case EFI_USB_NOERROR:\r
-        case EFI_USB_ERR_STALL:\r
-        case EFI_USB_ERR_SYSTEM:\r
-          return EFI_DEVICE_ERROR;\r
-\r
-        default:\r
-          continue;\r
-          break;\r
-        }\r
-\r
-      } else {\r
-\r
-        return EFI_SUCCESS;\r
-      }\r
-      break;\r
-\r
-    case EfiUsbNoData:\r
-      return EFI_SUCCESS;\r
-    }\r
-  }\r
-  //\r
-  // If goes here, means met error.\r
-  //\r
-  return EFI_DEVICE_ERROR;\r
-}\r
-\r
-STATIC\r
-VOID\r
-Cbi1ReportStatusCode (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath,\r
-  IN EFI_STATUS_CODE_TYPE      CodeType,\r
-  IN EFI_STATUS_CODE_VALUE     Value\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Report Status Code in Usb Cbi1 Driver\r
-\r
-  Arguments:\r
-    DevicePath  - Use this to get Device Path\r
-    CodeType    - Status Code Type\r
-    CodeValue   - Status Code Value\r
-\r
-  Returns:\r
-    None\r
-\r
---*/\r
-{\r
-  REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
-    CodeType,\r
-    Value,\r
-    DevicePath\r
-    );\r
-\r
-}\r