git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8353 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			206 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Definition of USB Mass Storage Class and its value, USB Mass Transport Protocol, 
 | |
|   and other common definitions.
 | |
| 
 | |
| Copyright (c) 2007 - 2008, 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.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _EFI_USBMASS_H_
 | |
| #define _EFI_USBMASS_H_
 | |
| 
 | |
| 
 | |
| #include <Uefi.h>
 | |
| 
 | |
| #include <Protocol/BlockIo.h>
 | |
| #include <Protocol/UsbIo.h>
 | |
| #include <Protocol/DevicePath.h>
 | |
| 
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/UefiDriverEntryPoint.h>
 | |
| #include <Library/UefiBootServicesTableLib.h>
 | |
| #include <Library/UefiLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| #include <Library/DevicePathLib.h>
 | |
| 
 | |
| #define USB_IS_IN_ENDPOINT(EndPointAddr)      (((EndPointAddr) & BIT7) == BIT7)
 | |
| #define USB_IS_OUT_ENDPOINT(EndPointAddr)     (((EndPointAddr) & BIT7) == 0)
 | |
| #define USB_IS_BULK_ENDPOINT(Attribute)       (((Attribute) & (BIT0 | BIT1)) == USB_ENDPOINT_BULK)
 | |
| #define USB_IS_INTERRUPT_ENDPOINT(Attribute)  (((Attribute) & (BIT0 | BIT1)) == USB_ENDPOINT_INTERRUPT)
 | |
| #define USB_IS_ERROR(Result, Error)           (((Result) & (Error)) != 0)
 | |
| 
 | |
| typedef enum {
 | |
|   //
 | |
|   // Usb mass storage class code
 | |
|   //
 | |
|   USB_MASS_STORE_CLASS    = 0x08,
 | |
| 
 | |
|   //
 | |
|   // Usb mass storage subclass code, specify the command set used.
 | |
|   //
 | |
|   USB_MASS_STORE_RBC      = 0x01, ///< Reduced Block Commands
 | |
|   USB_MASS_STORE_8020I    = 0x02, ///< SFF-8020i, typically a CD/DVD device
 | |
|   USB_MASS_STORE_QIC      = 0x03, ///< Typically a tape device
 | |
|   USB_MASS_STORE_UFI      = 0x04, ///< Typically a floppy disk driver device
 | |
|   USB_MASS_STORE_8070I    = 0x05, ///< SFF-8070i, typically a floppy disk driver device.
 | |
|   USB_MASS_STORE_SCSI     = 0x06, ///< SCSI transparent command set
 | |
| 
 | |
|   //
 | |
|   // Usb mass storage protocol code, specify the transport protocol
 | |
|   //
 | |
|   USB_MASS_STORE_CBI0     = 0x00, ///< CBI protocol with command completion interrupt
 | |
|   USB_MASS_STORE_CBI1     = 0x01, ///< CBI protocol without command completion interrupt
 | |
|   USB_MASS_STORE_BOT      = 0x50, ///< Bulk-Only Transport
 | |
| 
 | |
|   USB_MASS_1_MILLISECOND  = 1000,
 | |
|   USB_MASS_1_SECOND       = 1000 * USB_MASS_1_MILLISECOND,
 | |
| 
 | |
|   USB_MASS_CMD_SUCCESS    = 0,
 | |
|   USB_MASS_CMD_FAIL,
 | |
|   USB_MASS_CMD_PERSISTENT
 | |
| } USB_MASS_DEV_CLASS_AND_VALUE;
 | |
| 
 | |
