]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Adds Local APIC parser to AcpiView
authorAbdul Lateef Attar <abdattar@amd.com>
Tue, 9 Aug 2022 06:49:10 +0000 (14:49 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 22 Aug 2022 09:33:56 +0000 (09:33 +0000)
Parse Type 0 or Local APIC structure.
Also parse the Local APIC Flags as bitfields.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Signed-off-by: Abdul Lateef Attar <abdattar@amd.com>
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
ShellPkg/Library/UefiShellAcpiViewCommandLib/Parsers/Madt/MadtParser.c

index aaa68c99f51457050df0c6af39ab5e4912dc729f..41edcb9ffd1da90893c04e8284ea3317a9e3b45a 100644 (file)
@@ -2,6 +2,7 @@
   MADT table parser\r
 \r
   Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.\r
+  Copyright (c) 2022, AMD Incorporated. All rights reserved.\r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
   @par Reference(s):\r
@@ -206,17 +207,65 @@ STATIC CONST ACPI_PARSER  InterruptSourceOverride[] = {
   { L"Flags",                   2, 8, L"0x%x", NULL, NULL, NULL, NULL }\r
 };\r
 \r
+STATIC CONST ACPI_PARSER  LocalApicFlags[] = {\r
+  { L"Enabled",        1,  0, L"%d", NULL, NULL, NULL, NULL },\r
+  { L"Online Capable", 1,  1, L"%d", NULL, NULL, NULL, NULL },\r
+  { L"Reserved",       30, 2, L"%d", NULL, NULL, NULL, NULL }\r
+};\r
+\r
+/**\r
+  This function traces Bit Flags fields.\r
+  If no format string is specified the Format must be NULL.\r
+\r
+  @param [in] Format  Optional format string for tracing the data.\r
+  @param [in] Ptr     Pointer to the start of the buffer.\r
+**/\r
+VOID\r
+EFIAPI\r
+DumpLocalApicBitFlags (\r
+  IN CONST CHAR16  *Format OPTIONAL,\r
+  IN UINT8         *Ptr\r
+  )\r
+{\r
+  if (Format != NULL) {\r
+    Print (Format, *(UINT32 *)Ptr);\r
+    return;\r
+  }\r
+\r
+  Print (L"0x%X\n", *(UINT32 *)Ptr);\r
+  ParseAcpiBitFields (\r
+    TRUE,\r
+    2,\r
+    NULL,\r
+    Ptr,\r
+    4,\r
+    PARSER_PARAMS (LocalApicFlags)\r
+    );\r
+}\r
+\r
+/**\r
+   An ACPI_PARSER array describing the Processor Local APIC Structure.\r
+ **/\r
+STATIC CONST ACPI_PARSER  ProcessorLocalApic[] = {\r
+  { L"Type",               1, 0, L"0x%x", NULL,                  NULL, NULL, NULL },\r
+  { L"Length",             1, 1, L"%d",   NULL,                  NULL, NULL, NULL },\r
+\r
+  { L"ACPI Processor UID", 1, 2, L"0x%x", NULL,                  NULL, NULL, NULL },\r
+  { L"APIC ID",            1, 3, L"0x%x", NULL,                  NULL, NULL, NULL },\r
+  { L"Flags",              4, 4, NULL,    DumpLocalApicBitFlags, NULL, NULL, NULL }\r
+};\r
+\r
 /**\r
   An ACPI_PARSER array describing the Processor Local x2APIC Structure.\r
 **/\r
 STATIC CONST ACPI_PARSER  ProcessorLocalX2Apic[] = {\r
-  { L"Type",               1, 0,  L"0x%x", NULL, NULL, NULL, NULL },\r
-  { L"Length",             1, 1,  L"%d",   NULL, NULL, NULL, NULL },\r
-  { L"Reserved",           2, 2,  L"0x%x", NULL, NULL, NULL, NULL },\r
+  { L"Type",               1, 0,  L"0x%x", NULL,                  NULL, NULL, NULL },\r
+  { L"Length",             1, 1,  L"%d",   NULL,                  NULL, NULL, NULL },\r
+  { L"Reserved",           2, 2,  L"0x%x", NULL,                  NULL, NULL, NULL },\r
 \r
-  { L"X2APIC ID",          4, 4,  L"0x%x", NULL, NULL, NULL, NULL },\r
-  { L"Flags",              4, 8,  L"0x%x", NULL, NULL, NULL, NULL },\r
-  { L"ACPI Processor UID", 4, 12, L"0x%x", NULL, NULL, NULL, NULL }\r
+  { L"X2APIC ID",          4, 4,  L"0x%x", NULL,                  NULL, NULL, NULL },\r
+  { L"Flags",              4, 8,  NULL,    DumpLocalApicBitFlags, NULL, NULL, NULL },\r
+  { L"ACPI Processor UID", 4, 12, L"0x%x", NULL,                  NULL, NULL, NULL }\r
 };\r
 \r
 /**\r
@@ -441,7 +490,18 @@ ParseAcpiMadt (
           );\r
         break;\r
       }\r
-\r
+      case EFI_ACPI_6_3_PROCESSOR_LOCAL_APIC:\r
+      {\r
+        ParseAcpi (\r
+          TRUE,\r
+          2,\r
+          "PROCESSOR LOCAL APIC",\r
+          InterruptContollerPtr,\r
+          *MadtInterruptControllerLength,\r
+          PARSER_PARAMS (ProcessorLocalApic)\r
+          );\r
+        break;\r
+      }\r
       case EFI_ACPI_6_3_PROCESSOR_LOCAL_X2APIC:\r
       {\r
         ParseAcpi (\r