audk/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiViewConfig.c

249 lines
4.7 KiB
C

/** @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;
}