mirror of
https://git.proxmox.com/git/mirror_edk2
synced 2025-10-17 06:43:03 +00:00

The TableHelperLib contains helper functions. Some rely on DynamicTablesPkg definitions (they use Configuration Manager objects). Some others are more generic. To allow using these generic functions without including DynamicTablesPkg definitions, move them to a new AcpiHelperLib library. Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
110 lines
2.1 KiB
C
110 lines
2.1 KiB
C
/** @file
|
|
Acpi Helper
|
|
|
|
Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/DebugLib.h>
|
|
|
|
// Module specific include files.
|
|
#include <Library/AcpiHelperLib.h>
|
|
|
|
/** Convert a hex number to its ASCII code.
|
|
|
|
@param [in] x Hex number to convert.
|
|
Must be 0 <= x < 16.
|
|
|
|
@return The ASCII code corresponding to x.
|
|
**/
|
|
UINT8
|
|
EFIAPI
|
|
AsciiFromHex (
|
|
IN UINT8 x
|
|
)
|
|
{
|
|
if (x < 10) {
|
|
return (UINT8)(x + '0');
|
|
}
|
|
|
|
if (x < 16) {
|
|
return (UINT8)(x - 10 + 'A');
|
|
}
|
|
|
|
ASSERT (FALSE);
|
|
return (UINT8)-1;
|
|
}
|
|
|
|
/** Check if a HID is a valid PNP ID.
|
|
|
|
@param [in] Hid The Hid to validate.
|
|
|
|
@retval TRUE The Hid is a valid PNP ID.
|
|
@retval FALSE The Hid is not a valid PNP ID.
|
|
**/
|
|
BOOLEAN
|
|
IsValidPnpId (
|
|
IN CONST CHAR8 * Hid
|
|
)
|
|
{
|
|
UINTN Index;
|
|
|
|
if (AsciiStrLen (Hid) != 7) {
|
|
return FALSE;
|
|
}
|
|
|
|
// A valid PNP ID must be of the form "AAA####"
|
|
// where A is an uppercase letter and # is a hex digit.
|
|
for (Index = 0; Index < 3; Index++) {
|
|
if (!IS_UPPER_CHAR (Hid[Index])) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
for (Index = 3; Index < 7; Index++) {
|
|
if (!IS_UPPER_HEX (Hid[Index])) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/** Check if a HID is a valid ACPI ID.
|
|
|
|
@param [in] Hid The Hid to validate.
|
|
|
|
@retval TRUE The Hid is a valid ACPI ID.
|
|
@retval FALSE The Hid is not a valid ACPI ID.
|
|
**/
|
|
BOOLEAN
|
|
IsValidAcpiId (
|
|
IN CONST CHAR8 * Hid
|
|
)
|
|
{
|
|
UINTN Index;
|
|
|
|
if (AsciiStrLen (Hid) != 8) {
|
|
return FALSE;
|
|
}
|
|
|
|
// A valid ACPI ID must be of the form "NNNN####"
|
|
// where N is an uppercase letter or a digit ('0'-'9')
|
|
// and # is a hex digit.
|
|
for (Index = 0; Index < 4; Index++) {
|
|
if (!(IS_UPPER_CHAR (Hid[Index]) || IS_DIGIT (Hid[Index]))) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
for (Index = 4; Index < 8; Index++) {
|
|
if (!IS_UPPER_HEX (Hid[Index])) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|