]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.c
ShellBinPkg: Replace BSD License with BSD+Patent License
[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
ee4dc24f
RN
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
26CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";\r
27\r
28/**\r
29 A list of available table parsers.\r
30*/\r
31STATIC\r
32CONST\r
33ACPI_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
d4d2fdf2
KK
44 {EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE,\r
45 ParseAcpiPptt},\r
ee4dc24f
RN
46 {RSDP_TABLE_INFO, ParseAcpiRsdp},\r
47 {EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, ParseAcpiSlit},\r
48 {EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, ParseAcpiSpcr},\r
49 {EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, ParseAcpiSrat},\r
50 {EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiSsdt},\r
51 {EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiXsdt}\r
52};\r
53\r
a6eaba4d
DB
54/**\r
55 This function registers all the available table parsers.\r
ee4dc24f
RN
56\r
57 @retval EFI_SUCCESS The parser is registered.\r
58 @retval EFI_ALREADY_STARTED The parser for the ACPI Table\r
59 was already registered.\r
60 @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
61 @retval EFI_OUT_OF_RESOURCES No space to register the\r
62 parser.\r
a6eaba4d 63**/\r
ee4dc24f
RN
64EFI_STATUS\r
65RegisterAllParsers (\r
66 )\r
67{\r
68 EFI_STATUS Status;\r
f75c7478
DB
69 UINTN Count;\r
70\r
7343bc80 71 Status = EFI_SUCCESS;\r
f75c7478
DB
72 Count = sizeof (ParserList) / sizeof (ParserList[0]);\r
73\r
ee4dc24f
RN
74 while (Count-- != 0) {\r
75 Status = RegisterParser (\r
76 ParserList[Count].Signature,\r
77 ParserList[Count].Parser\r
78 );\r
79 if (EFI_ERROR (Status)) {\r
80 return Status;\r
81 }\r
82 }\r
83 return Status;\r
84}\r
85\r
86/**\r
87 Return the file name of the help text file if not using HII.\r
88\r
89 @return The string pointer to the file name.\r
a6eaba4d 90**/\r
ee4dc24f
RN
91CONST CHAR16*\r
92EFIAPI\r
93ShellCommandGetManFileNameAcpiView (\r
94 VOID\r
95 )\r
96{\r
97 return gShellAcpiViewFileName;\r
98}\r
99\r
100/**\r
101 Constructor for the Shell AcpiView Command library.\r
102\r
103 Install the handlers for acpiview UEFI Shell command.\r
104\r
105 @param ImageHandle The image handle of the process.\r
106 @param SystemTable The EFI System Table pointer.\r
107\r
108 @retval EFI_SUCCESS The Shell command handlers were installed\r
109 successfully.\r
110 @retval EFI_DEVICE_ERROR Hii package failed to install.\r
a6eaba4d 111**/\r
ee4dc24f
RN
112EFI_STATUS\r
113EFIAPI\r
114UefiShellAcpiViewCommandLibConstructor (\r
115 IN EFI_HANDLE ImageHandle,\r
116 IN EFI_SYSTEM_TABLE *SystemTable\r
117 )\r
118{\r
119 EFI_STATUS Status;\r
120 gShellAcpiViewHiiHandle = NULL;\r
121\r
122 // Check Shell Profile Debug1 bit of the profiles mask\r
81038d50 123 if ((PcdGet8 (PcdShellProfileMask) & BIT1) == 0) {\r
ee4dc24f
RN
124 return EFI_SUCCESS;\r
125 }\r
126\r
127 Status = RegisterAllParsers ();\r
128 if (EFI_ERROR (Status)) {\r
129 Print (L"acpiview: Error failed to register parser.\n");\r
130 return Status;\r
131 }\r
132\r
133 gShellAcpiViewHiiHandle = HiiAddPackages (\r
134 &gShellAcpiViewHiiGuid,\r
135 gImageHandle,\r
136 UefiShellAcpiViewCommandLibStrings,\r
137 NULL\r
138 );\r
139 if (gShellAcpiViewHiiHandle == NULL) {\r
140 return EFI_DEVICE_ERROR;\r
141 }\r
142 // Install our Shell command handler\r
143 ShellCommandRegisterCommandName (\r
144 L"acpiview",\r
145 ShellCommandRunAcpiView,\r
146 ShellCommandGetManFileNameAcpiView,\r
147 0,\r
148 L"acpiview",\r
149 TRUE,\r
150 gShellAcpiViewHiiHandle,\r
151 STRING_TOKEN (STR_GET_HELP_ACPIVIEW)\r
152 );\r
153\r
154 return EFI_SUCCESS;\r
155}\r
156\r
157/**\r
158 Destructor for the library. free any resources.\r
159\r
160 @param ImageHandle The image handle of the process.\r
161 @param SystemTable The EFI System Table pointer.\r
a6eaba4d 162**/\r
ee4dc24f
RN
163EFI_STATUS\r
164EFIAPI\r
165UefiShellAcpiViewCommandLibDestructor (\r
166 IN EFI_HANDLE ImageHandle,\r
167 IN EFI_SYSTEM_TABLE *SystemTable\r
168 )\r
169{\r
170 if (gShellAcpiViewHiiHandle != NULL) {\r
171 HiiRemovePackages (gShellAcpiViewHiiHandle);\r
172 }\r
173 return EFI_SUCCESS;\r
174}\r