ShellPkg/AcpiView: Refactor configuration

A new file and header (AcpiViewConfig.[ch]) is created
that houses the user configuration. This declutters the
core code and improves modularity of the design.

The module level symbols for verbosity, table selection, and
highlighting are refactored into the new file.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
Signed-off-by: Tomas Pilar <tomas.pilar@arm.com>
This commit is contained in:
Tomas Pilar 2020-06-19 12:59:54 +01:00 committed by mergify[bot]
parent cae974bea2
commit e18ac66d84
12 changed files with 479 additions and 315 deletions

View File

@ -10,6 +10,7 @@
#include <Library/UefiBootServicesTableLib.h>
#include "AcpiParser.h"
#include "AcpiView.h"
#include "AcpiViewConfig.h"
STATIC UINT32 gIndent;
STATIC UINT32 mTableErrorCount;

View File

@ -17,6 +17,7 @@
#include "AcpiParser.h"
#include "AcpiTableParser.h"
#include "AcpiView.h"
#include "AcpiViewConfig.h"
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
#include "Arm/SbbrValidator.h"

View File

@ -20,6 +20,7 @@
#include "AcpiParser.h"
#include "AcpiTableParser.h"
#include "AcpiView.h"
#include "AcpiViewConfig.h"
#include "UefiShellAcpiViewCommandLib.h"
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
@ -28,17 +29,8 @@
EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;
// Report variables
STATIC UINT32 mSelectedAcpiTable;
STATIC CONST CHAR16* mSelectedAcpiTableName;
STATIC BOOLEAN mSelectedAcpiTableFound;
STATIC EREPORT_OPTION mReportType;
STATIC UINT32 mTableCount;
STATIC UINT32 mBinTableCount;
STATIC BOOLEAN mConsistencyCheck;
STATIC BOOLEAN mColourHighlighting;
STATIC BOOLEAN mMandatoryTableValidate;
STATIC UINTN mMandatoryTableSpec;
/**
An array of acpiview command line parameters.
@ -53,142 +45,6 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
{NULL, TypeMax}
};
/**
This function returns the colour highlighting status.
@retval TRUE if colour highlighting is enabled.
**/
BOOLEAN
GetColourHighlighting (
VOID
)
{
return mColourHighlighting;
}
/**
This function sets the colour highlighting status.
@param Highlight The Highlight status.
**/
VOID
SetColourHighlighting (
BOOLEAN Highlight
)
{
mColourHighlighting = Highlight;
}
/**
This function returns the consistency checking status.
@retval TRUE if consistency checking is enabled.
**/
BOOLEAN
GetConsistencyChecking (
VOID
)
{
return mConsistencyCheck;
}
/**
This function sets the consistency checking status.
@param ConsistencyChecking The consistency checking status.
**/
VOID
SetConsistencyChecking (
BOOLEAN ConsistencyChecking
)
{
mConsistencyCheck = ConsistencyChecking;
}
/**
This function returns the ACPI table requirements validation flag.
@retval TRUE if check for mandatory table presence should be performed.
**/
BOOLEAN
GetMandatoryTableValidate (
VOID
)
{
return mMandatoryTableValidate;
}
/**
This function sets the ACPI table requirements validation flag.
@param Validate Enable/Disable ACPI table requirements validation.
**/
VOID
SetMandatoryTableValidate (
BOOLEAN Validate
)
{
mMandatoryTableValidate = Validate;
}
/**
This function returns the identifier of specification to validate ACPI table
requirements against.
@return ID of specification listing mandatory tables.
**/
UINTN
GetMandatoryTableSpec (
VOID
)
{
return mMandatoryTableSpec;
}
/**
This function sets the identifier of specification to validate ACPI table
requirements against.
@param Spec ID of specification listing mandatory tables.
**/
VOID
SetMandatoryTableSpec (
UINTN Spec
)
{
mMandatoryTableSpec = Spec;
}
/**
This function returns the report options.
@retval Returns the report option.
**/
STATIC
EREPORT_OPTION
GetReportOption (
VOID
)
{
return mReportType;
}
/**
This function returns the selected ACPI table.
@retval Returns signature of the selected ACPI table.
**/
STATIC
UINT32
GetSelectedAcpiTable (
VOID
)
{
return mSelectedAcpiTable;
}
/**
This function dumps the ACPI table to a file.
@ -205,19 +61,21 @@ DumpAcpiTableToFile (
IN CONST UINTN Length
)
{
EFI_STATUS Status;
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
SHELL_FILE_HANDLE DumpFileHandle;
UINTN TransferBytes;
EFI_STATUS Status;
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
SHELL_FILE_HANDLE DumpFileHandle;
UINTN TransferBytes;
SELECTED_ACPI_TABLE *SelectedTable;
DumpFileHandle = NULL;
TransferBytes = Length;
GetSelectedAcpiTable (&SelectedTable);
UnicodeSPrint (
FileNameBuffer,
sizeof (FileNameBuffer),
L".\\%s%04d.bin",
mSelectedAcpiTableName,
SelectedTable->Name,
mBinTableCount++
);
@ -273,10 +131,11 @@ ProcessTableReportOptions (
IN CONST UINT32 Length
)
{
UINTN OriginalAttribute;
UINT8* SignaturePtr;
BOOLEAN Log;
BOOLEAN HighLight;
UINTN OriginalAttribute;
UINT8 *SignaturePtr;
BOOLEAN Log;
BOOLEAN HighLight;
SELECTED_ACPI_TABLE *SelectedTable;
//
// set local variables to suppress incorrect compiler/analyzer warnings
@ -285,15 +144,16 @@ ProcessTableReportOptions (
SignaturePtr = (UINT8*)(UINTN)&Signature;
Log = FALSE;
HighLight = GetColourHighlighting ();
GetSelectedAcpiTable (&SelectedTable);
switch (GetReportOption ()) {
case ReportAll:
Log = TRUE;
break;
case ReportSelected:
if (Signature == GetSelectedAcpiTable ()) {
if (Signature == SelectedTable->Type) {
Log = TRUE;
mSelectedAcpiTableFound = TRUE;
SelectedTable->Found = TRUE;
}
break;
case ReportTableList:
@ -321,8 +181,8 @@ ProcessTableReportOptions (
);
break;
case ReportDumpBinFile:
if (Signature == GetSelectedAcpiTable ()) {
mSelectedAcpiTableFound = TRUE;
if (Signature == SelectedTable->Type) {
SelectedTable->Found = TRUE;
DumpAcpiTableToFile (TablePtr, Length);
}
break;
@ -356,37 +216,7 @@ ProcessTableReportOptions (
return Log;
}
/**
This function converts a string to ACPI table signature.
@param [in] Str Pointer to the string to be converted to the
ACPI table signature.
@retval The ACPI table signature.
**/
STATIC
UINT32
ConvertStrToAcpiSignature (
IN CONST CHAR16* Str
)
{
UINT8 Index;
CHAR8 Ptr[4];
ZeroMem (Ptr, sizeof (Ptr));
Index = 0;
// Convert to Upper case and convert to ASCII
while ((Index < 4) && (Str[Index] != 0)) {
if (Str[Index] >= L'a' && Str[Index] <= L'z') {
Ptr[Index] = (CHAR8)(Str[Index] - (L'a' - L'A'));
} else {
Ptr[Index] = (CHAR8)Str[Index];
}
Index++;
}
return *(UINT32*)Ptr;
}
/**
This function iterates the configuration table entries in the
@ -417,6 +247,7 @@ AcpiView (
UINT8 RsdpRevision;
PARSE_ACPI_TABLE_PROC RsdpParserProc;
BOOLEAN Trace;
SELECTED_ACPI_TABLE *SelectedTable;
//
// set local variables to suppress incorrect compiler/analyzer warnings
@ -428,6 +259,9 @@ AcpiView (
ResetErrorCount ();
ResetWarningCount ();
// Retrieve the user selection of ACPI table to process
GetSelectedAcpiTable (&SelectedTable);
// Search the table for an entry that matches the ACPI Table Guid
FoundAcpiTable = FALSE;
for (Index = 0; Index < SystemTable->NumberOfTableEntries; Index++) {
@ -496,7 +330,7 @@ AcpiView (
if (ReportTableList != ReportOption) {
if (((ReportSelected == ReportOption) ||
(ReportDumpBinFile == ReportOption)) &&
(!mSelectedAcpiTableFound)) {
(!SelectedTable->Found)) {
Print (L"\nRequested ACPI Table not found.\n");
} else if (GetConsistencyChecking () &&
(ReportDumpBinFile != ReportOption)) {
@ -554,17 +388,12 @@ ShellCommandRunAcpiView (
CHAR16* ProblemParam;
SHELL_FILE_HANDLE TmpDumpFileHandle;
CONST CHAR16* MandatoryTableSpecStr;
CONST CHAR16 *SelectedTableName;
// Set Defaults
mReportType = ReportAll;
mTableCount = 0;
mBinTableCount = 0;
mSelectedAcpiTable = 0;
mSelectedAcpiTableName = NULL;
mSelectedAcpiTableFound = FALSE;
mConsistencyCheck = TRUE;
mMandatoryTableValidate = FALSE;
mMandatoryTableSpec = 0;
AcpiConfigSetDefaults ();
ShellStatus = SHELL_SUCCESS;
Package = NULL;
@ -671,25 +500,23 @@ ShellCommandRunAcpiView (
}
if (ShellCommandLineGetFlag (Package, L"-l")) {
mReportType = ReportTableList;
SetReportOption (ReportTableList);
} else {
mSelectedAcpiTableName = ShellCommandLineGetValue (Package, L"-s");
if (mSelectedAcpiTableName != NULL) {
mSelectedAcpiTable = (UINT32)ConvertStrToAcpiSignature (
mSelectedAcpiTableName
);
mReportType = ReportSelected;
SelectedTableName = ShellCommandLineGetValue (Package, L"-s");
if (SelectedTableName != NULL) {
SelectAcpiTable (SelectedTableName);
SetReportOption (ReportSelected);
if (ShellCommandLineGetFlag (Package, L"-d")) {
// Create a temporary file to check if the media is writable.
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
mReportType = ReportDumpBinFile;
SetReportOption (ReportDumpBinFile);
UnicodeSPrint (
FileNameBuffer,
sizeof (FileNameBuffer),
L".\\%s%04d.tmp",
mSelectedAcpiTableName,
SelectedTableName,
mBinTableCount
);

View File

@ -23,17 +23,6 @@
**/
#define RSDP_LENGTH_OFFSET 20
/**
The EREPORT_OPTION enum describes ACPI table Reporting options.
**/
typedef enum ReportOption {
ReportAll, ///< Report All tables.
ReportSelected, ///< Report Selected table.
ReportTableList, ///< Report List of tables.
ReportDumpBinFile, ///< Dump selected table to a file.
ReportMax,
} EREPORT_OPTION;
/**
This function resets the ACPI table error counter to Zero.
**/
@ -70,90 +59,6 @@ GetWarningCount (
VOID
);
/**
This function returns the colour highlighting status.
@retval TRUE if colour highlighting is enabled.
**/
BOOLEAN
GetColourHighlighting (
VOID
);
/**
This function sets the colour highlighting status.
@param Highlight The Highlight status.
**/
VOID
SetColourHighlighting (
BOOLEAN Highlight
);
/**
This function returns the consistency checking status.
@retval TRUE if consistency checking is enabled.
**/
BOOLEAN
GetConsistencyChecking (
VOID
);
/**
This function sets the consistency checking status.
@param ConsistencyChecking The consistency checking status.
**/
VOID
SetConsistencyChecking (
BOOLEAN ConsistencyChecking
);
/**
This function returns the ACPI table requirements validation flag.
@retval TRUE if check for mandatory table presence should be performed.
**/
BOOLEAN
GetMandatoryTableValidate (
VOID
);
/**
This function sets the ACPI table requirements validation flag.
@param Validate Enable/Disable ACPI table requirements validation.
**/
VOID
SetMandatoryTableValidate (
BOOLEAN Validate
);
/**
This function returns the identifier of specification to validate ACPI table
requirements against.
@return ID of specification listing mandatory tables.
**/
UINTN
GetMandatoryTableSpec (
VOID
);
/**
This function sets the identifier of specification to validate ACPI table
requirements against.
@param Spec ID of specification listing mandatory tables.
**/
VOID
SetMandatoryTableSpec (
UINTN Spec
);
/**
This function processes the table reporting options for the ACPI table.

View File

@ -0,0 +1,246 @@
/** @file
State and accessors for 'acpiview' configuration.
Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include "AcpiViewConfig.h"
// Report variables
STATIC BOOLEAN mConsistencyCheck;
STATIC BOOLEAN mColourHighlighting;
STATIC EREPORT_OPTION mReportType;
STATIC BOOLEAN mMandatoryTableValidate;
STATIC UINTN mMandatoryTableSpec;
// User selection of which ACPI table should be checked
SELECTED_ACPI_TABLE mSelectedAcpiTable;
/**
Reset the AcpiView user configuration to defaults
**/
VOID
EFIAPI
AcpiConfigSetDefaults (
VOID
)
{
mReportType = ReportAll;
mSelectedAcpiTable.Type = 0;
mSelectedAcpiTable.Name = NULL;
mSelectedAcpiTable.Found = FALSE;
mConsistencyCheck = TRUE;
mMandatoryTableValidate = FALSE;
mMandatoryTableSpec = 0;
}
/**
This function converts a string to ACPI table signature.
@param [in] Str Pointer to the string to be converted to the
ACPI table signature.
@retval The ACPI table signature.
**/
STATIC
UINT32
ConvertStrToAcpiSignature (
IN CONST CHAR16 *Str
)
{
UINT8 Index;
CHAR8 Ptr[4];
ZeroMem (Ptr, sizeof (Ptr));
Index = 0;
// Convert to Upper case and convert to ASCII
while ((Index < 4) && (Str[Index] != 0)) {
if (Str[Index] >= L'a' && Str[Index] <= L'z') {
Ptr[Index] = (CHAR8)(Str[Index] - (L'a' - L'A'));
} else {
Ptr[Index] = (CHAR8)Str[Index];
}
Index++;
}
return *(UINT32 *) Ptr;
}
/**
This function selects an ACPI table in current context.
The string name of the table is converted into UINT32
table signature.
@param [in] TableName The name of the ACPI table to select.
**/
VOID
EFIAPI
SelectAcpiTable (
IN CONST CHAR16 *TableName
)
{
ASSERT (TableName != NULL);
mSelectedAcpiTable.Name = TableName;
mSelectedAcpiTable.Type = ConvertStrToAcpiSignature (mSelectedAcpiTable.Name);
}
/**
This function returns the selected ACPI table.
@param [out] SelectedAcpiTable Pointer that will contain the returned struct.
**/
VOID
EFIAPI
GetSelectedAcpiTable (
OUT SELECTED_ACPI_TABLE **SelectedAcpiTable
)
{
*SelectedAcpiTable = &mSelectedAcpiTable;
}
/**
This function returns the colour highlighting status.
@retval TRUE Colour highlighting is enabled.
**/
BOOLEAN
EFIAPI
GetColourHighlighting (
VOID
)
{
return mColourHighlighting;
}
/**
This function sets the colour highlighting status.
@param [in] Highlight The highlight status.
**/
VOID
EFIAPI
SetColourHighlighting (
BOOLEAN Highlight
)
{
mColourHighlighting = Highlight;
}
/**
This function returns the consistency checking status.
@retval TRUE Consistency checking is enabled.
**/
BOOLEAN
EFIAPI
GetConsistencyChecking (
VOID
)
{
return mConsistencyCheck;
}
/**
This function sets the consistency checking status.
@param [in] ConsistencyChecking The consistency checking status.
**/
VOID
EFIAPI
SetConsistencyChecking (
BOOLEAN ConsistencyChecking
)
{
mConsistencyCheck = ConsistencyChecking;
}
/**
This function returns the report options.
@return The current report option.
**/
EREPORT_OPTION
EFIAPI
GetReportOption (
VOID
)
{
return mReportType;
}
/**
This function sets the report options.
@param [in] ReportType The report option to set.
**/
VOID
EFIAPI
SetReportOption (
EREPORT_OPTION ReportType
)
{
mReportType = ReportType;
}
/**
This function returns the ACPI table requirements validation flag.
@retval TRUE Check for mandatory table presence should be performed.
**/
BOOLEAN
EFIAPI
GetMandatoryTableValidate (
VOID
)
{
return mMandatoryTableValidate;
}
/**
This function sets the ACPI table requirements validation flag.
@param [in] Validate Enable/Disable ACPI table requirements validation.
**/
VOID
EFIAPI
SetMandatoryTableValidate (
BOOLEAN Validate
)
{
mMandatoryTableValidate = Validate;
}
/**
This function returns the identifier of specification to validate ACPI table
requirements against.
@return ID of specification listing mandatory tables.
**/
UINTN
EFIAPI
GetMandatoryTableSpec (
VOID
)
{
return mMandatoryTableSpec;
}
/**
This function sets the identifier of specification to validate ACPI table
requirements against.
@param [in] Spec ID of specification listing mandatory tables.
**/
VOID
EFIAPI
SetMandatoryTableSpec (
UINTN Spec
)
{
mMandatoryTableSpec = Spec;
}

