/** @file Definition for the USB mass storage Control/Bulk/Interrupt (CBI) transport, according to USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport, Revision 1.1. Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _EFI_USBMASS_CBI_H_ #define _EFI_USBMASS_CBI_H_ extern USB_MASS_TRANSPORT mUsbCbi0Transport; extern USB_MASS_TRANSPORT mUsbCbi1Transport; #define USB_CBI_MAX_PACKET_NUM 16 #define USB_CBI_RESET_CMD_LEN 12 // // USB CBI retry C/B/I transport times, set by experience // #define USB_CBI_MAX_RETRY 3 // // Time to wait for USB CBI reset to complete, set by experience // #define USB_CBI_RESET_DEVICE_STALL (50 * USB_MASS_1_MILLISECOND) // // USB CBI transport timeout, set by experience // #define USB_CBI_RESET_DEVICE_TIMEOUT (1 * USB_MASS_1_SECOND) 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; EFI_USB_ENDPOINT_DESCRIPTOR *InterruptEndpoint; EFI_USB_IO_PROTOCOL *UsbIo; } USB_CBI_PROTOCOL; #pragma pack(1) typedef struct { UINT8 Type; UINT8 Value; } USB_CBI_STATUS; #pragma pack() /** Initializes USB CBI protocol. This function initializes the USB mass storage class CBI protocol. It will save its context which is a USB_CBI_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 CBI initialization fails. **/ EFI_STATUS UsbCbiInit ( IN EFI_USB_IO_PROTOCOL *UsbIo, OUT VOID **Context OPTIONAL ); /** Execute USB mass storage command through the CBI0/CBI1 transport protocol. @param Context The USB CBI Protocol. @param Cmd The command to transfer to device @param CmdLen The length of the command @param DataDir The direction of data transfer @param Data The buffer to hold the data @param DataLen The length of the buffer @param Lun Should be 0, this field for bot only @param Timeout The time to wait @param CmdStatus The result of the command execution @retval EFI_SUCCESS The command is executed successfully. @retval Other Failed to execute the command **/ EFI_STATUS UsbCbiExecCommand ( 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 CBI protocol. This function resets the USB mass storage device by CBI protocol. The reset is defined as a non-data command. Don't use UsbCbiExecCommand to send the command to device because that may introduce recursive loop. @param Context The USB CBI protocol @param ExtendedVerification The flag controlling the rule of reset. Not used here. @retval EFI_SUCCESS The device is reset. @retval Others Failed to reset the device. **/ EFI_STATUS UsbCbiResetDevice ( IN VOID *Context, IN BOOLEAN ExtendedVerification ); /** Clean up the CBI protocol's resource. @param Context The instance of CBI protocol. @retval EFI_SUCCESS The resource is cleaned up. **/ EFI_STATUS UsbCbiCleanUp ( IN VOID *Context ); #endif