mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 01:03:23 +00:00 
			
		
		
		
	REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			188 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Definition for the USB mass storage Bulk-Only Transport protocol,
 | 
						|
  based on the "Universal Serial Bus Mass Storage Class Bulk-Only
 | 
						|
  Transport" Revision 1.0, September 31, 1999.
 | 
						|
 | 
						|
Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EFI_USBMASS_BOT_H_
 | 
						|
#define _EFI_USBMASS_BOT_H_
 | 
						|
 | 
						|
extern USB_MASS_TRANSPORT  mUsbBotTransport;
 | 
						|
 | 
						|
//
 | 
						|
// Usb Bulk-Only class specific request
 | 
						|
//
 | 
						|
#define USB_BOT_RESET_REQUEST   0xFF        ///< Bulk-Only Mass Storage Reset
 | 
						|
#define USB_BOT_GETLUN_REQUEST  0xFE        ///< Get Max Lun
 | 
						|
#define USB_BOT_CBW_SIGNATURE   0x43425355  ///< dCBWSignature, tag the packet as CBW
 | 
						|
#define USB_BOT_CSW_SIGNATURE   0x53425355  ///< dCSWSignature, tag the packet as CSW
 | 
						|
#define USB_BOT_MAX_LUN         0x0F        ///< Lun number is from 0 to 15
 | 
						|
#define USB_BOT_MAX_CMDLEN      16          ///< Maximum number of command from command set
 | 
						|
 | 
						|
//
 | 
						|
// Usb BOT command block status values
 | 
						|
//
 | 
						|
#define USB_BOT_COMMAND_OK      0x00  ///< Command passed, good status
 | 
						|
#define USB_BOT_COMMAND_FAILED  0x01  ///< Command failed
 | 
						|
#define USB_BOT_COMMAND_ERROR   0x02  ///< Phase error, need to reset the device
 | 
						|
 | 
						|
//
 | 
						|
// Usb Bot retry to get CSW, refers to specification[BOT10-5.3, it says 2 times]
 | 
						|
//
 | 
						|
#define USB_BOT_RECV_CSW_RETRY  3
 | 
						|
 | 
						|
//
 | 
						|
// Usb Bot wait device reset complete, set by experience
 | 
						|
//
 | 
						|
#define USB_BOT_RESET_DEVICE_STALL  (100 * USB_MASS_1_MILLISECOND)
 | 
						|
 | 
						|
//
 | 
						|
// Usb Bot transport timeout, set by experience
 | 
						|
//
 | 
						|
#define USB_BOT_SEND_CBW_TIMEOUT      (3 * USB_MASS_1_SECOND)
 | 
						|
#define USB_BOT_RECV_CSW_TIMEOUT      (3 * USB_MASS_1_SECOND)
 | 
						|
#define USB_BOT_RESET_DEVICE_TIMEOUT  (3 * USB_MASS_1_SECOND)
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
///
 | 
						|
/// The CBW (Command Block Wrapper) structures used by the USB BOT protocol.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  UINT32    Signature;
 | 
						|
  UINT32    Tag;
 | 
						|
  UINT32    DataLen;            ///< Length of data between CBW and CSW
 | 
						|
  UINT8     Flag;               ///< Bit 7, 0 ~ Data-Out, 1 ~ Data-In
 | 
						|
  UINT8     Lun;                ///< Lun number. Bits 0~3 are used
 | 
						|
  UINT8     CmdLen;             ///< Length of the command. Bits 0~4 are used
 | 
						|
  UINT8     CmdBlock[USB_BOT_MAX_CMDLEN];
 | 
						|
} USB_BOT_CBW;
 | 
						|
 | 
						|
///
 | 
						|
/// The and CSW (Command Status Wrapper) structures used by the USB BOT protocol.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  UINT32    Signature;
 | 
						|
  UINT32    Tag;
 | 
						|
  UINT32    DataResidue;
 | 
						|
  UINT8     CmdStatus;
 | 
						|
} USB_BOT_CSW;
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
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;
 | 
						|
  UINT32                          CbwTag;
 | 
						|
  EFI_USB_IO_PROTOCOL             *UsbIo;
 | 
						|
} USB_BOT_PROTOCOL;
 | 
						|
 | 
						|
/**
 | 
						|
  Initializes USB BOT protocol.
 | 
						|
 | 
						|
  This function initializes the USB mass storage class BOT protocol.
 | 
						|
  It will save its context which is a USB_BOT_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 BOT initialization fails.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbBotInit (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL  *UsbIo,
 | 
						|
  OUT VOID                 **Context OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Call the USB Mass Storage Class BOT protocol to issue
 | 
						|
  the command/data/status circle to execute the commands.
 | 
						|
 | 
						|
  @param  Context               The context of the BOT protocol, that is,
 | 
						|
                                USB_BOT_PROTOCOL
 | 
						|
  @param  Cmd                   The high level command
 | 
						|
  @param  CmdLen                The command length
 | 
						|
  @param  DataDir               The direction of the data transfer
 | 
						|
  @param  Data                  The buffer to hold data
 | 
						|
  @param  DataLen               The length of the data
 | 
						|
  @param  Lun                   The number of logic unit
 | 
						|
  @param  Timeout               The time to wait command
 | 
						|
  @param  CmdStatus             The result of high level command execution
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The command is executed successfully.
 | 
						|
  @retval Other                 Failed to execute command
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbBotExecCommand (
 | 
						|
  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 BOT protocol.
 | 
						|
 | 
						|
  @param  Context               The context of the BOT protocol, that is,
 | 
						|
                                USB_BOT_PROTOCOL.
 | 
						|
  @param  ExtendedVerification  If FALSE, just issue Bulk-Only Mass Storage Reset request.
 | 
						|
                                If TRUE, additionally reset parent hub port.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The device is reset.
 | 
						|
  @retval Others                Failed to reset the device..
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbBotResetDevice (
 | 
						|
  IN  VOID     *Context,
 | 
						|
  IN  BOOLEAN  ExtendedVerification
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get the max LUN (Logical Unit Number) of USB mass storage device.
 | 
						|
 | 
						|
  @param  Context          The context of the BOT protocol, that is, USB_BOT_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.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbBotGetMaxLun (
 | 
						|
  IN  VOID   *Context,
 | 
						|
  OUT UINT8  *MaxLun
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Clean up the resource used by this BOT protocol.
 | 
						|
 | 
						|
  @param  Context         The context of the BOT protocol, that is, USB_BOT_PROTOCOL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS     The resource is cleaned up.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UsbBotCleanUp (
 | 
						|
  IN  VOID  *Context
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |