1 /** @file 2 Defination for the USB mass storage Control/Bulk/Interrupt (CBI) transport, 3 according to USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport, Revision 1.1. 4 5 Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR> 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #ifndef _EFI_USBMASS_CBI_H_ 17 #define _EFI_USBMASS_CBI_H_ 18 19 extern USB_MASS_TRANSPORT mUsbCbi0Transport; 20 extern USB_MASS_TRANSPORT mUsbCbi1Transport; 21 22 #define USB_CBI_MAX_PACKET_NUM 16 23 #define USB_CBI_RESET_CMD_LEN 12 24 // 25 // USB CBI retry C/B/I transport times, set by experience 26 // 27 #define USB_CBI_MAX_RETRY 3 28 // 29 // Time to wait for USB CBI reset to complete, set by experience 30 // 31 #define USB_CBI_RESET_DEVICE_STALL (50 * USB_MASS_1_MILLISECOND) 32 // 33 // USB CBI transport timeout, set by experience 34 // 35 #define USB_CBI_RESET_DEVICE_TIMEOUT (1 * USB_MASS_1_SECOND) 36 37 typedef struct { 38 // 39 // Put Interface at the first field to make it easy to distinguish BOT/CBI Protocol instance 40 // 41 EFI_USB_INTERFACE_DESCRIPTOR Interface; 42 EFI_USB_ENDPOINT_DESCRIPTOR *BulkInEndpoint; 43 EFI_USB_ENDPOINT_DESCRIPTOR *BulkOutEndpoint; 44 EFI_USB_ENDPOINT_DESCRIPTOR *InterruptEndpoint; 45 EFI_USB_IO_PROTOCOL *UsbIo; 46 } USB_CBI_PROTOCOL; 47 48 #pragma pack(1) 49 typedef struct { 50 UINT8 Type; 51 UINT8 Value; 52 } USB_CBI_STATUS; 53 #pragma pack() 54 55 /** 56 Initializes USB CBI protocol. 57 58 This function initializes the USB mass storage class CBI protocol. 59 It will save its context which is a USB_CBI_PROTOCOL structure 60 in the Context if Context isn't NULL. 61 62 @param UsbIo The USB I/O Protocol instance 63 @param Context The buffer to save the context to 64 65 @retval EFI_SUCCESS The device is successfully initialized. 66 @retval EFI_UNSUPPORTED The transport protocol doesn't support the device. 67 @retval Other The USB CBI initialization fails. 68 69 **/ 70 EFI_STATUS 71 UsbCbiInit ( 72 IN EFI_USB_IO_PROTOCOL *UsbIo, 73 OUT VOID **Context OPTIONAL 74 ); 75 76 /** 77 Execute USB mass storage command through the CBI0/CBI1 transport protocol. 78 79 @param Context The USB CBI Protocol. 80 @param Cmd The command to transfer to device 81 @param CmdLen The length of the command 82 @param DataDir The direction of data transfer 83 @param Data The buffer to hold the data 84 @param DataLen The length of the buffer 85 @param Lun Should be 0, this field for bot only 86 @param Timeout The time to wait 87 @param CmdStatus The result of the command execution 88 89 @retval EFI_SUCCESS The command is executed successfully. 90 @retval Other Failed to execute the command 91 92 **/ 93 EFI_STATUS 94 UsbCbiExecCommand ( 95 IN VOID *Context, 96 IN VOID *Cmd, 97 IN UINT8 CmdLen, 98 IN EFI_USB_DATA_DIRECTION DataDir, 99 IN VOID *Data, 100 IN UINT32 DataLen, 101 IN UINT8 Lun, 102 IN UINT32 Timeout, 103 OUT UINT32 *CmdStatus 104 ); 105 106 /** 107 Reset the USB mass storage device by CBI protocol. 108 109 This function resets the USB mass storage device by CBI protocol. 110 The reset is defined as a non-data command. Don't use UsbCbiExecCommand 111 to send the command to device because that may introduce recursive loop. 112 113 @param Context The USB CBI protocol 114 @param ExtendedVerification The flag controlling the rule of reset. 115 Not used here. 116 117 @retval EFI_SUCCESS The device is reset. 118 @retval Others Failed to reset the device. 119 120 **/ 121 EFI_STATUS 122 UsbCbiResetDevice ( 123 IN VOID *Context, 124 IN BOOLEAN ExtendedVerification 125 ); 126 127 /** 128 Clean up the CBI protocol's resource. 129 130 @param Context The instance of CBI protocol. 131 132 @retval EFI_SUCCESS The resource is cleaned up. 133 134 **/ 135 EFI_STATUS 136 UsbCbiCleanUp ( 137 IN VOID *Context 138 ); 139 140 #endif 141