mirror of https://github.com/acidanthera/audk.git
173 lines
5.2 KiB
C
173 lines
5.2 KiB
C
/** @file
|
|
Main file for 'acpiview' Shell command function.
|
|
|
|
Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>
|
|
This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
**/
|
|
|
|
#include <Guid/ShellLibHiiGuid.h>
|
|
#include <IndustryStandard/Acpi.h>
|
|
#include <Library/HiiLib.h>
|
|
#include <Library/ShellCommandLib.h>
|
|
#include <Library/UefiLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
#include <Uefi.h>
|
|
#include "AcpiParser.h"
|
|
#include "AcpiTableParser.h"
|
|
#include "AcpiView.h"
|
|
#include "UefiShellAcpiViewCommandLib.h"
|
|
|
|
CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";
|
|
|
|
/**
|
|
A list of available table parsers.
|
|
*/
|
|
STATIC
|
|
CONST
|
|
ACPI_TABLE_PARSER ParserList[] = {
|
|
{EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE, ParseAcpiBgrt},
|
|
{EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, ParseAcpiDbg2},
|
|
{EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
|
ParseAcpiDsdt},
|
|
{EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiFadt},
|
|
{EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiGtdt},
|
|
{EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE, ParseAcpiIort},
|
|
{EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiMadt},
|
|
{EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,
|
|
ParseAcpiMcfg},
|
|
{RSDP_TABLE_INFO, ParseAcpiRsdp},
|
|
{EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, ParseAcpiSlit},
|
|
{EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, ParseAcpiSpcr},
|
|
{EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, ParseAcpiSrat},
|
|
{EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiSsdt},
|
|
{EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiXsdt}
|
|
};
|
|
|
|
/**
|
|
This function registers all the available table parsers.
|
|
|
|
@retval EFI_SUCCESS The parser is registered.
|
|
@retval EFI_ALREADY_STARTED The parser for the ACPI Table
|
|
was already registered.
|
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
|
@retval EFI_OUT_OF_RESOURCES No space to register the
|
|
parser.
|
|
**/
|
|
EFI_STATUS
|
|
RegisterAllParsers (
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
UINTN Count;
|
|
|
|
Status = EFI_SUCCESS;
|
|
Count = sizeof (ParserList) / sizeof (ParserList[0]);
|
|
|
|
while (Count-- != 0) {
|
|
Status = RegisterParser (
|
|
ParserList[Count].Signature,
|
|
ParserList[Count].Parser
|
|
);
|
|
if (EFI_ERROR (Status)) {
|
|
return Status;
|
|
}
|
|
}
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Return the file name of the help text file if not using HII.
|
|
|
|
@return The string pointer to the file name.
|
|
**/
|
|
CONST CHAR16*
|
|
EFIAPI
|
|
ShellCommandGetManFileNameAcpiView (
|
|
VOID
|
|
)
|
|
{
|
|
return gShellAcpiViewFileName;
|
|
}
|
|
|
|
/**
|
|
Constructor for the Shell AcpiView Command library.
|
|
|
|
Install the handlers for acpiview UEFI Shell command.
|
|
|
|
@param ImageHandle The image handle of the process.
|
|
@param SystemTable The EFI System Table pointer.
|
|
|
|
@retval EFI_SUCCESS The Shell command handlers were installed
|
|
successfully.
|
|
@retval EFI_DEVICE_ERROR Hii package failed to install.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UefiShellAcpiViewCommandLibConstructor (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
gShellAcpiViewHiiHandle = NULL;
|
|
|
|
// Check Shell Profile Debug1 bit of the profiles mask
|
|
if ((PcdGet8 (PcdShellProfileMask) & BIT1) == 0) {
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
Status = RegisterAllParsers ();
|
|
if (EFI_ERROR (Status)) {
|
|
Print (L"acpiview: Error failed to register parser.\n");
|
|
return Status;
|
|
}
|
|
|
|
gShellAcpiViewHiiHandle = HiiAddPackages (
|
|
&gShellAcpiViewHiiGuid,
|
|
gImageHandle,
|
|
UefiShellAcpiViewCommandLibStrings,
|
|
NULL
|
|
);
|
|
if (gShellAcpiViewHiiHandle == NULL) {
|
|
return EFI_DEVICE_ERROR;
|
|
}
|
|
// Install our Shell command handler
|
|
ShellCommandRegisterCommandName (
|
|
L"acpiview",
|
|
ShellCommandRunAcpiView,
|
|
ShellCommandGetManFileNameAcpiView,
|
|
0,
|
|
L"acpiview",
|
|
TRUE,
|
|
gShellAcpiViewHiiHandle,
|
|
STRING_TOKEN (STR_GET_HELP_ACPIVIEW)
|
|
);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
/**
|
|
Destructor for the library. free any resources.
|
|
|
|
@param ImageHandle The image handle of the process.
|
|
@param SystemTable The EFI System Table pointer.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
UefiShellAcpiViewCommandLibDestructor (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
)
|
|
{
|
|
if (gShellAcpiViewHiiHandle != NULL) {
|
|
HiiRemovePackages (gShellAcpiViewHiiHandle);
|
|
}
|
|
return EFI_SUCCESS;
|
|
}
|