IntelFrameworkPkg FrameworkUefiLib: Add new EfiLocateXXXAcpiTable APIs

https://bugzilla.tianocore.org/show_bug.cgi?id=967
Request to add a library function for GetAcpiTable() in order
to get ACPI table using signature as input.

After evaluation, we found there are many duplicated code to
find ACPI table by signature in different modules.

This patch adds new EfiLocateXXXAcpiTable() APIs in UefiLib
for the request and also the following patch to remove the
duplicated code.

V2:
ASSERT(FALSE) and return NULL instead of real implementation for the
new APIs as the IntelFrameworkPkg is a to-be-deprecated packages.

Cc: Younas khan <pmdyounaskhan786@gmail.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Star Zeng 2018-09-19 08:55:33 +08:00
parent af5e952159
commit c1a00d0942
2 changed files with 89 additions and 0 deletions

View File

@ -0,0 +1,88 @@
/** @file
This module provides help function for finding ACPI table.
Copyright (c) 2018, Intel Corporation. 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 "UefiLibInternal.h"
#include <IndustryStandard/Acpi.h>
/**
This function locates next ACPI table in XSDT/RSDT based on Signature and
previous returned Table.
If PreviousTable is NULL:
This function will locate the first ACPI table in XSDT/RSDT based on
Signature in gEfiAcpi20TableGuid system configuration table first, and then
gEfiAcpi10TableGuid system configuration table.
This function will locate in XSDT first, and then RSDT.
For DSDT, this function will locate XDsdt in FADT first, and then Dsdt in
FADT.
For FACS, this function will locate XFirmwareCtrl in FADT first, and then
FirmwareCtrl in FADT.
If PreviousTable is not NULL:
1. If it could be located in XSDT in gEfiAcpi20TableGuid system configuration
table, then this function will just locate next table in XSDT in
gEfiAcpi20TableGuid system configuration table.
2. If it could be located in RSDT in gEfiAcpi20TableGuid system configuration
table, then this function will just locate next table in RSDT in
gEfiAcpi20TableGuid system configuration table.
3. If it could be located in RSDT in gEfiAcpi10TableGuid system configuration
table, then this function will just locate next table in RSDT in
gEfiAcpi10TableGuid system configuration table.
It's not supported that PreviousTable is not NULL but PreviousTable->Signature
is not same with Signature, NULL will be returned.
@param Signature ACPI table signature.
@param PreviousTable Pointer to previous returned table to locate next
table, or NULL to locate first table.
@return Next ACPI table or NULL if not found.
**/
EFI_ACPI_COMMON_HEADER *
EFIAPI
EfiLocateNextAcpiTable (
IN UINT32 Signature,
IN EFI_ACPI_COMMON_HEADER *PreviousTable OPTIONAL
)
{
ASSERT (FALSE);
return NULL;
}
/**
This function locates first ACPI table in XSDT/RSDT based on Signature.
This function will locate the first ACPI table in XSDT/RSDT based on
Signature in gEfiAcpi20TableGuid system configuration table first, and then
gEfiAcpi10TableGuid system configuration table.
This function will locate in XSDT first, and then RSDT.
For DSDT, this function will locate XDsdt in FADT first, and then Dsdt in
FADT.
For FACS, this function will locate XFirmwareCtrl in FADT first, and then
FirmwareCtrl in FADT.
@param Signature ACPI table signature.
@return First ACPI table or NULL if not found.
**/
EFI_ACPI_COMMON_HEADER *
EFIAPI
EfiLocateFirstAcpiTable (
IN UINT32 Signature
)
{
return EfiLocateNextAcpiTable (Signature, NULL);
}

View File

@ -37,6 +37,7 @@
Console.c
UefiLib.c
UefiLibInternal.h
Acpi.c
[Packages]
MdePkg/MdePkg.dec