diff options
Diffstat (limited to 'EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1')
-rw-r--r-- | EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/ComponentName.c | 181 | ||||
-rw-r--r-- | EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/UsbCbi1.msa | 84 | ||||
-rw-r--r-- | EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi.h | 94 | ||||
-rw-r--r-- | EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi1.c | 850 |
4 files changed, 0 insertions, 1209 deletions
diff --git a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/ComponentName.c b/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/ComponentName.c deleted file mode 100644 index 316c7f4c55..0000000000 --- a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/ComponentName.c +++ /dev/null @@ -1,181 +0,0 @@ -/*++
-
-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:
-
- ComponentName.c
-
-Abstract:
-
---*/
-
-#include "cbi.h"
-
-//
-// EFI Component Name Protocol
-//
-EFI_COMPONENT_NAME_PROTOCOL gUsbCbi1ComponentName = {
- UsbCbi1ComponentNameGetDriverName,
- UsbCbi1ComponentNameGetControllerName,
- "eng"
-};
-
-STATIC EFI_UNICODE_STRING_TABLE mUsbCbi1DriverNameTable[] = {
- { "eng", (CHAR16 *) L"Usb Cbi1 Mass Storage Driver" },
- { NULL , NULL }
-};
-
-
-EFI_STATUS
-EFIAPI
-UsbCbi1ComponentNameGetDriverName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN CHAR8 *Language,
- OUT CHAR16 **DriverName
- )
-/*++
-
- Routine Description:
- Retrieves a Unicode string that is the user readable name of the EFI Driver.
-
- Arguments:
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
- Language - A pointer to a three character ISO 639-2 language identifier.
- This is the language of the driver name that that the caller
- is requesting, and it must match one of the languages specified
- in SupportedLanguages. The number of languages supported by a
- driver is up to the driver writer.
- DriverName - A pointer to the Unicode string to return. This Unicode string
- is the name of the driver specified by This in the language
- specified by Language.
-
- Returns:
- EFI_SUCCESS - The Unicode string for the Driver specified by This
- and the language specified by Language was returned
- in DriverName.
- EFI_INVALID_PARAMETER - Language is NULL.
- EFI_INVALID_PARAMETER - DriverName is NULL.
- EFI_UNSUPPORTED - The driver specified by This does not support the
- language specified by Language.
-
---*/
-{
- return LookupUnicodeString (
- Language,
- gUsbCbi1ComponentName.SupportedLanguages,
- mUsbCbi1DriverNameTable,
- DriverName
- );
-}
-
-EFI_STATUS
-EFIAPI
-UsbCbi1ComponentNameGetControllerName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_HANDLE ChildHandle OPTIONAL,
- IN CHAR8 *Language,
- OUT CHAR16 **ControllerName
- )
-/*++
-
- Routine Description:
- Retrieves a Unicode string that is the user readable name of the controller
- that is being managed by an EFI Driver.
-
- Arguments:
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.
- ControllerHandle - The handle of a controller that the driver specified by
- This is managing. This handle specifies the controller
- whose name is to be returned.
- ChildHandle - The handle of the child controller to retrieve the name
- of. This is an optional parameter that may be NULL. It
- will be NULL for device drivers. It will also be NULL
- for a bus drivers that wish to retrieve the name of the
- bus controller. It will not be NULL for a bus driver
- that wishes to retrieve the name of a child controller.
- Language - A pointer to a three character ISO 639-2 language
- identifier. This is the language of the controller name
- that that the caller is requesting, and it must match one
- of the languages specified in SupportedLanguages. The
- number of languages supported by a driver is up to the
- driver writer.
- ControllerName - A pointer to the Unicode string to return. This Unicode
- string is the name of the controller specified by
- ControllerHandle and ChildHandle in the language specified
- by Language from the point of view of the driver specified
- by This.
-
- Returns:
- EFI_SUCCESS - The Unicode string for the user readable name in the
- language specified by Language for the driver
- specified by This was returned in DriverName.
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.
- EFI_INVALID_PARAMETER - Language is NULL.
- EFI_INVALID_PARAMETER - ControllerName is NULL.
- EFI_UNSUPPORTED - The driver specified by This is not currently managing
- the controller specified by ControllerHandle and
- ChildHandle.
- EFI_UNSUPPORTED - The driver specified by This does not support the
- language specified by Language.
-
---*/
-{
- EFI_STATUS Status;
- USB_CBI_DEVICE *UsbCbiDev;
- EFI_USB_ATAPI_PROTOCOL *UsbAtapi;
-
- //
- // This is a device driver, so ChildHandle must be NULL.
- //
- if (ChildHandle != NULL) {
- return EFI_UNSUPPORTED;
- }
-
- //
- // Make sure this driver is currently managing ControllerHandle
- //
- Status = EfiTestManagedDevice (
- ControllerHandle,
- gUsbCbi1DriverBinding.DriverBindingHandle,
- &gEfiUsbIoProtocolGuid
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Get the device context
- //
- Status = gBS->OpenProtocol (
- ControllerHandle,
- &gEfiUsbAtapiProtocolGuid,
- (VOID **) &UsbAtapi,
- gUsbCbi1DriverBinding.DriverBindingHandle,
- ControllerHandle,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
-
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- UsbCbiDev = USB_CBI_DEVICE_FROM_THIS (UsbAtapi);
-
- return LookupUnicodeString (
- Language,
- gUsbCbi1ComponentName.SupportedLanguages,
- UsbCbiDev->ControllerNameTable,
- ControllerName
- );
-
-}
diff --git a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/UsbCbi1.msa b/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/UsbCbi1.msa deleted file mode 100644 index 2a0a86b8ae..0000000000 --- a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/UsbCbi1.msa +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
- <MsaHeader>
- <ModuleName>UsbCbi1</ModuleName>
- <ModuleType>DXE_DRIVER</ModuleType>
- <GuidValue>B40612B2-A063-11d4-9A3A-0090273FC14D</GuidValue>
- <Version>1.0</Version>
- <Abstract>Component description file for UsbCbi1 module</Abstract>
- <Description>This module provides support for USB Control-Bulk-Interrupt Protocol with no command completion interrupt</Description>
- <Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
- <License>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.</License>
- <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
- </MsaHeader>
- <ModuleDefinitions>
- <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
- <BinaryModule>false</BinaryModule>
- <OutputFileBasename>UsbCbi1</OutputFileBasename>
- </ModuleDefinitions>
- <LibraryClassDefinitions>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>DebugLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiDriverModelLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiDriverEntryPoint</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>BaseLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>BaseMemoryLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>EdkUsbLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>ReportStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>MemoryAllocationLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiBootServicesTableLib</Keyword>
- </LibraryClass>
- </LibraryClassDefinitions>
- <SourceFiles>
- <Filename>cbi.h</Filename>
- <Filename>cbi1.c</Filename>
- <Filename>ComponentName.c</Filename>
- </SourceFiles>
- <PackageDependencies>
- <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
- <Package PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d"/>
- </PackageDependencies>
- <Protocols>
- <Protocol Usage="TO_START">
- <ProtocolCName>gEfiDevicePathProtocolGuid</ProtocolCName>
- </Protocol>
- <Protocol Usage="TO_START">
- <ProtocolCName>gEfiUsbIoProtocolGuid</ProtocolCName>
- </Protocol>
- <Protocol Usage="BY_START">
- <ProtocolCName>gEfiUsbAtapiProtocolGuid</ProtocolCName>
- </Protocol>
- </Protocols>
- <Externs>
- <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
- <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
- <Extern>
- <DriverBinding>gUsbCbi1DriverBinding</DriverBinding>
- <ComponentName>gUsbCbi1ComponentName</ComponentName>
- </Extern>
- </Externs>
-</ModuleSurfaceArea>
diff --git a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi.h b/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi.h deleted file mode 100644 index 77daa1a29b..0000000000 --- a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi.h +++ /dev/null @@ -1,94 +0,0 @@ -/*++
-
-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:
-
- cbi.h
-
-Abstract:
-
- USB CBI transportation protocol definitions.
---*/
-
-#ifndef _CBI_H
-#define _CBI_H
-
-
-#include <IndustryStandard/Usb.h>
-
-#define bit(a) (1 << (a))
-
-#define MASS_STORAGE_CLASS 0x08
-#define CBI0_INTERFACE_PROTOCOL 0x00
-#define CBI1_INTERFACE_PROTOCOL 0x01
-
-//
-// in millisecond unit
-//
-#define STALL_1_SECOND 1000
-
-#pragma pack(1)
-//
-// Data block definition for transportation through interrupt endpoint
-//
-typedef struct {
- UINT8 bType;
- UINT8 bValue;
-} INTERRUPT_DATA_BLOCK;
-
-#pragma pack()
-
-#define USB_CBI_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('u', 'c', 'b', 'i')
-
-//
-// Device structure for CBI, interrupt endpoint may be not used in
-// CBI1 Protocol
-//
-typedef struct {
- UINT32 Signature;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- EFI_USB_ATAPI_PROTOCOL UsbAtapiProtocol;
- EFI_USB_IO_PROTOCOL *UsbIo;
- EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
- EFI_USB_ENDPOINT_DESCRIPTOR BulkInEndpointDescriptor;
- EFI_USB_ENDPOINT_DESCRIPTOR BulkOutEndpointDescriptor;
- EFI_USB_ENDPOINT_DESCRIPTOR InterruptEndpointDescriptor;
- EFI_UNICODE_STRING_TABLE *ControllerNameTable;
-} USB_CBI_DEVICE;
-
-#define USB_CBI_DEVICE_FROM_THIS(a) \
- CR(a, USB_CBI_DEVICE, UsbAtapiProtocol, USB_CBI_DEVICE_SIGNATURE)
-
-extern EFI_DRIVER_BINDING_PROTOCOL gUsbCbi1DriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL gUsbCbi1ComponentName;
-
-//
-// EFI Component Name Functions
-//
-EFI_STATUS
-EFIAPI
-UsbCbi1ComponentNameGetDriverName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN CHAR8 *Language,
- OUT CHAR16 **DriverName
- );
-
-EFI_STATUS
-EFIAPI
-UsbCbi1ComponentNameGetControllerName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_HANDLE ChildHandle OPTIONAL,
- IN CHAR8 *Language,
- OUT CHAR16 **ControllerName
- );
-
-#endif
diff --git a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi1.c b/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi1.c deleted file mode 100644 index d98d022a54..0000000000 --- a/EdkModulePkg/Bus/Usb/UsbCbi/Dxe/Cbi1/cbi1.c +++ /dev/null @@ -1,850 +0,0 @@ -/*++
-
-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:
-
- cbi1.c
-
-Abstract:
- cbi1 transportation protocol implementation files
-
---*/
-
-#include "cbi.h"
-
-//
-// CBI Function prototypes
-//
-STATIC
-EFI_STATUS
-CBI1CommandPhase (
- IN USB_CBI_DEVICE *UsbCbiDev,
- IN VOID *Command,
- IN UINT8 CommandSize,
- OUT UINT32 *Result
- );
-
-STATIC
-EFI_STATUS
-CBI1DataPhase (
- IN USB_CBI_DEVICE *UsbCbiDev,
- IN UINT32 DataSize,
- IN OUT VOID *DataBuffer,
- IN EFI_USB_DATA_DIRECTION Direction,
- IN UINT16 Timeout,
- OUT UINT32 *Result
- );
-
-//
-// USB Atapi implementation
-//
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1AtapiCommand (
- IN EFI_USB_ATAPI_PROTOCOL *This,
- IN VOID *Command,
- IN UINT8 CommandSize,
- IN VOID *DataBuffer,
- IN UINT32 BufferLength,
- IN EFI_USB_DATA_DIRECTION Direction,
- IN UINT16 TimeOutInMilliSeconds
- );
-
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1MassStorageReset (
- IN EFI_USB_ATAPI_PROTOCOL *This,
- IN BOOLEAN ExtendedVerification
- );
-
-//
-// CBI1 Driver Binding Protocol
-//
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
-
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
-
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-STATIC
-VOID
-Cbi1ReportStatusCode (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value
- );
-
-
-EFI_DRIVER_BINDING_PROTOCOL gUsbCbi1DriverBinding = {
- CBI1DriverBindingSupported,
- CBI1DriverBindingStart,
- CBI1DriverBindingStop,
- 0xa,
- NULL,
- NULL
-};
-
-STATIC EFI_USB_ATAPI_PROTOCOL CBI1AtapiProtocol = {
- CBI1AtapiCommand,
- CBI1MassStorageReset,
- 0
-};
-
-//
-// CBI1 Driver Binding implementation
-//
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-/*++
-
- Routine Description:
- Test to see if this driver supports ControllerHandle. Any ControllerHandle
- than contains a BlockIo and DiskIo protocol can be supported.
-
- Arguments:
- This - Protocol instance pointer.
- ControllerHandle - Handle of device to test
- RemainingDevicePath - Not used
-
- Returns:
- EFI_SUCCESS - This driver supports this device
- EFI_ALREADY_STARTED - This driver is already running on this device
- other - This driver does not support this device
-
---*/
-{
- EFI_STATUS Status;
- EFI_USB_IO_PROTOCOL *UsbIo;
- EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
-
- //
- // Check if the Controller supports USB IO protocol
- //
- Status = gBS->OpenProtocol (
- ControllerHandle,
- &gEfiUsbIoProtocolGuid,
- (VOID **) &UsbIo,
- This->DriverBindingHandle,
- ControllerHandle,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- //
- // Get the Controller interface descriptor
- //
- Status = UsbIo->UsbGetInterfaceDescriptor (
- UsbIo,
- &InterfaceDescriptor
- );
- if (EFI_ERROR (Status)) {
- goto Exit;
- }
- //
- // Bug here: just let Vendor specific CBI protocol get supported
- //
- if (!((InterfaceDescriptor.InterfaceClass == 0xFF) &&
- (InterfaceDescriptor.InterfaceProtocol == 0))) {
- Status = EFI_UNSUPPORTED;
- goto Exit;
- }
-
-Exit:
- gBS->CloseProtocol (
- ControllerHandle,
- &gEfiUsbIoProtocolGuid,
- This->DriverBindingHandle,
- ControllerHandle
- );
- return Status;
-
-}
-
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- )
-/*++
-
- Routine Description:
- Start this driver on ControllerHandle by opening a Block IO and Disk IO
- protocol, reading Device Path, and creating a child handle with a
- Disk IO and device path protocol.
-
- Arguments:
- This - Protocol instance pointer.
- ControllerHandle - Handle of device to bind driver to
- RemainingDevicePath - Not used
-
- Returns:
- EFI_SUCCESS - This driver is added to DeviceHandle
- EFI_ALREADY_STARTED - This driver is already running on DeviceHandle
- other - This driver does not support this device
-
---*/
-{
- USB_CBI_DEVICE *UsbCbiDev;
- UINT8 Index;
- EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
- EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
- EFI_STATUS Status;
- EFI_USB_IO_PROTOCOL *UsbIo;
- BOOLEAN Found;
-
- Found = FALSE;
- //
- // Check if the Controller supports USB IO protocol
- //
- UsbCbiDev = NULL;
-
- Status = gBS->OpenProtocol (
- ControllerHandle,
- &gEfiUsbIoProtocolGuid,
- (VOID **) &UsbIo,
- This->DriverBindingHandle,
- ControllerHandle,
- EFI_OPEN_PROTOCOL_BY_DRIVER
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
- //
- // Get the controller interface descriptor
- //
- Status = UsbIo->UsbGetInterfaceDescriptor (
- UsbIo,
- &InterfaceDescriptor
- );
- if (EFI_ERROR (Status)) {
- goto ErrorExit;
- }
-
- CBI1AtapiProtocol.CommandProtocol = InterfaceDescriptor.InterfaceSubClass;
-
- UsbCbiDev = AllocateZeroPool (sizeof (USB_CBI_DEVICE));
- if (UsbCbiDev == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto ErrorExit;
- }
-
- UsbCbiDev->Signature = USB_CBI_DEVICE_SIGNATURE;
- UsbCbiDev->UsbIo = UsbIo;
- CopyMem (&UsbCbiDev->InterfaceDescriptor, &InterfaceDescriptor, sizeof (InterfaceDescriptor));
- CopyMem (&UsbCbiDev->UsbAtapiProtocol , &CBI1AtapiProtocol, sizeof (CBI1AtapiProtocol));
-
- //
- // Get the Device Path Protocol on Controller's handle
- //
- Status = gBS->OpenProtocol (
- ControllerHandle,
- &gEfiDevicePathProtocolGuid,
- (VOID **) &UsbCbiDev->DevicePath,
- This->DriverBindingHandle,
- ControllerHandle,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
-
- if (EFI_ERROR (Status)) {
- goto ErrorExit;
- }
-
- for (Index = 0; Index < InterfaceDescriptor.NumEndpoints; Index++) {
- UsbIo->UsbGetEndpointDescriptor (
- UsbIo,
- Index,
- &EndpointDescriptor
- );
-
- //
- // We parse bulk endpoint
- //
- if (EndpointDescriptor.Attributes == 0x02) {
- if (EndpointDescriptor.EndpointAddress & 0x80) {
- CopyMem (&UsbCbiDev->BulkInEndpointDescriptor, &EndpointDescriptor, sizeof (EndpointDescriptor));
- } else {
- CopyMem (&UsbCbiDev->BulkOutEndpointDescriptor, &EndpointDescriptor, sizeof (EndpointDescriptor));
- }
-
- Found = TRUE;
- }
- //
- // We parse interrupt endpoint
- //
- if (EndpointDescriptor.Attributes == 0x03) {
- CopyMem (&UsbCbiDev->InterruptEndpointDescriptor, &EndpointDescriptor, sizeof (EndpointDescriptor));
- Found = TRUE;
- }
-
- }
- //
- // Double check we have these
- //
- if (!Found) {
- goto ErrorExit;
- }
- //
- // After installing Usb-Atapi protocol onto this handle
- // it will be called by upper layer drivers such as Fat
- //
- Cbi1ReportStatusCode (
- UsbCbiDev->DevicePath,
- EFI_PROGRESS_CODE,
- (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_ENABLE)
- );
-
- Status = gBS->InstallProtocolInterface (
- &ControllerHandle,
- &gEfiUsbAtapiProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &UsbCbiDev->UsbAtapiProtocol
- );
-
- if (EFI_ERROR (Status)) {
- goto ErrorExit;
- }
-
- UsbCbiDev->ControllerNameTable = NULL;
- AddUnicodeString (
- "eng",
- gUsbCbi1ComponentName.SupportedLanguages,
- &UsbCbiDev->ControllerNameTable,
- (CHAR16 *) L"Usb Cbi1 Mass Storage"
- );
-
- return EFI_SUCCESS;
-
-ErrorExit:
- gBS->CloseProtocol (
- ControllerHandle,
- &gEfiUsbIoProtocolGuid,
- This->DriverBindingHandle,
- ControllerHandle
- );
- if (UsbCbiDev != NULL) {
- gBS->FreePool (UsbCbiDev);
- }
-
- return Status;
-
-}
-
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- )
-/*++
-
- Routine Description:
- Stop this driver on ControllerHandle. Support stoping any child handles
- created by this driver.
-
- Arguments:
- This - Protocol instance pointer.
- ControllerHandle - Handle of device to stop driver on
- NumberOfChildren - Number of Children in the ChildHandleBuffer
- ChildHandleBuffer - List of handles for the children we need to stop.
-
- Returns:
- EFI_SUCCESS - This driver is removed DeviceHandle
- EFI_UNSUPPORTED - Can't open the gEfiUsbAtapiProtocolGuid protocol
- other - This driver was not removed from this device
-
---*/
-{
- EFI_STATUS Status;
- EFI_USB_ATAPI_PROTOCOL *CBI1AtapiProtocol;
- USB_CBI_DEVICE *UsbCbiDev;
-
- //
- // Get our context back.
- //
- Status = gBS->OpenProtocol (
- ControllerHandle,
- &gEfiUsbAtapiProtocolGuid,
- (VOID **) &CBI1AtapiProtocol,
- This->DriverBindingHandle,
- ControllerHandle,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if (EFI_ERROR (Status)) {
- return EFI_UNSUPPORTED;
- }
-
- UsbCbiDev = USB_CBI_DEVICE_FROM_THIS (CBI1AtapiProtocol);
-
- Cbi1ReportStatusCode (
- UsbCbiDev->DevicePath,
- EFI_PROGRESS_CODE,
- (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_DISABLE)
- );
-
- Status = gBS->UninstallProtocolInterface (
- ControllerHandle,
- &gEfiUsbAtapiProtocolGuid,
- &UsbCbiDev->UsbAtapiProtocol
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = gBS->CloseProtocol (
- ControllerHandle,
- &gEfiUsbIoProtocolGuid,
- This->DriverBindingHandle,
- ControllerHandle
- );
- gBS->FreePool (UsbCbiDev);
-
- return Status;
-
-}
-//
-// CBI1 command
-//
-STATIC
-EFI_STATUS
-CBI1CommandPhase (
- IN USB_CBI_DEVICE *UsbCbiDev,
- IN VOID *Command,
- IN UINT8 CommandSize,
- OUT UINT32 *Result
- )
-/*++
-
- Routine Description:
- In order to make consistence, CBI transportation protocol does only use
- the first 3 parameters. Other parameters are not used here.
-
- Arguments:
- UsbCbiDev - USB_CBI_DEVICE
- Command - Command to send
- CommandSize - Command Size
- Result - Result to return
-
- Returns:
- EFI_SUCCESS - This driver is removed DeviceHandle
- other - This driver was not removed from this device
---*/
-{
- EFI_STATUS Status;
- EFI_USB_IO_PROTOCOL *UsbIo;
- EFI_USB_DEVICE_REQUEST Request;
- UINT32 TimeOutInMilliSeconds;
-
- UsbIo = UsbCbiDev->UsbIo;
-
- ZeroMem (&Request, sizeof (EFI_USB_DEVICE_REQUEST));
-
- //
- // Device request see CBI specification
- //
- Request.RequestType = 0x21;
- Request.Length = CommandSize;
-
- TimeOutInMilliSeconds = 1000;
-
- Status = UsbIo->UsbControlTransfer (
- UsbIo,
- &Request,
- EfiUsbDataOut,
- TimeOutInMilliSeconds,
- Command,
- CommandSize,
- Result
- );
-
- return Status;
-}
-
-STATIC
-EFI_STATUS
-CBI1DataPhase (
- IN USB_CBI_DEVICE *UsbCbiDev,
- IN UINT32 DataSize,
- IN OUT VOID *DataBuffer,
- IN EFI_USB_DATA_DIRECTION Direction,
- IN UINT16 Timeout,
- OUT UINT32 *Result
- )
-/*++
-
-Routine Description:
-
- CBI1 Data Phase
-
-Arguments:
-
- UsbCbiDev - USB_CBI_DEVICE
- DataSize - Data Size
- DataBuffer - Data Buffer
- Direction - IN/OUT/NODATA
- Timeout - Time out value in milliseconds
- Result - Transfer result
-
-Returns:
-
- EFI_SUCCESS - Success
-
---*/
-{
- EFI_STATUS Status;
- EFI_USB_IO_PROTOCOL *UsbIo;
- UINT8 EndpointAddr;
- UINTN Remain;
- UINTN Increment;
- UINT32 MaxPacketLen;
- UINT8 *BufferPtr;
-
- UsbIo = UsbCbiDev->UsbIo;
-
- Remain = DataSize;
- BufferPtr = (UINT8 *) DataBuffer;
-
- //
- // retrieve the the max packet length of the given endpoint
- //
- if (Direction == EfiUsbDataIn) {
- MaxPacketLen = (UsbCbiDev->BulkInEndpointDescriptor).MaxPacketSize;
- EndpointAddr = (UsbCbiDev->BulkInEndpointDescriptor).EndpointAddress;
- } else {
- MaxPacketLen = (UsbCbiDev->BulkOutEndpointDescriptor).MaxPacketSize;
- EndpointAddr = (UsbCbiDev->BulkOutEndpointDescriptor).EndpointAddress;
- }
-
- while (Remain > 0) {
- //
- // Using 15 packets to aVOID Bitstuff error
- //
- if (Remain > 15 * MaxPacketLen) {
- Increment = 15 * MaxPacketLen;
- } else {
- Increment = Remain;
- }
-
- Status = UsbIo->UsbBulkTransfer (
- UsbIo,
- EndpointAddr,
- BufferPtr,
- &Increment,
- Timeout,
- Result
- );
-
- if (EFI_ERROR (Status)) {
- goto ErrorExit;
- }
-
- BufferPtr += Increment;
- Remain -= Increment;
- }
-
- return EFI_SUCCESS;
-
-ErrorExit:
-
- if (Direction == EfiUsbDataIn) {
- Cbi1ReportStatusCode (
- UsbCbiDev->DevicePath,
- EFI_ERROR_CODE | EFI_ERROR_MINOR,
- (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_EC_INPUT_ERROR)
- );
- } else {
- Cbi1ReportStatusCode (
- UsbCbiDev->DevicePath,
- EFI_ERROR_CODE | EFI_ERROR_MINOR,
- (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_EC_OUTPUT_ERROR)
- );
- }
-
- if (((*Result) & EFI_USB_ERR_STALL) == EFI_USB_ERR_STALL) {
- //
- // just endpoint stall happens
- //
- UsbClearEndpointHalt (
- UsbIo,
- EndpointAddr,
- Result
- );
- }
-
- return Status;
-}
-//
-// CBI1 USB ATAPI Protocol
-//
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1MassStorageReset (
- IN EFI_USB_ATAPI_PROTOCOL *This,
- IN BOOLEAN ExtendedVerification
- )
-/*++
-
- Routine Description:
- Reset CBI Devices
-
- Arguments:
- This - Protocol instance pointer.
- ExtendedVerification - TRUE if we need to do strictly reset.
-
- Returns:
- EFI_SUCCESS - Command succeeded.
- EFI_DEVICE_ERROR - Command failed.
-
---*/
-{
- UINT8 ResetCommand[12];
- EFI_USB_IO_PROTOCOL *UsbIo;
- USB_CBI_DEVICE *UsbCbiDev;
- UINT8 EndpointAddr;
- UINT32 Result;
-
- UsbCbiDev = USB_CBI_DEVICE_FROM_THIS (This);
- UsbIo = UsbCbiDev->UsbIo;
-
- Cbi1ReportStatusCode (
- UsbCbiDev->DevicePath,
- EFI_PROGRESS_CODE,
- (EFI_PERIPHERAL_REMOVABLE_MEDIA | EFI_P_PC_RESET)
- );
-
- if (ExtendedVerification) {
- UsbIo->UsbPortReset (UsbIo);
- }
- //
- // CBI reset command protocol
- //
- SetMem (ResetCommand, sizeof (ResetCommand), 0xff);
- ResetCommand[0] = 0x1d;
- ResetCommand[1] = 0x04;
-
- CBI1CommandPhase (
- UsbCbiDev,
- ResetCommand,
- 12,
- &Result
- );
-
- //
- // clear bulk in endpoint stall feature
- //
- EndpointAddr = UsbCbiDev->BulkInEndpointDescriptor.EndpointAddress;
- UsbClearEndpointHalt (
- UsbIo,
- EndpointAddr,
- &Result
- );
-
- //
- // clear bulk out endpoint stall feature
- //
- EndpointAddr = UsbCbiDev->BulkOutEndpointDescriptor.EndpointAddress;
- UsbClearEndpointHalt (
- UsbIo,
- EndpointAddr,
- &Result
- );
-
- return EFI_SUCCESS;
-
-}
-
-STATIC
-EFI_STATUS
-EFIAPI
-CBI1AtapiCommand (
- IN EFI_USB_ATAPI_PROTOCOL *This,
- IN VOID *Command,
- IN UINT8 CommandSize,
- IN VOID *DataBuffer,
- IN UINT32 BufferLength,
- IN EFI_USB_DATA_DIRECTION Direction,
- IN UINT16 TimeOutInMilliSeconds
- )
-/*++
-
- Routine Description:
- Send ATAPI command using CBI1 protocol.
-
- Arguments:
- This - Protocol instance pointer.
- Command - Command buffer
- CommandSize - Size of Command Buffer
- DataBuffer - Data buffer
- BufferLength - Length of Data buffer
- Direction - Data direction of this command
- TimeOutInMilliSeconds - Timeout value in ms
-
- Returns:
- EFI_SUCCESS - Command succeeded.
- EFI_DEVICE_ERROR - Command failed.
-
---*/
-{
- EFI_STATUS Status;
- USB_CBI_DEVICE *UsbCbiDev;
- UINT32 Result;
- UINT8 Index;
- UINT8 MaxRetryNum;
-
- UsbCbiDev = USB_CBI_DEVICE_FROM_THIS (This);
-
- MaxRetryNum = 3;
-
- for (Index = 0; Index < MaxRetryNum; Index++) {
-
- //
- // First send ATAPI command through CBI1
- //
- Status = CBI1CommandPhase (
- UsbCbiDev,
- Command,
- CommandSize,
- &Result
- );
- if (EFI_ERROR (Status)) {
-
- switch (Result) {
-
- case EFI_USB_NOERROR:
- case EFI_USB_ERR_STALL:
- case EFI_USB_ERR_SYSTEM:
- return EFI_DEVICE_ERROR;
-
- default:
- continue;
- break;
- }
- } else {
- break;
- }
- }
-
- if (Index == MaxRetryNum) {
- return EFI_DEVICE_ERROR;
- }
-
- for (Index = 0; Index < MaxRetryNum; Index++) {
- //
- // Send/Get Data if there is a Data Stage
- //
- switch (Direction) {
-
- case EfiUsbDataIn:
- case EfiUsbDataOut:
- Status = CBI1DataPhase (
- UsbCbiDev,
- BufferLength,
- DataBuffer,
- Direction,
- TimeOutInMilliSeconds,
- &Result
- );
-
- if (EFI_ERROR (Status)) {
- switch (Result) {
-
- case EFI_USB_NOERROR:
- case EFI_USB_ERR_STALL:
- case EFI_USB_ERR_SYSTEM:
- return EFI_DEVICE_ERROR;
-
- default:
- continue;
- break;
- }
-
- } else {
-
- return EFI_SUCCESS;
- }
- break;
-
- case EfiUsbNoData:
- return EFI_SUCCESS;
- }
- }
- //
- // If goes here, means met error.
- //
- return EFI_DEVICE_ERROR;
-}
-
-STATIC
-VOID
-Cbi1ReportStatusCode (
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value
- )
-/*++
-
- Routine Description:
- Report Status Code in Usb Cbi1 Driver
-
- Arguments:
- DevicePath - Use this to get Device Path
- CodeType - Status Code Type
- CodeValue - Status Code Value
-
- Returns:
- None
-
---*/
-{
- REPORT_STATUS_CODE_WITH_DEVICE_PATH (
- CodeType,
- Value,
- DevicePath
- );
-
-}
|