]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.c
c2f40009eeb9b3ac401b481b283f5803797e8261
[mirror_edk2.git] / ShellPkg / Library / UefiShellAcpiViewCommandLib / UefiShellAcpiViewCommandLib.c
1 /** @file
2 Main file for 'acpiview' Shell command function.
3
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
9
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.
12 **/
13
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>
20 #include <Uefi.h>
21 #include "AcpiParser.h"
22 #include "AcpiTableParser.h"
23 #include "AcpiView.h"
24 #include "UefiShellAcpiViewCommandLib.h"
25
26 CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";
27
28 /**
29 A list of available table parsers.
30 */
31 STATIC
32 CONST
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,
37 ParseAcpiDsdt},
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,
43 ParseAcpiMcfg},
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}
50 };
51
52 /**
53 This function registers all the available table parsers.
54
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
60 parser.
61 **/
62 EFI_STATUS
63 RegisterAllParsers (
64 )
65 {
66 EFI_STATUS Status;
67 UINTN Count;
68
69 Count = sizeof (ParserList) / sizeof (ParserList[0]);
70
71 while (Count-- != 0) {
72 Status = RegisterParser (
73 ParserList[Count].Signature,
74 ParserList[Count].Parser
75 );
76 if (EFI_ERROR (Status)) {
77 return Status;
78 }
79 }
80 return Status;
81 }
82
83 /**
84 Return the file name of the help text file if not using HII.
85
86 @return The string pointer to the file name.
87 **/
88 CONST CHAR16*
89 EFIAPI
90 ShellCommandGetManFileNameAcpiView (
91 VOID
92 )
93 {
94 return gShellAcpiViewFileName;
95 }
96
97 /**
98 Constructor for the Shell AcpiView Command library.
99
100 Install the handlers for acpiview UEFI Shell command.
101
102 @param ImageHandle The image handle of the process.
103 @param SystemTable The EFI System Table pointer.
104
105 @retval EFI_SUCCESS The Shell command handlers were installed
106 successfully.
107 @retval EFI_DEVICE_ERROR Hii package failed to install.
108 **/
109 EFI_STATUS
110 EFIAPI
111 UefiShellAcpiViewCommandLibConstructor (
112 IN EFI_HANDLE ImageHandle,
113 IN EFI_SYSTEM_TABLE *SystemTable
114 )
115 {
116 EFI_STATUS Status;
117 gShellAcpiViewHiiHandle = NULL;
118
119 // Check Shell Profile Debug1 bit of the profiles mask
120 if ((FixedPcdGet8 (PcdShellProfileMask) & BIT1) == 0) {
121 return EFI_SUCCESS;
122 }
123
124 Status = RegisterAllParsers ();
125 if (EFI_ERROR (Status)) {
126 Print (L"acpiview: Error failed to register parser.\n");
127 return Status;
128 }
129
130 gShellAcpiViewHiiHandle = HiiAddPackages (
131 &gShellAcpiViewHiiGuid,
132 gImageHandle,
133 UefiShellAcpiViewCommandLibStrings,
134 NULL
135 );
136 if (gShellAcpiViewHiiHandle == NULL) {
137 return EFI_DEVICE_ERROR;
138 }
139 // Install our Shell command handler
140 ShellCommandRegisterCommandName (
141 L"acpiview",
142 ShellCommandRunAcpiView,
143 ShellCommandGetManFileNameAcpiView,
144 0,
145 L"acpiview",
146 TRUE,
147 gShellAcpiViewHiiHandle,
148 STRING_TOKEN (STR_GET_HELP_ACPIVIEW)
149 );
150
151 return EFI_SUCCESS;
152 }
153
154 /**
155 Destructor for the library. free any resources.
156
157 @param ImageHandle The image handle of the process.
158 @param SystemTable The EFI System Table pointer.
159 **/
160 EFI_STATUS
161 EFIAPI
162 UefiShellAcpiViewCommandLibDestructor (
163 IN EFI_HANDLE ImageHandle,
164 IN EFI_SYSTEM_TABLE *SystemTable
165 )
166 {
167 if (gShellAcpiViewHiiHandle != NULL) {
168 HiiRemovePackages (gShellAcpiViewHiiHandle);
169 }
170 return EFI_SUCCESS;
171 }