256 lines
11 KiB
C
256 lines
11 KiB
C
//;******************************************************************************
|
|
//;* Copyright (c) 1983-2012, Insyde Software Corporation. All Rights Reserved.
|
|
//;*
|
|
//;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
//;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
//;* any part of this publication in any form, by any means, without the prior
|
|
//;* written permission of Insyde Software Corporation.
|
|
//;*
|
|
//;******************************************************************************
|
|
//;
|
|
//; Module Name:
|
|
//;
|
|
//; XhcStatusCode.h
|
|
//;
|
|
//; Abstract:
|
|
//;
|
|
//; XhcStatusCode header file
|
|
//;
|
|
|
|
#ifndef _XHC_STATUS_CODE_H_
|
|
#define _XHC_STATUS_CODE_H_
|
|
|
|
#include <Uefi.h>
|
|
#include <Pi/PiHob.h>
|
|
#include <Guid/StatusCodeDataTypeDebug.h>
|
|
|
|
#define INSYDE_USB3D_VID 0x1656
|
|
#define INSYDE_USB3D_PID 0x8500
|
|
#define INSYDE_USB3D_REV 0x0001
|
|
#define XHCI 0x01
|
|
#define BRIDGE 0x0f
|
|
#define XHCI_BRIDGE 0x03
|
|
#define PLATFORM_USB_BAR 0xFC000000
|
|
#define BASE_TICKS 3333333LL
|
|
#define TICKS_PER_SECOND (1000LL * BASE_TICKS)
|
|
#define EVENT_RING_SIZE 8
|
|
//
|
|
// The definition of XHCI Token
|
|
//
|
|
#define B_TOKEN_XHCI_PCI_DEV 0xf8000000
|
|
#define N_TOKEN_XHCI_PCI_DEV 27
|
|
#define B_TOKEN_XHCI_PCI_FUN 0x07000000
|
|
#define N_TOKEN_XHCI_PCI_FUN 24
|
|
#define B_TOKEN_XHCI_PCI_BRIDGE 0x00ff0000
|
|
#define N_TOKEN_XHCI_PCI_BRIDGE 16
|
|
#define B_TOKEN_DEBUG_CAP_INDEX 0x0000fffc
|
|
#define B_TOKEN_PORT_ROUTING 0x00000002
|
|
#define B_TOKEN_LMC 0x00000001
|
|
|
|
//
|
|
// XHCI Debug Capability Registers
|
|
//
|
|
#define XHCI_DCID 0x00 /* Debug Capability ID Register Offset */
|
|
#define B_DCID_ID 0x000000ff /* Capability ID */
|
|
#define B_DCID_NEXTP 0x0000ff00 /* Next Capability Pointer */
|
|
#define N_DCID_NEXTP 8 /* Next Capability Pointer (position) */
|
|
#define B_DCID_DCERST_MAX 0x001f0000 /* Debug Capability Event Ring Segment Table Max */
|
|
#define N_DCID_DCERST_MAX 16 /* Debug Capability Event Ring Segment Table Max (position) */
|
|
#define XHCI_DCDB 0x04 /* Debug Capability Doorbell Register Offset */
|
|
#define B_DCDB_DB_TARGET 0x0000ff00 /* DB Target */
|
|
#define N_DCDB_DB_TARGET 8 /* DB Target (position) */
|
|
#define XHCI_DCERSTSZ 0x08 /* Debug Capability Event Ring Segment Table Size Register Offset */
|
|
#define XHCI_DCERSTBA 0x10 /* Debug Capability Event Ring Segment Table Base Address Register Offset */
|
|
#define XHCI_DCERDP 0x18 /* Debug Capability Event Ring Dequeue Pointer Register Offset */
|
|
#define XHCI_DCCTRL 0x20 /* Debug Capability Control Register Offset */
|
|
#define B_DCCTRL_DCR 0x00000001 /* DbC Run */
|
|
#define B_DCCTRL_LES 0x00000002 /* Link Status Event Enable */
|
|
#define B_DCCTRL_HOT 0x00000004 /* Halt OUT TR */
|
|
#define B_DCCTRL_HIT 0x00000008 /* Halt IN TR */
|
|
#define B_DCCTRL_DRC 0x00000010 /* DbC Run Change */
|
|
#define B_DCCTRL_MBSZ 0x00ff0000 /* Debug Max Burst Size */
|
|
#define N_DCCTRL_MBSZ 16 /* Debug Max Burst Size (position) */
|
|
#define B_DCCTRL_DEVICE_ADDR 0x3f000000 /* Device Address */
|
|
#define N_DCCTRL_DEVICE_ADDR 24 /* Device Address (position) */
|
|
#define B_DCCTRL_DCE 0x80000000 /* Debug Capability Enable */
|
|
#define XHCI_DCST 0x24 /* Debug Capability Status Register Offset */
|
|
#define B_DCST_ER 0x00000001 /* Event Ring Not Empty */
|
|
#define B_DCST_DBG_PORT_NUM 0xff000000 /* Debug Port Number */
|
|
#define N_DCST_DBG_PORT_NUM 24 /* Debug Port Number (position) */
|
|
#define XHCI_DCPORTSC 0x28 /* Debug Capability Port Status and Control Register Offset */
|
|
#define B_DCPORTSC_CCS 0x00000001 /* Current Connect Status */
|
|
#define B_DCPORTSC_PED 0x00000002 /* Port Enabled/Disabled */
|
|
#define B_DCPORTSC_PR 0x00000010 /* Port Reset */
|
|
#define B_DCPORTSC_PLS 0x000001e0 /* Port Link State */
|
|
#define N_DCPORTSC_PLS 5 /* Port Link State (position) */
|
|
#define B_DCPORTSC_PS 0x00003c00 /* Port Speed */
|
|
#define N_DCPORTSC_PS 10 /* Port Speed (position) */
|
|
#define B_DCPORTSC_CSC 0x00020000 /* Connect Status Change */
|
|
#define B_DCPORTSC_PRC 0x00200000 /* Port Reset Change */
|
|
#define B_DCPORTSC_PLC 0x00400000 /* Port Link Status Change */
|
|
#define B_DCPORTSC_CEC 0x00800000 /* Port Config Error Change */
|
|
#define XHCI_DCCP 0x30 /* Debug Capability Context Pointer Register Offset */
|
|
#define XHCI_DCDDI1 0x38 /* Debug Capability Device Descriptor Info Register 1 Offset */
|
|
#define B_DCDDI1_PROTOCOL 0x000000ff /* DbC Protocol */
|
|
#define B_DCDDI1_VID 0xffff0000 /* Vendor ID */
|
|
#define N_DCDDI1_VID 16 /* Vendor ID (position) */
|
|
#define XHCI_DCDDI2 0x3c /* Debug Capability Device Descriptor Info Register 2 Offset */
|
|
#define B_DCDDI2_PID 0x0000ffff /* Product ID */
|
|
#define B_DCDDI2_REV 0xffff0000 /* Device Revision */
|
|
#define N_DCDDI2_REV 16 /* Device Revision (position) */
|
|
//
|
|
// XHCI Local Memory Capability Registers
|
|
//
|
|
#define XHCI_LMC 0x00 /* Local Mamory Capability ID Register Offset */
|
|
#define B_LMC_ID 0x000000ff /* Capability ID */
|
|
#define B_LMC_NEXTP 0x0000ff00 /* Next Capability Pointer */
|
|
#define N_LMC_NEXTP 8 /* Next Capability Pointer (position) */
|
|
#define B_LMC_LME 0x00010000 /* Local Mamory Enable */
|
|
#define N_LMC_LME 16 /* Local Mamory Enable (position) */
|
|
#define XHCI_LMSZ 0x04 /* Local Mamory Size */
|
|
//
|
|
// XHCI TRB type ID
|
|
//
|
|
#define TRB_TYPE_NORMAL 0x01
|
|
#define TRB_TYPE_LINK 0x06
|
|
//
|
|
// Endpoint Type
|
|
//
|
|
#define EP_TYPE_BULK_OUT 0x02
|
|
#define EP_TYPE_BULK_IN 0x06
|
|
|
|
#pragma pack(1)
|
|
|
|
typedef struct {
|
|
UINT64 RingSegmentBaseAddress;
|
|
UINT64 RingSegmentSize : 16;
|
|
UINT64 RsvdZ : 48;
|
|
} XHCI_EVENT_RING_SEGMENT_TABLE;
|
|
|
|
typedef struct {
|
|
UINT64 Str0DescAddr;
|
|
UINT64 ManufacturerDescAddr;
|
|
UINT64 ProductDescAddr;
|
|
UINT64 SerialNumDescAddr;
|
|
UINT32 Str0Len : 8;
|
|
UINT32 ManufacturerLen : 8;
|
|
UINT32 ProductLen : 8;
|
|
UINT32 SerialNumLen : 8;
|
|
} XHCI_DBG_INFO_CONTEXT;
|
|
|
|
typedef struct {
|
|
UINT32 EPState : 3;
|
|
UINT32 RsvdZ0 : 5;
|
|
UINT32 Mult : 2;
|
|
UINT32 MaxPStreams : 5;
|
|
UINT32 LSA : 1;
|
|
UINT32 Interval : 8;
|
|
UINT32 RsvdZ1 : 8;
|
|
UINT32 ForceEvent : 1;
|
|
UINT32 ErrorCount : 2;
|
|
UINT32 EPType : 3;
|
|
UINT32 RsvdZ2 : 2;
|
|
UINT32 MaxBurstSize : 8;
|
|
UINT32 MaxPacketSize : 16;
|
|
UINT64 TRDequeuePointer;
|
|
UINT32 AvgTRBLength : 16;
|
|
UINT32 MaxESITPayload : 16;
|
|
UINT32 RsvdZ3;
|
|
UINT64 RsvdZ4;
|
|
} XHCI_ENDPOINT_CONTEXT;
|
|
|
|
typedef struct {
|
|
UINT64 DataBufferPointer;
|
|
UINT32 TransferLength : 17;
|
|
UINT32 TDSize : 5;
|
|
UINT32 InterruptTarget : 10;
|
|
UINT32 CycleBit : 1;
|
|
UINT32 EvalNextTRB : 1;
|
|
UINT32 ISP : 1;
|
|
UINT32 NoSnoop : 1;
|
|
UINT32 ChainBit : 1;
|
|
UINT32 IOC : 1;
|
|
UINT32 IDT : 1;
|
|
UINT32 RsvdZ1 : 3;
|
|
UINT32 TRBType : 6;
|
|
UINT32 RsvdZ2 : 16;
|
|
} XHCI_NORMAL_TRB;
|
|
|
|
typedef struct {
|
|
UINT64 RingSegmentPointer;
|
|
UINT32 RsvdZ1 : 22;
|
|
UINT32 InterruptTarget : 10;
|
|
UINT32 CycleBit : 1;
|
|
UINT32 ToggleCycle : 1;
|
|
UINT32 RsvdZ2 : 2;
|
|
UINT32 ChainBit : 1;
|
|
UINT32 IOC : 1;
|
|
UINT32 RsvdZ3 : 4;
|
|
UINT32 TRBType : 6;
|
|
UINT32 RsvdZ4 : 16;
|
|
} XHCI_LINK_TRB;
|
|
|
|
typedef struct {
|
|
UINT64 TRBPointer;
|
|
UINT32 TransferLength : 24;
|
|
UINT32 CompletionCode : 8;
|
|
UINT32 CycleBit : 1;
|
|
UINT32 RsvdZ0 : 1;
|
|
UINT32 EventData : 1;
|
|
UINT32 RsvdZ1 : 7;
|
|
UINT32 TRBType : 6;
|
|
UINT32 EPID : 5;
|
|
UINT32 RsvdZ2 : 3;
|
|
UINT32 SlotID : 8;
|
|
} XHCI_TRANSFER_EVENT;
|
|
//
|
|
// Debug Context Signature
|
|
//
|
|
#define USB_XHCID_SIGNATURE SIGNATURE_32('x','h','c','d')
|
|
|
|
#define DEBUG_
|
|
|
|
typedef struct {
|
|
UINT32 LmcCapID;
|
|
UINT32 LmcSize;
|
|
UINT32 Signature;
|
|
UINT32 ContextSize;
|
|
CHAR16 Str0[8];
|
|
CHAR16 ManufacturerStr[8];
|
|
CHAR16 SerialNum[8];
|
|
XHCI_EVENT_RING_SEGMENT_TABLE EventRingSegmentTable;
|
|
CHAR16 ProductStr[24];
|
|
XHCI_TRANSFER_EVENT Event[EVENT_RING_SIZE];
|
|
XHCI_DBG_INFO_CONTEXT DebugInfoContext;
|
|
UINT32 Rsvd0[7];
|
|
XHCI_ENDPOINT_CONTEXT EndpointOut;
|
|
UINT32 Rsvd1[8];
|
|
XHCI_ENDPOINT_CONTEXT EndpointIn;
|
|
UINT32 Rsvd2[8];
|
|
XHCI_NORMAL_TRB BulkOutTRB;
|
|
XHCI_LINK_TRB BulkOutLinkTRB;
|
|
XHCI_NORMAL_TRB BulkInTRB;
|
|
XHCI_LINK_TRB BulkInLinkTRB;
|
|
CHAR8 StringBuffer[EFI_STATUS_CODE_DATA_MAX_SIZE];
|
|
} DBG_CONTEXT;
|
|
|
|
typedef struct _DEBUGIO_CONFIG {
|
|
UINT32 RPR : 1;
|
|
UINT32 Bypass : 1;
|
|
UINT32 DriverType : 2;
|
|
UINT32 UsbHcPort : 4;
|
|
UINT32 UsbDebugPort : 8;
|
|
UINT32 DebugPort : 16;
|
|
UINT32 BypassTimeout;
|
|
} DEBUGIO_CONFIG;
|
|
|
|
typedef struct _DEBUG_IO_PRIVATE_DATA {
|
|
EFI_HOB_GUID_TYPE EfiHobGuidType;
|
|
UINT32 HcToken;
|
|
UINT32 DebugContextAddr;
|
|
} DEBUG_IO_PRIVATE_DATA;
|
|
|
|
#pragma pack()
|
|
|
|
#endif
|