ShellPkg/UefiShellAcpiViewCommandLib: Fix VS2012 build failure
[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;\r
68 \r
69   Count = sizeof (ParserList) / sizeof (ParserList[0]);\r
70 \r
71   while (Count-- != 0) {\r
72     Status = RegisterParser (\r
73                ParserList[Count].Signature,\r
74                ParserList[Count].Parser\r
75                );\r
76     if (EFI_ERROR (Status)) {\r
77       return Status;\r
78     }\r
79   }\r
80   return Status;\r
81 }\r
82 \r
83 /**\r
84   Return the file name of the help text file if not using HII.\r
85 \r
86   @return The string pointer to the file name.\r
87 **/\r
88 CONST CHAR16*\r
89 EFIAPI\r
90 ShellCommandGetManFileNameAcpiView (\r
91   VOID\r
92   )\r
93 {\r
94   return gShellAcpiViewFileName;\r
95 }\r
96 \r
97 /**\r
98   Constructor for the Shell AcpiView Command library.\r
99 \r
100   Install the handlers for acpiview UEFI Shell command.\r
101 \r
102   @param ImageHandle            The image handle of the process.\r
103   @param SystemTable            The EFI System Table pointer.\r
104 \r
105   @retval EFI_SUCCESS           The Shell command handlers were installed\r
106                                 successfully.\r
107   @retval EFI_DEVICE_ERROR      Hii package failed to install.\r
108 **/\r
109 EFI_STATUS\r
110 EFIAPI\r
111 UefiShellAcpiViewCommandLibConstructor (\r
112   IN EFI_HANDLE        ImageHandle,\r
113   IN EFI_SYSTEM_TABLE  *SystemTable\r
114   )\r
115 {\r
116   EFI_STATUS Status;\r
117   gShellAcpiViewHiiHandle = NULL;\r
118 \r
119   // Check Shell Profile Debug1 bit of the profiles mask\r
120   if ((FixedPcdGet8 (PcdShellProfileMask) & BIT1) == 0) {\r
121     return EFI_SUCCESS;\r
122   }\r
123 \r
124   Status = RegisterAllParsers ();\r
125   if (EFI_ERROR (Status)) {\r
126     Print (L"acpiview: Error failed to register parser.\n");\r
127     return Status;\r
128   }\r
129 \r
130   gShellAcpiViewHiiHandle = HiiAddPackages (\r
131                               &gShellAcpiViewHiiGuid,\r
132                               gImageHandle,\r
133                               UefiShellAcpiViewCommandLibStrings,\r
134                               NULL\r
135                               );\r
136   if (gShellAcpiViewHiiHandle == NULL) {\r
137     return EFI_DEVICE_ERROR;\r
138   }\r
139   // Install our Shell command handler\r
140   ShellCommandRegisterCommandName (\r
141     L"acpiview",\r
142     ShellCommandRunAcpiView,\r
143     ShellCommandGetManFileNameAcpiView,\r
144     0,\r
145     L"acpiview",\r
146     TRUE,\r
147     gShellAcpiViewHiiHandle,\r
148     STRING_TOKEN (STR_GET_HELP_ACPIVIEW)\r
149     );\r
150 \r
151   return EFI_SUCCESS;\r
152 }\r
153 \r
154 /**\r
155   Destructor for the library. free any resources.\r
156 \r
157   @param ImageHandle            The image handle of the process.\r
158   @param SystemTable            The EFI System Table pointer.\r
159 **/\r
160 EFI_STATUS\r
161 EFIAPI\r
162 UefiShellAcpiViewCommandLibDestructor (\r
163   IN EFI_HANDLE        ImageHandle,\r
164   IN EFI_SYSTEM_TABLE  *SystemTable\r
165   )\r
166 {\r
167   if (gShellAcpiViewHiiHandle != NULL) {\r
168     HiiRemovePackages (gShellAcpiViewHiiHandle);\r
169   }\r
170   return EFI_SUCCESS;\r
171 }\r