1 /** @file 2 Debug Port Library implementation based on usb3 debug port. 3 4 Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR> 5 SPDX-License-Identifier: BSD-2-Clause-Patent 6 7 **/ 8 9 #ifndef __USB3_DEBUG_PORT_LIB_INTERNAL__ 10 #define __USB3_DEBUG_PORT_LIB_INTERNAL__ 11 12 #include <Uefi.h> 13 #include <Base.h> 14 #include <IndustryStandard/Usb.h> 15 #include <Library/IoLib.h> 16 #include <IndustryStandard/Pci.h> 17 #include <Library/PcdLib.h> 18 #include <Library/UefiLib.h> 19 #include <Library/UefiBootServicesTableLib.h> 20 #include <Library/MemoryAllocationLib.h> 21 #include <Library/DebugLib.h> 22 #include <Library/BaseMemoryLib.h> 23 #include <Library/BaseLib.h> 24 #include <Library/TimerLib.h> 25 #include <Library/DebugCommunicationLib.h> 26 #include <Library/PciLib.h> 27 28 // 29 // USB Debug GUID value 30 // 31 #define USB3_DBG_GUID \ 32 { \ 33 0xb2a56f4d, 0x9177, 0x4fc8, { 0xa6, 0x77, 0xdd, 0x96, 0x3e, 0xb4, 0xcb, 0x1b } \ 34 } 35 36 // 37 // The state machine of usb debug port 38 // 39 #define USB3DBG_NO_DBG_CAB 0 // The XHCI host controller does not support debug capability 40 #define USB3DBG_DBG_CAB 1 // The XHCI host controller supports debug capability 41 #define USB3DBG_ENABLED 2 // The XHCI debug device is enabled 42 #define USB3DBG_NOT_ENABLED 4 // The XHCI debug device is not enabled 43 #define USB3DBG_UNINITIALIZED 255 // The XHCI debug device is uninitialized 44 45 #define USB3_DEBUG_PORT_WRITE_MAX_PACKET_SIZE 0x08 46 47 // 48 // MaxPacketSize for DbC Endpoint Descriptor IN and OUT 49 // 50 #define XHCI_DEBUG_DEVICE_MAX_PACKET_SIZE 0x400 51 52 #define XHCI_DEBUG_DEVICE_VENDOR_ID 0x0525 53 #define XHCI_DEBUG_DEVICE_PRODUCT_ID 0x127A 54 #define XHCI_DEBUG_DEVICE_PROTOCOL 0xFF 55 #define XHCI_DEBUG_DEVICE_REVISION 0x00 56 57 #define XHCI_BASE_ADDRESS_64_BIT_MASK 0xFFFFFFFFFFFF0000ULL 58 #define XHCI_BASE_ADDRESS_32_BIT_MASK 0xFFFF0000 59 60 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A 61 #define XHC_HCCPARAMS_OFFSET 0x10 62 #define XHC_CAPABILITY_ID_MASK 0xFF 63 #define XHC_NEXT_CAPABILITY_MASK 0xFF00 64 65 #define XHC_HCSPARAMS1_OFFSET 0x4 // Structural Parameters 1 66 #define XHC_USBCMD_OFFSET 0x0 // USB Command Register Offset 67 #define XHC_USBSTS_OFFSET 0x4 // USB Status Register Offset 68 #define XHC_PORTSC_OFFSET 0x400 // Port Status and Control Register Offset 69 70 #define XHC_USBCMD_RUN BIT0 // Run/Stop 71 #define XHC_USBCMD_RESET BIT1 // Host Controller Reset 72 73 #define XHC_USBSTS_HALT BIT0 74 75 // 76 // Indicate the timeout when data is transferred in microsecond. 0 means infinite timeout. 77 // 78 #define DATA_TRANSFER_WRITE_TIMEOUT 0 79 #define DATA_TRANSFER_READ_TIMEOUT 50000 80 #define DATA_TRANSFER_POLL_TIMEOUT 1000 81 #define XHC_DEBUG_PORT_1_MILLISECOND 1000 82 // 83 // XHCI port power off/on delay 84 // 85 #define XHC_DEBUG_PORT_ON_OFF_DELAY 100000 86 87 // 88 // USB debug device string descritpor (header size + unicode string length) 89 // 90 #define STRING0_DESC_LEN 4 91 #define MANU_DESC_LEN 12 92 #define PRODUCT_DESC_LEN 40 93 #define SERIAL_DESC_LEN 4 94 95 // 96 // Debug Capability Register Offset 97 // 98 #define XHC_DC_DCID 0x0 99 #define XHC_DC_DCDB 0x4 100 #define XHC_DC_DCERSTSZ 0x8 101 #define XHC_DC_DCERSTBA 0x10 102 #define XHC_DC_DCERDP 0x18 103 #define XHC_DC_DCCTRL 0x20 104 #define XHC_DC_DCST 0x24 105 #define XHC_DC_DCPORTSC 0x28 106 #define XHC_DC_DCCP 0x30 107 #define XHC_DC_DCDDI1 0x38 108 #define XHC_DC_DCDDI2 0x3C 109 110 #define TRB_TYPE_LINK 6 111 112 #define ERST_NUMBER 0x01 113 #define TR_RING_TRB_NUMBER 0x100 114 #define EVENT_RING_TRB_NUMBER 0x200 115 116 #define ED_BULK_OUT 2 117 #define ED_BULK_IN 6 118 119 #define XHC_LOW_32BIT(Addr64) ((UINT32)(((UINTN)(Addr64)) & 0xFFFFFFFF)) 120 #define XHC_HIGH_32BIT(Addr64) ((UINT32)(RShiftU64((UINT64)(UINTN)(Addr64), 32) & 0xFFFFFFFF)) 121 #define XHC_BIT_IS_SET(Data, Bit) ((BOOLEAN)(((Data) & (Bit)) == (Bit))) 122 123 // 124 // Endpoint Type (EP Type). 125 // 126 #define ED_NOT_VALID 0 127 #define ED_ISOCH_OUT 1 128 #define ED_BULK_OUT 2 129 #define ED_INTERRUPT_OUT 3 130 #define ED_CONTROL_BIDIR 4 131 #define ED_ISOCH_IN 5 132 #define ED_BULK_IN 6 133 #define ED_INTERRUPT_IN 7 134 135 // 136 // 6.4.5 TRB Completion Codes 137 // 138 #define TRB_COMPLETION_INVALID 0 139 #define TRB_COMPLETION_SUCCESS 1 140 #define TRB_COMPLETION_DATA_BUFFER_ERROR 2 141 #define TRB_COMPLETION_BABBLE_ERROR 3 142 #define TRB_COMPLETION_USB_TRANSACTION_ERROR 4 143 #define TRB_COMPLETION_TRB_ERROR 5 144 #define TRB_COMPLETION_STALL_ERROR 6 145 #define TRB_COMPLETION_SHORT_PACKET 13 146 147 // 148 // 6.4.6 TRB Types 149 // 150 #define TRB_TYPE_NORMAL 1 151 #define TRB_TYPE_SETUP_STAGE 2 152 #define TRB_TYPE_DATA_STAGE 3 153 #define TRB_TYPE_STATUS_STAGE 4 154 #define TRB_TYPE_ISOCH 5 155 #define TRB_TYPE_LINK 6 156 #define TRB_TYPE_EVENT_DATA 7 157 #define TRB_TYPE_NO_OP 8 158 #define TRB_TYPE_EN_SLOT 9 159 #define TRB_TYPE_DIS_SLOT 10 160 #define TRB_TYPE_ADDRESS_DEV 11 161 #define TRB_TYPE_CON_ENDPOINT 12 162 #define TRB_TYPE_EVALU_CONTXT 13 163 #define TRB_TYPE_RESET_ENDPOINT 14 164 #define TRB_TYPE_STOP_ENDPOINT 15 165 #define TRB_TYPE_SET_TR_DEQUE 16 166 #define TRB_TYPE_RESET_DEV 17 167 #define TRB_TYPE_GET_PORT_BANW 21 168 #define TRB_TYPE_FORCE_HEADER 22 169 #define TRB_TYPE_NO_OP_COMMAND 23 170 #define TRB_TYPE_TRANS_EVENT 32 171 #define TRB_TYPE_COMMAND_COMPLT_EVENT 33 172 #define TRB_TYPE_PORT_STATUS_CHANGE_EVENT 34 173 #define TRB_TYPE_HOST_CONTROLLER_EVENT 37 174 #define TRB_TYPE_DEVICE_NOTIFI_EVENT 38 175 #define TRB_TYPE_MFINDEX_WRAP_EVENT 39 176 177 // 178 // Convert millisecond to microsecond. 179 // 180 #define XHC_1_MILLISECOND (1000) 181 #define XHC_POLL_DELAY (1000) 182 #define XHC_GENERIC_TIMEOUT (10 * 1000) 183 184 #define EFI_USB_SPEED_FULL 0x0000 ///< 12 Mb/s, USB 1.1 OHCI and UHCI HC. 185 #define EFI_USB_SPEED_LOW 0x0001 ///< 1 Mb/s, USB 1.1 OHCI and UHCI HC. 186 #define EFI_USB_SPEED_HIGH 0x0002 ///< 480 Mb/s, USB 2.0 EHCI HC. 187 #define EFI_USB_SPEED_SUPER 0x0003 ///< 4.8 Gb/s, USB 3.0 XHCI HC. 188 189 // 190 // Transfer types, used in URB to identify the transfer type 191 // 192 #define XHC_CTRL_TRANSFER 0x01 193 #define XHC_BULK_TRANSFER 0x02 194 #define XHC_INT_TRANSFER_SYNC 0x04 195 #define XHC_INT_TRANSFER_ASYNC 0x08 196 #define XHC_INT_ONLY_TRANSFER_ASYNC 0x10 197 198 // 199 // USB Transfer Results 200 // 201 #define EFI_USB_NOERROR 0x00 202 #define EFI_USB_ERR_NOTEXECUTE 0x01 203 #define EFI_USB_ERR_STALL 0x02 204 #define EFI_USB_ERR_BUFFER 0x04 205 #define EFI_USB_ERR_BABBLE 0x08 206 #define EFI_USB_ERR_NAK 0x10 207 #define EFI_USB_ERR_CRC 0x20 208 #define EFI_USB_ERR_TIMEOUT 0x40 209 #define EFI_USB_ERR_BITSTUFF 0x80 210 #define EFI_USB_ERR_SYSTEM 0x100 211 212 #pragma pack(1) 213 214 // 215 // 7.6.9 OUT/IN EP Context: 64 bytes 216 // 7.6.9.2 When used by the DbC it is always a 64 byte data structure 217 // 218 typedef struct _ENDPOINT_CONTEXT_64 { 219 UINT32 EPState:3; 220 UINT32 RsvdZ1:5; 221 UINT32 Mult:2; // set to 0 222 UINT32 MaxPStreams:5; // set to 0 223 UINT32 LSA:1; // set to 0 224 UINT32 Interval:8; // set to 0 225 UINT32 RsvdZ2:8; 226 227 UINT32 RsvdZ3:1; 228 UINT32 CErr:2; 229 UINT32 EPType:3; 230 UINT32 RsvdZ4:1; 231 UINT32 HID:1; // set to 0 232 UINT32 MaxBurstSize:8; 233 UINT32 MaxPacketSize:16; 234 235 UINT32 PtrLo; 236 237 UINT32 PtrHi; 238 239 UINT32 AverageTRBLength:16; 240 UINT32 MaxESITPayload:16; // set to 0 241 242 UINT32 RsvdZ5; // Reserved 243 UINT32 RsvdZ6; 244 UINT32 RsvdZ7; 245 246 UINT32 RsvdZ8; 247 UINT32 RsvdZ9; 248 UINT32 RsvdZ10; 249 UINT32 RsvdZ11; 250 251 UINT32 RsvdZ12; 252 UINT32 RsvdZ13; 253 UINT32 RsvdZ14; 254 UINT32 RsvdZ15; 255 } ENDPOINT_CONTEXT_64; 256 257 // 258 // 6.4.1.1 Normal TRB: 16 bytes 259 // A Normal TRB is used in several ways; exclusively on Bulk and Interrupt Transfer Rings for normal and 260 // Scatter/Gather operations, to define additional data buffers for Scatter/Gather operations on Isoch Transfer 261 // Rings, and to define the Data stage information for Control Transfer Rings. 262 // 263 typedef struct _TRANSFER_TRB_NORMAL { 264 UINT32 TRBPtrLo; 265 266 UINT32 TRBPtrHi; 267 268 UINT32 Length:17; 269 UINT32 TDSize:5; 270 UINT32 IntTarget:10; 271 272 UINT32 CycleBit:1; 273 UINT32 ENT:1; 274 UINT32 ISP:1; 275 UINT32 NS:1; 276 UINT32 CH:1; 277 UINT32 IOC:1; 278 UINT32 IDT:1; 279 UINT32 RsvdZ1:2; 280 UINT32 BEI:1; 281 UINT32 Type:6; 282 UINT32 RsvdZ2:16; 283 } TRANSFER_TRB_NORMAL; 284 285 // 286 // 6.4.2.1 Transfer Event TRB: 16 bytes 287 // A Transfer Event provides the completion status associated with a Transfer TRB. Refer to section 4.11.3.1 288 // for more information on the use and operation of Transfer Events. 289 // 290 typedef struct _EVT_TRB_TRANSFER { 291 UINT32 TRBPtrLo; 292 293 UINT32 TRBPtrHi; 294 295 UINT32 Length:24; 296 UINT32 Completecode:8; 297 298 UINT32 CycleBit:1; 299 UINT32 RsvdZ1:1; 300 UINT32 ED:1; 301 UINT32 RsvdZ2:7; 302 UINT32 Type:6; 303 UINT32 EndpointId:5; 304 UINT32 RsvdZ3:3; 305 UINT32 SlotId:8; 306 } EVT_TRB_TRANSFER; 307 308 // 309 // 6.4.4.1 Link TRB: 16 bytes 310 // A Link TRB provides support for non-contiguous TRB Rings. 311 // 312 typedef struct _LINK_TRB { 313 UINT32 PtrLo; 314 315 UINT32 PtrHi; 316 317 UINT32 RsvdZ1:22; 318 UINT32 InterTarget:10; 319 320 UINT32 CycleBit:1; 321 UINT32 TC:1; 322 UINT32 RsvdZ2:2; 323 UINT32 CH:1; 324 UINT32 IOC:1; 325 UINT32 RsvdZ3:4; 326 UINT32 Type:6; 327 UINT32 RsvdZ4:16; 328 } LINK_TRB; 329 330 // 331 // TRB Template: 16 bytes 332 // 333 typedef struct _TRB_TEMPLATE { 334 UINT32 Parameter1; 335 336 UINT32 Parameter2; 337 338 UINT32 Status; 339 340 UINT32 CycleBit:1; 341 UINT32 RsvdZ1:9; 342 UINT32 Type:6; 343 UINT32 Control:16; 344 } TRB_TEMPLATE; 345 346 // 347 // Refer to XHCI 6.5 Event Ring Segment Table: 16 bytes 348 // 349 typedef struct _EVENT_RING_SEG_TABLE_ENTRY { 350 UINT32 PtrLo; 351 UINT32 PtrHi; 352 UINT32 RingTrbSize:16; 353 UINT32 RsvdZ1:16; 354 UINT32 RsvdZ2; 355 } EVENT_RING_SEG_TABLE_ENTRY; 356 357 // 358 // Size: 40 bytes 359 // 360 typedef struct _EVENT_RING { 361 EFI_PHYSICAL_ADDRESS ERSTBase; 362 EFI_PHYSICAL_ADDRESS EventRingSeg0; 363 UINT32 TrbNumber; 364 EFI_PHYSICAL_ADDRESS EventRingEnqueue; 365 EFI_PHYSICAL_ADDRESS EventRingDequeue; 366 UINT32 EventRingCCS; 367 } EVENT_RING; 368 369 // Size: 32 bytes 370 typedef struct _TRANSFER_RING { 371 EFI_PHYSICAL_ADDRESS RingSeg0; 372 UINT32 TrbNumber; 373 EFI_PHYSICAL_ADDRESS RingEnqueue; 374 EFI_PHYSICAL_ADDRESS RingDequeue; 375 UINT32 RingPCS; 376 } TRANSFER_RING; 377 378 // 379 // Size: 64 bytes 380 // 381 typedef struct _DBC_INFO_CONTEXT { 382 UINT64 String0DescAddress; 383 UINT64 ManufacturerStrDescAddress; 384 UINT64 ProductStrDescAddress; 385 UINT64 SerialNumberStrDescAddress; 386 UINT64 String0Length:8; 387 UINT64 ManufacturerStrLength:8; 388 UINT64 ProductStrLength:8; 389 UINT64 SerialNumberStrLength:8; 390 UINT64 RsvdZ1:32; 391 UINT64 RsvdZ2; 392 UINT64 RsvdZ3; 393 UINT64 RsvdZ4; 394 } DBC_INFO_CONTEXT; 395 396 // 397 // Debug Capability Context Data Structure: 192 bytes 398 // 399 typedef struct _XHC_DC_CONTEXT { 400 DBC_INFO_CONTEXT DbcInfoContext; 401 ENDPOINT_CONTEXT_64 EpOutContext; 402 ENDPOINT_CONTEXT_64 EpInContext; 403 } XHC_DC_CONTEXT; 404 405 // 406 // Size: 16 bytes 407 // 408 typedef union _TRB { 409 TRB_TEMPLATE TrbTemplate; 410 TRANSFER_TRB_NORMAL TrbNormal; 411 } TRB; 412 413 /// 414 /// USB data transfer direction 415 /// 416 typedef enum { 417 EfiUsbDataIn, 418 EfiUsbDataOut, 419 EfiUsbNoData 420 } EFI_USB_DATA_DIRECTION; 421 422 // 423 // URB (Usb Request Block) contains information for all kinds of 424 // usb requests. 425 // 426 typedef struct _URB { 427 // 428 // Transfer data buffer 429 // 430 EFI_PHYSICAL_ADDRESS Data; 431 UINT32 DataLen; 432 433 // 434 // Execute result 435 // 436 UINT32 Result; 437 // 438 // Completed data length 439 // 440 UINT32 Completed; 441 // 442 // Tranfer Ring info 443 // 444 EFI_PHYSICAL_ADDRESS Ring; 445 EFI_PHYSICAL_ADDRESS Trb; 446 BOOLEAN Finished; 447 EFI_USB_DATA_DIRECTION Direction; 448 } URB; 449 450 typedef struct _USB3_DEBUG_PORT_INSTANCE { 451 UINT8 Initialized; 452 453 // 454 // The flag indicates debug capability is supported 455 // 456 BOOLEAN DebugSupport; 457 458 // 459 // The flag indicates debug device is ready 460 // 461 BOOLEAN Ready; 462 463 // 464 // The flag indicates the instance is from HOB 465 // 466 BOOLEAN FromHob; 467 468 // 469 // Prevent notification being interrupted by debug timer 470 // 471 BOOLEAN InNotify; 472 473 // 474 // PciIo protocol event 475 // 476 EFI_PHYSICAL_ADDRESS PciIoEvent; 477 478 // 479 // The flag indicates if USB 3.0 ports has been turn off/on power 480 // 481 BOOLEAN ChangePortPower; 482 483 // 484 // XHCI MMIO Base address 485 // 486 EFI_PHYSICAL_ADDRESS XhciMmioBase; 487 488 // 489 // XHCI OP RegisterBase address 490 // 491 EFI_PHYSICAL_ADDRESS XhciOpRegister; 492 493 // 494 // XHCI Debug Register Base Address 495 // 496 EFI_PHYSICAL_ADDRESS DebugCapabilityBase; 497 498 // 499 // XHCI Debug Capability offset 500 // 501 UINT64 DebugCapabilityOffset; 502 503 // 504 // XHCI Debug Context Address 505 // 506 EFI_PHYSICAL_ADDRESS DebugCapabilityContext; 507 508 // 509 // Transfer Ring 510 // 511 TRANSFER_RING TransferRingOut; 512 TRANSFER_RING TransferRingIn; 513 514 // 515 // EventRing 516 // 517 EVENT_RING EventRing; 518 519 // 520 // URB - Read 521 // 522 URB UrbOut; 523 524 // 525 // URB - Write 526 // 527 URB UrbIn; 528 529 // 530 // The available data length in the following data buffer. 531 // 532 UINT8 DataCount; 533 // 534 // The data buffer address for data read and poll. 535 // 536 EFI_PHYSICAL_ADDRESS Data; 537 } USB3_DEBUG_PORT_HANDLE; 538 539 #pragma pack() 540 541 /** 542 Read XHCI debug register. 543 544 @param Handle Debug port handle. 545 @param Offset The offset of the debug register. 546 547 @return The register content read 548 549 **/ 550 UINT32 551 XhcReadDebugReg ( 552 IN USB3_DEBUG_PORT_HANDLE *Handle, 553 IN UINT32 Offset 554 ); 555 556 /** 557 Set one bit of the debug register while keeping other bits. 558 559 @param Handle Debug port handle. 560 @param Offset The offset of the debug register. 561 @param Bit The bit mask of the register to set. 562 563 **/ 564 VOID 565 XhcSetDebugRegBit ( 566 IN USB3_DEBUG_PORT_HANDLE *Handle, 567 IN UINT32 Offset, 568 IN UINT32 Bit 569 ); 570 571 /** 572 Write the data to the debug register. 573 574 @param Handle Debug port handle. 575 @param Offset The offset of the debug register. 576 @param Data The data to write. 577 578 **/ 579 VOID 580 XhcWriteDebugReg ( 581 IN USB3_DEBUG_PORT_HANDLE *Handle, 582 IN UINT32 Offset, 583 IN UINT32 Data 584 ); 585 586 /** 587 Verifies if the bit positions specified by a mask are set in a register. 588 589 @param[in, out] Register UNITN register 590 @param[in] BitMask 32-bit mask 591 592 @return BOOLEAN - TRUE if all bits specified by the mask are enabled. 593 - FALSE even if one of the bits specified by the mask 594 is not enabled. 595 **/ 596 BOOLEAN 597 XhcIsBitSet( 598 UINTN Register, 599 UINT32 BitMask 600 ); 601 602 /** 603 Sets bits as per the enabled bit positions in the mask. 604 605 @param[in, out] Register UINTN register 606 @param[in] BitMask 32-bit mask 607 **/ 608 VOID 609 XhcSetR32Bit( 610 UINTN Register, 611 UINT32 BitMask 612 ); 613 614 /** 615 Clears bits as per the enabled bit positions in the mask. 616 617 @param[in, out] Register UINTN register 618 @param[in] BitMask 32-bit mask 619 **/ 620 VOID 621 XhcClearR32Bit( 622 IN OUT UINTN Register, 623 IN UINT32 BitMask 624 ); 625 626 /** 627 Initialize USB3 debug port. 628 629 This method invokes various internal functions to facilitate 630 detection and initialization of USB3 debug port. 631 632 @retval RETURN_SUCCESS The serial device was initialized. 633 **/ 634 RETURN_STATUS 635 EFIAPI 636 USB3Initialize ( 637 VOID 638 ); 639 640 /** 641 Return command register value in XHCI controller. 642 643 **/ 644 UINT16 645 GetXhciPciCommand ( 646 VOID 647 ); 648 649 /** 650 Allocate aligned memory for XHC's usage. 651 652 @param BufferSize The size, in bytes, of the Buffer. 653 654 @return A pointer to the allocated buffer or NULL if allocation fails. 655 656 **/ 657 VOID* 658 AllocateAlignBuffer ( 659 IN UINTN BufferSize 660 ); 661 662 /** 663 The real function to initialize USB3 debug port. 664 665 This method invokes various internal functions to facilitate 666 detection and initialization of USB3 debug port. 667 668 @retval RETURN_SUCCESS The serial device was initialized. 669 **/ 670 RETURN_STATUS 671 EFIAPI 672 USB3InitializeReal ( 673 VOID 674 ); 675 676 /** 677 Submits bulk transfer to a bulk endpoint of a USB device. 678 679 @param Handle The instance of debug device. 680 @param Direction The direction of data transfer. 681 @param Data Array of pointers to the buffers of data to transmit 682 from or receive into. 683 @param DataLength The lenght of the data buffer. 684 @param Timeout Indicates the maximum time, in millisecond, which 685 the transfer is allowed to complete. 686 687 @retval EFI_SUCCESS The transfer was completed successfully. 688 @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource. 689 @retval EFI_INVALID_PARAMETER Some parameters are invalid. 690 @retval EFI_TIMEOUT The transfer failed due to timeout. 691 @retval EFI_DEVICE_ERROR The transfer failed due to host controller error. 692 693 **/ 694 EFI_STATUS 695 EFIAPI 696 XhcDataTransfer ( 697 IN USB3_DEBUG_PORT_HANDLE *Handle, 698 IN EFI_USB_DATA_DIRECTION Direction, 699 IN OUT VOID *Data, 700 IN OUT UINTN *DataLength, 701 IN UINTN Timeout 702 ); 703 704 /** 705 Initialize usb debug port hardware. 706 707 @param Handle Debug port handle. 708 709 @retval TRUE The usb debug port hardware configuration is changed. 710 @retval FALSE The usb debug port hardware configuration is not changed. 711 712 **/ 713 RETURN_STATUS 714 EFIAPI 715 InitializeUsbDebugHardware ( 716 IN USB3_DEBUG_PORT_HANDLE *Handle 717 ); 718 719 /** 720 Return USB3 debug instance address pointer. 721 722 **/ 723 EFI_PHYSICAL_ADDRESS * 724 GetUsb3DebugPortInstanceAddrPtr ( 725 VOID 726 ); 727 728 /** 729 Return USB3 debug instance address. 730 731 **/ 732 USB3_DEBUG_PORT_HANDLE * 733 GetUsb3DebugPortInstance ( 734 VOID 735 ); 736 737 #endif //__SERIAL_PORT_LIB_USB__ 738