]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Bus/Pci/XhciDxe/Xhci.h
MdeModulePkg/Bus: Fix typos in comments
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / XhciDxe / Xhci.h
1 /** @file
2
3 Provides some data structure definitions used by the XHCI host controller driver.
4
5 Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #ifndef _EFI_XHCI_H_
17 #define _EFI_XHCI_H_
18
19 #include <Uefi.h>
20
21 #include <Protocol/Usb2HostController.h>
22 #include <Protocol/PciIo.h>
23
24 #include <Guid/EventGroup.h>
25
26 #include <Library/BaseLib.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/UefiDriverEntryPoint.h>
29 #include <Library/UefiBootServicesTableLib.h>
30 #include <Library/MemoryAllocationLib.h>
31 #include <Library/UefiLib.h>
32 #include <Library/DebugLib.h>
33 #include <Library/ReportStatusCodeLib.h>
34
35 #include <IndustryStandard/Pci.h>
36
37 typedef struct _USB_XHCI_INSTANCE USB_XHCI_INSTANCE;
38 typedef struct _USB_DEV_CONTEXT USB_DEV_CONTEXT;
39
40 #include "XhciReg.h"
41 #include "XhciSched.h"
42 #include "ComponentName.h"
43 #include "UsbHcMem.h"
44
45 //
46 // The unit is microsecond, setting it as 1us.
47 //
48 #define XHC_1_MICROSECOND (1)
49 //
50 // The unit is microsecond, setting it as 1ms.
51 //
52 #define XHC_1_MILLISECOND (1000)
53 //
54 // XHC generic timeout experience values.
55 // The unit is millisecond, setting it as 10s.
56 //
57 #define XHC_GENERIC_TIMEOUT (10 * 1000)
58 //
59 // XHC reset timeout experience values.
60 // The unit is millisecond, setting it as 1s.
61 //
62 #define XHC_RESET_TIMEOUT (1000)
63 //
64 // XHC async transfer timer interval, set by experience.
65 // The unit is 100us, takes 1ms as interval.
66 //
67 #define XHC_ASYNC_TIMER_INTERVAL EFI_TIMER_PERIOD_MILLISECONDS(1)
68
69 //
70 // XHC raises TPL to TPL_NOTIFY to serialize all its operations
71 // to protect shared data structures.
72 //
73 #define XHC_TPL TPL_NOTIFY
74
75 #define CMD_RING_TRB_NUMBER 0x100
76 #define TR_RING_TRB_NUMBER 0x100
77 #define ERST_NUMBER 0x01
78 #define EVENT_RING_TRB_NUMBER 0x200
79
80 #define CMD_INTER 0
81 #define CTRL_INTER 1
82 #define BULK_INTER 2
83 #define INT_INTER 3
84 #define INT_INTER_ASYNC 4
85
86 //
87 // Iterate through the double linked list. This is delete-safe.
88 // Don't touch NextEntry
89 //
90 #define EFI_LIST_FOR_EACH_SAFE(Entry, NextEntry, ListHead) \
91 for (Entry = (ListHead)->ForwardLink, NextEntry = Entry->ForwardLink;\
92 Entry != (ListHead); Entry = NextEntry, NextEntry = Entry->ForwardLink)
93
94 #define EFI_LIST_CONTAINER(Entry, Type, Field) BASE_CR(Entry, Type, Field)
95
96 #define XHC_LOW_32BIT(Addr64) ((UINT32)(((UINTN)(Addr64)) & 0xFFFFFFFF))
97 #define XHC_HIGH_32BIT(Addr64) ((UINT32)(RShiftU64((UINT64)(UINTN)(Addr64), 32) & 0xFFFFFFFF))
98 #define XHC_BIT_IS_SET(Data, Bit) ((BOOLEAN)(((Data) & (Bit)) == (Bit)))
99
100 #define XHC_REG_BIT_IS_SET(Xhc, Offset, Bit) \
101 (XHC_BIT_IS_SET(XhcReadOpReg ((Xhc), (Offset)), (Bit)))
102
103 #define XHCI_IS_DATAIN(EndpointAddr) XHC_BIT_IS_SET((EndpointAddr), 0x80)
104
105 #define XHCI_INSTANCE_SIG SIGNATURE_32 ('x', 'h', 'c', 'i')
106 #define XHC_FROM_THIS(a) CR(a, USB_XHCI_INSTANCE, Usb2Hc, XHCI_INSTANCE_SIG)
107
108 #define USB_DESC_TYPE_HUB 0x29
109 #define USB_DESC_TYPE_HUB_SUPER_SPEED 0x2a
110
111 //
112 // The RequestType in EFI_USB_DEVICE_REQUEST is composed of
113 // three fields: One bit direction, 2 bit type, and 5 bit
114 // target.
115 //
116 #define USB_REQUEST_TYPE(Dir, Type, Target) \
117 ((UINT8)((((Dir) == EfiUsbDataIn ? 0x01 : 0) << 7) | (Type) | (Target)))
118
119 //
120 // Xhci Data and Ctrl Structures
121 //
122 #pragma pack(1)
123 typedef struct {
124 UINT8 ProgInterface;
125 UINT8 SubClassCode;
126 UINT8 BaseCode;
127 } USB_CLASSC;
128
129 typedef struct {
130 UINT8 Length;
131 UINT8 DescType;
132 UINT8 NumPorts;
133 UINT16 HubCharacter;
134 UINT8 PwrOn2PwrGood;
135 UINT8 HubContrCurrent;
136 UINT8 Filler[16];
137 } EFI_USB_HUB_DESCRIPTOR;
138 #pragma pack()
139
140 struct _USB_DEV_CONTEXT {
141 //
142 // Whether this entry in UsbDevContext array is used or not.
143 //
144 BOOLEAN Enabled;
145 //
146 // The slot id assigned to the new device through XHCI's Enable_Slot cmd.
147 //
148 UINT8 SlotId;
149 //
150 // The route string presented an attached usb device.
151 //
152 USB_DEV_ROUTE RouteString;
153 //
154 // The route string of parent device if it exists. Otherwise it's zero.
155 //
156 USB_DEV_ROUTE ParentRouteString;
157 //
158 // The actual device address assigned by XHCI through Address_Device command.
159 //
160 UINT8 XhciDevAddr;
161 //
162 // The requested device address from UsbBus driver through Set_Address standard usb request.
163 // As XHCI spec replaces this request with Address_Device command, we have to record the
164 // requested device address and establish a mapping relationship with the actual device address.
165 // Then UsbBus driver just need to be aware of the requested device address to access usb device
166 // through EFI_USB2_HC_PROTOCOL. Xhci driver would be responsible for translating it to actual
167 // device address and access the actual device.
168 //
169 UINT8 BusDevAddr;
170 //
171 // The pointer to the input device context.
172 //
173 VOID *InputContext;
174 //
175 // The pointer to the output device context.
176 //
177 VOID *OutputContext;
178 //
179 // The transfer queue for every endpoint.
180 //
181 VOID *EndpointTransferRing[31];
182 //
183 // The device descriptor which is stored to support XHCI's Evaluate_Context cmd.
184 //
185 EFI_USB_DEVICE_DESCRIPTOR DevDesc;
186 //
187 // As a usb device may include multiple configuration descriptors, we dynamically allocate an array
188 // to store them.
189 // Note that every configuration descriptor stored here includes those lower level descriptors,
190 // such as Interface descriptor, Endpoint descriptor, and so on.
191 // These information is used to support XHCI's Config_Endpoint cmd.
192 //
193 EFI_USB_CONFIG_DESCRIPTOR **ConfDesc;
194 //
195 // A device has an active Configuration.
196 //
197 UINT8 ActiveConfiguration;
198 //
199 // Every interface has an active AlternateSetting.
200 //
201 UINT8 *ActiveAlternateSetting;
202 };
203
204 struct _USB_XHCI_INSTANCE {
205 UINT32 Signature;
206 EFI_PCI_IO_PROTOCOL *PciIo;
207 UINT64 OriginalPciAttributes;
208 USBHC_MEM_POOL *MemPool;
209
210 EFI_USB2_HC_PROTOCOL Usb2Hc;
211
212 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
213
214 //
215 // ExitBootServicesEvent is used to set OS semaphore and
216 // stop the XHC DMA operation after exit boot service.
217 //
218 EFI_EVENT ExitBootServiceEvent;
219 EFI_EVENT PollTimer;
220 LIST_ENTRY AsyncIntTransfers;
221
222 UINT8 CapLength; ///< Capability Register Length
223 XHC_HCSPARAMS1 HcSParams1; ///< Structural Parameters 1
224 XHC_HCSPARAMS2 HcSParams2; ///< Structural Parameters 2
225 XHC_HCCPARAMS HcCParams; ///< Capability Parameters
226 UINT32 DBOff; ///< Doorbell Offset
227 UINT32 RTSOff; ///< Runtime Register Space Offset
228 UINT16 MaxInterrupt;
229 UINT32 PageSize;
230 UINT64 *ScratchBuf;
231 VOID *ScratchMap;
232 UINT32 MaxScratchpadBufs;
233 UINT64 *ScratchEntry;
234 UINTN *ScratchEntryMap;
235 UINT32 ExtCapRegBase;
236 UINT32 UsbLegSupOffset;
237 UINT32 DebugCapSupOffset;
238 UINT64 *DCBAA;
239 VOID *DCBAAMap;
240 UINT32 MaxSlotsEn;
241 //
242 // Cmd Transfer Ring
243 //
244 TRANSFER_RING CmdRing;
245 //
246 // EventRing
247 //
248 EVENT_RING EventRing;
249 //
250 // Misc
251 //
252 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
253
254 //
255 // Store device contexts managed by XHCI instance
256 // The array supports up to 255 devices, entry 0 is reserved and should not be used.
257 //
258 USB_DEV_CONTEXT UsbDevContext[256];
259
260 BOOLEAN Support64BitDma; // Whether 64 bit DMA may be used with this device
261 };
262
263
264 extern EFI_DRIVER_BINDING_PROTOCOL gXhciDriverBinding;
265 extern EFI_COMPONENT_NAME_PROTOCOL gXhciComponentName;
266 extern EFI_COMPONENT_NAME2_PROTOCOL gXhciComponentName2;
267
268 /**
269 Test to see if this driver supports ControllerHandle. Any
270 ControllerHandle that has Usb2HcProtocol installed will
271 be supported.
272
273 @param This Protocol instance pointer.
274 @param Controller Handle of device to test.
275 @param RemainingDevicePath Not used.
276
277 @return EFI_SUCCESS This driver supports this device.
278 @return EFI_UNSUPPORTED This driver does not support this device.
279
280 **/
281 EFI_STATUS
282 EFIAPI
283 XhcDriverBindingSupported (
284 IN EFI_DRIVER_BINDING_PROTOCOL *This,
285 IN EFI_HANDLE Controller,
286 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
287 );
288
289 /**
290 Starting the Usb XHCI Driver.
291
292 @param This Protocol instance pointer.
293 @param Controller Handle of device to test.
294 @param RemainingDevicePath Not used.
295
296 @return EFI_SUCCESS supports this device.
297 @return EFI_UNSUPPORTED do not support this device.
298 @return EFI_DEVICE_ERROR cannot be started due to device Error.
299 @return EFI_OUT_OF_RESOURCES cannot allocate resources.
300
301 **/
302 EFI_STATUS
303 EFIAPI
304 XhcDriverBindingStart (
305 IN EFI_DRIVER_BINDING_PROTOCOL *This,
306 IN EFI_HANDLE Controller,
307 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
308 );
309
310 /**
311 Stop this driver on ControllerHandle. Support stopping any child handles
312 created by this driver.
313
314 @param This Protocol instance pointer.
315 @param Controller Handle of device to stop driver on.
316 @param NumberOfChildren Number of Children in the ChildHandleBuffer.
317 @param ChildHandleBuffer List of handles for the children we need to stop.
318
319 @return EFI_SUCCESS Success.
320 @return EFI_DEVICE_ERROR Fail.
321
322 **/
323 EFI_STATUS
324 EFIAPI
325 XhcDriverBindingStop (
326 IN EFI_DRIVER_BINDING_PROTOCOL *This,
327 IN EFI_HANDLE Controller,
328 IN UINTN NumberOfChildren,
329 IN EFI_HANDLE *ChildHandleBuffer
330 );
331
332 /**
333 Retrieves the capability of root hub ports.
334
335 @param This The EFI_USB2_HC_PROTOCOL instance.
336 @param MaxSpeed Max speed supported by the controller.
337 @param PortNumber Number of the root hub ports.
338 @param Is64BitCapable Whether the controller supports 64-bit memory
339 addressing.
340
341 @retval EFI_SUCCESS Host controller capability were retrieved successfully.
342 @retval EFI_INVALID_PARAMETER Either of the three capability pointer is NULL.
343
344 **/
345 EFI_STATUS
346 EFIAPI
347 XhcGetCapability (
348 IN EFI_USB2_HC_PROTOCOL *This,
349 OUT UINT8 *MaxSpeed,
350 OUT UINT8 *PortNumber,
351 OUT UINT8 *Is64BitCapable
352 );
353
354 /**
355 Provides software reset for the USB host controller.
356
357 @param This This EFI_USB2_HC_PROTOCOL instance.
358 @param Attributes A bit mask of the reset operation to perform.
359
360 @retval EFI_SUCCESS The reset operation succeeded.
361 @retval EFI_INVALID_PARAMETER Attributes is not valid.
362 @retval EFI_UNSUPPOURTED The type of reset specified by Attributes is
363 not currently supported by the host controller.
364 @retval EFI_DEVICE_ERROR Host controller isn't halted to reset.
365
366 **/
367 EFI_STATUS
368 EFIAPI
369 XhcReset (
370 IN EFI_USB2_HC_PROTOCOL *This,
371 IN UINT16 Attributes
372 );
373
374 /**
375 Retrieve the current state of the USB host controller.
376
377 @param This This EFI_USB2_HC_PROTOCOL instance.
378 @param State Variable to return the current host controller
379 state.
380
381 @retval EFI_SUCCESS Host controller state was returned in State.
382 @retval EFI_INVALID_PARAMETER State is NULL.
383 @retval EFI_DEVICE_ERROR An error was encountered while attempting to
384 retrieve the host controller's current state.
385
386 **/
387 EFI_STATUS
388 EFIAPI
389 XhcGetState (
390 IN EFI_USB2_HC_PROTOCOL *This,
391 OUT EFI_USB_HC_STATE *State
392 );
393
394 /**
395 Sets the USB host controller to a specific state.
396
397 @param This This EFI_USB2_HC_PROTOCOL instance.
398 @param State The state of the host controller that will be set.
399
400 @retval EFI_SUCCESS The USB host controller was successfully placed
401 in the state specified by State.
402 @retval EFI_INVALID_PARAMETER State is invalid.
403 @retval EFI_DEVICE_ERROR Failed to set the state due to device error.
404
405 **/
406 EFI_STATUS
407 EFIAPI
408 XhcSetState (
409 IN EFI_USB2_HC_PROTOCOL *This,
410 IN EFI_USB_HC_STATE State
411 );
412
413 /**
414 Retrieves the current status of a USB root hub port.
415
416 @param This This EFI_USB2_HC_PROTOCOL instance.
417 @param PortNumber The root hub port to retrieve the state from.
418 This value is zero-based.
419 @param PortStatus Variable to receive the port state.
420
421 @retval EFI_SUCCESS The status of the USB root hub port specified.
422 by PortNumber was returned in PortStatus.
423 @retval EFI_INVALID_PARAMETER PortNumber is invalid.
424 @retval EFI_DEVICE_ERROR Can't read register.
425
426 **/
427 EFI_STATUS
428 EFIAPI
429 XhcGetRootHubPortStatus (
430 IN EFI_USB2_HC_PROTOCOL *This,
431 IN UINT8 PortNumber,
432 OUT EFI_USB_PORT_STATUS *PortStatus
433 );
434
435 /**
436 Sets a feature for the specified root hub port.
437
438 @param This This EFI_USB2_HC_PROTOCOL instance.
439 @param PortNumber Root hub port to set.
440 @param PortFeature Feature to set.
441
442 @retval EFI_SUCCESS The feature specified by PortFeature was set.
443 @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.
444 @retval EFI_DEVICE_ERROR Can't read register.
445
446 **/
447 EFI_STATUS
448 EFIAPI
449 XhcSetRootHubPortFeature (
450 IN EFI_USB2_HC_PROTOCOL *This,
451 IN UINT8 PortNumber,
452 IN EFI_USB_PORT_FEATURE PortFeature
453 );
454
455 /**
456 Clears a feature for the specified root hub port.
457
458 @param This A pointer to the EFI_USB2_HC_PROTOCOL instance.
459 @param PortNumber Specifies the root hub port whose feature is
460 requested to be cleared.
461 @param PortFeature Indicates the feature selector associated with the
462 feature clear request.
463
464 @retval EFI_SUCCESS The feature specified by PortFeature was cleared
465 for the USB root hub port specified by PortNumber.
466 @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.
467 @retval EFI_DEVICE_ERROR Can't read register.
468
469 **/
470 EFI_STATUS
471 EFIAPI
472 XhcClearRootHubPortFeature (
473 IN EFI_USB2_HC_PROTOCOL *This,
474 IN UINT8 PortNumber,
475 IN EFI_USB_PORT_FEATURE PortFeature
476 );
477
478 /**
479 Submits control transfer to a target USB device.
480
481 @param This This EFI_USB2_HC_PROTOCOL instance.
482 @param DeviceAddress The target device address.
483 @param DeviceSpeed Target device speed.
484 @param MaximumPacketLength Maximum packet size the default control transfer
485 endpoint is capable of sending or receiving.
486 @param Request USB device request to send.
487 @param TransferDirection Specifies the data direction for the data stage
488 @param Data Data buffer to be transmitted or received from USB
489 device.
490 @param DataLength The size (in bytes) of the data buffer.
491 @param Timeout Indicates the maximum timeout, in millisecond.
492 @param Translator Transaction translator to be used by this device.
493 @param TransferResult Return the result of this control transfer.
494
495 @retval EFI_SUCCESS Transfer was completed successfully.
496 @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resources.
497 @retval EFI_INVALID_PARAMETER Some parameters are invalid.
498 @retval EFI_TIMEOUT Transfer failed due to timeout.
499 @retval EFI_DEVICE_ERROR Transfer failed due to host controller or device error.
500
501 **/
502 EFI_STATUS
503 EFIAPI
504 XhcControlTransfer (
505 IN EFI_USB2_HC_PROTOCOL *This,
506 IN UINT8 DeviceAddress,
507 IN UINT8 DeviceSpeed,
508 IN UINTN MaximumPacketLength,
509 IN EFI_USB_DEVICE_REQUEST *Request,
510 IN EFI_USB_DATA_DIRECTION TransferDirection,
511 IN OUT VOID *Data,
512 IN OUT UINTN *DataLength,
513 IN UINTN Timeout,
514 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
515 OUT UINT32 *TransferResult
516 );
517
518 /**
519 Submits bulk transfer to a bulk endpoint of a USB device.
520
521 @param This This EFI_USB2_HC_PROTOCOL instance.
522 @param DeviceAddress Target device address.
523 @param EndPointAddress Endpoint number and its direction in bit 7.
524 @param DeviceSpeed Device speed, Low speed device doesn't support bulk
525 transfer.
526 @param MaximumPacketLength Maximum packet size the endpoint is capable of
527 sending or receiving.
528 @param DataBuffersNumber Number of data buffers prepared for the transfer.
529 @param Data Array of pointers to the buffers of data to transmit
530 from or receive into.
531 @param DataLength The lenght of the data buffer.
532 @param DataToggle On input, the initial data toggle for the transfer;
533 On output, it is updated to to next data toggle to
534 use of the subsequent bulk transfer.
535 @param Timeout Indicates the maximum time, in millisecond, which
536 the transfer is allowed to complete.
537 @param Translator A pointr to the transaction translator data.
538 @param TransferResult A pointer to the detailed result information of the
539 bulk transfer.
540
541 @retval EFI_SUCCESS The transfer was completed successfully.
542 @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource.
543 @retval EFI_INVALID_PARAMETER Some parameters are invalid.
544 @retval EFI_TIMEOUT The transfer failed due to timeout.
545 @retval EFI_DEVICE_ERROR The transfer failed due to host controller error.
546
547 **/
548 EFI_STATUS
549 EFIAPI
550 XhcBulkTransfer (
551 IN EFI_USB2_HC_PROTOCOL *This,
552 IN UINT8 DeviceAddress,
553 IN UINT8 EndPointAddress,
554 IN UINT8 DeviceSpeed,
555 IN UINTN MaximumPacketLength,
556 IN UINT8 DataBuffersNumber,
557 IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
558 IN OUT UINTN *DataLength,
559 IN OUT UINT8 *DataToggle,
560 IN UINTN Timeout,
561 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
562 OUT UINT32 *TransferResult
563 );
564
565 /**
566 Submits an asynchronous interrupt transfer to an
567 interrupt endpoint of a USB device.
568
569 @param This This EFI_USB2_HC_PROTOCOL instance.
570 @param DeviceAddress Target device address.
571 @param EndPointAddress Endpoint number and its direction encoded in bit 7
572 @param DeviceSpeed Indicates device speed.
573 @param MaximumPacketLength Maximum packet size the target endpoint is capable
574 @param IsNewTransfer If TRUE, to submit an new asynchronous interrupt
575 transfer If FALSE, to remove the specified
576 asynchronous interrupt.
577 @param DataToggle On input, the initial data toggle to use; on output,
578 it is updated to indicate the next data toggle.
579 @param PollingInterval The he interval, in milliseconds, that the transfer
580 is polled.
581 @param DataLength The length of data to receive at the rate specified
582 by PollingInterval.
583 @param Translator Transaction translator to use.
584 @param CallBackFunction Function to call at the rate specified by
585 PollingInterval.
586 @param Context Context to CallBackFunction.
587
588 @retval EFI_SUCCESS The request has been successfully submitted or canceled.
589 @retval EFI_INVALID_PARAMETER Some parameters are invalid.
590 @retval EFI_OUT_OF_RESOURCES The request failed due to a lack of resources.
591 @retval EFI_DEVICE_ERROR The transfer failed due to host controller error.
592
593 **/
594 EFI_STATUS
595 EFIAPI
596 XhcAsyncInterruptTransfer (
597 IN EFI_USB2_HC_PROTOCOL *This,
598 IN UINT8 DeviceAddress,
599 IN UINT8 EndPointAddress,
600 IN UINT8 DeviceSpeed,
601 IN UINTN MaximumPacketLength,
602 IN BOOLEAN IsNewTransfer,
603 IN OUT UINT8 *DataToggle,
604 IN UINTN PollingInterval,
605 IN UINTN DataLength,
606 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
607 IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction,
608 IN VOID *Context OPTIONAL
609 );
610
611 /**
612 Submits synchronous interrupt transfer to an interrupt endpoint
613 of a USB device.
614
615 @param This This EFI_USB2_HC_PROTOCOL instance.
616 @param DeviceAddress Target device address.
617 @param EndPointAddress Endpoint number and its direction encoded in bit 7
618 @param DeviceSpeed Indicates device speed.
619 @param MaximumPacketLength Maximum packet size the target endpoint is capable
620 of sending or receiving.
621 @param Data Buffer of data that will be transmitted to USB
622 device or received from USB device.
623 @param DataLength On input, the size, in bytes, of the data buffer; On
624 output, the number of bytes transferred.
625 @param DataToggle On input, the initial data toggle to use; on output,
626 it is updated to indicate the next data toggle.
627 @param Timeout Maximum time, in second, to complete.
628 @param Translator Transaction translator to use.
629 @param TransferResult Variable to receive the transfer result.
630
631 @return EFI_SUCCESS The transfer was completed successfully.
632 @return EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource.
633 @return EFI_INVALID_PARAMETER Some parameters are invalid.
634 @return EFI_TIMEOUT The transfer failed due to timeout.
635 @return EFI_DEVICE_ERROR The failed due to host controller or device error
636
637 **/
638 EFI_STATUS
639 EFIAPI
640 XhcSyncInterruptTransfer (
641 IN EFI_USB2_HC_PROTOCOL *This,
642 IN UINT8 DeviceAddress,
643 IN UINT8 EndPointAddress,
644 IN UINT8 DeviceSpeed,
645 IN UINTN MaximumPacketLength,
646 IN OUT VOID *Data,
647 IN OUT UINTN *DataLength,
648 IN OUT UINT8 *DataToggle,
649 IN UINTN Timeout,
650 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
651 OUT UINT32 *TransferResult
652 );
653
654 /**
655 Submits isochronous transfer to a target USB device.
656
657 @param This This EFI_USB2_HC_PROTOCOL instance.
658 @param DeviceAddress Target device address.
659 @param EndPointAddress End point address with its direction.
660 @param DeviceSpeed Device speed, Low speed device doesn't support this
661 type.
662 @param MaximumPacketLength Maximum packet size that the endpoint is capable of
663 sending or receiving.
664 @param DataBuffersNumber Number of data buffers prepared for the transfer.
665 @param Data Array of pointers to the buffers of data that will
666 be transmitted to USB device or received from USB
667 device.
668 @param DataLength The size, in bytes, of the data buffer.
669 @param Translator Transaction translator to use.
670 @param TransferResult Variable to receive the transfer result.
671
672 @return EFI_UNSUPPORTED Isochronous transfer is unsupported.
673
674 **/
675 EFI_STATUS
676 EFIAPI
677 XhcIsochronousTransfer (
678 IN EFI_USB2_HC_PROTOCOL *This,
679 IN UINT8 DeviceAddress,
680 IN UINT8 EndPointAddress,
681 IN UINT8 DeviceSpeed,
682 IN UINTN MaximumPacketLength,
683 IN UINT8 DataBuffersNumber,
684 IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
685 IN UINTN DataLength,
686 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
687 OUT UINT32 *TransferResult
688 );
689
690 /**
691 Submits Async isochronous transfer to a target USB device.
692
693 @param This This EFI_USB2_HC_PROTOCOL instance.
694 @param DeviceAddress Target device address.
695 @param EndPointAddress End point address with its direction.
696 @param DeviceSpeed Device speed, Low speed device doesn't support this
697 type.
698 @param MaximumPacketLength Maximum packet size that the endpoint is capable of
699 sending or receiving.
700 @param DataBuffersNumber Number of data buffers prepared for the transfer.
701 @param Data Array of pointers to the buffers of data that will
702 be transmitted to USB device or received from USB
703 device.
704 @param DataLength The size, in bytes, of the data buffer.
705 @param Translator Transaction translator to use.
706 @param IsochronousCallBack Function to be called when the transfer complete.
707 @param Context Context passed to the call back function as
708 parameter.
709
710 @return EFI_UNSUPPORTED Isochronous transfer isn't supported.
711
712 **/
713 EFI_STATUS
714 EFIAPI
715 XhcAsyncIsochronousTransfer (
716 IN EFI_USB2_HC_PROTOCOL *This,
717 IN UINT8 DeviceAddress,
718 IN UINT8 EndPointAddress,
719 IN UINT8 DeviceSpeed,
720 IN UINTN MaximumPacketLength,
721 IN UINT8 DataBuffersNumber,
722 IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
723 IN UINTN DataLength,
724 IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
725 IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,
726 IN VOID *Context
727 );
728
729 #endif