2 Definition for the USB mass storage Bulk-Only Transport protocol,
3 based on the "Universal Serial Bus Mass Storage Class Bulk-Only
4 Transport" Revision 1.0, September 31, 1999.
6 Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #ifndef _EFI_USBMASS_BOT_H_
18 #define _EFI_USBMASS_BOT_H_
20 extern USB_MASS_TRANSPORT mUsbBotTransport
;
23 // Usb Bulk-Only class specfic request
25 #define USB_BOT_RESET_REQUEST 0xFF ///< Bulk-Only Mass Storage Reset
26 #define USB_BOT_GETLUN_REQUEST 0xFE ///< Get Max Lun
27 #define USB_BOT_CBW_SIGNATURE 0x43425355 ///< dCBWSignature, tag the packet as CBW
28 #define USB_BOT_CSW_SIGNATURE 0x53425355 ///< dCSWSignature, tag the packet as CSW
29 #define USB_BOT_MAX_LUN 0x0F ///< Lun number is from 0 to 15
30 #define USB_BOT_MAX_CMDLEN 16 ///< Maxium number of command from command set
33 // Usb BOT command block status values
35 #define USB_BOT_COMMAND_OK 0x00 ///< Command passed, good status
36 #define USB_BOT_COMMAND_FAILED 0x01 ///< Command failed
37 #define USB_BOT_COMMAND_ERROR 0x02 ///< Phase error, need to reset the device
40 // Usb Bot retry to get CSW, refers to specification[BOT10-5.3, it says 2 times]
42 #define USB_BOT_RECV_CSW_RETRY 3
45 // Usb Bot wait device reset complete, set by experience
47 #define USB_BOT_RESET_DEVICE_STALL (100 * USB_MASS_1_MILLISECOND)
50 // Usb Bot transport timeout, set by experience
52 #define USB_BOT_SEND_CBW_TIMEOUT (3 * USB_MASS_1_SECOND)
53 #define USB_BOT_RECV_CSW_TIMEOUT (3 * USB_MASS_1_SECOND)
54 #define USB_BOT_RESET_DEVICE_TIMEOUT (3 * USB_MASS_1_SECOND)
58 /// The CBW (Command Block Wrapper) structures used by the USB BOT protocol.
63 UINT32 DataLen
; ///< Length of data between CBW and CSW
64 UINT8 Flag
; ///< Bit 7, 0 ~ Data-Out, 1 ~ Data-In
65 UINT8 Lun
; ///< Lun number. Bits 0~3 are used
66 UINT8 CmdLen
; ///< Length of the command. Bits 0~4 are used
67 UINT8 CmdBlock
[USB_BOT_MAX_CMDLEN
];
71 /// The and CSW (Command Status Wrapper) structures used by the USB BOT protocol.
83 // Put Interface at the first field to make it easy to distinguish BOT/CBI Protocol instance
85 EFI_USB_INTERFACE_DESCRIPTOR Interface
;
86 EFI_USB_ENDPOINT_DESCRIPTOR
*BulkInEndpoint
;
87 EFI_USB_ENDPOINT_DESCRIPTOR
*BulkOutEndpoint
;
89 EFI_USB_IO_PROTOCOL
*UsbIo
;
93 Initializes USB BOT protocol.
95 This function initializes the USB mass storage class BOT protocol.
96 It will save its context which is a USB_BOT_PROTOCOL structure
97 in the Context if Context isn't NULL.
99 @param UsbIo The USB I/O Protocol instance
100 @param Context The buffer to save the context to
102 @retval EFI_SUCCESS The device is successfully initialized.
103 @retval EFI_UNSUPPORTED The transport protocol doesn't support the device.
104 @retval Other The USB BOT initialization fails.
109 IN EFI_USB_IO_PROTOCOL
*UsbIo
,
110 OUT VOID
**Context OPTIONAL
114 Call the USB Mass Storage Class BOT protocol to issue
115 the command/data/status circle to execute the commands.
117 @param Context The context of the BOT protocol, that is,
119 @param Cmd The high level command
120 @param CmdLen The command length
121 @param DataDir The direction of the data transfer
122 @param Data The buffer to hold data
123 @param DataLen The length of the data
124 @param Lun The number of logic unit
125 @param Timeout The time to wait command
126 @param CmdStatus The result of high level command execution
128 @retval EFI_SUCCESS The command is executed successfully.
129 @retval Other Failed to excute command
137 IN EFI_USB_DATA_DIRECTION DataDir
,
142 OUT UINT32
*CmdStatus
146 Reset the USB mass storage device by BOT protocol.
148 @param Context The context of the BOT protocol, that is,
150 @param ExtendedVerification If FALSE, just issue Bulk-Only Mass Storage Reset request.
151 If TRUE, additionally reset parent hub port.
153 @retval EFI_SUCCESS The device is reset.
154 @retval Others Failed to reset the device..
160 IN BOOLEAN ExtendedVerification
164 Get the max LUN (Logical Unit Number) of USB mass storage device.
166 @param Context The context of the BOT protocol, that is, USB_BOT_PROTOCOL
167 @param MaxLun Return pointer to the max number of LUN. (e.g. MaxLun=1 means LUN0 and
170 @retval EFI_SUCCESS Max LUN is got successfully.
171 @retval Others Fail to execute this request.
181 Clean up the resource used by this BOT protocol.
183 @param Context The context of the BOT protocol, that is, USB_BOT_PROTOCOL.
185 @retval EFI_SUCCESS The resource is cleaned up.