ShellPkg: acpiview: Check if SBBR mandatory ACPI tables are installed

For Arm-based platforms, count the instances of installed tables for
each ACPI table listed as 'mandatory' in any Server Base Boot
Requirements (SBBR) specification.

Validate that the all the mandatory SBBR tables present. Report an error
for each missing table.

This new feature is optional and can be enabled with the -r command line
parameter.

Reference(s):
    - Arm Server Base Boot Requirements 1.2, September 2019
    - Arm Server Base Boot Requirements 1.1, May 2018
    - Arm Server Base Boot Requirements 1.0, March 2016

Signed-off-by: Krzysztof Koch <krzysztof.koch@arm.com>
Reviewed-by: Sami Mujawar <Sami.Mujawar@arm.com>
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
This commit is contained in:
Krzysztof Koch 2020-03-25 17:39:24 +08:00 committed by mergify[bot]
parent f793bfcae9
commit faef5a367c
2 changed files with 38 additions and 0 deletions

View File

@ -3,6 +3,12 @@
Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Glossary:
- Sbbr or SBBR - Server Base Boot Requirements
@par Reference(s):
- Arm Server Base Boot Requirements 1.2, September 2019
**/
#include <Uefi.h>
@ -12,6 +18,10 @@
#include "AcpiTableParser.h"
#include "AcpiView.h"
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
#include "Arm/SbbrValidator.h"
#endif
/**
A list of registered ACPI table parsers.
**/
@ -216,6 +226,12 @@ ProcessAcpiTable (
}
}
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
if (GetMandatoryTableValidate ()) {
ArmSbbrIncrementTableCount (*AcpiTableSignature);
}
#endif
Status = GetParser (*AcpiTableSignature, &ParserProc);
if (EFI_ERROR (Status)) {
// No registered parser found, do default handling.

View File

@ -2,6 +2,12 @@
Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Glossary:
- Sbbr or SBBR - Server Base Boot Requirements
@par Reference(s):
- Arm Server Base Boot Requirements 1.2, September 2019
**/
#include <Library/PrintLib.h>
@ -16,6 +22,10 @@
#include "AcpiView.h"
#include "UefiShellAcpiViewCommandLib.h"
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
#include "Arm/SbbrValidator.h"
#endif
EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;
// Report variables
@ -438,6 +448,12 @@ AcpiView (
return EFI_UNSUPPORTED;
}
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
if (GetMandatoryTableValidate ()) {
ArmSbbrResetTableCounts ();
}
#endif
// The RSDP length is 4 bytes starting at offset 20
RsdpLength = *(UINT32*)(RsdpPtr + RSDP_LENGTH_OFFSET);
@ -466,6 +482,12 @@ AcpiView (
return EFI_NOT_FOUND;
}
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
if (GetMandatoryTableValidate ()) {
ArmSbbrReqsValidate ((ARM_SBBR_VERSION)GetMandatoryTableSpec ());
}
#endif
ReportOption = GetReportOption ();
if (ReportTableList != ReportOption) {
if (((ReportSelected == ReportOption) ||