1 /** @file
2 Common Library  for PEI USB.
3 
4 Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>
5 
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7 
8 **/
9 
10 #ifndef _PEI_USB_LIB_H_
11 #define _PEI_USB_LIB_H_
12 //
13 // Standard device request and request type
14 // By [Spec-USB20/Chapter-9.4]
15 //
16 #define USB_DEV_GET_STATUS                  0x00
17 #define USB_DEV_GET_STATUS_REQ_TYPE_D       0x80 // Receiver : Device
18 #define USB_DEV_GET_STATUS_REQ_TYPE_I       0x81 // Receiver : Interface
19 #define USB_DEV_GET_STATUS_REQ_TYPE_E       0x82 // Receiver : Endpoint
20 
21 #define USB_DEV_CLEAR_FEATURE               0x01
22 #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_D    0x00 // Receiver : Device
23 #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_I    0x01 // Receiver : Interface
24 #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_E    0x02 // Receiver : Endpoint
25 
26 #define USB_DEV_SET_FEATURE                 0x03
27 #define USB_DEV_SET_FEATURE_REQ_TYPE_D      0x00 // Receiver : Device
28 #define USB_DEV_SET_FEATURE_REQ_TYPE_I      0x01 // Receiver : Interface
29 #define USB_DEV_SET_FEATURE_REQ_TYPE_E      0x02 // Receiver : Endpoint
30 
31 #define USB_DEV_SET_ADDRESS                 0x05
32 #define USB_DEV_SET_ADDRESS_REQ_TYPE        0x00
33 
34 #define USB_DEV_GET_DESCRIPTOR              0x06
35 #define USB_DEV_GET_DESCRIPTOR_REQ_TYPE     0x80
36 
37 #define USB_DEV_SET_DESCRIPTOR              0x07
38 #define USB_DEV_SET_DESCRIPTOR_REQ_TYPE     0x00
39 
40 #define USB_DEV_GET_CONFIGURATION           0x08
41 #define USB_DEV_GET_CONFIGURATION_REQ_TYPE  0x80
42 
43 #define USB_DEV_SET_CONFIGURATION           0x09
44 #define USB_DEV_SET_CONFIGURATION_REQ_TYPE  0x00
45 
46 #define USB_DEV_GET_INTERFACE               0x0A
47 #define USB_DEV_GET_INTERFACE_REQ_TYPE      0x81
48 
49 #define USB_DEV_SET_INTERFACE               0x0B
50 #define USB_DEV_SET_INTERFACE_REQ_TYPE      0x01
51 
52 #define USB_DEV_SYNCH_FRAME                 0x0C
53 #define USB_DEV_SYNCH_FRAME_REQ_TYPE        0x82
54 
55 //
56 // USB Descriptor types
57 //
58 #define USB_DT_DEVICE     0x01
59 #define USB_DT_CONFIG     0x02
60 #define USB_DT_STRING     0x03
61 #define USB_DT_INTERFACE  0x04
62 #define USB_DT_ENDPOINT   0x05
63 #define USB_DT_HUB        0x29
64 #define USB_DT_HID        0x21
65 
66 //
67 // USB request type
68 //
69 #define USB_TYPE_STANDARD (0x00 << 5)
70 #define USB_TYPE_CLASS    (0x01 << 5)
71 #define USB_TYPE_VENDOR   (0x02 << 5)
72 #define USB_TYPE_RESERVED (0x03 << 5)
73 
74 //
75 // USB request targer device
76 //
77 #define USB_RECIP_DEVICE    0x00
78 #define USB_RECIP_INTERFACE 0x01
79 #define USB_RECIP_ENDPOINT  0x02
80 #define USB_RECIP_OTHER     0x03
81 
82 typedef enum {
83   EfiUsbEndpointHalt,
84   EfiUsbDeviceRemoteWakeup
85 } EFI_USB_STANDARD_FEATURE_SELECTOR;
86 
87 //
88 // Usb Data recipient type
89 //
90 typedef enum {
91   EfiUsbDevice,
92   EfiUsbInterface,
93   EfiUsbEndpoint
94 } EFI_USB_RECIPIENT;
95 
96 
97 /**
98   Clear a given usb feature.
99 
100   @param  PeiServices       General-purpose services that are available to every PEIM.
101   @param  UsbIoPpi          Indicates the PEI_USB_IO_PPI instance.
102   @param  Recipient         The recipient of ClearFeature Request, should be one of Device/Interface/Endpoint.
103   @param  Value             Request Value.
104   @param  Target            Request Index.
105 
106   @retval EFI_SUCCESS       Usb feature is cleared successfully.
107   @retval EFI_DEVICE_ERROR  Cannot clear the usb feature due to a hardware error.
108   @retval Others            Other failure occurs.
109 
110 **/
111 EFI_STATUS
112 PeiUsbClearDeviceFeature (
113   IN EFI_PEI_SERVICES         **PeiServices,
114   IN PEI_USB_IO_PPI           *UsbIoPpi,
115   IN EFI_USB_RECIPIENT        Recipient,
116   IN UINT16                   Value,
117   IN UINT16                   Target
118   );
119 
120 
121 /**
122   Clear Endpoint Halt.
123 
124   @param  PeiServices       General-purpose services that are available to every PEIM.
125   @param  UsbIoPpi          Indicates the PEI_USB_IO_PPI instance.
126   @param  EndpointAddress   The endpoint address.
127 
128   @retval EFI_SUCCESS       Endpoint halt is cleared successfully.
129   @retval EFI_DEVICE_ERROR  Cannot clear the endpoint halt status due to a hardware error.
130   @retval Others            Other failure occurs.
131 
132 **/
133 EFI_STATUS
134 PeiUsbClearEndpointHalt (
135   IN EFI_PEI_SERVICES         **PeiServices,
136   IN PEI_USB_IO_PPI           *UsbIoPpi,
137   IN UINT8                    EndpointAddress
138   );
139 
140 
141 
142 
143 #endif
144