2 Main file for 'acpiview' Shell command function.
4 Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
8 #include <Guid/ShellLibHiiGuid.h>
9 #include <IndustryStandard/Acpi.h>
10 #include <Library/HiiLib.h>
11 #include <Library/ShellCommandLib.h>
12 #include <Library/UefiLib.h>
13 #include <Library/UefiBootServicesTableLib.h>
15 #include "AcpiParser.h"
16 #include "AcpiTableParser.h"
18 #include "UefiShellAcpiViewCommandLib.h"
20 CONST CHAR16 gShellAcpiViewFileName
[] = L
"ShellCommand";
23 A list of available table parsers.
27 ACPI_TABLE_PARSER ParserList
[] = {
28 {EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE
, ParseAcpiBgrt
},
29 {EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE
, ParseAcpiDbg2
},
30 {EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE
,
32 {EFI_ACPI_6_3_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE
, ParseAcpiFacs
},
33 {EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiFadt
},
34 {EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiGtdt
},
35 {EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE
, ParseAcpiIort
},
36 {EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiMadt
},
37 {EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE
,
39 {EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE
,
41 {RSDP_TABLE_INFO
, ParseAcpiRsdp
},
42 {EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE
, ParseAcpiSlit
},
43 {EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE
, ParseAcpiSpcr
},
44 {EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE
, ParseAcpiSrat
},
45 {EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiSsdt
},
46 {EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiXsdt
}
50 This function registers all the available table parsers.
52 @retval EFI_SUCCESS The parser is registered.
53 @retval EFI_ALREADY_STARTED The parser for the ACPI Table
54 was already registered.
55 @retval EFI_INVALID_PARAMETER A parameter is invalid.
56 @retval EFI_OUT_OF_RESOURCES No space to register the
67 Count
= sizeof (ParserList
) / sizeof (ParserList
[0]);
69 while (Count
-- != 0) {
70 Status
= RegisterParser (
71 ParserList
[Count
].Signature
,
72 ParserList
[Count
].Parser
74 if (EFI_ERROR (Status
)) {
82 Return the file name of the help text file if not using HII.
84 @return The string pointer to the file name.
88 ShellCommandGetManFileNameAcpiView (
92 return gShellAcpiViewFileName
;
96 Constructor for the Shell AcpiView Command library.
98 Install the handlers for acpiview UEFI Shell command.
100 @param ImageHandle The image handle of the process.
101 @param SystemTable The EFI System Table pointer.
103 @retval EFI_SUCCESS The Shell command handlers were installed
105 @retval EFI_DEVICE_ERROR Hii package failed to install.
109 UefiShellAcpiViewCommandLibConstructor (
110 IN EFI_HANDLE ImageHandle
,
111 IN EFI_SYSTEM_TABLE
*SystemTable
115 gShellAcpiViewHiiHandle
= NULL
;
117 // Check Shell Profile Debug1 bit of the profiles mask
118 if ((PcdGet8 (PcdShellProfileMask
) & BIT1
) == 0) {
122 Status
= RegisterAllParsers ();
123 if (EFI_ERROR (Status
)) {
124 Print (L
"acpiview: Error failed to register parser.\n");
128 gShellAcpiViewHiiHandle
= HiiAddPackages (
129 &gShellAcpiViewHiiGuid
,
131 UefiShellAcpiViewCommandLibStrings
,
134 if (gShellAcpiViewHiiHandle
== NULL
) {
135 return EFI_DEVICE_ERROR
;
137 // Install our Shell command handler
138 ShellCommandRegisterCommandName (
140 ShellCommandRunAcpiView
,
141 ShellCommandGetManFileNameAcpiView
,
145 gShellAcpiViewHiiHandle
,
146 STRING_TOKEN (STR_GET_HELP_ACPIVIEW
)
153 Destructor for the library. free any resources.
155 @param ImageHandle The image handle of the process.
156 @param SystemTable The EFI System Table pointer.
160 UefiShellAcpiViewCommandLibDestructor (
161 IN EFI_HANDLE ImageHandle
,
162 IN EFI_SYSTEM_TABLE
*SystemTable
165 if (gShellAcpiViewHiiHandle
!= NULL
) {
166 HiiRemovePackages (gShellAcpiViewHiiHandle
);