diff options
-rw-r--r-- | DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c | 79 |
1 files changed, 42 insertions, 37 deletions
diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c index 2102a59faf..df8734ed7f 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c @@ -1,11 +1,11 @@ /** @file
MADT Table Generator
- Copyright (c) 2017 - 2020, ARM Limited. All rights reserved.
+ Copyright (c) 2017 - 2023, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
- - ACPI 6.3 Specification - January 2019
+ - ACPI 6.5 Specification - Aug 29, 2022
**/
@@ -82,7 +82,7 @@ GET_OBJECT_LIST ( );
/** This function updates the GIC CPU Interface Information in the
- EFI_ACPI_6_3_GIC_STRUCTURE structure.
+ EFI_ACPI_6_5_GIC_STRUCTURE structure.
@param [in] Gicc Pointer to GIC CPU Interface structure.
@param [in] GicCInfo Pointer to the GIC CPU Interface Information.
@@ -91,7 +91,7 @@ GET_OBJECT_LIST ( STATIC
VOID
AddGICC (
- IN EFI_ACPI_6_3_GIC_STRUCTURE *CONST Gicc,
+ IN EFI_ACPI_6_5_GIC_STRUCTURE *CONST Gicc,
IN CONST CM_ARM_GICC_INFO *CONST GicCInfo,
IN CONST UINT8 MadtRev
)
@@ -100,9 +100,9 @@ AddGICC ( ASSERT (GicCInfo != NULL);
// UINT8 Type
- Gicc->Type = EFI_ACPI_6_3_GIC;
+ Gicc->Type = EFI_ACPI_6_5_GIC;
// UINT8 Length
- Gicc->Length = sizeof (EFI_ACPI_6_3_GIC_STRUCTURE);
+ Gicc->Length = sizeof (EFI_ACPI_6_5_GIC_STRUCTURE);
// UINT16 Reserved
Gicc->Reserved = EFI_ACPI_RESERVED_WORD;
@@ -148,6 +148,11 @@ AddGICC ( // in EFI_ACPI_6_2_GIC_STRUCTURE.
Gicc->SpeOverflowInterrupt = 0;
}
+
+ // UINT16 TrbeInterrupt
+ if (MadtRev > EFI_ACPI_6_4_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION) {
+ Gicc->TrbeInterrupt = GicCInfo->TrbeInterrupt;
+ }
}
/**
@@ -214,7 +219,7 @@ IsAcpiUidEqual ( STATIC
EFI_STATUS
AddGICCList (
- IN EFI_ACPI_6_3_GIC_STRUCTURE *Gicc,
+ IN EFI_ACPI_6_5_GIC_STRUCTURE *Gicc,
IN CONST CM_ARM_GICC_INFO *GicCInfo,
IN UINT32 GicCCount,
IN CONST UINT8 MadtRev
@@ -252,7 +257,7 @@ AddGICCList ( STATIC
VOID
AddGICD (
- EFI_ACPI_6_3_GIC_DISTRIBUTOR_STRUCTURE *CONST Gicd,
+ EFI_ACPI_6_5_GIC_DISTRIBUTOR_STRUCTURE *CONST Gicd,
CONST CM_ARM_GICD_INFO *CONST GicDInfo
)
{
@@ -260,9 +265,9 @@ AddGICD ( ASSERT (GicDInfo != NULL);
// UINT8 Type
- Gicd->Type = EFI_ACPI_6_3_GICD;
+ Gicd->Type = EFI_ACPI_6_5_GICD;
// UINT8 Length
- Gicd->Length = sizeof (EFI_ACPI_6_3_GIC_DISTRIBUTOR_STRUCTURE);
+ Gicd->Length = sizeof (EFI_ACPI_6_5_GIC_DISTRIBUTOR_STRUCTURE);
// UINT16 Reserved
Gicd->Reserved1 = EFI_ACPI_RESERVED_WORD;
// UINT32 Identifier
@@ -289,15 +294,15 @@ AddGICD ( STATIC
VOID
AddGICMsiFrame (
- IN EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE *CONST GicMsiFrame,
+ IN EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE *CONST GicMsiFrame,
IN CONST CM_ARM_GIC_MSI_FRAME_INFO *CONST GicMsiFrameInfo
)
{
ASSERT (GicMsiFrame != NULL);
ASSERT (GicMsiFrameInfo != NULL);
- GicMsiFrame->Type = EFI_ACPI_6_3_GIC_MSI_FRAME;
- GicMsiFrame->Length = sizeof (EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE);
+ GicMsiFrame->Type = EFI_ACPI_6_5_GIC_MSI_FRAME;
+ GicMsiFrame->Length = sizeof (EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE);
GicMsiFrame->Reserved1 = EFI_ACPI_RESERVED_WORD;
GicMsiFrame->GicMsiFrameId = GicMsiFrameInfo->GicMsiFrameId;
GicMsiFrame->PhysicalBaseAddress = GicMsiFrameInfo->PhysicalBaseAddress;
@@ -316,7 +321,7 @@ AddGICMsiFrame ( STATIC
VOID
AddGICMsiFrameInfoList (
- IN EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE *GicMsiFrame,
+ IN EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE *GicMsiFrame,
IN CONST CM_ARM_GIC_MSI_FRAME_INFO *GicMsiFrameInfo,
IN UINT32 GicMsiFrameCount
)
@@ -337,15 +342,15 @@ AddGICMsiFrameInfoList ( STATIC
VOID
AddGICRedistributor (
- IN EFI_ACPI_6_3_GICR_STRUCTURE *CONST Gicr,
+ IN EFI_ACPI_6_5_GICR_STRUCTURE *CONST Gicr,
IN CONST CM_ARM_GIC_REDIST_INFO *CONST GicRedistributorInfo
)
{
ASSERT (Gicr != NULL);
ASSERT (GicRedistributorInfo != NULL);
- Gicr->Type = EFI_ACPI_6_3_GICR;
- Gicr->Length = sizeof (EFI_ACPI_6_3_GICR_STRUCTURE);
+ Gicr->Type = EFI_ACPI_6_5_GICR;
+ Gicr->Length = sizeof (EFI_ACPI_6_5_GICR_STRUCTURE);
Gicr->Reserved = EFI_ACPI_RESERVED_WORD;
Gicr->DiscoveryRangeBaseAddress =
GicRedistributorInfo->DiscoveryRangeBaseAddress;
@@ -361,7 +366,7 @@ AddGICRedistributor ( STATIC
VOID
AddGICRedistributorList (
- IN EFI_ACPI_6_3_GICR_STRUCTURE *Gicr,
+ IN EFI_ACPI_6_5_GICR_STRUCTURE *Gicr,
IN CONST CM_ARM_GIC_REDIST_INFO *GicRInfo,
IN UINT32 GicRCount
)
@@ -382,15 +387,15 @@ AddGICRedistributorList ( STATIC
VOID
AddGICInterruptTranslationService (
- IN EFI_ACPI_6_3_GIC_ITS_STRUCTURE *CONST GicIts,
+ IN EFI_ACPI_6_5_GIC_ITS_STRUCTURE *CONST GicIts,
IN CONST CM_ARM_GIC_ITS_INFO *CONST GicItsInfo
)
{
ASSERT (GicIts != NULL);
ASSERT (GicItsInfo != NULL);
- GicIts->Type = EFI_ACPI_6_3_GIC_ITS;
- GicIts->Length = sizeof (EFI_ACPI_6_3_GIC_ITS_STRUCTURE);
+ GicIts->Type = EFI_ACPI_6_5_GIC_ITS;
+ GicIts->Length = sizeof (EFI_ACPI_6_5_GIC_ITS_STRUCTURE);
GicIts->Reserved = EFI_ACPI_RESERVED_WORD;
GicIts->GicItsId = GicItsInfo->GicItsId;
GicIts->PhysicalBaseAddress = GicItsInfo->PhysicalBaseAddress;
@@ -407,7 +412,7 @@ AddGICInterruptTranslationService ( STATIC
VOID
AddGICItsList (
- IN EFI_ACPI_6_3_GIC_ITS_STRUCTURE *GicIts,
+ IN EFI_ACPI_6_5_GIC_ITS_STRUCTURE *GicIts,
IN CONST CM_ARM_GIC_ITS_INFO *GicItsInfo,
IN UINT32 GicItsCount
)
@@ -470,7 +475,7 @@ BuildMadtTable ( UINT32 GicRedistOffset;
UINT32 GicItsOffset;
- EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *Madt;
+ EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *Madt;
ASSERT (This != NULL);
ASSERT (AcpiTableInfo != NULL);
@@ -602,22 +607,22 @@ BuildMadtTable ( goto error_handler;
}
- TableSize = sizeof (EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER);
+ TableSize = sizeof (EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER);
GicCOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GIC_STRUCTURE) * GicCCount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GIC_STRUCTURE) * GicCCount);
GicDOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GIC_DISTRIBUTOR_STRUCTURE) * GicDCount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GIC_DISTRIBUTOR_STRUCTURE) * GicDCount);
GicMSIOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE) * GicMSICount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE) * GicMSICount);
GicRedistOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GICR_STRUCTURE) * GicRedistCount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GICR_STRUCTURE) * GicRedistCount);
GicItsOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GIC_ITS_STRUCTURE) * GicItsCount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GIC_ITS_STRUCTURE) * GicItsCount);
// Allocate the Buffer for MADT table
*Table = (EFI_ACPI_DESCRIPTION_HEADER *)AllocateZeroPool (TableSize);
@@ -633,7 +638,7 @@ BuildMadtTable ( goto error_handler;
}
- Madt = (EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *)*Table;
+ Madt = (EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *)*Table;
DEBUG ((
DEBUG_INFO,
@@ -659,7 +664,7 @@ BuildMadtTable ( }
Status = AddGICCList (
- (EFI_ACPI_6_3_GIC_STRUCTURE *)((UINT8 *)Madt + GicCOffset),
+ (EFI_ACPI_6_5_GIC_STRUCTURE *)((UINT8 *)Madt + GicCOffset),
GicCInfo,
GicCCount,
Madt->Header.Revision
@@ -674,13 +679,13 @@ BuildMadtTable ( }
AddGICD (
- (EFI_ACPI_6_3_GIC_DISTRIBUTOR_STRUCTURE *)((UINT8 *)Madt + GicDOffset),
+ (EFI_ACPI_6_5_GIC_DISTRIBUTOR_STRUCTURE *)((UINT8 *)Madt + GicDOffset),
GicDInfo
);
if (GicMSICount != 0) {
AddGICMsiFrameInfoList (
- (EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE *)((UINT8 *)Madt + GicMSIOffset),
+ (EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE *)((UINT8 *)Madt + GicMSIOffset),
GicMSIInfo,
GicMSICount
);
@@ -688,7 +693,7 @@ BuildMadtTable ( if (GicRedistCount != 0) {
AddGICRedistributorList (
- (EFI_ACPI_6_3_GICR_STRUCTURE *)((UINT8 *)Madt + GicRedistOffset),
+ (EFI_ACPI_6_5_GICR_STRUCTURE *)((UINT8 *)Madt + GicRedistOffset),
GicRedistInfo,
GicRedistCount
);
@@ -696,7 +701,7 @@ BuildMadtTable ( if (GicItsCount != 0) {
AddGICItsList (
- (EFI_ACPI_6_3_GIC_ITS_STRUCTURE *)((UINT8 *)Madt + GicItsOffset),
+ (EFI_ACPI_6_5_GIC_ITS_STRUCTURE *)((UINT8 *)Madt + GicItsOffset),
GicItsInfo,
GicItsCount
);
@@ -764,9 +769,9 @@ ACPI_TABLE_GENERATOR MadtGenerator = { // Generator Description
L"ACPI.STD.MADT.GENERATOR",
// ACPI Table Signature
- EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
+ EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
// ACPI Table Revision supported by this Generator
- EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
+ EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
// Minimum supported ACPI Table Revision
EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
// Creator ID
|