mirror of https://github.com/acidanthera/audk.git
DynamicTablesPkg/AcpiFadtLib: Adds FADT X64 generator
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=4781 Updates FADT X64 generator to collect below configuration information and update the table accordingly. - SCI interrupt - SCI command - PM Block - GPE Block - PM Block 64-bit - GPE Block 64-bit - Sleep block - Reset block - Miscellaneous legacy information Cc: Sami Mujawar <Sami.Mujawar@arm.com> Cc: Pierre Gondois <pierre.gondois@arm.com> Signed-off-by: Abdul Lateef Attar <AbdulLateef.Attar@amd.com>
This commit is contained in:
parent
967cbd87b7
commit
bc0fc75637
|
@ -53,7 +53,12 @@
|
|||
#
|
||||
# Dynamic Table Factory Dxe
|
||||
#
|
||||
DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe.inf
|
||||
DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe.inf {
|
||||
<LibraryClasses>
|
||||
# Generators
|
||||
# Common
|
||||
NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf
|
||||
}
|
||||
|
||||
[Components.ARM, Components.AARCH64]
|
||||
#
|
||||
|
|
|
@ -15,12 +15,156 @@
|
|||
#ifndef X64_NAMESPACE_OBJECTS_H_
|
||||
#define X64_NAMESPACE_OBJECTS_H_
|
||||
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
|
||||
/** The EX64_OBJECT_ID enum describes the Object IDs
|
||||
in the X64 Namespace
|
||||
*/
|
||||
typedef enum X64ObjectID {
|
||||
EX64ObjReserved, ///< 0 - Reserved
|
||||
EX64ObjMax
|
||||
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, ///< 0 - FADT Legacy fields info
|
||||
EX64ObjMax ///< 10 - 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;
|
||||
|
||||
#endif // X64_NAMESPACE_OBJECTS_H_
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
Arm/ArmFadtGenerator.c
|
||||
|
||||
[Sources.IA32, Sources.X64]
|
||||
FadtGeneratorNull.c
|
||||
X64/X64FadtGenerator.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
/** @file
|
||||
Common FADT Table Helpers
|
||||
|
||||
Copyright (c) 2017 - 2023, Arm Limited. All rights reserved.
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Reference(s):
|
||||
- ACPI 6.5 Specification, Aug 29, 2022
|
||||
|
||||
**/
|
||||
|
||||
#include <Library/AcpiLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Protocol/AcpiTable.h>
|
||||
|
||||
// Module specific include files.
|
||||
#include <AcpiTableGenerator.h>
|
||||
#include <ConfigurationManagerObject.h>
|
||||
#include <ConfigurationManagerHelper.h>
|
||||
#include <Library/TableHelperLib.h>
|
||||
#include <Protocol/ConfigurationManagerProtocol.h>
|
||||
#include "FadtGenerator.h"
|
||||
|
||||
/** Updates the Architecture specific information in the FADT Table.
|
||||
|
||||
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
|
||||
Protocol Interface.
|
||||
@param [in, out] Fadt Pointer to the constructed ACPI Table.
|
||||
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_UNSUPPORTED Unsupported.
|
||||
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
||||
@retval EFI_NOT_FOUND The required object was not found.
|
||||
@retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration
|
||||
Manager is less than the Object size for the
|
||||
requested object.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FadtArchUpdate (
|
||||
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
|
||||
IN OUT EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *Fadt
|
||||
)
|
||||
{
|
||||
// Not implemented.
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
|
@ -0,0 +1,382 @@
|
|||
/** @file
|
||||
X64 FADT Table Helpers
|
||||
|
||||
Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved.
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Reference(s):
|
||||
- ACPI 6.5 Specification, Aug 29, 2022
|
||||
|
||||
**/
|
||||
|
||||
#include <X64NameSpaceObjects.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/AcpiLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Protocol/AcpiTable.h>
|
||||
|
||||
// Module specific include files.
|
||||
#include <AcpiTableGenerator.h>
|
||||
#include <ConfigurationManagerObject.h>
|
||||
#include <ConfigurationManagerHelper.h>
|
||||
#include <Library/TableHelperLib.h>
|
||||
#include <Protocol/ConfigurationManagerProtocol.h>
|
||||
#include "FadtGenerator.h"
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
SCI interrupt information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtSciInterrupt,
|
||||
CM_X64_FADT_SCI_INTERRUPT
|
||||
);
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
SCI command information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtSciCmdInfo,
|
||||
CM_X64_FADT_SCI_CMD_INFO
|
||||
);
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
legacy power management information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtPmBlockInfo,
|
||||
CM_X64_FADT_PM_BLOCK_INFO
|
||||
);
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
legacy GPE block information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtGpeBlockInfo,
|
||||
CM_X64_FADT_GPE_BLOCK_INFO
|
||||
);
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
legacy level2 latency, level 3 latency, RTC information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtMiscInfo,
|
||||
CM_X64_FADT_MISC_INFO
|
||||
);
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
64-bit power management information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtXpmBlockInfo,
|
||||
CM_X64_FADT_X_PM_BLOCK_INFO
|
||||
);
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
64-bit GPE block information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtXgpeBlockInfo,
|
||||
CM_X64_FADT_X_GPE_BLOCK_INFO
|
||||
);
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
sleep block information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtSleepBlockInfo,
|
||||
CM_X64_FADT_SLEEP_BLOCK_INFO
|
||||
);
|
||||
|
||||
/** This macro expands to a function that retrieves the
|
||||
reset block information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceX64,
|
||||
EX64ObjFadtResetBlockInfo,
|
||||
CM_X64_FADT_RESET_BLOCK_INFO
|
||||
);
|
||||
|
||||
/** Updates the Architecture specific information in the FADT Table.
|
||||
|
||||
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
|
||||
Protocol Interface.
|
||||
@param [in, out] Fadt Pointer to the constructed ACPI Table.
|
||||
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
||||
@retval EFI_NOT_FOUND The required object was not found.
|
||||
@retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration
|
||||
Manager is less than the Object size for the
|
||||
requested object.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FadtArchUpdate (
|
||||
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
|
||||
IN OUT EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *Fadt
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
CM_X64_FADT_SCI_INTERRUPT *SciInterrupt;
|
||||
CM_X64_FADT_SCI_CMD_INFO *SciCmdinfo;
|
||||
CM_X64_FADT_PM_BLOCK_INFO *PmBlockInfo;
|
||||
CM_X64_FADT_GPE_BLOCK_INFO *GpeBlockInfo;
|
||||
CM_X64_FADT_X_PM_BLOCK_INFO *XpmBlockInfo;
|
||||
CM_X64_FADT_X_GPE_BLOCK_INFO *XgpeBlockInfo;
|
||||
CM_X64_FADT_SLEEP_BLOCK_INFO *SleepBlockInfo;
|
||||
CM_X64_FADT_RESET_BLOCK_INFO *ResetBlockInfo;
|
||||
CM_X64_FADT_MISC_INFO *FadtMiscInfo;
|
||||
|
||||
ASSERT (CfgMgrProtocol != NULL);
|
||||
ASSERT (Fadt != NULL);
|
||||
|
||||
// Get the SCI interrupt from the Platform Configuration Manager
|
||||
Status = GetEX64ObjFadtSciInterrupt (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&SciInterrupt,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get SCI Interrupt information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
Fadt->SciInt = SciInterrupt->SciInterrupt;
|
||||
}
|
||||
|
||||
// Get the SCI CMD information from the Platform Configuration Manager
|
||||
Status = GetEX64ObjFadtSciCmdInfo (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&SciCmdinfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get SCI CMD information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
Fadt->SmiCmd = SciCmdinfo->SciCmd;
|
||||
Fadt->AcpiEnable = SciCmdinfo->AcpiEnable;
|
||||
Fadt->AcpiDisable = SciCmdinfo->AcpiDisable;
|
||||
Fadt->S4BiosReq = SciCmdinfo->S4BiosReq;
|
||||
Fadt->PstateCnt = SciCmdinfo->PstateCnt;
|
||||
Fadt->CstCnt = SciCmdinfo->CstCnt;
|
||||
}
|
||||
|
||||
// Get the SCI PM Block information from the Platform Configuration Manager
|
||||
Status = GetEX64ObjFadtPmBlockInfo (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&PmBlockInfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get PM Block information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
Fadt->Pm1aEvtBlk = PmBlockInfo->Pm1aEvtBlk;
|
||||
Fadt->Pm1bEvtBlk = PmBlockInfo->Pm1bEvtBlk;
|
||||
Fadt->Pm1aCntBlk = PmBlockInfo->Pm1aCntBlk;
|
||||
Fadt->Pm1bCntBlk = PmBlockInfo->Pm1bCntBlk;
|
||||
Fadt->Pm2CntBlk = PmBlockInfo->Pm2CntBlk;
|
||||
Fadt->PmTmrBlk = PmBlockInfo->PmTmrBlk;
|
||||
Fadt->Pm1EvtLen = PmBlockInfo->Pm1EvtLen;
|
||||
Fadt->Pm1CntLen = PmBlockInfo->Pm1CntLen;
|
||||
Fadt->Pm2CntLen = PmBlockInfo->Pm2CntLen;
|
||||
Fadt->PmTmrLen = PmBlockInfo->PmTmrLen;
|
||||
}
|
||||
|
||||
// Get the SCI PM Block information from the Platform Configuration Manager
|
||||
Status = GetEX64ObjFadtGpeBlockInfo (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&GpeBlockInfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get PM Block information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
Fadt->Gpe0Blk = GpeBlockInfo->Gpe0Blk;
|
||||
Fadt->Gpe1Blk = GpeBlockInfo->Gpe1Blk;
|
||||
Fadt->Gpe0BlkLen = GpeBlockInfo->Gpe0BlkLen;
|
||||
Fadt->Gpe1BlkLen = GpeBlockInfo->Gpe1BlkLen;
|
||||
Fadt->Gpe1Base = GpeBlockInfo->Gpe1Base;
|
||||
}
|
||||
|
||||
// Get the 64-bit PM Block information from the Platform Configuration Manager
|
||||
Status = GetEX64ObjFadtXpmBlockInfo (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&XpmBlockInfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get 64-bit PM Block information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
CopyMem (
|
||||
&Fadt->XPm1aCntBlk,
|
||||
&XpmBlockInfo->XPm1aCntBlk,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
CopyMem (
|
||||
&Fadt->XPm1bEvtBlk,
|
||||
&XpmBlockInfo->XPm1bEvtBlk,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
CopyMem (
|
||||
&Fadt->XPm1aCntBlk,
|
||||
&XpmBlockInfo->XPm1aCntBlk,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
CopyMem (
|
||||
&Fadt->XPm1bCntBlk,
|
||||
&XpmBlockInfo->XPm1bCntBlk,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
CopyMem (
|
||||
&Fadt->XPm2CntBlk,
|
||||
&XpmBlockInfo->XPm2CntBlk,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
CopyMem (
|
||||
&Fadt->XPmTmrBlk,
|
||||
&XpmBlockInfo->XPmTmrBlk,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
}
|
||||
|
||||
// Get the various platform information from the Platform Configuration manager
|
||||
Status = GetEX64ObjFadtMiscInfo (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&FadtMiscInfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get various platform information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
Fadt->PLvl2Lat = FadtMiscInfo->PLvl2Lat;
|
||||
Fadt->PLvl3Lat = FadtMiscInfo->PLvl3Lat;
|
||||
Fadt->FlushSize = FadtMiscInfo->FlushSize;
|
||||
Fadt->FlushStride = FadtMiscInfo->FlushStride;
|
||||
Fadt->DutyOffset = FadtMiscInfo->DutyOffset;
|
||||
Fadt->DutyWidth = FadtMiscInfo->DutyWidth;
|
||||
Fadt->DayAlrm = FadtMiscInfo->DayAlrm;
|
||||
Fadt->MonAlrm = FadtMiscInfo->MonAlrm;
|
||||
Fadt->Century = FadtMiscInfo->Century;
|
||||
}
|
||||
|
||||
// Get the 64-bit GPE Block information from the Platform Configuration Manager
|
||||
Status = GetEX64ObjFadtXgpeBlockInfo (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&XgpeBlockInfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get 64-bit GPE Block information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
CopyMem (
|
||||
&Fadt->XGpe0Blk,
|
||||
&XgpeBlockInfo->XGpe0Blk,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
CopyMem (
|
||||
&Fadt->XGpe1Blk,
|
||||
&XgpeBlockInfo->XGpe1Blk,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
}
|
||||
|
||||
// Get the sleep Block information from the Platform Configuration Manager
|
||||
Status = GetEX64ObjFadtSleepBlockInfo (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&SleepBlockInfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get Sleep Block information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
CopyMem (
|
||||
&Fadt->SleepControlReg,
|
||||
&SleepBlockInfo->SleepControlReg,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
CopyMem (
|
||||
&Fadt->SleepStatusReg,
|
||||
&SleepBlockInfo->SleepStatusReg,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
}
|
||||
|
||||
// Get the sleep Block information from the Platform Configuration Manager
|
||||
Status = GetEX64ObjFadtResetBlockInfo (
|
||||
CfgMgrProtocol,
|
||||
CM_NULL_TOKEN,
|
||||
&ResetBlockInfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"ERROR: FADT: Failed to get Reset Block information." \
|
||||
" Status = %r\n",
|
||||
Status
|
||||
));
|
||||
} else {
|
||||
CopyMem (
|
||||
&Fadt->ResetReg,
|
||||
&ResetBlockInfo->ResetReg,
|
||||
sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE)
|
||||
);
|
||||
Fadt->ResetValue = ResetBlockInfo->ResetValue;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
|
@ -730,10 +730,129 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = {
|
|||
CM_PARSER_ADD_OBJECT_RESERVED (EArmObjMax)
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtSciInterrupt.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtSciInterruptParser[] = {
|
||||
{ "SciInterrupt", 2, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtSciCmdInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtSciCmdInfoParser[] = {
|
||||
{ "SciCmd", 4, "0x%x", NULL },
|
||||
{ "AcpiEnable", 1, "0x%x", NULL },
|
||||
{ "AcpiDisable", 1, "0x%x", NULL },
|
||||
{ "S4BiosReq", 1, "0x%x", NULL },
|
||||
{ "PstateCnt", 1, "0x%x", NULL },
|
||||
{ "CstCnt", 1, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtPmBlockInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtPmBlockInfoParser[] = {
|
||||
{ "Pm1aEvtBlk", 4, "0x%x", NULL },
|
||||
{ "Pm1bEvtBlk", 4, "0x%x", NULL },
|
||||
{ "Pm1aCntBlk", 4, "0x%x", NULL },
|
||||
{ "Pm1bCntBlk", 4, "0x%x", NULL },
|
||||
{ "Pm2CntBlk", 4, "0x%x", NULL },
|
||||
{ "PmTmrBlk", 4, "0x%x", NULL },
|
||||
{ "Pm1EvtLen", 1, "0x%x", NULL },
|
||||
{ "Pm1CntLen", 1, "0x%x", NULL },
|
||||
{ "Pm2CntLen", 1, "0x%x", NULL },
|
||||
{ "PmTmrLen", 1, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtGpeBlockInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtGpeBlockInfoParser[] = {
|
||||
{ "Gpe0Blk", 4, "0x%x", NULL },
|
||||
{ "Gpe1Blk", 4, "0x%x", NULL },
|
||||
{ "Gpe0BlkLen", 1, "0x%x", NULL },
|
||||
{ "Gpe1BlkLen", 1, "0x%x", NULL },
|
||||
{ "Gpe1Base", 1, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtXpmBlockInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtXpmBlockInfoParser[] = {
|
||||
{ "XPm1aEvtBlk", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) },
|
||||
{ "XPm1bEvtBlk", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) },
|
||||
{ "XPm1aCntBlk", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) },
|
||||
{ "XPm1bCntBlk", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) },
|
||||
{ "XPm2CntBlk", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) },
|
||||
{ "XPmTmrBlk", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) }
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtXgpeBlockInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtXgpeBlockInfoParser[] = {
|
||||
{ "XGpe0Blk", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) },
|
||||
{ "XGpe1Blk", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) }
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtSleepBlockInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtSleepBlockInfoParser[] = {
|
||||
{ "SleepControlReg", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) },
|
||||
{ "SleepStatusReg", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) }
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtResetBlockInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtResetBlockInfoParser[] = {
|
||||
{ "ResetReg", sizeof (EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE),
|
||||
NULL, NULL, AcpiGenericAddressParser,
|
||||
ARRAY_SIZE (AcpiGenericAddressParser) },
|
||||
{ "ResetValue", 1, "0x%x",NULL }
|
||||
};
|
||||
|
||||
/** A parser for EX64ObjFadtMiscInfo.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER CmX64ObjFadtMiscInfoParser[] = {
|
||||
{ "PLvl2Lat", 2, "0x%x", NULL },
|
||||
{ "PLvl3Lat", 2, "0x%x", NULL },
|
||||
{ "FlushSize", 2, "0x%x", NULL },
|
||||
{ "FlushStride", 2, "0x%x", NULL },
|
||||
{ "DutyOffset", 1, "0x%x", NULL },
|
||||
{ "DutyWidth", 1, "0x%x", NULL },
|
||||
{ "DayAlrm", 1, "0x%x", NULL },
|
||||
{ "MonAlrm", 1, "0x%x", NULL },
|
||||
{ "Century", 1, "0x%x", NULL }
|
||||
};
|
||||
|
||||
/** A parser for X64 namespace objects.
|
||||
*/
|
||||
STATIC CONST CM_OBJ_PARSER_ARRAY X64NamespaceObjectParser[] = {
|
||||
CM_PARSER_ADD_OBJECT_RESERVED (EX64ObjReserved),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtSciInterrupt, CmX64ObjFadtSciInterruptParser),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtSciCmdInfo, CmX64ObjFadtSciCmdInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtPmBlockInfo, CmX64ObjFadtPmBlockInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtGpeBlockInfo, CmX64ObjFadtGpeBlockInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtXpmBlockInfo, CmX64ObjFadtXpmBlockInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtXgpeBlockInfo, CmX64ObjFadtXgpeBlockInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtSleepBlockInfo,CmX64ObjFadtSleepBlockInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtResetBlockInfo,CmX64ObjFadtResetBlockInfoParser),
|
||||
CM_PARSER_ADD_OBJECT (EX64ObjFadtMiscInfo, CmX64ObjFadtMiscInfoParser),
|
||||
CM_PARSER_ADD_OBJECT_RESERVED (EX64ObjMax)
|
||||
};
|
||||
|
||||
|
|
|
@ -504,4 +504,13 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager
|
|||
| ID | Description | Comments |
|
||||
| ---: | :-------------------------- | :--- |
|
||||
| 0 | Reserved | |
|
||||
| 1 | SCI Interrupt Info | |
|
||||
| 2 | SCI Command Info | |
|
||||
| 3 | Legacy Power Management Block Info | |
|
||||
| 4 | Legacy GPE Block Info | |
|
||||
| 5 | Power Management Block Info | |
|
||||
| 6 | GPE Block Info | |
|
||||
| 7 | Sleep Block Info | |
|
||||
| 8 | Reset Block Info | |
|
||||
| 9 | Miscellaneous Block Info | |
|
||||
| `*` | All other values are reserved. | |
|
||||
|
|
Loading…
Reference in New Issue