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