ShellPkg/AcpiView: Update field-validator prototype

As of now, the field-validator implemented by FNPTR_FIELD_VALIDATOR
function pointer takes two parameters, the pointer to the field and a
context pointer. For cases where the validator has to have access to the
length of the field, there is no clean way to currently do it. In order
to resolve this, this commit updates the field-validator's prototype to
take the length of the field as an additional parameter.

This enhancement allows field validators to perform more comprehensive
validation, especially when the length of the field is critical to the
validation logic. This change should improve the overall robustness and
flexibility of AcpiView.

Signed-off-by: Rohit Mathew <Rohit.Mathew@arm.com>
Cc: James Morse <james.Morse@arm.com>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Thomas Abraham <thomas.abraham@arm.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
Rohit Mathew 2023-08-22 12:20:58 +01:00 committed by mergify[bot]
parent 29619603d2
commit 107d0c3800
19 changed files with 266 additions and 137 deletions

View File

@ -1,7 +1,7 @@
/** @file
ACPI parser
Copyright (c) 2016 - 2021, Arm Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
Copyright (c) 2022, AMD Incorporated. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@ -616,7 +616,11 @@ ParseAcpi (
if (GetConsistencyChecking () &&
(Parser[Index].FieldValidator != NULL))
{
Parser[Index].FieldValidator (Ptr, Parser[Index].Context);
Parser[Index].FieldValidator (
Ptr,
Parser[Index].Length,
Parser[Index].Context
);
}
Print (L"\n");
@ -927,7 +931,11 @@ ParseAcpiBitFields (
if (GetConsistencyChecking () &&
(Parser[Index].FieldValidator != NULL))
{
Parser[Index].FieldValidator ((UINT8 *)&Data, Parser[Index].Context);
Parser[Index].FieldValidator (
(UINT8 *)&Data,
Parser[Index].Length,
Parser[Index].Context
);
}
Print (L"\n");

View File

@ -2,7 +2,7 @@
Header file for ACPI parser
Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
Copyright (c) 2016 - 2020, Arm Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
Copyright (c) 2022, AMD Incorporated. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@ -234,11 +234,16 @@ typedef VOID (EFIAPI *FNPTR_PRINT_FORMATTER)(CONST CHAR16 *Format, UINT8 *Ptr);
This function pointer is the template for validating an ACPI table field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information as specified by
the 'Context' member of the ACPI_PARSER.
e.g. this could be a pointer to the ACPI table header.
**/
typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8 *Ptr, VOID *Context);
typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(
UINT8 *Ptr,
UINT32 Length,
VOID *Context
);
/**
The ACPI_PARSER structure describes the fields of an ACPI table and

View File

@ -1,7 +1,7 @@
/** @file
AEST table parser
Copyright (c) 2020, Arm Limited.
Copyright (c) 2020 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -33,6 +33,7 @@ STATIC UINT8 *ProcessorResourceType;
Validate Processor Flags.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -40,8 +41,9 @@ STATIC
VOID
EFIAPI
ValidateProcessorFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
// If the global or shared node flag is set then the ACPI Processor ID
@ -59,6 +61,7 @@ ValidateProcessorFlags (
Validate GIC Interface Type.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -66,8 +69,9 @@ STATIC
VOID
EFIAPI
ValidateGicInterfaceType (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT32 GicInterfaceType;
@ -83,6 +87,7 @@ ValidateGicInterfaceType (
Validate Interface Type.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -90,8 +95,9 @@ STATIC
VOID
EFIAPI
ValidateInterfaceType (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*Ptr > 1) {
@ -104,6 +110,7 @@ ValidateInterfaceType (
Validate Interrupt Type.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -111,8 +118,9 @@ STATIC
VOID
EFIAPI
ValidateInterruptType (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*Ptr > 1) {
@ -125,6 +133,7 @@ ValidateInterruptType (
Validate interrupt flags.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -132,8 +141,9 @@ STATIC
VOID
EFIAPI
ValidateInterruptFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if ((*Ptr & 0xfe) != 0) {

View File

@ -1,7 +1,7 @@
/** @file
DBG2 table parser
Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -30,6 +30,7 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
This function validates the NameSpace string length.
@param [in] Ptr Pointer to the start of the buffer.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -37,8 +38,9 @@ STATIC
VOID
EFIAPI
ValidateNameSpaceStrLen (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT16 NameSpaceStrLen;

View File

@ -31,6 +31,7 @@ STATIC CONST CHAR16 *InstNameTable[] = {
This function validates the flags field in the EINJ injection header.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -38,8 +39,9 @@ STATIC
VOID
EFIAPI
ValidateInjectionFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 Flags;
@ -72,6 +74,7 @@ STATIC CONST ACPI_PARSER EinjParser[] = {
the EINJ injection instruction entry.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -79,8 +82,9 @@ STATIC
VOID
EFIAPI
ValidateInjectionAction (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 InjectionAction;
@ -113,6 +117,7 @@ ValidateInjectionAction (
the EINJ injection instruction entry.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -120,8 +125,9 @@ STATIC
VOID
EFIAPI
ValidateInstruction (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 Inst;
@ -141,6 +147,7 @@ ValidateInstruction (
the EINJ injection instruction entry.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -148,8 +155,9 @@ STATIC
VOID
EFIAPI
ValidateRegisterRegion (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE *RegisterRegion;

View File

@ -2,7 +2,7 @@
ERST table parser
Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -70,6 +70,7 @@ STATIC CONST CHAR16 *ErstInstructionTable[] = {
Validate Erst action.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -77,8 +78,9 @@ STATIC
VOID
EFIAPI
ValidateErstAction (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*Ptr > EFI_ACPI_6_4_ERST_GET_EXECUTE_OPERATION_TIMINGS) {
@ -91,6 +93,7 @@ ValidateErstAction (
Validate Erst instruction.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -98,8 +101,9 @@ STATIC
VOID
EFIAPI
ValidateErstInstruction (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*Ptr > EFI_ACPI_6_4_ERST_MOVE_DATA) {
@ -112,6 +116,7 @@ ValidateErstInstruction (
Validate Erst flags.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -119,8 +124,9 @@ STATIC
VOID
EFIAPI
ValidateErstFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if ((*Ptr & 0xfe) != 0) {

View File

@ -1,7 +1,7 @@
/** @file
FADT table parser
Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
Copyright (c) 2022, AMD Incorporated. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@ -57,6 +57,7 @@ GetAcpiXsdtHeaderInfo (
This function validates the Firmware Control Field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -64,8 +65,9 @@ STATIC
VOID
EFIAPI
ValidateFirmwareCtrl (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@ -83,6 +85,7 @@ ValidateFirmwareCtrl (
This function validates the X_Firmware Control Field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -90,8 +93,9 @@ STATIC
VOID
EFIAPI
ValidateXFirmwareCtrl (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@ -109,6 +113,7 @@ ValidateXFirmwareCtrl (
This function validates the flags.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -116,8 +121,9 @@ STATIC
VOID
EFIAPI
ValidateFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)

View File

@ -1,7 +1,7 @@
/** @file
GTDT table parser
Copyright (c) 2016 - 2021, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -30,6 +30,7 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
This function validates the GT Block timer count.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -37,8 +38,9 @@ STATIC
VOID
EFIAPI
ValidateGtBlockTimerCount (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT32 BlockTimerCount;
@ -59,6 +61,7 @@ ValidateGtBlockTimerCount (
This function validates the GT Frame Number.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -66,8 +69,9 @@ STATIC
VOID
EFIAPI
ValidateGtFrameNumber (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 FrameNumber;

View File

@ -113,6 +113,7 @@ STATIC CONST ACPI_PARSER HestErrorNotificationCweParser[] = {
This function validates the Type field of Hardware Error Notification Structure
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -120,8 +121,9 @@ STATIC
VOID
EFIAPI
ValidateErrorNotificationType (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 Type;
@ -246,6 +248,7 @@ STATIC CONST ACPI_PARSER HestErrorNotificationParser[] = {
pci related Error source structure's bus field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -253,8 +256,9 @@ STATIC
VOID
EFIAPI
ValidatePciBusReservedBits (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*Ptr != 0x00) {
@ -277,6 +281,7 @@ STATIC CONST ACPI_PARSER HestErrorSourcePciCommonBusParser[] = {
error source descriptor structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -284,8 +289,9 @@ STATIC
VOID
EFIAPI
ValidateIA32ErrorSourceFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 SourceFlags;
@ -313,6 +319,7 @@ ValidateIA32ErrorSourceFlags (
error source descriptor structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -320,8 +327,9 @@ STATIC
VOID
EFIAPI
ValidatePciErrorSourceFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 SourceFlags;
@ -342,6 +350,7 @@ ValidatePciErrorSourceFlags (
error source descriptor structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -349,8 +358,9 @@ STATIC
VOID
EFIAPI
ValidateGhesSourceFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 SourceFlags;
@ -368,6 +378,7 @@ ValidateGhesSourceFlags (
structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -375,8 +386,9 @@ STATIC
VOID
EFIAPI
ValidateEnabledField (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT8 *)Ptr > 1) {
@ -391,6 +403,7 @@ ValidateEnabledField (
structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -398,8 +411,9 @@ STATIC
VOID
EFIAPI
ValidateRecordCount (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 RecordCount;

View File

@ -1,7 +1,7 @@
/** @file
HMAT table parser
Copyright (c) 2020, Arm Limited.
Copyright (c) 2020 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -54,6 +54,7 @@ STATIC CONST CHAR16 *SllbiNames[] = {
This function validates the Cache Attributes field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -61,8 +62,9 @@ STATIC
VOID
EFIAPI
ValidateCacheAttributes (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES *

View File

@ -1,6 +1,7 @@
/** @file
HPET table parser
Copyright (c) 2024, Arm Limited. All rights reserved.
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@ -121,6 +122,7 @@ DumpCounterSize (
This function validates the flags.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -128,8 +130,9 @@ STATIC
VOID
EFIAPI
ValidateHpetRevId (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if ((*(UINT8 *)Ptr) == 0) {

View File

@ -1,7 +1,7 @@
/** @file
IORT table parser
Copyright (c) 2016 - 2022, Arm Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -46,6 +46,7 @@ STATIC CONST UINT32 *RmrMemDescOffset;
This function validates the ID Mapping array count for the ITS node.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -53,8 +54,9 @@ STATIC
VOID
EFIAPI
ValidateItsIdMappingCount (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT32 *)Ptr != 0) {
@ -68,6 +70,7 @@ ValidateItsIdMappingCount (
Monitoring Counter Group (PMCG) node.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -75,8 +78,9 @@ STATIC
VOID
EFIAPI
ValidatePmcgIdMappingCount (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT32 *)Ptr > 1) {
@ -89,6 +93,7 @@ ValidatePmcgIdMappingCount (
This function validates the ID Mapping array offset for the ITS node.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -96,8 +101,9 @@ STATIC
VOID
EFIAPI
ValidateItsIdArrayReference (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT32 *)Ptr != 0) {
@ -111,6 +117,7 @@ ValidateItsIdArrayReference (
and is 64K aligned.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -118,8 +125,9 @@ STATIC
VOID
EFIAPI
ValidatePhysicalRange (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT64 Value;
@ -135,6 +143,7 @@ ValidatePhysicalRange (
This function validates that the RMR memory range descriptor count.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -142,8 +151,9 @@ STATIC
VOID
EFIAPI
ValidateRmrMemDescCount (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT32 *)Ptr == 0) {

View File

@ -1,7 +1,7 @@
/** @file
MADT table parser
Copyright (c) 2016 - 2023, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
Copyright (c) 2022, AMD Incorporated. All rights reserved.
Copyright (c) 2024, Loongson Technology Corporation Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@ -29,6 +29,7 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
This function validates the System Vector Base in the GICD.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -36,8 +37,9 @@ STATIC
VOID
EFIAPI
ValidateGICDSystemVectorBase (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT32 *)Ptr != 0) {
@ -52,6 +54,7 @@ ValidateGICDSystemVectorBase (
This function validates the SPE Overflow Interrupt in the GICC.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -59,8 +62,9 @@ STATIC
VOID
EFIAPI
ValidateSpeOverflowInterrupt (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT16 SpeOverflowInterrupt;
@ -102,6 +106,7 @@ ValidateSpeOverflowInterrupt (
This function validates the TRBE Interrupt in the GICC.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -109,8 +114,9 @@ STATIC
VOID
EFIAPI
ValidateTrbeInterrupt (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT16 TrbeInterrupt;

View File

@ -1,7 +1,7 @@
/** @file
PCCT table parser
Copyright (c) 2021, Arm Limited.
Copyright (c) 2021 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -28,6 +28,7 @@ STATIC UINT8 *ExtendedPccSubspaceInterruptFlags;
This function validates the length coded on 4 bytes of a shared memory range
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -35,8 +36,9 @@ STATIC
VOID
EFIAPI
ValidateRangeLength4 (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT32 *)Ptr < MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN) {
@ -54,6 +56,7 @@ ValidateRangeLength4 (
This function validates the length coded on 8 bytes of a shared memory range
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -61,8 +64,9 @@ STATIC
VOID
EFIAPI
ValidateRangeLength8 (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT64 *)Ptr <= MIN_MEMORY_RANGE_LENGTH) {
@ -80,6 +84,7 @@ ValidateRangeLength8 (
This function validates address space for Memory/IO GAS.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -87,8 +92,9 @@ STATIC
VOID
EFIAPI
ValidatePccMemoryIoGas (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
switch (*(UINT8 *)Ptr) {
@ -107,6 +113,7 @@ ValidatePccMemoryIoGas (
This function validates address space for structures of types other than 0.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -114,8 +121,9 @@ STATIC
VOID
EFIAPI
ValidatePccGas (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
switch (*(UINT8 *)Ptr) {
@ -135,6 +143,7 @@ ValidatePccGas (
This function validates doorbell address space for type 4 structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -142,8 +151,9 @@ STATIC
VOID
EFIAPI
ValidatePccDoorbellGas (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
// For responder subspaces this field is optional, if not present the field
@ -158,7 +168,7 @@ ValidatePccDoorbellGas (
}
}
ValidatePccGas (Ptr, Context);
ValidatePccGas (Ptr, Length, Context);
}
/**
@ -166,6 +176,7 @@ ValidatePccDoorbellGas (
type 4 structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -173,8 +184,9 @@ STATIC
VOID
EFIAPI
ValidatePccIntAckGas (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
// If the subspace does not support interrupts or the interrupt is
@ -196,13 +208,14 @@ ValidatePccIntAckGas (
}
}
ValidatePccGas (Ptr, Context);
ValidatePccGas (Ptr, Length, Context);
}
/**
This function validates error status address space for type 4 structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -210,8 +223,9 @@ STATIC
VOID
EFIAPI
ValidatePccErrStatusGas (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
// This field is ignored by the OSPM on responder channels.
@ -219,13 +233,14 @@ ValidatePccErrStatusGas (
return;
}
ValidatePccGas (Ptr, Context);
ValidatePccGas (Ptr, Length, Context);
}
/**
This function validates platform interrupt flags for type 4 structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -233,8 +248,9 @@ STATIC
VOID
EFIAPI
ValidatePlatInterrupt (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
// If a responder subspace is present in the PCCT, then the global Platform

View File

@ -1,7 +1,7 @@
/** @file
PPTT table parser
Copyright (c) 2019 - 2021, ARM Limited. All rights reserved.
Copyright (c) 2019 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -52,6 +52,7 @@ LogCacheFlagError (
This function validates the Cache Type Structure (Type 1) Cache Flags field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -59,8 +60,9 @@ STATIC
VOID
EFIAPI
ValidateCacheFlags (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@ -115,6 +117,7 @@ ValidateCacheFlags (
field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -122,8 +125,9 @@ STATIC
VOID
EFIAPI
ValidateCacheNumberOfSets (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT32 NumberOfSets;
@ -166,6 +170,7 @@ ValidateCacheNumberOfSets (
field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -173,8 +178,9 @@ STATIC
VOID
EFIAPI
ValidateCacheAssociativity (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 Associativity;
@ -192,6 +198,7 @@ ValidateCacheAssociativity (
This function validates the Cache Type Structure (Type 1) Line size field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -199,8 +206,9 @@ STATIC
VOID
EFIAPI
ValidateCacheLineSize (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@ -237,6 +245,7 @@ ValidateCacheLineSize (
This function validates the Cache Type Structure (Type 1) Cache ID field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -244,8 +253,9 @@ STATIC
VOID
EFIAPI
ValidateCacheId (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT32 CacheId;
@ -276,6 +286,7 @@ ValidateCacheId (
This function validates the Cache Type Structure (Type 1) Attributes field.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -283,8 +294,9 @@ STATIC
VOID
EFIAPI
ValidateCacheAttributes (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
// Reference: Advanced Configuration and Power Interface (ACPI) Specification

View File

@ -1,7 +1,7 @@
/** @file
RSDP table parser
Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -19,6 +19,7 @@ STATIC CONST UINT64 *XsdtAddress;
This function validates the RSDT Address.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -26,8 +27,9 @@ STATIC
VOID
EFIAPI
ValidateRsdtAddress (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@ -55,6 +57,7 @@ ValidateRsdtAddress (
This function validates the XSDT Address.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -62,8 +65,9 @@ STATIC
VOID
EFIAPI
ValidateXsdtAddress (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)

View File

@ -1,7 +1,7 @@
/** @file
SPCR table parser
Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -22,6 +22,7 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
This function validates the Interrupt Type.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -29,8 +30,9 @@ STATIC
VOID
EFIAPI
ValidateInterruptType (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@ -55,6 +57,7 @@ ValidateInterruptType (
This function validates the Irq.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -62,8 +65,9 @@ STATIC
VOID
EFIAPI
ValidateIrq (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)

View File

@ -1,7 +1,7 @@
/** @file
SRAT table parser
Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
Copyright (c) 2016 - 2024, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
@ -25,6 +25,7 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
This function validates the Reserved field in the SRAT table header.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -32,8 +33,9 @@ STATIC
VOID
EFIAPI
ValidateSratReserved (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
if (*(UINT32 *)Ptr != 1) {
@ -47,6 +49,7 @@ ValidateSratReserved (
Affinity Structure.
@param [in] Ptr Pointer to the start of the field data.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -54,8 +57,9 @@ STATIC
VOID
EFIAPI
ValidateSratDeviceHandleType (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT8 DeviceHandleType;

View File

@ -1,6 +1,7 @@
/** @file
WSMT table parser
Copyright (c) 2024, Arm Limited. All rights reserved.
Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@ -17,7 +18,8 @@ STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
/**
This function validates the WSMT Protection flag.
@param [in] Ptr Pointer to the start of the buffer.
@param [in] Ptr Pointer to the start of the buffer.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
@ -26,8 +28,9 @@ STATIC
VOID
EFIAPI
ValidateWsmtProtectionFlag (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT32 ProtectionFlag;
@ -49,7 +52,8 @@ ValidateWsmtProtectionFlag (
/**
This function validates the reserved bits in the WSMT Protection flag.
@param [in] Ptr Pointer to the start of the buffer.
@param [in] Ptr Pointer to the start of the buffer.
@param [in] Length Length of the field.
@param [in] Context Pointer to context specific information e.g. this
could be a pointer to the ACPI table header.
**/
@ -57,8 +61,9 @@ STATIC
VOID
EFIAPI
ValidateReserved (
IN UINT8 *Ptr,
IN VOID *Context
IN UINT8 *Ptr,
IN UINT32 Length,
IN VOID *Context
)
{
UINT32 ProtectionFlag;