| /** @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 |