View File

@ -0,0 +1,177 @@
/** @file
Header file for 'acpiview' configuration.
Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef ACPI_VIEW_CONFIG_H_
#define ACPI_VIEW_CONFIG_H_
/**
This function returns the colour highlighting status.
@retval TRUE Colour highlighting is enabled.
**/
BOOLEAN
EFIAPI
GetColourHighlighting (
VOID
);
/**
This function sets the colour highlighting status.
@param [in] Highlight The highlight status.
**/
VOID
EFIAPI
SetColourHighlighting (
BOOLEAN Highlight
);
/**
This function returns the consistency checking status.
@retval TRUE Consistency checking is enabled.
**/
BOOLEAN
EFIAPI
GetConsistencyChecking (
VOID
);
/**
This function sets the consistency checking status.
@param [in] ConsistencyChecking The consistency checking status.
**/
VOID
EFIAPI
SetConsistencyChecking (
BOOLEAN ConsistencyChecking
);
/**
This function returns the ACPI table requirements validation flag.
@retval TRUE Check for mandatory table presence should be performed.
**/
BOOLEAN
EFIAPI
GetMandatoryTableValidate (
VOID
);
/**
This function sets the ACPI table requirements validation flag.
@param [in] Validate Enable/Disable ACPI table requirements validation.
**/
VOID
EFIAPI
SetMandatoryTableValidate (
BOOLEAN Validate
);
/**
This function returns the identifier of specification to validate ACPI table
requirements against.
@return ID of specification listing mandatory tables.
**/
UINTN
EFIAPI
GetMandatoryTableSpec (
VOID
);
/**
This function sets the identifier of specification to validate ACPI table
requirements against.
@param [in] Spec ID of specification listing mandatory tables.
**/
VOID
EFIAPI
SetMandatoryTableSpec (
UINTN Spec
);
/**
The EREPORT_OPTION enum describes ACPI table Reporting options.
**/
typedef enum {
ReportAll, ///< Report All tables.
ReportSelected, ///< Report Selected table.
ReportTableList, ///< Report List of tables.
ReportDumpBinFile, ///< Dump selected table to a file.
ReportMax,
} EREPORT_OPTION;
/**
This function returns the report options.
@return The current report option.
**/
EREPORT_OPTION
EFIAPI
GetReportOption (
VOID
);
/**
This function sets the report options.
@param [in] ReportType The report option to set.
**/
VOID
EFIAPI
SetReportOption (
EREPORT_OPTION ReportType
);
/**
A structure holding the user selection detailing which
ACPI table is to be examined by the AcpiView code.
**/
typedef struct {
UINT32 Type; ///< 32bit signature of the selected ACPI table.
CONST CHAR16* Name; ///< User friendly name of the selected ACPI table.
BOOLEAN Found; ///< The selected table has been found in the system.
} SELECTED_ACPI_TABLE;
/**
This function returns the selected ACPI table.
@param [out] SelectedAcpiTable Pointer that will contain the returned struct.
**/
VOID
EFIAPI
GetSelectedAcpiTable (
OUT SELECTED_ACPI_TABLE** SelectedAcpiTable
);
/**
This function selects an ACPI table in current context.
The string name of the table is converted into UINT32
table signature.
@param [in] TableName The name of the ACPI table to select.
**/
VOID
EFIAPI
SelectAcpiTable (
CONST CHAR16* TableName
);
/**
Reset the AcpiView user configuration to defaults.
**/
VOID
EFIAPI
AcpiConfigSetDefaults (
VOID
);
#endif // ACPI_VIEW_CONFIG_H_

