]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c
ShellPkg/AcpiView: Refactor configuration
[mirror_edk2.git] / ShellPkg / Library / UefiShellAcpiViewCommandLib / AcpiView.c
index f1a95b7b8f03b5b3d44fd962bf20f174ccf81c4b..b068dd4d27227954de40afccabc71481dd7c8eab 100644 (file)
@@ -20,6 +20,7 @@
 #include "AcpiParser.h"\r
 #include "AcpiTableParser.h"\r
 #include "AcpiView.h"\r
+#include "AcpiViewConfig.h"\r
 #include "UefiShellAcpiViewCommandLib.h"\r
 \r
 #if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)\r
 \r
 EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;\r
 \r
-// Report variables\r
-STATIC UINT32             mSelectedAcpiTable;\r
-STATIC CONST CHAR16*      mSelectedAcpiTableName;\r
-STATIC BOOLEAN            mSelectedAcpiTableFound;\r
-STATIC EREPORT_OPTION     mReportType;\r
 STATIC UINT32             mTableCount;\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
@@ -53,142 +45,6 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {NULL, TypeMax}\r
 };\r
 \r
-/**\r
-  This function returns the colour highlighting status.\r
-\r
-  @retval TRUE if colour highlighting is enabled.\r
-**/\r
-BOOLEAN\r
-GetColourHighlighting (\r
-  VOID\r
-  )\r
-{\r
-  return mColourHighlighting;\r
-}\r
-\r
-/**\r
-  This function sets the colour highlighting status.\r
-\r
-  @param  Highlight       The Highlight status.\r
-\r
-**/\r
-VOID\r
-SetColourHighlighting (\r
-  BOOLEAN Highlight\r
-  )\r
-{\r
-  mColourHighlighting = Highlight;\r
-}\r
-\r
-/**\r
-  This function returns the consistency checking status.\r
-\r
-  @retval TRUE if consistency checking is enabled.\r
-**/\r
-BOOLEAN\r
-GetConsistencyChecking (\r
-  VOID\r
-  )\r
-{\r
-  return mConsistencyCheck;\r
-}\r
-\r
-/**\r
-  This function sets the consistency checking status.\r
-\r
-  @param  ConsistencyChecking   The consistency checking status.\r
-\r
-**/\r
-VOID\r
-SetConsistencyChecking (\r
-  BOOLEAN 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
-  @retval Returns the report option.\r
-**/\r
-STATIC\r
-EREPORT_OPTION\r
-GetReportOption (\r
-  VOID\r
-  )\r
-{\r
-  return mReportType;\r
-}\r
-\r
-/**\r
-  This function returns the selected ACPI table.\r
-\r
-  @retval Returns signature of the selected ACPI table.\r
-**/\r
-STATIC\r
-UINT32\r
-GetSelectedAcpiTable (\r
-  VOID\r
-  )\r
-{\r
-  return mSelectedAcpiTable;\r
-}\r
-\r
 /**\r
   This function dumps the ACPI table to a file.\r
 \r
@@ -205,19 +61,21 @@ DumpAcpiTableToFile (
   IN CONST UINTN   Length\r
   )\r
 {\r
-  EFI_STATUS         Status;\r
-  CHAR16             FileNameBuffer[MAX_FILE_NAME_LEN];\r
-  SHELL_FILE_HANDLE  DumpFileHandle;\r
-  UINTN              TransferBytes;\r
+  EFI_STATUS          Status;\r
+  CHAR16              FileNameBuffer[MAX_FILE_NAME_LEN];\r
+  SHELL_FILE_HANDLE   DumpFileHandle;\r
+  UINTN               TransferBytes;\r
+  SELECTED_ACPI_TABLE *SelectedTable;\r
 \r
   DumpFileHandle = NULL;\r
   TransferBytes = Length;\r
+  GetSelectedAcpiTable (&SelectedTable);\r
 \r
   UnicodeSPrint (\r
     FileNameBuffer,\r
     sizeof (FileNameBuffer),\r
     L".\\%s%04d.bin",\r
-    mSelectedAcpiTableName,\r
+    SelectedTable->Name,\r
     mBinTableCount++\r
     );\r
 \r
@@ -273,10 +131,11 @@ ProcessTableReportOptions (
   IN CONST UINT32  Length\r
   )\r
 {\r
-  UINTN   OriginalAttribute;\r
-  UINT8*  SignaturePtr;\r
-  BOOLEAN Log;\r
-  BOOLEAN HighLight;\r
+  UINTN                OriginalAttribute;\r
+  UINT8                *SignaturePtr;\r
+  BOOLEAN              Log;\r
+  BOOLEAN              HighLight;\r
+  SELECTED_ACPI_TABLE  *SelectedTable;\r
 \r
   //\r
   // set local variables to suppress incorrect compiler/analyzer warnings\r
@@ -285,15 +144,16 @@ ProcessTableReportOptions (
   SignaturePtr = (UINT8*)(UINTN)&Signature;\r
   Log = FALSE;\r
   HighLight = GetColourHighlighting ();\r
+  GetSelectedAcpiTable (&SelectedTable);\r
 \r
   switch (GetReportOption ()) {\r
     case ReportAll:\r
       Log = TRUE;\r
       break;\r
     case ReportSelected:\r
-      if (Signature == GetSelectedAcpiTable ()) {\r
+      if (Signature == SelectedTable->Type) {\r
         Log = TRUE;\r
-        mSelectedAcpiTableFound = TRUE;\r
+        SelectedTable->Found = TRUE;\r
       }\r
       break;\r
     case ReportTableList:\r
@@ -321,8 +181,8 @@ ProcessTableReportOptions (
         );\r
       break;\r
     case ReportDumpBinFile:\r
-      if (Signature == GetSelectedAcpiTable ()) {\r
-        mSelectedAcpiTableFound = TRUE;\r
+      if (Signature == SelectedTable->Type) {\r
+        SelectedTable->Found = TRUE;\r
         DumpAcpiTableToFile (TablePtr, Length);\r
       }\r
       break;\r
@@ -356,37 +216,7 @@ ProcessTableReportOptions (
   return Log;\r
 }\r
 \r
-/**\r
-  This function converts a string to ACPI table signature.\r
-\r
-  @param [in] Str   Pointer to the string to be converted to the\r
-                    ACPI table signature.\r
 \r
-  @retval The ACPI table signature.\r
-**/\r
-STATIC\r
-UINT32\r
-ConvertStrToAcpiSignature (\r
-  IN  CONST CHAR16* Str\r
-  )\r
-{\r
-  UINT8 Index;\r
-  CHAR8 Ptr[4];\r
-\r
-  ZeroMem (Ptr, sizeof (Ptr));\r
-  Index = 0;\r
-\r
-  // Convert to Upper case and convert to ASCII\r
-  while ((Index < 4) && (Str[Index] != 0)) {\r
-    if (Str[Index] >= L'a' && Str[Index] <= L'z') {\r
-      Ptr[Index] = (CHAR8)(Str[Index] - (L'a' - L'A'));\r
-    } else {\r
-      Ptr[Index] = (CHAR8)Str[Index];\r
-    }\r
-    Index++;\r
-  }\r
-  return *(UINT32*)Ptr;\r
-}\r
 \r
 /**\r
   This function iterates the configuration table entries in the\r
@@ -417,6 +247,7 @@ AcpiView (
   UINT8                    RsdpRevision;\r
   PARSE_ACPI_TABLE_PROC    RsdpParserProc;\r
   BOOLEAN                  Trace;\r
+  SELECTED_ACPI_TABLE      *SelectedTable;\r
 \r
   //\r
   // set local variables to suppress incorrect compiler/analyzer warnings\r
@@ -428,6 +259,9 @@ AcpiView (
   ResetErrorCount ();\r
   ResetWarningCount ();\r
 \r
+  // Retrieve the user selection of ACPI table to process\r
+  GetSelectedAcpiTable (&SelectedTable);\r
+\r
   // Search the table for an entry that matches the ACPI Table Guid\r
   FoundAcpiTable = FALSE;\r
   for (Index = 0; Index < SystemTable->NumberOfTableEntries; Index++) {\r
@@ -496,7 +330,7 @@ AcpiView (
   if (ReportTableList != ReportOption) {\r
     if (((ReportSelected == ReportOption)  ||\r
          (ReportDumpBinFile == ReportOption)) &&\r
-        (!mSelectedAcpiTableFound)) {\r
+        (!SelectedTable->Found)) {\r
       Print (L"\nRequested ACPI Table not found.\n");\r
     } else if (GetConsistencyChecking () &&\r
                (ReportDumpBinFile != ReportOption)) {\r
@@ -554,17 +388,12 @@ ShellCommandRunAcpiView (
   CHAR16*            ProblemParam;\r
   SHELL_FILE_HANDLE  TmpDumpFileHandle;\r
   CONST CHAR16*      MandatoryTableSpecStr;\r
+  CONST CHAR16       *SelectedTableName;\r
 \r
   // Set Defaults\r
-  mReportType = ReportAll;\r
   mTableCount = 0;\r
   mBinTableCount = 0;\r
-  mSelectedAcpiTable = 0;\r
-  mSelectedAcpiTableName = NULL;\r
-  mSelectedAcpiTableFound = FALSE;\r
-  mConsistencyCheck = TRUE;\r
-  mMandatoryTableValidate = FALSE;\r
-  mMandatoryTableSpec = 0;\r
+  AcpiConfigSetDefaults ();\r
 \r
   ShellStatus = SHELL_SUCCESS;\r
   Package = NULL;\r
@@ -671,25 +500,23 @@ ShellCommandRunAcpiView (
       }\r
 \r
       if (ShellCommandLineGetFlag (Package, L"-l")) {\r
-        mReportType = ReportTableList;\r
+        SetReportOption (ReportTableList);\r
       } else {\r
-        mSelectedAcpiTableName = ShellCommandLineGetValue (Package, L"-s");\r
-        if (mSelectedAcpiTableName != NULL) {\r
-          mSelectedAcpiTable = (UINT32)ConvertStrToAcpiSignature (\r
-                                         mSelectedAcpiTableName\r
-                                         );\r
-          mReportType = ReportSelected;\r
+        SelectedTableName = ShellCommandLineGetValue (Package, L"-s");\r
+        if (SelectedTableName != NULL) {\r
+          SelectAcpiTable (SelectedTableName);\r
+          SetReportOption (ReportSelected);\r
 \r
           if (ShellCommandLineGetFlag (Package, L"-d"))  {\r
             // Create a temporary file to check if the media is writable.\r
             CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];\r
-            mReportType = ReportDumpBinFile;\r
+            SetReportOption (ReportDumpBinFile);\r
 \r
             UnicodeSPrint (\r
               FileNameBuffer,\r
               sizeof (FileNameBuffer),\r
               L".\\%s%04d.tmp",\r
-              mSelectedAcpiTableName,\r
+              SelectedTableName,\r
               mBinTableCount\r
               );\r
 \r