diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c index de0851dd5f..49c2e87c43 100644 --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2016 - 2019, ARM Limited. All rights reserved. + Copyright (c) 2016 - 2020, ARM Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -27,6 +27,8 @@ STATIC UINT32 mTableCount; STATIC UINT32 mBinTableCount; STATIC BOOLEAN mConsistencyCheck; STATIC BOOLEAN mColourHighlighting; +STATIC BOOLEAN mMandatoryTableValidate; +STATIC UINTN mMandatoryTableSpec; /** An array of acpiview command line parameters. @@ -37,6 +39,7 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = { {L"-h", TypeFlag}, {L"-l", TypeFlag}, {L"-s", TypeValue}, + {L"-r", TypeValue}, {NULL, TypeMax} }; @@ -94,6 +97,60 @@ SetConsistencyChecking ( mConsistencyCheck = ConsistencyChecking; } +/** + This function returns the ACPI table requirements validation flag. + + @retval TRUE if check for mandatory table presence should be performed. +**/ +BOOLEAN +GetMandatoryTableValidate ( + VOID + ) +{ + return mMandatoryTableValidate; +} + +/** + This function sets the ACPI table requirements validation flag. + + @param Validate Enable/Disable ACPI table requirements validation. +**/ +VOID +SetMandatoryTableValidate ( + BOOLEAN Validate + ) +{ + mMandatoryTableValidate = Validate; +} + +/** + This function returns the identifier of specification to validate ACPI table + requirements against. + + @return ID of specification listing mandatory tables. +**/ +UINTN +GetMandatoryTableSpec ( + VOID + ) +{ + return mMandatoryTableSpec; +} + +/** + This function sets the identifier of specification to validate ACPI table + requirements against. + + @param Spec ID of specification listing mandatory tables. +**/ +VOID +SetMandatoryTableSpec ( + UINTN Spec + ) +{ + mMandatoryTableSpec = Spec; +} + /** This function returns the report options. @@ -470,6 +527,7 @@ ShellCommandRunAcpiView ( LIST_ENTRY* Package; CHAR16* ProblemParam; SHELL_FILE_HANDLE TmpDumpFileHandle; + CONST CHAR16* MandatoryTableSpecStr; // Set Defaults mReportType = ReportAll; @@ -479,6 +537,8 @@ ShellCommandRunAcpiView ( mSelectedAcpiTableName = NULL; mSelectedAcpiTableFound = FALSE; mConsistencyCheck = TRUE; + mMandatoryTableValidate = FALSE; + mMandatoryTableSpec = 0; ShellStatus = SHELL_SUCCESS; Package = NULL; @@ -537,6 +597,18 @@ ShellCommandRunAcpiView ( L"-s" ); ShellStatus = SHELL_INVALID_PARAMETER; + } else if (ShellCommandLineGetFlag (Package, L"-r") && + ShellCommandLineGetValue (Package, L"-r") == NULL) { + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_NO_VALUE), + gShellAcpiViewHiiHandle, + L"acpiview", + L"-r" + ); + ShellStatus = SHELL_INVALID_PARAMETER; } else if ((ShellCommandLineGetFlag (Package, L"-s") && ShellCommandLineGetFlag (Package, L"-l"))) { ShellPrintHiiEx ( @@ -568,6 +640,14 @@ ShellCommandRunAcpiView ( // Surpress consistency checking if requested SetConsistencyChecking (!ShellCommandLineGetFlag (Package, L"-q")); + // Evaluate the parameters for mandatory ACPI table presence checks + SetMandatoryTableValidate (ShellCommandLineGetFlag (Package, L"-r")); + MandatoryTableSpecStr = ShellCommandLineGetValue (Package, L"-r"); + + if (MandatoryTableSpecStr != NULL) { + SetMandatoryTableSpec (ShellHexStrToUintn (MandatoryTableSpecStr)); + } + if (ShellCommandLineGetFlag (Package, L"-l")) { mReportType = ReportTableList; } else { diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.h b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.h index b5cb274ecb..be65564c86 100644 --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.h +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.h @@ -1,7 +1,7 @@ /** @file Header file for AcpiView - Copyright (c) 2016 - 2019, ARM Limited. All rights reserved. + Copyright (c) 2016 - 2020, ARM Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -112,6 +112,48 @@ SetConsistencyChecking ( BOOLEAN ConsistencyChecking ); +/** + This function returns the ACPI table requirements validation flag. + + @retval TRUE if check for mandatory table presence should be performed. +**/ +BOOLEAN +GetMandatoryTableValidate ( + VOID + ); + +/** + This function sets the ACPI table requirements validation flag. + + @param Validate Enable/Disable ACPI table requirements validation. +**/ +VOID +SetMandatoryTableValidate ( + BOOLEAN Validate + ); + +/** + This function returns the identifier of specification to validate ACPI table + requirements against. + + @return ID of specification listing mandatory tables. +**/ +UINTN +GetMandatoryTableSpec ( + VOID + ); + +/** + This function sets the identifier of specification to validate ACPI table + requirements against. + + @param Spec ID of specification listing mandatory tables. +**/ +VOID +SetMandatoryTableSpec ( + UINTN Spec + ); + /** This function processes the table reporting options for the ACPI table. diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.uni b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.uni index 1f07b7ae20..7cd43d0518 100644 --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.uni +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.uni @@ -1,6 +1,6 @@ // /** // -// Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
+// Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
// SPDX-License-Identifier: BSD-2-Clause-Patent // // Module Name: @@ -30,7 +30,7 @@ "Display ACPI Table information.\r\n" ".SH SYNOPSIS\r\n" " \r\n" -"ACPIVIEW [[-?] | [[-l] | [-s AcpiTable [-d]]] [-q] [-h]]\r\n" +"ACPIVIEW [[-?] | [[[[-l] | [-s AcpiTable [-d]]] [-q] [-h]] [-r Spec]]]\r\n" " \r\n" ".SH OPTIONS\r\n" " \r\n" @@ -41,6 +41,12 @@ " -d - Generate a binary file dump of the specified AcpiTable.\r\n" " -q - Quiet. Suppress errors and warnings. Disables consistency checks.\r\n" " -h - Enable colour highlighting.\r\n" +" -r - Validate that all required ACPI tables are installed\r\n" +" Spec : Specification to validate against.\r\n" +" For Arm, the possible values are:\r\n" +" 0 - Server Base Boot Requirements v1.0\r\n" +" 1 - Server Base Boot Requirements v1.1\r\n" +" 2 - Server Base Boot Requirements v1.2\r\n" " -? - Show help.\r\n" " \r\n" ".SH DESCRIPTION\r\n" @@ -118,6 +124,10 @@ " * To display contents of all ACPI tables:\r\n" " fs0:\> acpiview\r\n" " \r\n" +" * To check if all Server Base Boot Requirements (SBBR) v1.2 mandatory\r\n" +" ACPI tables are installed (Arm only):\r\n" +" fs0:\> acpiview -r 2\r\n" +" \r\n" ".SH RETURNVALUES\r\n" " \r\n" "RETURN VALUES:\r\n"