View File

@ -12,6 +12,7 @@
#include <Library/UefiLib.h>
#include "AcpiParser.h"
#include "AcpiTableParser.h"
#include "AcpiViewConfig.h"
// "The number of GT Block Timers must be less than or equal to 8"
#define GT_BLOCK_TIMER_COUNT_MAX 8

View File

@ -13,6 +13,7 @@
#include <Library/UefiLib.h>
#include "AcpiParser.h"
#include "AcpiTableParser.h"
#include "AcpiViewConfig.h"
// Local variables
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;

View File

@ -15,6 +15,7 @@
#include <Library/UefiLib.h>
#include "AcpiParser.h"
#include "AcpiTableParser.h"
#include "AcpiViewConfig.h"
#include "MadtParser.h"
// Local Variables

View File

@ -13,6 +13,7 @@
#include <Library/UefiLib.h>
#include "AcpiParser.h"
#include "AcpiView.h"
#include "AcpiViewConfig.h"
#include "PpttParser.h"
// Local variables

View File

@ -13,6 +13,7 @@
#include <Library/UefiLib.h>
#include "AcpiParser.h"
#include "AcpiTableParser.h"
#include "AcpiViewConfig.h"
// Local Variables
STATIC CONST UINT8* SratRAType;

View File

@ -19,15 +19,14 @@
DESTRUCTOR = UefiShellAcpiViewCommandLibDestructor
[Sources.common]
UefiShellAcpiViewCommandLib.uni
UefiShellAcpiViewCommandLib.c
UefiShellAcpiViewCommandLib.h
AcpiParser.h
AcpiTableParser.h
AcpiView.h
AcpiParser.c
AcpiParser.h
AcpiTableParser.c
AcpiTableParser.h
AcpiView.c
AcpiView.h
AcpiViewConfig.c
AcpiViewConfig.h
Parsers/Bgrt/BgrtParser.c
Parsers/Dbg2/Dbg2Parser.c
Parsers/Dsdt/DsdtParser.c
@ -36,40 +35,43 @@
Parsers/Gtdt/GtdtParser.c
Parsers/Iort/IortParser.c
Parsers/Madt/MadtParser.c
Parsers/Madt/MadtParser.h
Parsers/Mcfg/McfgParser.c
Parsers/Pptt/PpttParser.c
Parsers/Pptt/PpttParser.h
Parsers/Rsdp/RsdpParser.c
Parsers/Slit/SlitParser.c
Parsers/Spcr/SpcrParser.c
Parsers/Srat/SratParser.c
Parsers/Ssdt/SsdtParser.c
Parsers/Xsdt/XsdtParser.c
Parsers/Madt/MadtParser.h
Parsers/Pptt/PpttParser.h
UefiShellAcpiViewCommandLib.c
UefiShellAcpiViewCommandLib.h
UefiShellAcpiViewCommandLib.uni
[Sources.ARM, Sources.AARCH64]
Arm/SbbrValidator.h
Arm/SbbrValidator.c
[Packages]
MdeModulePkg/MdeModulePkg.dec
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
MdeModulePkg/MdeModulePkg.dec
[LibraryClasses]
MemoryAllocationLib
BaseLib
BaseMemoryLib
DebugLib
FileHandleLib
HiiLib
MemoryAllocationLib
PcdLib
PrintLib
ShellCommandLib
ShellLib
UefiBootServicesTableLib
UefiLib
UefiRuntimeServicesTableLib
UefiBootServicesTableLib
PcdLib
HiiLib
PrintLib
FileHandleLib
[FixedPcd]