]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c
ShellPkg: acpiview: Add -r parameter for table requirements validation
[mirror_edk2.git] / ShellPkg / Library / UefiShellAcpiViewCommandLib / AcpiView.c
index de0851dd5fbae51308def95bd4964f792fb9e680..49c2e87c430d7fb57793f6405ebee91cb8f6cbaa 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
 /** @file\r
 \r
-  Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.\r
+  Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.\r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
@@ -27,6 +27,8 @@ STATIC UINT32             mTableCount;
 STATIC UINT32             mBinTableCount;\r
 STATIC BOOLEAN            mConsistencyCheck;\r
 STATIC BOOLEAN            mColourHighlighting;\r
 STATIC UINT32             mBinTableCount;\r
 STATIC BOOLEAN            mConsistencyCheck;\r
 STATIC BOOLEAN            mColourHighlighting;\r
+STATIC BOOLEAN            mMandatoryTableValidate;\r
+STATIC UINTN              mMandatoryTableSpec;\r
 \r
 /**\r
   An array of acpiview command line parameters.\r
 \r
 /**\r
   An array of acpiview command line parameters.\r
@@ -37,6 +39,7 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {L"-h", TypeFlag},\r
   {L"-l", TypeFlag},\r
   {L"-s", TypeValue},\r
   {L"-h", TypeFlag},\r
   {L"-l", TypeFlag},\r
   {L"-s", TypeValue},\r
+  {L"-r", TypeValue},\r
   {NULL, TypeMax}\r
 };\r
 \r
   {NULL, TypeMax}\r
 };\r
 \r
@@ -94,6 +97,60 @@ SetConsistencyChecking (
   mConsistencyCheck = ConsistencyChecking;\r
 }\r
 \r
   mConsistencyCheck = ConsistencyChecking;\r
 }\r
 \r
+/**\r
+  This function returns the ACPI table requirements validation flag.\r
+\r
+  @retval TRUE if check for mandatory table presence should be performed.\r
+**/\r
+BOOLEAN\r
+GetMandatoryTableValidate (\r
+  VOID\r
+  )\r
+{\r
+  return mMandatoryTableValidate;\r
+}\r
+\r
+/**\r
+  This function sets the ACPI table requirements validation flag.\r
+\r
+  @param  Validate    Enable/Disable ACPI table requirements validation.\r
+**/\r
+VOID\r
+SetMandatoryTableValidate (\r
+  BOOLEAN Validate\r
+  )\r
+{\r
+  mMandatoryTableValidate = Validate;\r
+}\r
+\r
+/**\r
+  This function returns the identifier of specification to validate ACPI table\r
+  requirements against.\r
+\r
+  @return   ID of specification listing mandatory tables.\r
+**/\r
+UINTN\r
+GetMandatoryTableSpec (\r
+  VOID\r
+  )\r
+{\r
+  return mMandatoryTableSpec;\r
+}\r
+\r
+/**\r
+  This function sets the identifier of specification to validate ACPI table\r
+  requirements against.\r
+\r
+  @param  Spec      ID of specification listing mandatory tables.\r
+**/\r
+VOID\r
+SetMandatoryTableSpec (\r
+  UINTN Spec\r
+  )\r
+{\r
+  mMandatoryTableSpec = Spec;\r
+}\r
+\r
 /**\r
   This function returns the report options.\r
 \r
 /**\r
   This function returns the report options.\r
 \r
@@ -470,6 +527,7 @@ ShellCommandRunAcpiView (
   LIST_ENTRY*        Package;\r
   CHAR16*            ProblemParam;\r
   SHELL_FILE_HANDLE  TmpDumpFileHandle;\r
   LIST_ENTRY*        Package;\r
   CHAR16*            ProblemParam;\r
   SHELL_FILE_HANDLE  TmpDumpFileHandle;\r
+  CONST CHAR16*      MandatoryTableSpecStr;\r
 \r
   // Set Defaults\r
   mReportType = ReportAll;\r
 \r
   // Set Defaults\r
   mReportType = ReportAll;\r
@@ -479,6 +537,8 @@ ShellCommandRunAcpiView (
   mSelectedAcpiTableName = NULL;\r
   mSelectedAcpiTableFound = FALSE;\r
   mConsistencyCheck = TRUE;\r
   mSelectedAcpiTableName = NULL;\r
   mSelectedAcpiTableFound = FALSE;\r
   mConsistencyCheck = TRUE;\r
+  mMandatoryTableValidate = FALSE;\r
+  mMandatoryTableSpec = 0;\r
 \r
   ShellStatus = SHELL_SUCCESS;\r
   Package = NULL;\r
 \r
   ShellStatus = SHELL_SUCCESS;\r
   Package = NULL;\r
@@ -537,6 +597,18 @@ ShellCommandRunAcpiView (
         L"-s"\r
         );\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
         L"-s"\r
         );\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
+    } else if (ShellCommandLineGetFlag (Package, L"-r") &&\r
+               ShellCommandLineGetValue (Package, L"-r") == NULL) {\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_GEN_NO_VALUE),\r
+        gShellAcpiViewHiiHandle,\r
+        L"acpiview",\r
+        L"-r"\r
+        );\r
+      ShellStatus = SHELL_INVALID_PARAMETER;\r
     } else if ((ShellCommandLineGetFlag (Package, L"-s") &&\r
                 ShellCommandLineGetFlag (Package, L"-l"))) {\r
       ShellPrintHiiEx (\r
     } else if ((ShellCommandLineGetFlag (Package, L"-s") &&\r
                 ShellCommandLineGetFlag (Package, L"-l"))) {\r
       ShellPrintHiiEx (\r
@@ -568,6 +640,14 @@ ShellCommandRunAcpiView (
       // Surpress consistency checking if requested\r
       SetConsistencyChecking (!ShellCommandLineGetFlag (Package, L"-q"));\r
 \r
       // Surpress consistency checking if requested\r
       SetConsistencyChecking (!ShellCommandLineGetFlag (Package, L"-q"));\r
 \r
+      // Evaluate the parameters for mandatory ACPI table presence checks\r
+      SetMandatoryTableValidate (ShellCommandLineGetFlag (Package, L"-r"));\r
+      MandatoryTableSpecStr = ShellCommandLineGetValue (Package, L"-r");\r
+\r
+      if (MandatoryTableSpecStr != NULL) {\r
+        SetMandatoryTableSpec (ShellHexStrToUintn (MandatoryTableSpecStr));\r
+      }\r
+\r
       if (ShellCommandLineGetFlag (Package, L"-l")) {\r
         mReportType = ReportTableList;\r
       } else {\r
       if (ShellCommandLineGetFlag (Package, L"-l")) {\r
         mReportType = ReportTableList;\r
       } else {\r