4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This file contains the definition for XHCI host controller schedule routines.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _EFI_XHCI_SCHED_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _EFI_XHCI_SCHED_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define XHC_URB_SIG SIGNATURE_32 ('U', 'S', 'B', 'R')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Transfer types, used in URB to identify the transfer type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define XHC_CTRL_TRANSFER 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define XHC_BULK_TRANSFER 0x02
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define XHC_INT_TRANSFER_SYNC 0x04
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define XHC_INT_TRANSFER_ASYNC 0x08
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define XHC_INT_ONLY_TRANSFER_ASYNC 0x10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.6 TRB Types
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_NORMAL 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_SETUP_STAGE 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_DATA_STAGE 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_STATUS_STAGE 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_ISOCH 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_LINK 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_EVENT_DATA 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_NO_OP 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_EN_SLOT 9
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_DIS_SLOT 10
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_ADDRESS_DEV 11
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_CON_ENDPOINT 12
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_EVALU_CONTXT 13
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_RESET_ENDPOINT 14
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_STOP_ENDPOINT 15
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_SET_TR_DEQUE 16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_RESET_DEV 17
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_GET_PORT_BANW 21
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_FORCE_HEADER 22
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_NO_OP_COMMAND 23
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_TRANS_EVENT 32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_COMMAND_COMPLT_EVENT 33
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_PORT_STATUS_CHANGE_EVENT 34
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_HOST_CONTROLLER_EVENT 37
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_DEVICE_NOTIFI_EVENT 38
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_TYPE_MFINDEX_WRAP_EVENT 39
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Endpoint Type (EP Type).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ED_NOT_VALID 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ED_ISOCH_OUT 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ED_BULK_OUT 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ED_INTERRUPT_OUT 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ED_CONTROL_BIDIR 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ED_ISOCH_IN 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ED_BULK_IN 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ED_INTERRUPT_IN 7
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.5 TRB Completion Codes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_COMPLETION_INVALID 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_COMPLETION_SUCCESS 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_COMPLETION_DATA_BUFFER_ERROR 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_COMPLETION_BABBLE_ERROR 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_COMPLETION_USB_TRANSACTION_ERROR 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_COMPLETION_TRB_ERROR 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_COMPLETION_STALL_ERROR 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TRB_COMPLETION_SHORT_PACKET 13
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The topology string used to present usb device location
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _USB_DEV_TOPOLOGY {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The tier concatenation of down stream port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RouteString:20;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The root port number of the chain.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RootPortNum:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The Tier the device reside.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TierNum:4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_DEV_TOPOLOGY;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// USB Device's RouteChart
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union _USB_DEV_ROUTE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Dword;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DEV_TOPOLOGY Route;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_DEV_ROUTE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Endpoint address and its capabilities
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _USB_ENDPOINT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Store logical device address assigned by UsbBus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // It's because some XHCI host controllers may assign the same physcial device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // address for those devices inserted at different root port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 BusAddr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DevAddr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 EpAddr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DATA_DIRECTION Direction;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DevSpeed;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN MaxPacket;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} USB_ENDPOINT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// TRB Template
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TRB_TEMPLATE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Parameter1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Parameter2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Status;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Control:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TRB_TEMPLATE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TRANSFER_RING {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *RingSeg0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN TrbNumber;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRB_TEMPLATE *RingEnqueue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRB_TEMPLATE *RingDequeue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RingPCS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TRANSFER_RING;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EVENT_RING {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *ERSTBase;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *EventRingSeg0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN TrbNumber;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRB_TEMPLATE *EventRingEnqueue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRB_TEMPLATE *EventRingDequeue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 EventRingCCS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EVENT_RING;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// URB (Usb Request Block) contains information for all kinds of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// usb requests.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _URB {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY UrbList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Usb Device URB related information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_ENDPOINT Ep;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST *Request;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Data;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN DataLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ASYNC_USB_TRANSFER_CALLBACK Callback;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Context;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Execute result
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Result;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // completed data length
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Completed;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Command/Tranfer Ring info
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRANSFER_RING *Ring;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRB_TEMPLATE *TrbStart;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRB_TEMPLATE *TrbEnd;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN TrbNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN StartDone;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN EndDone;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Finished;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRB_TEMPLATE *EvtTrb;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} URB;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.5 Event Ring Segment Table
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Event Ring Segment Table is used to define multi-segment Event Rings and to enable runtime
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// expansion and shrinking of the Event Ring. The location of the Event Ring Segment Table is defined by the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Event Ring Segment Table Base Address Register (5.5.2.3.2). The size of the Event Ring Segment Table
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// is defined by the Event Ring Segment Table Base Size Register (5.5.2.3.1).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EVENT_RING_SEG_TABLE_ENTRY {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RingTrbSize:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EVENT_RING_SEG_TABLE_ENTRY;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.1.1 Normal TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// A Normal TRB is used in several ways; exclusively on Bulk and Interrupt Transfer Rings for normal and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Scatter/Gather operations, to define additional data buffers for Scatter/Gather operations on Isoch Transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Rings, and to define the Data stage information for Control Transfer Rings.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TRANSFER_TRB_NORMAL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRBPtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRBPtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Lenth:17;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TDSize:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IntTarget:10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ENT:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ISP:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 NS:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CH:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IOC:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IDT:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BEI:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TRANSFER_TRB_NORMAL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.1.2.1 Setup Stage TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// A Setup Stage TRB is created by system software to initiate a USB Setup packet on a control endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TRANSFER_TRB_CONTROL_SETUP {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 bmRequestType:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 bRequest:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 wValue:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 wIndex:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 wLength:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Lenth:17;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IntTarget:10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IOC:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IDT:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRT:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:14;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TRANSFER_TRB_CONTROL_SETUP;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.1.2.2 Data Stage TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// A Data Stage TRB is used generate the Data stage transaction of a USB Control transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TRANSFER_TRB_CONTROL_DATA {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRBPtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRBPtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Lenth:17;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TDSize:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IntTarget:10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ENT:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ISP:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 NS:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CH:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IOC:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IDT:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DIR:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:15;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TRANSFER_TRB_CONTROL_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.1.2.2 Data Stage TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// A Data Stage TRB is used generate the Data stage transaction of a USB Control transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TRANSFER_TRB_CONTROL_STATUS {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:22;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IntTarget:10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ENT:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CH:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IOC:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ5:4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DIR:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ6:15;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TRANSFER_TRB_CONTROL_STATUS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.2.1 Transfer Event TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// A Transfer Event provides the completion status associated with a Transfer TRB. Refer to section 4.11.3.1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// for more information on the use and operation of Transfer Events.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EVT_TRB_TRANSFER {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRBPtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRBPtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Lenth:24;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Completecode:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ED:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:7;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 EndpointId:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EVT_TRB_TRANSFER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.2.2 Command Completion Event TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// A Command Completion Event TRB shall be generated by the xHC when a command completes on the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Command Ring. Refer to section 4.11.4 for more information on the use of Command Completion Events.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EVT_TRB_COMMAND_COMPLETION {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRBPtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TRBPtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:24;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Completecode:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 VFID:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EVT_TRB_COMMAND_COMPLETION;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union _TRB {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRB_TEMPLATE TrbTemplate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRANSFER_TRB_NORMAL TrbNormal;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRANSFER_TRB_CONTROL_SETUP TrbCtrSetup;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRANSFER_TRB_CONTROL_DATA TrbCtrData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRANSFER_TRB_CONTROL_STATUS TrbCtrStatus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TRB;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.1 No Op Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The No Op Command TRB provides a simple means for verifying the operation of the Command Ring
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// mechanisms offered by the xHCI.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_TRB_NO_OP {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_TRB_NO_OP;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.2 Enable Slot Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Enable Slot Command TRB causes the xHC to select an available Device Slot and return the ID of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// selected slot to the host in a Command Completion Event.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_TRB_ENABLE_SLOT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_TRB_ENABLE_SLOT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.3 Disable Slot Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Disable Slot Command TRB releases any bandwidth assigned to the disabled slot and frees any
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// internal xHC resources assigned to the slot.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_TRB_DISABLE_SLOT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_TRB_DISABLE_SLOT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.4 Address Device Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Address Device Command TRB transitions the selected Device Context from the Default to the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Addressed state and causes the xHC to select an address for the USB device in the Default State and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// issue a SET_ADDRESS request to the USB device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_TRB_ADDRESS_DEVICE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BSR:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_TRB_ADDRESS_DEVICE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.5 Configure Endpoint Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Configure Endpoint Command TRB evaluates the bandwidth and resource requirements of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// endpoints selected by the command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_TRB_CONFIG_ENDPOINT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DC:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_TRB_CONFIG_ENDPOINT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.6 Evaluate Context Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Evaluate Context Command TRB is used by system software to inform the xHC that the selected
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Context data structures in the Device Context have been modified by system software and that the xHC
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// shall evaluate any changes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_TRB_EVALUATE_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_TRB_EVALUATE_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.7 Reset Endpoint Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Reset Endpoint Command TRB is used by system software to reset a specified Transfer Ring
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_TRB_RESET_ENDPOINT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TSP:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 EDID:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_TRB_RESET_ENDPOINT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.8 Stop Endpoint Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Stop Endpoint Command TRB command allows software to stop the xHC execution of the TDs on a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Transfer Ring and temporarily take ownership of TDs that had previously been passed to the xHC.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_TRB_STOP_ENDPOINT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 EDID:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SP:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_TRB_STOP_ENDPOINT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.3.9 Set TR Dequeue Pointer Command TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// The Set TR Dequeue Pointer Command TRB is used by system software to modify the TR Dequeue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Pointer and DCS fields of an Endpoint or Stream Context.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _CMD_SET_TR_DEQ_POINTER {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 StreamID:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Endpoint:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} CMD_SET_TR_DEQ_POINTER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.4.4.1 Link TRB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// A Link TRB provides support for non-contiguous TRB Rings.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _LINK_TRB {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:22;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InterTarget:10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CycleBit:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TC:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CH:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 IOC:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Type:6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} LINK_TRB;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.2.2 Slot Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SLOT_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RouteString:20;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Speed:4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MTT:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Hub:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ContextEntries:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxExitLatency:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RootHubPortNum:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PortNum:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TTHubSlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TTPortNum:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TTT:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InterTarget:10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DeviceAddress:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:19;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotState:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ7;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SLOT_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SLOT_CONTEXT_64 {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RouteString:20;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Speed:4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MTT:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Hub:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ContextEntries:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxExitLatency:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RootHubPortNum:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PortNum:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TTHubSlotId:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TTPortNum:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 TTT:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InterTarget:10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DeviceAddress:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:19;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SlotState:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ7;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ11;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ12;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ13;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ14;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ15;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SLOT_CONTEXT_64;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.2.3 Endpoint Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ENDPOINT_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 EPState:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Mult:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxPStreams:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 LSA:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Interval:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CErr:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 EPType:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 HID:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxBurstSize:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxPacketSize:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 AverageTRBLength:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxESITPayload:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ7;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ENDPOINT_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ENDPOINT_CONTEXT_64 {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 EPState:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Mult:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxPStreams:5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 LSA:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Interval:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CErr:2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 EPType:3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 HID:1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxBurstSize:8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxPacketSize:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrLo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 PtrHi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 AverageTRBLength:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxESITPayload:16;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ7;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ11;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ12;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ13;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ14;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ15;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ENDPOINT_CONTEXT_64;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.2.5.1 Input Control Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _INPUT_CONTRL_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Dword1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Dword2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} INPUT_CONTRL_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _INPUT_CONTRL_CONTEXT_64 {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Dword1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Dword2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ7;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ8;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ9;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ11;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ12;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ13;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RsvdZ14;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} INPUT_CONTRL_CONTEXT_64;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.2.1 Device Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _DEVICE_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SLOT_CONTEXT Slot;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ENDPOINT_CONTEXT EP[31];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} DEVICE_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _DEVICE_CONTEXT_64 {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SLOT_CONTEXT_64 Slot;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ENDPOINT_CONTEXT_64 EP[31];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} DEVICE_CONTEXT_64;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// 6.2.5 Input Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _INPUT_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync INPUT_CONTRL_CONTEXT InputControlContext;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SLOT_CONTEXT Slot;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ENDPOINT_CONTEXT EP[31];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} INPUT_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _INPUT_CONTEXT_64 {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync INPUT_CONTRL_CONTEXT_64 InputControlContext;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SLOT_CONTEXT_64 Slot;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ENDPOINT_CONTEXT_64 EP[31];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} INPUT_CONTEXT_64;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Initialize the XHCI host controller for schedule.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance to be initialized.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcInitSched (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Free the resouce allocated at initializing schedule.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcFreeSched (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Ring the door bell to notify XHCI there is a transaction to be executed through URB.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Urb The URB to be rung.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully ring the door bell.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncRingIntTransferDoorBell (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN URB *Urb
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Execute the transfer by polling the URB. This is a synchronous operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param CmdTransfer The executed URB is for cmd transfer or not.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Urb The URB to execute.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Timeout The time to wait before abort, in millisecond.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return EFI_DEVICE_ERROR The transfer failed due to transfer error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return EFI_TIMEOUT The transfer failed due to time out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return EFI_SUCCESS The transfer finished OK.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcExecTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN CmdTransfer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN URB *Urb,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Timeout
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Delete a single asynchronous interrupt transfer for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the device and endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BusAddr The logical device address assigned by UsbBus driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EpNum The endpoint of the target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS An asynchronous transfer is removed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND No transfer for the device is found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhciDelAsyncIntTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 BusAddr,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 EpNum
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Remove all the asynchronous interrupt transfers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhciDelAllAsyncIntTransfers (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set Bios Ownership
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcSetBiosOwnership (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Clear Bios Ownership
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcClearBiosOwnership (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Find out the slot id according to the device's route string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RouteString The route string described the device location.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The slot id used by the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcRouteStringToSlotId (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_DEV_ROUTE RouteString
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Calculate the device context index by endpoint address and direction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EpAddr The target endpoint number.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Direction The direction of the target endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The device context index of endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcEndpointToDci (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 EpAddr,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Direction
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Ring the door bell to notify XHCI there is a transaction to be executed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id of the target device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Dci The device context index of the target slot or endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully ring the door bell.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcRingDoorBell (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Dci
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Interrupt transfer periodic check handler.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Event Interrupt event.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Context Pointer to USB_XHCI_INSTANCE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcMonitorAsyncRequests (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EVENT Event,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Monitor the port status change. Enable/Disable device slot if there is a device attached/detached.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParentRouteChart The route string pointed to the parent device if it exists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Port The port to be polled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PortState The port state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully enable/disable device slot according to port state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Should not appear.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcPollPortStatusChange (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_DEV_ROUTE ParentRouteChart,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_PORT_STATUS *PortState
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Evaluate the slot context for hub device through XHCI's Configure_Endpoint cmd.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id to be configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PortNum The total number of downstream port supported by the hub.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TTT The TT think time of the hub device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MTT The multi-TT of the hub device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully configure the hub device's slot context.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcConfigHubContext (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 PortNum,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 TTT,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 MTT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Evaluate the slot context for hub device through XHCI's Configure_Endpoint cmd.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id to be configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PortNum The total number of downstream port supported by the hub.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TTT The TT think time of the hub device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MTT The multi-TT of the hub device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully configure the hub device's slot context.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcConfigHubContext64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 PortNum,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 TTT,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 MTT
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Configure all the device endpoints through XHCI's Configure_Endpoint cmd.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id to be configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DeviceSpeed The device's speed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ConfigDesc The pointer to the usb device configuration descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully configure all the device endpoints.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcSetConfigCmd (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 DeviceSpeed,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_CONFIG_DESCRIPTOR *ConfigDesc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Configure all the device endpoints through XHCI's Configure_Endpoint cmd.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id to be configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DeviceSpeed The device's speed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ConfigDesc The pointer to the usb device configuration descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully configure all the device endpoints.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcSetConfigCmd64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 DeviceSpeed,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_CONFIG_DESCRIPTOR *ConfigDesc
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Find out the actual device address according to the requested device address from UsbBus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BusDevAddr The requested device address by UsbBus upper driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The actual device address assigned to the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcBusDevAddrToSlotId (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 BusDevAddr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assign and initialize the device slot for a new device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParentRouteChart The route string pointed to the parent device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParentPort The port at which the device is located.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RouteChart The route string pointed to the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DeviceSpeed The device speed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully assign a slot to the device and assign an address to it.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcInitializeDeviceSlot (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_DEV_ROUTE ParentRouteChart,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 ParentPort,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_DEV_ROUTE RouteChart,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 DeviceSpeed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Assign and initialize the device slot for a new device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParentRouteChart The route string pointed to the parent device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParentPort The port at which the device is located.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RouteChart The route string pointed to the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DeviceSpeed The device speed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully assign a slot to the device and assign an address to it.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcInitializeDeviceSlot64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_DEV_ROUTE ParentRouteChart,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 ParentPort,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_DEV_ROUTE RouteChart,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 DeviceSpeed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Evaluate the endpoint 0 context through XHCI's Evaluate_Context cmd.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id to be evaluated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MaxPacketSize The max packet size supported by the device control transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully evaluate the device endpoint 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcEvaluateContext (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 MaxPacketSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Evaluate the endpoint 0 context through XHCI's Evaluate_Context cmd.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id to be evaluated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MaxPacketSize The max packet size supported by the device control transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully evaluate the device endpoint 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcEvaluateContext64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 MaxPacketSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Disable the specified device slot.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id to be disabled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully disable the device slot.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcDisableSlotCmd (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Disable the specified device slot.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SlotId The slot id to be disabled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully disable the device slot.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcDisableSlotCmd64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SlotId
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Synchronize the specified transfer ring to update the enqueue and dequeue pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TrsRing The transfer ring to sync.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The transfer ring is synchronized successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcSyncTrsRing (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TRANSFER_RING *TrsRing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Synchronize the specified event ring to update the enqueue and dequeue pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EvtRing The event ring to sync.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The event ring is synchronized successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcSyncEventRing (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EVENT_RING *EvtRing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check if there is a new generated event.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EvtRing The event ring to check.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param NewEvtTrb The new event TRB found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Found a new event TRB at the event ring.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_READY The event ring has no new event.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcCheckNewEvent (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EVENT_RING *EvtRing,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT TRB_TEMPLATE **NewEvtTrb
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Create XHCI transfer ring.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TrbNum The number of TRB in the ring.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TransferRing The created transfer ring.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCreateTransferRing (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN TrbNum,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT TRANSFER_RING *TransferRing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Create XHCI event ring.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EventRing The created event ring.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCreateEventRing (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EVENT_RING *EventRing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync System software shall use a Reset Endpoint Command (section 4.11.4.7) to remove the Halted
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync condition in the xHC. After the successful completion of the Reset Endpoint Command, the Endpoint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Context is transitioned from the Halted to the Stopped state and the Transfer Ring of the endpoint is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync reenabled. The next write to the Doorbell of the Endpoint will transition the Endpoint Context from the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Stopped to the Running state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Urb The urb which makes the endpoint halted.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The recovery is successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Failed to recovery halted endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcRecoverHaltedEndpoint (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN URB *Urb
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Create a new URB for a new transaction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DevAddr The device address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EpAddr Endpoint addrress
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DevSpeed The device speed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param MaxPacket The max packet length of the endpoint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Type The transaction type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Request The standard USB request for control transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data The user data to transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DataLen The length of data buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Callback The function to call when data is transferred
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Context The context to the callback
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Created URB or NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncURB*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcCreateUrb (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 DevAddr,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 EpAddr,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 DevSpeed,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN MaxPacket,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Type,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_DEVICE_REQUEST *Request,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Data,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN DataLen,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ASYNC_USB_TRANSFER_CALLBACK Callback,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Create a transfer TRB.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Xhc The XHCI Instance
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Urb The urb used to construct the transfer TRB.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Created TRB or NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXhcCreateTransferTrb (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_XHCI_INSTANCE *Xhc,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN URB *Urb
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif