1 /*++ 2 3 Copyright (c) 2004, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 UsbIo.h 15 16 Abstract: 17 18 EFI Usb I/O Protocol 19 20 Revision History 21 22 --*/ 23 24 #ifndef _EFI_USB_IO_H 25 #define _EFI_USB_IO_H 26 27 #include "usb.h" 28 29 // 30 // Global ID for the USB I/O Protocol 31 // 32 #define EFI_USB_IO_PROTOCOL_GUID \ 33 { \ 34 0x2B2F68D6, 0x0CD2, 0x44cf, {0x8E, 0x8B, 0xBB, 0xA2, 0x0B, 0x1B, 0x5B, 0x75} \ 35 } 36 37 EFI_FORWARD_DECLARATION (EFI_USB_IO_PROTOCOL); 38 39 // 40 // Asynchronous USB transfer call back function 41 // 42 typedef 43 EFI_STATUS 44 (EFIAPI *EFI_ASYNC_USB_TRANSFER_CALLBACK) ( 45 IN VOID *Data, 46 IN UINTN DataLength, 47 IN VOID *Context, 48 IN UINT32 Status 49 ); 50 51 // 52 // Prototype for EFI USB I/O protocol 53 // 54 typedef 55 EFI_STATUS 56 (EFIAPI *EFI_USB_IO_CONTROL_TRANSFER) ( 57 IN EFI_USB_IO_PROTOCOL * This, 58 IN EFI_USB_DEVICE_REQUEST * Request, 59 IN EFI_USB_DATA_DIRECTION Direction, 60 IN UINT32 Timeout, 61 IN OUT VOID *Data OPTIONAL, 62 IN UINTN DataLength OPTIONAL, 63 OUT UINT32 *Status 64 ); 65 66 typedef 67 EFI_STATUS 68 (EFIAPI *EFI_USB_IO_BULK_TRANSFER) ( 69 IN EFI_USB_IO_PROTOCOL * This, 70 IN UINT8 DeviceEndpoint, 71 IN OUT VOID *Data, 72 IN OUT UINTN *DataLength, 73 IN UINTN Timeout, 74 OUT UINT32 *Status 75 ); 76 77 typedef 78 EFI_STATUS 79 (EFIAPI *EFI_USB_IO_ASYNC_INTERRUPT_TRANSFER) ( 80 IN EFI_USB_IO_PROTOCOL * This, 81 IN UINT8 DeviceEndpoint, 82 IN BOOLEAN IsNewTransfer, 83 IN UINTN PollingInterval OPTIONAL, 84 IN UINTN DataLength OPTIONAL, 85 IN EFI_ASYNC_USB_TRANSFER_CALLBACK InterruptCallBack OPTIONAL, 86 IN VOID *Context OPTIONAL 87 ); 88 89 typedef 90 EFI_STATUS 91 (EFIAPI *EFI_USB_IO_SYNC_INTERRUPT_TRANSFER) ( 92 IN EFI_USB_IO_PROTOCOL * This, 93 IN UINT8 DeviceEndpoint, 94 IN OUT VOID *Data, 95 IN OUT UINTN *DataLength, 96 IN UINTN Timeout, 97 OUT UINT32 *Status 98 ); 99 100 typedef 101 EFI_STATUS 102 (EFIAPI *EFI_USB_IO_ISOCHRONOUS_TRANSFER) ( 103 IN EFI_USB_IO_PROTOCOL * This, 104 IN UINT8 DeviceEndpoint, 105 IN OUT VOID *Data, 106 IN UINTN DataLength, 107 OUT UINT32 *Status 108 ); 109 110 typedef 111 EFI_STATUS 112 (EFIAPI *EFI_USB_IO_ASYNC_ISOCHRONOUS_TRANSFER) ( 113 IN EFI_USB_IO_PROTOCOL * This, 114 IN UINT8 DeviceEndpoint, 115 IN OUT VOID *Data, 116 IN UINTN DataLength, 117 IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack, 118 IN VOID *Context OPTIONAL 119 ); 120 121 typedef 122 EFI_STATUS 123 (EFIAPI *EFI_USB_IO_PORT_RESET) ( 124 IN EFI_USB_IO_PROTOCOL * This 125 ); 126 127 typedef 128 EFI_STATUS 129 (EFIAPI *EFI_USB_IO_GET_DEVICE_DESCRIPTOR) ( 130 IN EFI_USB_IO_PROTOCOL * This, 131 OUT EFI_USB_DEVICE_DESCRIPTOR * DeviceDescriptor 132 ); 133 134 typedef 135 EFI_STATUS 136 (EFIAPI *EFI_USB_IO_GET_CONFIG_DESCRIPTOR) ( 137 IN EFI_USB_IO_PROTOCOL * This, 138 OUT EFI_USB_CONFIG_DESCRIPTOR * ConfigurationDescriptor 139 ); 140 141 typedef 142 EFI_STATUS 143 (EFIAPI *EFI_USB_IO_GET_INTERFACE_DESCRIPTOR) ( 144 IN EFI_USB_IO_PROTOCOL * This, 145 OUT EFI_USB_INTERFACE_DESCRIPTOR * InterfaceDescriptor 146 ); 147 148 typedef 149 EFI_STATUS 150 (EFIAPI *EFI_USB_IO_GET_ENDPOINT_DESCRIPTOR) ( 151 IN EFI_USB_IO_PROTOCOL * This, 152 IN UINT8 EndpointIndex, 153 OUT EFI_USB_ENDPOINT_DESCRIPTOR * EndpointDescriptor 154 ); 155 156 typedef 157 EFI_STATUS 158 (EFIAPI *EFI_USB_IO_GET_STRING_DESCRIPTOR) ( 159 IN EFI_USB_IO_PROTOCOL * This, 160 IN UINT16 LangID, 161 IN UINT8 StringID, 162 OUT CHAR16 **String 163 ); 164 165 typedef 166 EFI_STATUS 167 (EFIAPI *EFI_USB_IO_GET_SUPPORTED_LANGUAGE) ( 168 IN EFI_USB_IO_PROTOCOL * This, 169 OUT UINT16 **LangIDTable, 170 OUT UINT16 *TableSize 171 ); 172 173 // 174 // Protocol Interface Structure 175 // 176 struct _EFI_USB_IO_PROTOCOL { 177 // 178 // IO transfer 179 // 180 EFI_USB_IO_CONTROL_TRANSFER UsbControlTransfer; 181 EFI_USB_IO_BULK_TRANSFER UsbBulkTransfer; 182 EFI_USB_IO_ASYNC_INTERRUPT_TRANSFER UsbAsyncInterruptTransfer; 183 EFI_USB_IO_SYNC_INTERRUPT_TRANSFER UsbSyncInterruptTransfer; 184 EFI_USB_IO_ISOCHRONOUS_TRANSFER UsbIsochronousTransfer; 185 EFI_USB_IO_ASYNC_ISOCHRONOUS_TRANSFER UsbAsyncIsochronousTransfer; 186 187 // 188 // Common device request 189 // 190 EFI_USB_IO_GET_DEVICE_DESCRIPTOR UsbGetDeviceDescriptor; 191 EFI_USB_IO_GET_CONFIG_DESCRIPTOR UsbGetConfigDescriptor; 192 EFI_USB_IO_GET_INTERFACE_DESCRIPTOR UsbGetInterfaceDescriptor; 193 EFI_USB_IO_GET_ENDPOINT_DESCRIPTOR UsbGetEndpointDescriptor; 194 EFI_USB_IO_GET_STRING_DESCRIPTOR UsbGetStringDescriptor; 195 EFI_USB_IO_GET_SUPPORTED_LANGUAGE UsbGetSupportedLanguages; 196 197 // 198 // Reset controller's parent port 199 // 200 EFI_USB_IO_PORT_RESET UsbPortReset; 201 }; 202 203 extern EFI_GUID gEfiUsbIoProtocolGuid; 204 205 #endif 206