]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassCbi.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbMassStorageDxe / UsbMassCbi.h
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 - 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef _EFI_USBMASS_CBI_H_
11 #define _EFI_USBMASS_CBI_H_
12
13 extern USB_MASS_TRANSPORT mUsbCbi0Transport;
14 extern USB_MASS_TRANSPORT mUsbCbi1Transport;
15
16 #define USB_CBI_MAX_PACKET_NUM 16
17 #define USB_CBI_RESET_CMD_LEN 12
18 //
19 // USB CBI retry C/B/I transport times, set by experience
20 //
21 #define USB_CBI_MAX_RETRY 3
22 //
23 // Time to wait for USB CBI reset to complete, set by experience
24 //
25 #define USB_CBI_RESET_DEVICE_STALL (50 * USB_MASS_1_MILLISECOND)
26 //
27 // USB CBI transport timeout, set by experience
28 //
29 #define USB_CBI_RESET_DEVICE_TIMEOUT (1 * USB_MASS_1_SECOND)
30
31 typedef struct {
32 //
33 // Put Interface at the first field to make it easy to distinguish BOT/CBI Protocol instance
34 //
35 EFI_USB_INTERFACE_DESCRIPTOR Interface;
36 EFI_USB_ENDPOINT_DESCRIPTOR *BulkInEndpoint;
37 EFI_USB_ENDPOINT_DESCRIPTOR *BulkOutEndpoint;
38 EFI_USB_ENDPOINT_DESCRIPTOR *InterruptEndpoint;
39 EFI_USB_IO_PROTOCOL *UsbIo;
40 } USB_CBI_PROTOCOL;
41
42 #pragma pack(1)
43 typedef struct {
44 UINT8 Type;
45 UINT8 Value;
46 } USB_CBI_STATUS;
47 #pragma pack()
48
49 /**
50 Initializes USB CBI protocol.
51
52 This function initializes the USB mass storage class CBI protocol.
53 It will save its context which is a USB_CBI_PROTOCOL structure
54 in the Context if Context isn't NULL.
55
56 @param UsbIo The USB I/O Protocol instance
57 @param Context The buffer to save the context to
58
59 @retval EFI_SUCCESS The device is successfully initialized.
60 @retval EFI_UNSUPPORTED The transport protocol doesn't support the device.
61 @retval Other The USB CBI initialization fails.
62
63 **/
64 EFI_STATUS
65 UsbCbiInit (
66 IN EFI_USB_IO_PROTOCOL *UsbIo,
67 OUT VOID **Context OPTIONAL
68 );
69
70 /**
71 Execute USB mass storage command through the CBI0/CBI1 transport protocol.
72
73 @param Context The USB CBI Protocol.
74 @param Cmd The command to transfer to device
75 @param CmdLen The length of the command
76 @param DataDir The direction of data transfer
77 @param Data The buffer to hold the data
78 @param DataLen The length of the buffer
79 @param Lun Should be 0, this field for bot only
80 @param Timeout The time to wait
81 @param CmdStatus The result of the command execution
82
83 @retval EFI_SUCCESS The command is executed successfully.
84 @retval Other Failed to execute the command
85
86 **/
87 EFI_STATUS
88 UsbCbiExecCommand (
89 IN VOID *Context,
90 IN VOID *Cmd,
91 IN UINT8 CmdLen,
92 IN EFI_USB_DATA_DIRECTION DataDir,
93 IN VOID *Data,
94 IN UINT32 DataLen,
95 IN UINT8 Lun,
96 IN UINT32 Timeout,
97 OUT UINT32 *CmdStatus
98 );
99
100 /**
101 Reset the USB mass storage device by CBI protocol.
102
103 This function resets the USB mass storage device by CBI protocol.
104 The reset is defined as a non-data command. Don't use UsbCbiExecCommand
105 to send the command to device because that may introduce recursive loop.
106
107 @param Context The USB CBI protocol
108 @param ExtendedVerification The flag controlling the rule of reset.
109 Not used here.
110
111 @retval EFI_SUCCESS The device is reset.
112 @retval Others Failed to reset the device.
113
114 **/
115 EFI_STATUS
116 UsbCbiResetDevice (
117 IN VOID *Context,
118 IN BOOLEAN ExtendedVerification
119 );
120
121 /**
122 Clean up the CBI protocol's resource.
123
124 @param Context The instance of CBI protocol.
125
126 @retval EFI_SUCCESS The resource is cleaned up.
127
128 **/
129 EFI_STATUS
130 UsbCbiCleanUp (
131 IN VOID *Context
132 );
133
134 #endif