| /**
 | |
|   Initializes USB transport protocol.
 | |
| 
 | |
|   This function initializes the USB mass storage class transport protocol.
 | |
|   It will save its context in the Context if Context isn't NULL.
 | |
| 
 | |
|   @param  UsbIo                 The USB I/O Protocol instance
 | |
|   @param  Context               The buffer to save the context to
 | |
| 
 | |
|   @retval EFI_SUCCESS           The device is successfully initialized.
 | |
|   @retval EFI_UNSUPPORTED       The transport protocol doesn't support the device.
 | |
|   @retval Other                 The USB transport initialization fails.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (*USB_MASS_INIT_TRANSPORT) (
 | |
|   IN  EFI_USB_IO_PROTOCOL     *Usb,
 | |
|   OUT VOID                    **Context    OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Execute USB mass storage command through the transport protocol.
 | |
| 
 | |
|   @param  Context               The USB Transport Protocol.
 | |
|   @param  Cmd                   The command to transfer to device
 | |
|   @param  CmdLen                The length of the command
 | |
|   @param  DataDir               The direction of data transfer
 | |
|   @param  Data                  The buffer to hold the data
 | |
|   @param  DataLen               The length of the buffer
 | |
|   @param  Lun                   Should be 0, this field for bot only
 | |
|   @param  Timeout               The time to wait
 | |
|   @param  CmdStatus             The result of the command execution
 | |
| 
 | |
|   @retval EFI_SUCCESS           The command is executed successfully.
 | |
|   @retval Other                 Failed to execute the command
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (*USB_MASS_EXEC_COMMAND) (
 | |
|   IN  VOID                    *Context,
 | |
|   IN  VOID                    *Cmd,
 | |
|   IN  UINT8                   CmdLen,
 | |
|   IN  EFI_USB_DATA_DIRECTION  DataDir,
 | |
|   IN  VOID                    *Data,
 | |
|   IN  UINT32                  DataLen,
 | |
|   IN  UINT8                   Lun,
 | |
|   IN  UINT32                  Timeout,
 | |
|   OUT UINT32                  *CmdStatus
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Reset the USB mass storage device by Transport protocol.
 | |
| 
 | |
|   @param  Context               The USB Transport Protocol
 | |
|   @param  ExtendedVerification  The flag controlling the rule of reset.
 | |
|                                 Not used here.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The device is reset.
 | |
|   @retval Others                Failed to reset the device.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (*USB_MASS_RESET) (
 | |
|   IN  VOID                    *Context,
 | |
|   IN  BOOLEAN                 ExtendedVerification
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get the max LUN (Logical Unit Number) of USB mass storage device.
 | |
| 
 | |
|   @param  Context          The context of the transport protocol.
 | |
|   @param  MaxLun           Return pointer to the max number of LUN. (e.g. MaxLun=1 means LUN0 and
 | |
|                            LUN1 in all.)
 | |
| 
 | |
|   @retval EFI_SUCCESS      Max LUN is got successfully.
 | |
|   @retval Others           Fail to execute this request.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (*USB_MASS_GET_MAX_LUN) (
 | |
|   IN  VOID                    *Context,
 | |
|   IN  UINT8                   *MaxLun
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Clean up the transport protocol's resource.
 | |
| 
 | |
|   @param  Context               The instance of transport protocol.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The resource is cleaned up.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (*USB_MASS_CLEAN_UP) (
 | |
|   IN  VOID                    *Context
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// This structure contains information necessary to select the
 | |
| /// proper transport protocol. The mass storage class defines
 | |
| /// two transport protocols. One is the CBI, and the other is BOT.
 | |
| /// CBI is being obseleted. The design is made modular by this
 | |
| /// structure so that the CBI protocol can be easily removed when
 | |
| /// it is no longer necessary.
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT8                   Protocol;
 | |
|   USB_MASS_INIT_TRANSPORT Init;        ///< Initialize the mass storage transport protocol
 | |
|   USB_MASS_EXEC_COMMAND   ExecCommand; ///< Transport command to the device then get result
 | |
|   USB_MASS_RESET          Reset;       ///< Reset the device
 | |
|   USB_MASS_GET_MAX_LUN    GetMaxLun;   ///< Get max lun, only for bot
 | |
|   USB_MASS_CLEAN_UP       CleanUp;     ///< Clean up the resources.
 | |
| } USB_MASS_TRANSPORT;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32                    Signature;
 | |
|   EFI_HANDLE                Controller;
 | |
|   EFI_USB_IO_PROTOCOL       *UsbIo;
 | |
|   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
 | |
|   EFI_BLOCK_IO_PROTOCOL     BlockIo;
 | |
|   EFI_BLOCK_IO_MEDIA        BlockIoMedia;
 | |
|   BOOLEAN                   OpticalStorage;
 | |
|   UINT8                     Lun;          ///< Logical Unit Number
 | |
|   UINT8                     Pdt;          ///< Peripheral Device Type
 | |
|   USB_MASS_TRANSPORT        *Transport;   ///< USB mass storage transport protocol
 | |
|   VOID                      *Context;     
 | |
| } USB_MASS_DEVICE;
 | |
| 
 | |
| #endif
 |