mirror of https://github.com/acidanthera/audk.git
ShellPkg: acpiview: Add GT Frame Number validation to GTDT parser
The ACPI 6.2 specification mandates that the Generic Timer (GT) Block Timer Structures must have a frame number in the range 0-7. Update the GTDT parser to warn if this condition is violated. Signed-off-by: Krzysztof Koch <krzysztof.koch@arm.com> Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
This commit is contained in:
parent
fb5573b830
commit
8da8daafc9
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
GTDT table parser
|
||||
|
||||
Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
|
||||
Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Reference(s):
|
||||
|
@ -38,6 +38,21 @@ ValidateGtBlockTimerCount (
|
|||
IN VOID* Context
|
||||
);
|
||||
|
||||
/**
|
||||
This function validates the GT Frame Number.
|
||||
|
||||
@param [in] Ptr Pointer to the start of the field data.
|
||||
@param [in] Context Pointer to context specific information e.g. this
|
||||
could be a pointer to the ACPI table header.
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
EFIAPI
|
||||
ValidateGtFrameNumber (
|
||||
IN UINT8* Ptr,
|
||||
IN VOID* Context
|
||||
);
|
||||
|
||||
/**
|
||||
An ACPI_PARSER array describing the ACPI GTDT Table.
|
||||
**/
|
||||
|
@ -92,7 +107,7 @@ STATIC CONST ACPI_PARSER GtBlockParser[] = {
|
|||
An ACPI_PARSER array describing the GT Block timer.
|
||||
**/
|
||||
STATIC CONST ACPI_PARSER GtBlockTimerParser[] = {
|
||||
{L"Frame Number", 1, 0, L"%d", NULL, NULL, NULL, NULL},
|
||||
{L"Frame Number", 1, 0, L"%d", NULL, NULL, ValidateGtFrameNumber, NULL},
|
||||
{L"Reserved", 3, 1, L"%x %x %x", Dump3Chars, NULL, NULL, NULL},
|
||||
{L"Physical address (CntBaseX)", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL},
|
||||
{L"Physical address (CntEL0BaseX)", 8, 12, L"0x%lx", NULL, NULL, NULL,
|
||||
|
@ -145,6 +160,34 @@ ValidateGtBlockTimerCount (
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
This function validates the GT Frame Number.
|
||||
|
||||
@param [in] Ptr Pointer to the start of the field data.
|
||||
@param [in] Context Pointer to context specific information e.g. this
|
||||
could be a pointer to the ACPI table header.
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
EFIAPI
|
||||
ValidateGtFrameNumber (
|
||||
IN UINT8* Ptr,
|
||||
IN VOID* Context
|
||||
)
|
||||
{
|
||||
UINT8 FrameNumber;
|
||||
|
||||
FrameNumber = *(UINT8*)Ptr;
|
||||
|
||||
if (FrameNumber > 7) {
|
||||
IncrementErrorCount ();
|
||||
Print (
|
||||
L"\nERROR: GT Frame Number = %d. GT Frame Number must be in range 0-7.",
|
||||
FrameNumber
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
This function parses the Platform GT Block.
|
||||
|
||||
|
|
Loading…
Reference in New Issue