1 /*++ 2 3 Copyright (c) 2004 - 2006, 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 UsbHostController.h 15 16 Abstract: 17 18 19 --*/ 20 21 #ifndef _USB_HOSTCONTROLLER_H_ 22 #define _USB_HOSTCONTROLLER_H_ 23 24 #include "usb.h" 25 #include EFI_PROTOCOL_DEFINITION (UsbIo) 26 27 #define EFI_USB_HC_PROTOCOL_GUID \ 28 { \ 29 0xf5089266, 0x1aa0, 0x4953, {0x97, 0xd8, 0x56, 0x2f, 0x8a, 0x73, 0xb5, 0x19} \ 30 } 31 32 // 33 // Forward reference for pure ANSI compatability 34 // 35 EFI_FORWARD_DECLARATION (EFI_USB_HC_PROTOCOL); 36 37 typedef enum { 38 EfiUsbHcStateHalt, 39 EfiUsbHcStateOperational, 40 EfiUsbHcStateSuspend, 41 EfiUsbHcStateMaximum 42 } EFI_USB_HC_STATE; 43 44 #define EFI_USB_HC_RESET_GLOBAL 0x0001 45 #define EFI_USB_HC_RESET_HOST_CONTROLLER 0x0002 46 #define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG 0x0004 47 #define EFI_USB_HC_RESET_HOST_WITH_DEBUG 0x0008 48 49 // 50 // Protocol definitions 51 // 52 typedef 53 EFI_STATUS 54 (EFIAPI *EFI_USB_HC_PROTOCOL_RESET) ( 55 IN EFI_USB_HC_PROTOCOL * This, 56 IN UINT16 Attributes 57 ); 58 59 typedef 60 EFI_STATUS 61 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_STATE) ( 62 IN EFI_USB_HC_PROTOCOL * This, 63 OUT EFI_USB_HC_STATE * State 64 ); 65 66 typedef 67 EFI_STATUS 68 (EFIAPI *EFI_USB_HC_PROTOCOL_SET_STATE) ( 69 IN EFI_USB_HC_PROTOCOL * This, 70 IN EFI_USB_HC_STATE State 71 ); 72 73 typedef 74 EFI_STATUS 75 (EFIAPI *EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER) ( 76 IN EFI_USB_HC_PROTOCOL * This, 77 IN UINT8 DeviceAddress, 78 IN BOOLEAN IsSlowDevice, 79 IN UINT8 MaximumPacketLength, 80 IN EFI_USB_DEVICE_REQUEST * Request, 81 IN EFI_USB_DATA_DIRECTION TransferDirection, 82 IN OUT VOID *Data OPTIONAL, 83 IN OUT UINTN *DataLength OPTIONAL, 84 IN UINTN TimeOut, 85 OUT UINT32 *TransferResult 86 ); 87 88 typedef 89 EFI_STATUS 90 (EFIAPI *EFI_USB_HC_PROTOCOL_BULK_TRANSFER) ( 91 IN EFI_USB_HC_PROTOCOL * This, 92 IN UINT8 DeviceAddress, 93 IN UINT8 EndPointAddress, 94 IN UINT8 MaximumPacketLength, 95 IN OUT VOID *Data, 96 IN OUT UINTN *DataLength, 97 IN OUT UINT8 *DataToggle, 98 IN UINTN TimeOut, 99 OUT UINT32 *TransferResult 100 ); 101 102 typedef 103 EFI_STATUS 104 (EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER) ( 105 IN EFI_USB_HC_PROTOCOL * This, 106 IN UINT8 DeviceAddress, 107 IN UINT8 EndPointAddress, 108 IN BOOLEAN IsSlowDevice, 109 IN UINT8 MaxiumPacketLength, 110 IN BOOLEAN IsNewTransfer, 111 IN OUT UINT8 *DataToggle, 112 IN UINTN PollingInterval OPTIONAL, 113 IN UINTN DataLength OPTIONAL, 114 IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction OPTIONAL, 115 IN VOID *Context OPTIONAL 116 ); 117 118 typedef 119 EFI_STATUS 120 (EFIAPI *EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER) ( 121 IN EFI_USB_HC_PROTOCOL * This, 122 IN UINT8 DeviceAddress, 123 IN UINT8 EndPointAddress, 124 IN BOOLEAN IsSlowDevice, 125 IN UINT8 MaximumPacketLength, 126 IN OUT VOID *Data, 127 IN OUT UINTN *DataLength, 128 IN OUT UINT8 *DataToggle, 129 IN UINTN TimeOut, 130 OUT UINT32 *TransferResult 131 ); 132 133 typedef 134 EFI_STATUS 135 (EFIAPI *EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER) ( 136 IN EFI_USB_HC_PROTOCOL * This, 137 IN UINT8 DeviceAddress, 138 IN UINT8 EndPointAddress, 139 IN UINT8 MaximumPacketLength, 140 IN OUT VOID *Data, 141 IN UINTN DataLength, 142 OUT UINT32 *TransferResult 143 ); 144 145 typedef 146 EFI_STATUS 147 (EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER) ( 148 IN EFI_USB_HC_PROTOCOL * This, 149 IN UINT8 DeviceAddress, 150 IN UINT8 EndPointAddress, 151 IN UINT8 MaximumPacketLength, 152 IN OUT VOID *Data, 153 IN UINTN DataLength, 154 IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack, 155 IN VOID *Context OPTIONAL 156 ); 157 158 typedef 159 EFI_STATUS 160 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER) ( 161 IN EFI_USB_HC_PROTOCOL * This, 162 OUT UINT8 *PortNumber 163 ); 164 165 typedef 166 EFI_STATUS 167 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS) ( 168 IN EFI_USB_HC_PROTOCOL * This, 169 IN UINT8 PortNumber, 170 OUT EFI_USB_PORT_STATUS * PortStatus 171 ); 172 173 typedef 174 EFI_STATUS 175 (EFIAPI *EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE) ( 176 IN EFI_USB_HC_PROTOCOL * This, 177 IN UINT8 PortNumber, 178 IN EFI_USB_PORT_FEATURE PortFeature 179 ); 180 181 typedef 182 EFI_STATUS 183 (EFIAPI *EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE) ( 184 IN EFI_USB_HC_PROTOCOL * This, 185 IN UINT8 PortNumber, 186 IN EFI_USB_PORT_FEATURE PortFeature 187 ); 188 189 struct _EFI_USB_HC_PROTOCOL { 190 EFI_USB_HC_PROTOCOL_RESET Reset; 191 EFI_USB_HC_PROTOCOL_GET_STATE GetState; 192 EFI_USB_HC_PROTOCOL_SET_STATE SetState; 193 EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER ControlTransfer; 194 EFI_USB_HC_PROTOCOL_BULK_TRANSFER BulkTransfer; 195 EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER AsyncInterruptTransfer; 196 EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER SyncInterruptTransfer; 197 EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER IsochronousTransfer; 198 EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER AsyncIsochronousTransfer; 199 EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER GetRootHubPortNumber; 200 EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS GetRootHubPortStatus; 201 EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE SetRootHubPortFeature; 202 EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE ClearRootHubPortFeature; 203 UINT16 MajorRevision; 204 UINT16 MinorRevision; 205 }; 206 207 extern EFI_GUID gEfiUsbHcProtocolGuid; 208 209 210 #define EFI_USB2_HC_PROTOCOL_GUID \ 211 { \ 212 0x3e745226, 0x9818, 0x45b6, {0xa2, 0xac, 0xd7, 0xcd, 0xe, 0x8b, 0xa2, 0xbc} \ 213 } 214 215 // 216 // Forward reference for pure ANSI compatability 217 // 218 EFI_FORWARD_DECLARATION (EFI_USB2_HC_PROTOCOL); 219 220 #define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG 0x0004 221 #define EFI_USB_HC_RESET_HOST_WITH_DEBUG 0x0008 222 223 typedef struct { 224 UINT8 TranslatorHubAddress; 225 UINT8 TranslatorPortNumber; 226 } EFI_USB2_HC_TRANSACTION_TRANSLATOR; 227 228 // 229 // Protocol definitions 230 // 231 typedef 232 EFI_STATUS 233 (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY) ( 234 IN EFI_USB2_HC_PROTOCOL *This, 235 OUT UINT8 *MaxSpeed, 236 OUT UINT8 *PortNumber, 237 OUT UINT8 *Is64BitCapable 238 ); 239 240 #define EFI_USB_SPEED_FULL 0x0000 241 #define EFI_USB_SPEED_LOW 0x0001 242 #define EFI_USB_SPEED_HIGH 0x0002 243 244 typedef 245 EFI_STATUS 246 (EFIAPI *EFI_USB2_HC_PROTOCOL_RESET) ( 247 IN EFI_USB2_HC_PROTOCOL *This, 248 IN UINT16 Attributes 249 ); 250 251 typedef 252 EFI_STATUS 253 (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE) ( 254 IN EFI_USB2_HC_PROTOCOL *This, 255 OUT EFI_USB_HC_STATE *State 256 ); 257 258 typedef 259 EFI_STATUS 260 (EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE) ( 261 IN EFI_USB2_HC_PROTOCOL *This, 262 IN EFI_USB_HC_STATE State 263 ); 264 265 typedef 266 EFI_STATUS 267 (EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER) ( 268 IN EFI_USB2_HC_PROTOCOL *This, 269 IN UINT8 DeviceAddress, 270 IN UINT8 DeviceSpeed, 271 IN UINTN MaximumPacketLength, 272 IN EFI_USB_DEVICE_REQUEST *Request, 273 IN EFI_USB_DATA_DIRECTION TransferDirection, 274 IN OUT VOID *Data OPTIONAL, 275 IN OUT UINTN *DataLength OPTIONAL, 276 IN UINTN TimeOut, 277 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator, 278 OUT UINT32 *TransferResult 279 ); 280 281 #define EFI_USB_MAX_BULK_BUFFER_NUM 10 282 283 typedef 284 EFI_STATUS 285 (EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER) ( 286 IN EFI_USB2_HC_PROTOCOL *This, 287 IN UINT8 DeviceAddress, 288 IN UINT8 EndPointAddress, 289 IN UINT8 DeviceSpeed, 290 IN UINTN MaximumPacketLength, 291 IN UINT8 DataBuffersNumber, 292 IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM], 293 IN OUT UINTN *DataLength, 294 IN OUT UINT8 *DataToggle, 295 IN UINTN TimeOut, 296 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator, 297 OUT UINT32 *TransferResult 298 ); 299 300 typedef 301 EFI_STATUS 302 (EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER) ( 303 IN EFI_USB2_HC_PROTOCOL *This, 304 IN UINT8 DeviceAddress, 305 IN UINT8 EndPointAddress, 306 IN UINT8 DeviceSpeed, 307 IN UINTN MaxiumPacketLength, 308 IN BOOLEAN IsNewTransfer, 309 IN OUT UINT8 *DataToggle, 310 IN UINTN PollingInterval OPTIONAL, 311 IN UINTN DataLength OPTIONAL, 312 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator, 313 IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction OPTIONAL, 314 IN VOID *Context OPTIONAL 315 ); 316 317 typedef 318 EFI_STATUS 319 (EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER) ( 320 IN EFI_USB2_HC_PROTOCOL *This, 321 IN UINT8 DeviceAddress, 322 IN UINT8 EndPointAddress, 323 IN UINT8 DeviceSpeed, 324 IN UINTN MaximumPacketLength, 325 IN OUT VOID *Data, 326 IN OUT UINTN *DataLength, 327 IN OUT UINT8 *DataToggle, 328 IN UINTN TimeOut, 329 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator, 330 OUT UINT32 *TransferResult 331 ); 332 333 #define EFI_USB_MAX_ISO_BUFFER_NUM 7 334 #define EFI_USB_MAX_ISO_BUFFER_NUM1 2 335 336 typedef 337 EFI_STATUS 338 (EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER) ( 339 IN EFI_USB2_HC_PROTOCOL *This, 340 IN UINT8 DeviceAddress, 341 IN UINT8 EndPointAddress, 342 IN UINT8 DeviceSpeed, 343 IN UINTN MaximumPacketLength, 344 IN UINT8 DataBuffersNumber, 345 IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM], 346 IN UINTN DataLength, 347 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator, 348 OUT UINT32 *TransferResult 349 ); 350 351 typedef 352 EFI_STATUS 353 (EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER) ( 354 IN EFI_USB2_HC_PROTOCOL *This, 355 IN UINT8 DeviceAddress, 356 IN UINT8 EndPointAddress, 357 IN UINT8 DeviceSpeed, 358 IN UINTN MaximumPacketLength, 359 IN UINT8 DataBuffersNumber, 360 IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM], 361 IN UINTN DataLength, 362 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator, 363 IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack, 364 IN VOID *Context OPTIONAL 365 ); 366 367 typedef 368 EFI_STATUS 369 (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS) ( 370 IN EFI_USB2_HC_PROTOCOL *This, 371 IN UINT8 PortNumber, 372 OUT EFI_USB_PORT_STATUS *PortStatus 373 ); 374 375 typedef 376 EFI_STATUS 377 (EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE) ( 378 IN EFI_USB2_HC_PROTOCOL *This, 379 IN UINT8 PortNumber, 380 IN EFI_USB_PORT_FEATURE PortFeature 381 ); 382 383 typedef 384 EFI_STATUS 385 (EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE) ( 386 IN EFI_USB2_HC_PROTOCOL *This, 387 IN UINT8 PortNumber, 388 IN EFI_USB_PORT_FEATURE PortFeature 389 ); 390 391 struct _EFI_USB2_HC_PROTOCOL { 392 EFI_USB2_HC_PROTOCOL_GET_CAPABILITY GetCapability; 393 EFI_USB2_HC_PROTOCOL_RESET Reset; 394 EFI_USB2_HC_PROTOCOL_GET_STATE GetState; 395 EFI_USB2_HC_PROTOCOL_SET_STATE SetState; 396 EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER ControlTransfer; 397 EFI_USB2_HC_PROTOCOL_BULK_TRANSFER BulkTransfer; 398 EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER AsyncInterruptTransfer; 399 EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER SyncInterruptTransfer; 400 EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER IsochronousTransfer; 401 EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER AsyncIsochronousTransfer; 402 EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS GetRootHubPortStatus; 403 EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE SetRootHubPortFeature; 404 EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE ClearRootHubPortFeature; 405 UINT16 MajorRevision; 406 UINT16 MinorRevision; 407 }; 408 409 extern EFI_GUID gEfiUsb2HcProtocolGuid; 410 411 #endif 412