mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 01:03:23 +00:00 
			
		
		
		
	Signed-off-by:erictian Reviewed-by:niruiyu git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11817 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Defination for the USB mass storage Control/Bulk/Interrupt (CBI) transport,
 | 
						|
  according to USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport, Revision 1.1.
 | 
						|
 | 
						|
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
 | 
						|
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_CBI_H_
 | 
						|
#define _EFI_USBMASS_CBI_H_
 | 
						|
 | 
						|
extern USB_MASS_TRANSPORT mUsbCbi0Transport;
 | 
						|
extern USB_MASS_TRANSPORT mUsbCbi1Transport;
 | 
						|
 | 
						|
#define USB_CBI_MAX_PACKET_NUM        16
 | 
						|
#define USB_CBI_RESET_CMD_LEN         12
 | 
						|
//
 | 
						|
// USB CBI retry C/B/I transport times, set by experience
 | 
						|
//
 | 
						|
#define USB_CBI_MAX_RETRY             3
 | 
						|
//
 | 
						|
// Time to wait for USB CBI reset to complete, set by experience
 | 
						|
//  
 | 
						|
#define USB_CBI_RESET_DEVICE_STALL    (50 * USB_MASS_1_MILLISECOND)
 | 
						|
//
 | 
						|
// USB CBI transport timeout, set by experience
 | 
						|
//
 | 
						|
#define USB_CBI_RESET_DEVICE_TIMEOUT  (1 * USB_MASS_1_SECOND)
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  //
 | 
						|
  // Put Interface at the first field to make it easy to distinguish BOT/CBI Protocol instance
 | 
						|
  //
 | 
						|
  EFI_USB_INTERFACE_DESCRIPTOR  Interface;
 | 
						|
  EFI_USB_ENDPOINT_DESCRIPTOR   *BulkInEndpoint;
 | 
						|
  EFI_USB_ENDPOINT_DESCRIPTOR   *BulkOutEndpoint;
 | 
						|
  EFI_USB_ENDPOINT_DESCRIPTOR   *InterruptEndpoint;
 | 
						|
  EFI_USB_IO_PROTOCOL           *UsbIo;
 | 
						|
} USB_CBI_PROTOCOL;
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
typedef struct {
 | 
						|
  UINT8               Type;
 | 
						|
  UINT8               Value;
 | 
						|
} USB_CBI_STATUS;
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
/**
 | 
						|
  Initializes USB CBI protocol.
 | 
						|
 | 
						|
  This function initializes the USB mass storage class CBI protocol.
 | 
						|
  It will save its context which is a USB_CBI_PROTOCOL structure
 | 
						|
  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 CBI initialization fails.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbCbiInit (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL   *UsbIo,
 | 
						|
  OUT VOID                  **Context       OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Execute USB mass storage command through the CBI0/CBI1 transport protocol.
 | 
						|
 | 
						|
  @param  Context               The USB CBI 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
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbCbiExecCommand (
 | 
						|
  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 CBI protocol.
 | 
						|
 | 
						|
  This function resets the USB mass storage device by CBI protocol.
 | 
						|
  The reset is defined as a non-data command. Don't use UsbCbiExecCommand
 | 
						|
  to send the command to device because that may introduce recursive loop.
 | 
						|
 | 
						|
  @param  Context               The USB CBI 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.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbCbiResetDevice (
 | 
						|
  IN  VOID                    *Context,
 | 
						|
  IN  BOOLEAN                  ExtendedVerification
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Clean up the CBI protocol's resource.
 | 
						|
 | 
						|
  @param  Context               The instance of CBI protocol.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The resource is cleaned up.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbCbiCleanUp (
 | 
						|
  IN  VOID                   *Context
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |