git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5555 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			94 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   Defination for the USB mass storage Bulk-Only Transport protocol.
 | |
|   This implementation is based on the "Universal Serial Bus Mass
 | |
|   Storage Class Bulk-Only Transport" Revision 1.0, September 31, 1999.
 | |
| 
 | |
| 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_BOT_H_
 | |
| #define _EFI_USBMASS_BOT_H_
 | |
| 
 | |
| typedef enum {
 | |
|   //
 | |
|   // Usb Bulk-Only class specfic request
 | |
|   //
 | |
|   USB_BOT_RESET_REQUEST    = 0xFF,       // Bulk-Only Mass Storage Reset
 | |
|   USB_BOT_GETLUN_REQUEST   = 0xFE,       // Get Max Lun
 | |
|   USB_BOT_CBW_SIGNATURE    = 0x43425355, // dCBWSignature, tag the packet as CBW
 | |
|   USB_BOT_CSW_SIGNATURE    = 0x53425355, // dCSWSignature, tag the packet as CSW
 | |
|   USB_BOT_MAX_LUN          = 0x0F,       // Lun number is from 0 to 15
 | |
|   USB_BOT_MAX_CMDLEN       = 16,         // Maxium number of command from command set
 | |
| 
 | |
|   //
 | |
|   // Usb BOT command block status values
 | |
|   //
 | |
|   USB_BOT_COMMAND_OK       = 0x00, // Command passed, good status
 | |
|   USB_BOT_COMMAND_FAILED   = 0x01, // Command failed
 | |
|   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]
 | |
|   //
 | |
|   USB_BOT_RECV_CSW_RETRY       = 3,
 | |
| 
 | |
|   //
 | |
|   // Usb Bot wait device reset complete, set by experience
 | |
|   //  
 | |
|   USB_BOT_RESET_DEVICE_STALL   = 100 * USB_MASS_1_MILLISECOND,
 | |
|   
 | |
|   //
 | |
|   // Usb Bot transport timeout, set by experience
 | |
|   //
 | |
|   USB_BOT_SEND_CBW_TIMEOUT     = 3 * USB_MASS_1_SECOND,
 | |
|   USB_BOT_RECV_CSW_TIMEOUT     = 3 * USB_MASS_1_SECOND,
 | |
|   USB_BOT_RESET_DEVICE_TIMEOUT = 3 * USB_MASS_1_SECOND
 | |
| }USB_BOT_SUBCLASS;
 | |
| 
 | |
| //
 | |
| // The CBW (Command Block Wrapper) and CSW (Command Status Wrapper)
 | |
| // structures used by the Usb BOT protocol.
 | |
| //
 | |
| #pragma pack(1)
 | |
| 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;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32              Signature;
 | |
|   UINT32              Tag;
 | |
|   UINT32              DataResidue;
 | |
|   UINT8               CmdStatus;
 | |
| } USB_BOT_CSW;
 | |
| #pragma pack()
 | |
| 
 | |
| //
 | |
| // Put Interface at the first field is to make it easy to get by Context, which
 | |
| // could be BOT/CBI Protocol instance
 | |
| //
 | |
| typedef struct {
 | |
|   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;
 | |
| 
 | |
| extern USB_MASS_TRANSPORT mUsbBotTransport;
 | |
| #endif
 |