2 Main file for 'acpiview' Shell command function.
4 Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 #include <Guid/ShellLibHiiGuid.h>
15 #include <IndustryStandard/Acpi.h>
16 #include <Library/HiiLib.h>
17 #include <Library/ShellCommandLib.h>
18 #include <Library/UefiLib.h>
19 #include <Library/UefiBootServicesTableLib.h>
21 #include "AcpiParser.h"
22 #include "AcpiTableParser.h"
24 #include "UefiShellAcpiViewCommandLib.h"
26 CONST CHAR16 gShellAcpiViewFileName
[] = L
"ShellCommand";
29 A list of available table parsers.
33 ACPI_TABLE_PARSER ParserList
[] = {
34 {EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE
, ParseAcpiBgrt
},
35 {EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE
, ParseAcpiDbg2
},
36 {EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE
,
38 {EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiFadt
},
39 {EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiGtdt
},
40 {EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE
, ParseAcpiIort
},
41 {EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiMadt
},
42 {EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE
,
44 {RSDP_TABLE_INFO
, ParseAcpiRsdp
},
45 {EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE
, ParseAcpiSlit
},
46 {EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE
, ParseAcpiSpcr
},
47 {EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE
, ParseAcpiSrat
},
48 {EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiSsdt
},
49 {EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE
, ParseAcpiXsdt
}
53 This function registers all the available table parsers.
55 @retval EFI_SUCCESS The parser is registered.
56 @retval EFI_ALREADY_STARTED The parser for the ACPI Table
57 was already registered.
58 @retval EFI_INVALID_PARAMETER A parameter is invalid.
59 @retval EFI_OUT_OF_RESOURCES No space to register the
69 Count
= sizeof (ParserList
) / sizeof (ParserList
[0]);
71 while (Count
-- != 0) {
72 Status
= RegisterParser (
73 ParserList
[Count
].Signature
,
74 ParserList
[Count
].Parser
76 if (EFI_ERROR (Status
)) {
84 Return the file name of the help text file if not using HII.
86 @return The string pointer to the file name.
90 ShellCommandGetManFileNameAcpiView (
94 return gShellAcpiViewFileName
;
98 Constructor for the Shell AcpiView Command library.
100 Install the handlers for acpiview UEFI Shell command.
102 @param ImageHandle The image handle of the process.
103 @param SystemTable The EFI System Table pointer.
105 @retval EFI_SUCCESS The Shell command handlers were installed
107 @retval EFI_DEVICE_ERROR Hii package failed to install.
111 UefiShellAcpiViewCommandLibConstructor (
112 IN EFI_HANDLE ImageHandle
,
113 IN EFI_SYSTEM_TABLE
*SystemTable
117 gShellAcpiViewHiiHandle
= NULL
;
119 // Check Shell Profile Debug1 bit of the profiles mask
120 if ((FixedPcdGet8 (PcdShellProfileMask
) & BIT1
) == 0) {
124 Status
= RegisterAllParsers ();
125 if (EFI_ERROR (Status
)) {
126 Print (L
"acpiview: Error failed to register parser.\n");
130 gShellAcpiViewHiiHandle
= HiiAddPackages (
131 &gShellAcpiViewHiiGuid
,
133 UefiShellAcpiViewCommandLibStrings
,
136 if (gShellAcpiViewHiiHandle
== NULL
) {
137 return EFI_DEVICE_ERROR
;
139 // Install our Shell command handler
140 ShellCommandRegisterCommandName (
142 ShellCommandRunAcpiView
,
143 ShellCommandGetManFileNameAcpiView
,
147 gShellAcpiViewHiiHandle
,
148 STRING_TOKEN (STR_GET_HELP_ACPIVIEW
)
155 Destructor for the library. free any resources.
157 @param ImageHandle The image handle of the process.
158 @param SystemTable The EFI System Table pointer.
162 UefiShellAcpiViewCommandLibDestructor (
163 IN EFI_HANDLE ImageHandle
,
164 IN EFI_SYSTEM_TABLE
*SystemTable
167 if (gShellAcpiViewHiiHandle
!= NULL
) {
168 HiiRemovePackages (gShellAcpiViewHiiHandle
);