ShellPkg/AcpiView: RAS2 Parser

Add a new parser for the RAS2 Table as specified in ACPI6.5

Signed-off-by: Carsten Haitzler <carsten.haitzler@foss.arm.com>
This commit is contained in:
Carsten Haitzler 2024-08-29 15:06:08 +01:00 committed by mergify[bot]
parent dfc242c2dd
commit 1197fb3383
4 changed files with 143 additions and 0 deletions

View File

@ -1006,6 +1006,29 @@ ParseAcpiPptt (
IN UINT8 AcpiTableRevision
);
/**
This function parses the ACPI RAS2 table.
When trace is enabled this function parses the RAS2 table and
traces the ACPI table fields.
This function parses the RAS2 ACPI table along with PCC Entries
This function also performs validation of the ACPI table fields.
@param [in] Trace If TRUE, trace the ACPI fields.
@param [in] Ptr Pointer to the start of the buffer.
@param [in] AcpiTableLength Length of the ACPI table.
@param [in] AcpiTableRevision Revision of the ACPI table.
**/
VOID
EFIAPI
ParseAcpiRas2 (
IN BOOLEAN Trace,
IN UINT8 *Ptr,
IN UINT32 AcpiTableLength,
IN UINT8 AcpiTableRevision
);
/**
This function parses the ACPI RSDP table.

View File

@ -0,0 +1,118 @@
/** @file
RAS2 table parser
Copyright (c) 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
- ACPI 6.5 Specification - August 2022
**/
#include <Library/PrintLib.h>
#include <Library/BaseLib.h>
#include <Library/UefiLib.h>
#include "AcpiParser.h"
#include "AcpiView.h"
// Maximum Memory Domain matrix print size.
#define MAX_MEMORY_DOMAIN_TARGET_PRINT_MATRIX 10
// Local variables
STATIC CONST UINT16 *Ras2PccDescriptors;
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
/**
An ACPI_PARSER array describing the ACPI RAS2 Table.
*/
STATIC CONST ACPI_PARSER Ras2Parser[] = {
PARSE_ACPI_HEADER (&AcpiHdrInfo),
{ L"Reserved", 2, 36, L"0x%x", NULL, NULL, NULL, NULL },
{ L"PCC Descriptors", 2, 38, L"%d", NULL, (VOID **)&Ras2PccDescriptors, NULL, NULL }
};
/**
An ACPI_PARSER array describing the RAS2 PCC ID Entry
*/
STATIC CONST ACPI_PARSER Ras2StructurePccDescriptor[] = {
{ L"PCC ID", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
{ L"Reserved", 1, 1, L"0x%x", NULL, NULL, NULL, NULL },
{ L"Reserved", 1, 2, L"0x%x", NULL, NULL, NULL, NULL },
{ L"Feature Type", 1, 3, L"0x%x", NULL, NULL, NULL, NULL },
{ L"Instance", 4, 4, L"0x%x", NULL, NULL, NULL, NULL }
};
STATIC
VOID
DumpPccEntry (
IN UINT8 *Ptr,
IN UINT32 Length
)
{
ParseAcpi (
TRUE,
2,
"PCC Descriptor Entry",
Ptr,
Length,
PARSER_PARAMS (Ras2StructurePccDescriptor)
);
}
/**
This function parses the ACPI RAS2 table.
When trace is enabled this function parses the RAS2 table and
traces the ACPI table fields.
This function parses the following RAS2 structures:
- Pcc Instries
- Entry Pcc ID
- Entry Feature Type
- Entry Pcc Instance
This function also performs validation of the ACPI table fields.
@param [in] Trace If TRUE, trace the ACPI fields.
@param [in] Ptr Pointer to the start of the buffer.
@param [in] AcpiTableLength Length of the ACPI table.
@param [in] AcpiTableRevision Revision of the ACPI table.
**/
VOID
EFIAPI
ParseAcpiRas2 (
IN BOOLEAN Trace,
IN UINT8 *Ptr,
IN UINT32 AcpiTableLength,
IN UINT8 AcpiTableRevision
)
{
UINT32 Offset;
if (!Trace) {
return;
}
// Parse ACPI Header + RAS2 "fixed" fields
Offset = ParseAcpi (
Trace,
0,
"RAS2",
Ptr,
AcpiTableLength,
PARSER_PARAMS (Ras2Parser)
);
// Table is too small to contain data
if (Offset >= AcpiTableLength) {
return;
}
// Loop over rest of table for PCC Entries and dump them
while (Offset <= (AcpiTableLength - sizeof (EFI_ACPI_RAS2_PCC_DESCRIPTOR))) {
DumpPccEntry (
Ptr + Offset,
sizeof (EFI_ACPI_RAS2_PCC_DESCRIPTOR)
);
Offset += sizeof (EFI_ACPI_RAS2_PCC_DESCRIPTOR);
} // while
}

View File

@ -71,6 +71,7 @@ ACPI_TABLE_PARSER ParserList[] = {
ParseAcpiPcct },
{ EFI_ACPI_6_4_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE,
ParseAcpiPptt },
{ EFI_ACPI_6_5_ACPI_RAS2_FEATURE_TABLE_SIGNATURE, ParseAcpiRas2 },
{ RSDP_TABLE_INFO, ParseAcpiRsdp },
{ EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, ParseAcpiSlit },
{ EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, ParseAcpiSpcr },

View File

@ -50,6 +50,7 @@
Parsers/Pcct/PcctParser.h
Parsers/Pptt/PpttParser.c
Parsers/Pptt/PpttParser.h
Parsers/Ras2/Ras2Parser.c
Parsers/Rsdp/RsdpParser.c
Parsers/Slit/SlitParser.c
Parsers/Spcr/SpcrParser.c