Ryzen/AmiModulePkg/KbcEmulation/KbcUhci.h
2022-12-23 15:14:44 +08:00

120 lines
4.7 KiB
C

//**********************************************************************
//**********************************************************************
//** **
//** (C)Copyright 1985-2015, American Megatrends, Inc. **
//** **
//** All Rights Reserved. **
//** **
//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
//** **
//** Phone: (770)-246-8600 **
//** **
//**********************************************************************
//**********************************************************************
/** @file KbcUhci.h
Header file for UCHI controller for Emulation
**/
typedef enum {
UNSUPPORTED = -1,
USB1_1 = 0,
USB1_2,
USB1_3,
USB1_4,
USB2_1,
NUMBER_USB_CONTROLLERS
} SUPPORTED_USB_CONTROLLERS;
typedef struct {
UINT16 BusDevFunc;
UINT8 InterfaceType;
UINT8 SubClassCode;
UINT8 BaseClassCode;
UINT8 LegacyRegOffset;
} UHCI_EMUL_DEVICE;
typedef struct _FULL_USB_DEVICE_PATH
{
ACPI_HID_DEVICE_PATH acpi;
PCI_DEVICE_PATH pci;
EFI_DEVICE_PATH_PROTOCOL end;
} FULL_USB_DEVICE_PATH;
#define ACPI_PATH_MACRO \
{{ACPI_DEVICE_PATH,ACPI_DP,ACPI_DEVICE_PATH_LENGTH}, EISA_PNP_ID(0x0A03),0}
#define PCI_PATH_MACRO(Device,Function) \
{{HARDWARE_DEVICE_PATH, HW_PCI_DP, HW_PCI_DEVICE_PATH_LENGTH}, (Function),(Device)}
#define END_PATH_MACRO \
{END_DEVICE_PATH,END_ENTIRE_SUBTYPE,END_DEVICE_PATH_LENGTH}
#define USB1_1_DEVICE_PATH \
{ ACPI_PATH_MACRO, PCI_PATH_MACRO(0x1d, 0), END_PATH_MACRO }
//
// Trap Dispatcher
//
typedef struct _TRAPDISPATCH {
UINT16 status_bit;
VOID (* trap_function)();
} TRAPDISPATCH;
#define UHCI_SMIBYENDPS (UINT16)(1U << 15)
#define UHCI_USBPIRQEN (UINT16)(1U << 13)
#define UHCI_SMIBYUSB (UINT16)(1U << 12)
#define UHCI_TRAPBY64W (UINT16)(1U << 11)
#define UHCI_TRAPBY64R (UINT16)(1U << 10)
#define UHCI_TRAPBY60W (UINT16)(1U << 9)
#define UHCI_TRAPBY60R (UINT16)(1U << 8)
#define UHCI_SMIATENDPS (UINT16)(1U << 7)
#define UHCI_PSTATE (UINT16)(1U << 6)
#define UHCI_A20PASSEN (UINT16)(1U << 5)
#define UHCI_USBSMIEN (UINT16)(1U << 4)
#define UHCI_64WEN (UINT16)(1U << 3)
#define UHCI_64REN (UINT16)(1U << 2)
#define UHCI_60WEN (UINT16)(1U << 1)
#define UHCI_60REN (UINT16)(1U )
#define PCIBUS(x) ( x << 16)
#define PCIDEV(x) ( x << 11)
#define PCIFUNC(x) ( x << 8)
#define UHCI_TRAPBY_MASK_WITHOUTKBC (UHCI_TRAPBY64W | UHCI_TRAPBY64R | UHCI_TRAPBY60W | UHCI_TRAPBY60R | UHCI_SMIBYENDPS)
#define UHCI_TRAPBY_MASK_WITHKBC (UHCI_TRAPBY64W | UHCI_TRAPBY60W | UHCI_TRAPBY60R | UHCI_SMIBYENDPS)
//enable bits for traps
#if defined UHCI_A20PASSEN_SUPPORT && UHCI_A20PASSEN_SUPPORT == 1
#define UHCI_TRAPEN_MASK_WITHOUTKBC (UHCI_64WEN | UHCI_60WEN | UHCI_64REN | UHCI_60REN | UHCI_A20PASSEN)
#define UHCI_TRAPEN_MASK_WITHKBC (UHCI_64WEN | UHCI_60WEN | UHCI_60REN | UHCI_A20PASSEN)
#else
#define UHCI_TRAPEN_MASK_WITHOUTKBC (UHCI_64WEN | UHCI_60WEN | UHCI_64REN | UHCI_60REN)
#define UHCI_TRAPEN_MASK_WITHKBC (UHCI_64WEN | UHCI_60WEN | UHCI_60REN )
#endif
BOOLEAN GetRMhStatus();
BOOLEAN Uhci_HasTrapStatus();
BOOLEAN Uhci_TrapEnable(BOOLEAN);
BOOLEAN NonSmmUhci_TrapEnable(BOOLEAN);
BOOLEAN NonSmmUhci_HasTrapStatus();
void NonSmmUhci_SetTrapEnMask();
//**********************************************************************
//**********************************************************************
//** **
//** (C)Copyright 1985-2015, American Megatrends, Inc. **
//** **
//** All Rights Reserved. **
//** **
//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
//** **
//** Phone: (770)-246-8600 **
//** **
//**********************************************************************
//**********************************************************************