| /** @file | |
| Defines the X64 Namespace Object. | |
| Copyright (C) 2024 - 2025 Advanced Micro Devices, Inc. All rights reserved. | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| @par Glossary: | |
| - Cm or CM - Configuration Manager | |
| - Obj or OBJ - Object | |
| - X64 or x64 - X64 Architecture | |
| **/ | |
| #ifndef X64_NAMESPACE_OBJECTS_H_ | |
| #define X64_NAMESPACE_OBJECTS_H_ | |
| #include <AcpiObjects.h> | |
| #include <StandardNameSpaceObjects.h> | |
| #include <ArchCommonNameSpaceObjects.h> | |
| #pragma pack(1) | |
| /** The LOCAL_APIC_MODE enum describes the Local APIC | |
| mode in the X64 Namespace | |
| */ | |
| typedef enum { | |
| LocalApicModeInvalid = 0, | |
| LocalApicModeXApic, | |
| LocalApicModeX2Apic | |
| } LOCAL_APIC_MODE; | |
| /** The EX64_OBJECT_ID enum describes the Object IDs | |
| in the X64 Namespace | |
| */ | |
| typedef enum X64ObjectID { | |
| EX64ObjReserved, ///< 0 - Reserved | |
| EX64ObjFadtSciInterrupt, ///< 1 - FADT SCI Interrupt information | |
| EX64ObjFadtSciCmdInfo, ///< 2 - FADT SCI CMD information | |
| EX64ObjFadtPmBlockInfo, ///< 3 - FADT Power management block info | |
| EX64ObjFadtGpeBlockInfo, ///< 4 - FADT GPE block info | |
| EX64ObjFadtXpmBlockInfo, ///< 5 - FADT 64-bit Power Management block info | |
| EX64ObjFadtXgpeBlockInfo, ///< 6 - FADT 64-bit GPE block info | |
| EX64ObjFadtSleepBlockInfo, ///< 7 - FADT Sleep block info | |
| EX64ObjFadtResetBlockInfo, ///< 8 - FADT Reset block info | |
| EX64ObjFadtMiscInfo, ///< 9 - FADT Legacy fields info | |
| EX64ObjWsmtFlagsInfo, ///< 10 - WSMT protection flags info | |
| EX64ObjHpetInfo, ///< 11 - HPET device info | |
| EX64ObjMadtInfo, ///< 12 - MADT info | |
| EX64ObjLocalApicX2ApicInfo, ///< 13 - Local APIC and X2APIC info | |
| EX64ObjIoApicInfo, ///< 14 - IO APIC info | |
| EX64ObjIntrSourceOverrideInfo, ///< 15 - Interrupt Source Override info | |
| EX64ObjLocalApicX2ApicNmiInfo, ///< 16 - Local APIC and X2APIC NMI info | |
| EX64ObjFacsInfo, ///< 17 - FACS info | |
| EX64ObjLocalApicX2ApicAffinityInfo, ///< 18 - Local APIC and X2APIC Affinity info | |
| EX64ObjMax ///< 19 - Maximum Object ID | |
| } EX64_OBJECT_ID; | |
| /** A structure that describes the | |
| SCI interrupt Information for the Platform. | |
| ID: EX64ObjFadtSciInterrupt | |
| */ | |
| typedef struct CmX64FadtSciInterrupt { | |
| /** This is the SCI interrupt field of the FADT Table | |
| described in the ACPI Specification | |
| */ | |
| UINT16 SciInterrupt; | |
| } CM_X64_FADT_SCI_INTERRUPT; | |
| /** A structure that describes the | |
| SCI CMD Information for the Platform. | |
| ID: EX64ObjFadtSciCmdInfo | |
| */ | |
| typedef struct CmX64FadtSciCmdInfo { | |
| /** This is the System control interrupt command information of the FADT Table | |
| described in the ACPI Specification | |
| */ | |
| UINT32 SciCmd; | |
| UINT8 AcpiEnable; | |
| UINT8 AcpiDisable; | |
| UINT8 S4BiosReq; | |
| UINT8 PstateCnt; | |
| UINT8 CstCnt; | |
| } CM_X64_FADT_SCI_CMD_INFO; | |
| /** A structure that describes the | |
| power management block information. | |
| ID: EX64ObjFadtPmBlockInfo | |
| */ | |
| typedef struct CmX64FadtPmBlockInfo { | |
| /** This is the PM event block information of the FADT Table | |
| described in the ACPI Specification | |
| */ | |
| UINT32 Pm1aEvtBlk; | |
| UINT32 Pm1bEvtBlk; | |
| UINT32 Pm1aCntBlk; | |
| UINT32 Pm1bCntBlk; | |
| UINT32 Pm2CntBlk; | |
| UINT32 PmTmrBlk; | |
| UINT8 Pm1EvtLen; | |
| UINT8 Pm1CntLen; | |
| UINT8 Pm2CntLen; | |
| UINT8 PmTmrLen; | |
| } CM_X64_FADT_PM_BLOCK_INFO; | |
| /** A structure that describes the | |
| GPE block information. | |
| ID: EX64ObjFadtGpeBlockInfo | |
| */ | |
| typedef struct CmX64FadtGpeBlockInfo { | |
| /** This is the GPE Block information of the FADT Table | |
| described in the ACPI Specification | |
| */ | |
| UINT32 Gpe0Blk; | |
| UINT32 Gpe1Blk; | |
| UINT8 Gpe0BlkLen; | |
| UINT8 Gpe1BlkLen; | |
| UINT8 Gpe1Base; | |
| } CM_X64_FADT_GPE_BLOCK_INFO; | |
| /** A structure that describes the | |
| 64bit power management block information. | |
| ID: EX64ObjFadtXpmBlockInfo | |
| */ | |
| typedef struct CmX64FadtXpmBlockInfo { | |
| /** This is the System control interrupt command information of the FADT Table | |
| described in the ACPI Specification | |
| */ | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE XPm1aEvtBlk; | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE XPm1bEvtBlk; | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE XPm1aCntBlk; | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE XPm1bCntBlk; | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE XPm2CntBlk; | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE XPmTmrBlk; | |
| } CM_X64_FADT_X_PM_BLOCK_INFO; | |
| /** A structure that describes the | |
| 64-bit GPE block information. | |
| ID: EX64ObjFadtXgpeBlockInfo | |
| */ | |
| typedef struct CmX64FadtXgpeBlockInfo { | |
| /** This is the GPE Block information of the FADT Table | |
| described in the ACPI Specification | |
| */ | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE XGpe0Blk; | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE XGpe1Blk; | |
| } CM_X64_FADT_X_GPE_BLOCK_INFO; | |
| /** A structure that describes the | |
| sleep control block information. | |
| ID: EX64ObjFadtSleepBlockInfo | |
| */ | |
| typedef struct CmX64FadtSleepBlockInfo { | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE SleepControlReg; | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE SleepStatusReg; | |
| } CM_X64_FADT_SLEEP_BLOCK_INFO; | |
| /** A structure that describes the | |
| Reset control block information. | |
| ID: EX64ObjFadtResetBlockInfo | |
| */ | |
| typedef struct CmX64FadtResetBlockInfo { | |
| EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE ResetReg; | |
| UINT8 ResetValue; | |
| } CM_X64_FADT_RESET_BLOCK_INFO; | |
| /** A structure that describes the | |
| miscellaneous FADT fields information. | |
| ID: EX64ObjFadtMiscInfo | |
| */ | |
| typedef struct CmX64FadtFadtMiscInfo { | |
| UINT16 PLvl2Lat; | |
| UINT16 PLvl3Lat; | |
| UINT16 FlushSize; | |
| UINT16 FlushStride; | |
| UINT8 DutyOffset; | |
| UINT8 DutyWidth; | |
| UINT8 DayAlrm; | |
| UINT8 MonAlrm; | |
| UINT8 Century; | |
| } CM_X64_FADT_MISC_INFO; | |
| /** | |
| A structure that describes the WSMT protection flags information. | |
| ID: EX64ObjWsmtFlagsInfo | |
| */ | |
| typedef struct CmX64WsmtFlagsInfo { | |
| UINT32 ProtectionFlags; | |
| } CM_X64_WSMT_FLAGS_INFO; | |
| /** | |
| A structure that describes the HPET device information. | |
| ID: EX64ObjHpetInfo | |
| */ | |
| typedef struct CmX64HpetInfo { | |
| UINT32 BaseAddressLower32Bit; | |
| UINT16 MainCounterMinimumClockTickInPeriodicMode; | |
| UINT8 PageProtectionAndOemAttribute; | |
| } CM_X64_HPET_INFO; | |
| /** | |
| A structure that describes the MADT information. | |
| ID: EX64ObjMadtInfo | |
| */ | |
| typedef struct CmX64MadtInfo { | |
| UINT32 LocalApicAddress; | |
| UINT32 Flags; | |
| LOCAL_APIC_MODE ApicMode; | |
| } CM_X64_MADT_INFO; | |
| /** | |
| A structure that describes the Local APIC and X2APIC information. | |
| This structure includes fields from the ACPI_6_5_LOCAL_APIC_STRUCTURE | |
| and ACPI_6_5_LOCAL_X2APIC_STRUCTURE from the ACPI specifications. | |
| Additional fields are included to support CPU SSDT topology generation. | |
| ID: EX64ObjLocalApicX2ApicInfo | |
| */ | |
| typedef struct CmX64LocalApicX2ApicInfo { | |
| UINT32 ApicId; | |
| UINT32 Flags; | |
| UINT32 AcpiProcessorUid; | |
| /** Optional field: Reference Token for the Cst info of this processor. | |
| i.e. a token referencing a CM_ARCH_COMMON_OBJ_REF, | |
| which in turn refers to an array of CM_ARCH_COMMON_OBJ_REF objects, | |
| each pointing to individual CM_ARCH_COMMON_CST_INFO objects. | |
| */ | |
| CM_OBJECT_TOKEN CstToken; | |
| /** Optional field: Reference Token for the Csd info of this processor. | |
| i.e. a token referencing a CM_ARCH_COMMON_CSD_INFO object. | |
| */ | |
| CM_OBJECT_TOKEN CsdToken; | |
| /** Optional field: Reference Token for the Pct info of this processor. | |
| i.e. a token referencing a CM_ARCH_COMMON_Pct_INFO object. | |
| */ | |
| CM_OBJECT_TOKEN PctToken; | |
| /** Optional field: Reference Token for the Pss info of this processor. | |
| i.e. a token referencing a CM_ARCH_COMMON_PSS_INFO object. | |
| */ | |
| CM_OBJECT_TOKEN PssToken; | |
| /** Optional field: Reference Token for the Ppc info of this processor. | |
| i.e. a token referencing a CM_ARCH_COMMON_PPC_INFO object. | |
| */ | |
| CM_OBJECT_TOKEN PpcToken; | |
| /** Optional field: Reference Token for the Psd info of this processor. | |
| i.e. a token referencing a CM_ARCH_COMMON_PSD_INFO object. | |
| */ | |
| CM_OBJECT_TOKEN PsdToken; | |
| /** Optional field: Reference Token for the Cpc info of this processor. | |
| i.e. a token referencing a CM_ARCH_COMMON_CPC_INFO object. | |
| */ | |
| CM_OBJECT_TOKEN CpcToken; | |
| /** Optional field: Reference Token for _STA info of this processor. | |
| i.e. a token referencing a CM_ARCH_COMMON_STA_INFO object. | |
| */ | |
| CM_OBJECT_TOKEN StaToken; | |
| } CM_X64_LOCAL_APIC_X2APIC_INFO; | |
| /** | |
| A structure that describes the IO APIC information. | |
| ID: EX64ObjIoApicInfo | |
| */ | |
| typedef struct CmX64IoApicInfo { | |
| UINT8 IoApicId; | |
| UINT32 IoApicAddress; | |
| UINT32 GlobalSystemInterruptBase; | |
| } CM_X64_IO_APIC_INFO; | |
| /** | |
| A structure that describes the Interrupt Source Override information. | |
| ID: EX64ObjIntrSourceOverrideInfo | |
| */ | |
| typedef struct CmX64IntrSourceOverrideInfo { | |
| UINT8 Bus; | |
| UINT8 Source; | |
| UINT32 GlobalSystemInterrupt; | |
| UINT16 Flags; | |
| } CM_X64_INTR_SOURCE_OVERRIDE_INFO; | |
| /** | |
| A structure that describes the Local APIC NMI information. | |
| ID: EX64ObjLocalApicX2ApicNmiInfo | |
| */ | |
| typedef struct CmX64LocalApicX2ApicNmiInfo { | |
| UINT16 Flags; | |
| UINT32 AcpiProcessorUid; | |
| UINT8 LocalApicLint; | |
| } CM_X64_LOCAL_APIC_X2APIC_NMI_INFO; | |
| /** | |
| A structure that describes the FACS information. | |
| ID: EX64ObjFacsInfo | |
| */ | |
| typedef struct CmX64FacsInfo { | |
| UINT32 FirmwareWakingVector; | |
| UINT32 Flags; | |
| UINT64 XFirmwareWakingVector; | |
| UINT32 OspmFlags; | |
| } CM_X64_FACS_INFO; | |
| /** | |
| A structure that describes the Local APIC and X2APIC Affinity information. | |
| ID: EX64ObjLocalApicX2ApicAffinityInfo | |
| */ | |
| typedef struct CmX64LocalApicX2ApicAffinityInfo { | |
| LOCAL_APIC_MODE ApicMode; | |
| UINT32 ApicId; | |
| UINT32 ProximityDomain; | |
| UINT32 Flags; | |
| UINT32 ClockDomain; | |
| /** Optional field: Reference Token to the ProximityDomain this object | |
| belongs to. If set to CM_NULL_TOKEN, the following field is used: | |
| CM_X64_LOCAL_APIC_X2APIC_AFFINITY_INFO.ProximityDomain | |
| */ | |
| CM_OBJECT_TOKEN ProximityDomainToken; | |
| /** Optional field: Reference Token to the ProximityDomain this object | |
| belongs to. If set to CM_NULL_TOKEN, the following field is used: | |
| CM_X64_LOCAL_APIC_X2APIC_AFFINITY_INFO.ClockDomain | |
| */ | |
| CM_OBJECT_TOKEN ClockDomainToken; | |
| } CM_X64_LOCAL_APIC_X2APIC_AFFINITY_INFO; | |
| #pragma pack() | |
| #endif // X64_NAMESPACE_OBJECTS_H_ |