ShellPkg/UefiShellAcpiViewCommandLib: Fix ECC issues
[mirror_edk2.git] / ShellPkg / Library / UefiShellAcpiViewCommandLib / UefiShellAcpiViewCommandLib.c
1 /** @file\r
2   Main file for 'acpiview' Shell command function.\r
3 \r
4   Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>\r
5   This program and the accompanying materials\r
6   are licensed and made available under the terms and conditions of the BSD License\r
7   which accompanies this distribution.  The full text of the license may be found at\r
8   http://opensource.org/licenses/bsd-license.php\r
9 \r
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12 **/\r
13 \r
14 #include <Guid/ShellLibHiiGuid.h>\r
15 #include <IndustryStandard/Acpi.h>\r
16 #include <Library/HiiLib.h>\r
17 #include <Library/ShellCommandLib.h>\r
18 #include <Library/UefiLib.h>\r
19 #include <Library/UefiBootServicesTableLib.h>\r
20 #include <Uefi.h>\r
21 #include "AcpiParser.h"\r
22 #include "AcpiTableParser.h"\r
23 #include "AcpiView.h"\r
24 #include "UefiShellAcpiViewCommandLib.h"\r
25 \r
26 CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";\r
27 \r
28 /**\r
29   A list of available table parsers.\r
30 */\r
31 STATIC\r
32 CONST\r
33 ACPI_TABLE_PARSER ParserList[] = {\r
34   {EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE, ParseAcpiBgrt},\r
35   {EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, ParseAcpiDbg2},\r
36   {EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,\r
37    ParseAcpiDsdt},\r
38   {EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiFadt},\r
39   {EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiGtdt},\r
40   {EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE, ParseAcpiIort},\r
41   {EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiMadt},\r
42   {EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,\r
43    ParseAcpiMcfg},\r
44   {RSDP_TABLE_INFO, ParseAcpiRsdp},\r
45   {EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, ParseAcpiSlit},\r
46   {EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, ParseAcpiSpcr},\r
47   {EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, ParseAcpiSrat},\r
48   {EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiSsdt},\r
49   {EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiXsdt}\r
50 };\r
51 \r
52 /**\r
53   This function registers all the available table parsers.\r
54 \r
55   @retval EFI_SUCCESS           The parser is registered.\r
56   @retval EFI_ALREADY_STARTED   The parser for the ACPI Table\r
57                                 was already registered.\r
58   @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
59   @retval EFI_OUT_OF_RESOURCES  No space to register the\r
60                                 parser.\r
61 **/\r
62 EFI_STATUS\r
63 RegisterAllParsers (\r
64   )\r
65 {\r
66   EFI_STATUS Status;\r
67   UINTN Count = sizeof (ParserList) / sizeof (ParserList[0]);\r
68   while (Count-- != 0) {\r
69     Status = RegisterParser (\r
70                ParserList[Count].Signature,\r
71                ParserList[Count].Parser\r
72                );\r
73     if (EFI_ERROR (Status)) {\r
74       return Status;\r
75     }\r
76   }\r
77   return Status;\r
78 }\r
79 \r
80 /**\r
81   Return the file name of the help text file if not using HII.\r
82 \r
83   @return The string pointer to the file name.\r
84 **/\r
85 CONST CHAR16*\r
86 EFIAPI\r
87 ShellCommandGetManFileNameAcpiView (\r
88   VOID\r
89   )\r
90 {\r
91   return gShellAcpiViewFileName;\r
92 }\r
93 \r
94 /**\r
95   Constructor for the Shell AcpiView Command library.\r
96 \r
97   Install the handlers for acpiview UEFI Shell command.\r
98 \r
99   @param ImageHandle            The image handle of the process.\r
100   @param SystemTable            The EFI System Table pointer.\r
101 \r
102   @retval EFI_SUCCESS           The Shell command handlers were installed\r
103                                 successfully.\r
104   @retval EFI_DEVICE_ERROR      Hii package failed to install.\r
105 **/\r
106 EFI_STATUS\r
107 EFIAPI\r
108 UefiShellAcpiViewCommandLibConstructor (\r
109   IN EFI_HANDLE        ImageHandle,\r
110   IN EFI_SYSTEM_TABLE  *SystemTable\r
111   )\r
112 {\r
113   EFI_STATUS Status;\r
114   gShellAcpiViewHiiHandle = NULL;\r
115 \r
116   // Check Shell Profile Debug1 bit of the profiles mask\r
117   if ((FixedPcdGet8 (PcdShellProfileMask) & BIT1) == 0) {\r
118     return EFI_SUCCESS;\r
119   }\r
120 \r
121   Status = RegisterAllParsers ();\r
122   if (EFI_ERROR (Status)) {\r
123     Print (L"acpiview: Error failed to register parser.\n");\r
124     return Status;\r
125   }\r
126 \r
127   gShellAcpiViewHiiHandle = HiiAddPackages (\r
128                               &gShellAcpiViewHiiGuid,\r
129                               gImageHandle,\r
130                               UefiShellAcpiViewCommandLibStrings,\r
131                               NULL\r
132                               );\r
133   if (gShellAcpiViewHiiHandle == NULL) {\r
134     return EFI_DEVICE_ERROR;\r
135   }\r
136   // Install our Shell command handler\r
137   ShellCommandRegisterCommandName (\r
138     L"acpiview",\r
139     ShellCommandRunAcpiView,\r
140     ShellCommandGetManFileNameAcpiView,\r
141     0,\r
142     L"acpiview",\r
143     TRUE,\r
144     gShellAcpiViewHiiHandle,\r
145     STRING_TOKEN (STR_GET_HELP_ACPIVIEW)\r
146     );\r
147 \r
148   return EFI_SUCCESS;\r
149 }\r
150 \r
151 /**\r
152   Destructor for the library. free any resources.\r
153 \r
154   @param ImageHandle            The image handle of the process.\r
155   @param SystemTable            The EFI System Table pointer.\r
156 **/\r
157 EFI_STATUS\r
158 EFIAPI\r
159 UefiShellAcpiViewCommandLibDestructor (\r
160   IN EFI_HANDLE        ImageHandle,\r
161   IN EFI_SYSTEM_TABLE  *SystemTable\r
162   )\r
163 {\r
164   if (gShellAcpiViewHiiHandle != NULL) {\r
165     HiiRemovePackages (gShellAcpiViewHiiHandle);\r
166   }\r
167   return EFI_SUCCESS;\r
168 }\r