1 /** @file 2 Common Library for PEI USB 3 4 Copyright (c) 2006 - 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 14 // 15 // Standard device request and request type 16 // By [Spec-USB20/Chapter-9.4] 17 // 18 #define USB_DEV_GET_STATUS 0x00 19 #define USB_DEV_GET_STATUS_REQ_TYPE_D 0x80 // Receiver : Device 20 #define USB_DEV_GET_STATUS_REQ_TYPE_I 0x81 // Receiver : Interface 21 #define USB_DEV_GET_STATUS_REQ_TYPE_E 0x82 // Receiver : Endpoint 22 23 #define USB_DEV_CLEAR_FEATURE 0x01 24 #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_D 0x00 // Receiver : Device 25 #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_I 0x01 // Receiver : Interface 26 #define USB_DEV_CLEAR_FEATURE_REQ_TYPE_E 0x02 // Receiver : Endpoint 27 28 #define USB_DEV_SET_FEATURE 0x03 29 #define USB_DEV_SET_FEATURE_REQ_TYPE_D 0x00 // Receiver : Device 30 #define USB_DEV_SET_FEATURE_REQ_TYPE_I 0x01 // Receiver : Interface 31 #define USB_DEV_SET_FEATURE_REQ_TYPE_E 0x02 // Receiver : Endpoint 32 33 #define USB_DEV_SET_ADDRESS 0x05 34 #define USB_DEV_SET_ADDRESS_REQ_TYPE 0x00 35 36 #define USB_DEV_GET_DESCRIPTOR 0x06 37 #define USB_DEV_GET_DESCRIPTOR_REQ_TYPE 0x80 38 39 #define USB_DEV_SET_DESCRIPTOR 0x07 40 #define USB_DEV_SET_DESCRIPTOR_REQ_TYPE 0x00 41 42 #define USB_DEV_GET_CONFIGURATION 0x08 43 #define USB_DEV_GET_CONFIGURATION_REQ_TYPE 0x80 44 45 #define USB_DEV_SET_CONFIGURATION 0x09 46 #define USB_DEV_SET_CONFIGURATION_REQ_TYPE 0x00 47 48 #define USB_DEV_GET_INTERFACE 0x0A 49 #define USB_DEV_GET_INTERFACE_REQ_TYPE 0x81 50 51 #define USB_DEV_SET_INTERFACE 0x0B 52 #define USB_DEV_SET_INTERFACE_REQ_TYPE 0x01 53 54 #define USB_DEV_SYNCH_FRAME 0x0C 55 #define USB_DEV_SYNCH_FRAME_REQ_TYPE 0x82 56 57 // 58 // USB Descriptor types 59 // 60 #define USB_DT_DEVICE 0x01 61 #define USB_DT_CONFIG 0x02 62 #define USB_DT_STRING 0x03 63 #define USB_DT_INTERFACE 0x04 64 #define USB_DT_ENDPOINT 0x05 65 #define USB_DT_HUB 0x29 66 #define USB_DT_SUPERSPEED_HUB 0x2A 67 #define USB_DT_HID 0x21 68 69 // 70 // USB request type 71 // 72 #define USB_TYPE_STANDARD (0x00 << 5) 73 #define USB_TYPE_CLASS (0x01 << 5) 74 #define USB_TYPE_VENDOR (0x02 << 5) 75 #define USB_TYPE_RESERVED (0x03 << 5) 76 77 // 78 // USB request targer device 79 // 80 #define USB_RECIP_DEVICE 0x00 81 #define USB_RECIP_INTERFACE 0x01 82 #define USB_RECIP_ENDPOINT 0x02 83 #define USB_RECIP_OTHER 0x03 84 85 typedef enum { 86 EfiUsbEndpointHalt, 87 EfiUsbDeviceRemoteWakeup 88 } EFI_USB_STANDARD_FEATURE_SELECTOR; 89 90 // 91 // Usb Data recipient type 92 // 93 typedef enum { 94 EfiUsbDevice, 95 EfiUsbInterface, 96 EfiUsbEndpoint 97 } EFI_USB_RECIPIENT; 98 99 /** 100 Get a given usb descriptor. 101 102 @param PeiServices General-purpose services that are available to every PEIM. 103 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance. 104 @param Value Request Value. 105 @param Index Request Index. 106 @param DescriptorLength Request descriptor Length. 107 @param Descriptor Request descriptor. 108 109 110 @retval EFI_SUCCESS Usb descriptor is obtained successfully. 111 @retval EFI_DEVICE_ERROR Cannot get the usb descriptor due to a hardware error. 112 @retval Others Other failure occurs. 113 114 **/ 115 EFI_STATUS 116 PeiUsbGetDescriptor ( 117 IN EFI_PEI_SERVICES **PeiServices, 118 IN PEI_USB_IO_PPI *UsbIoPpi, 119 IN UINT16 Value, 120 IN UINT16 Index, 121 IN UINT16 DescriptorLength, 122 OUT VOID *Descriptor 123 ); 124 125 /** 126 Set a usb device with a specified address. 127 128 @param PeiServices General-purpose services that are available to every PEIM. 129 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance. 130 @param AddressValue The address to assign. 131 132 @retval EFI_SUCCESS Usb device address is set successfully. 133 @retval EFI_DEVICE_ERROR Cannot set the usb address due to a hardware error. 134 @retval Others Other failure occurs. 135 136 **/ 137 EFI_STATUS 138 PeiUsbSetDeviceAddress ( 139 IN EFI_PEI_SERVICES **PeiServices, 140 IN PEI_USB_IO_PPI *UsbIoPpi, 141 IN UINT16 AddressValue 142 ); 143 144 145 /** 146 Configure a usb device to Configuration 1. 147 148 @param PeiServices General-purpose services that are available to every PEIM. 149 @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance. 150 151 @retval EFI_SUCCESS Usb device is set to use Configuration 1 successfully. 152 @retval EFI_DEVICE_ERROR Cannot set the usb device due to a hardware error. 153 @retval Others Other failure occurs. 154 155 **/ 156 EFI_STATUS 157 PeiUsbSetConfiguration ( 158 IN EFI_PEI_SERVICES **PeiServices, 159 IN PEI_USB_IO_PPI *UsbIoPpi 160 ); 161 162 /** 163 Judge if the port is connected with a usb device or not. 164 165 @param PortStatus The usb port status gotten. 166 167 @retval TRUE A usb device is connected with the port. 168 @retval FALSE No usb device is connected with the port. 169 170 **/ 171 BOOLEAN 172 IsPortConnect ( 173 IN UINT16 PortStatus 174 ); 175 176 /** 177 Get device speed according to port status. 178 179 @param PortStatus The usb port status gotten. 180 181 @return Device speed value. 182 183 **/ 184 UINTN 185 PeiUsbGetDeviceSpeed ( 186 IN UINT16 PortStatus 187 ); 188 189 #endif 190