mirror of https://github.com/acidanthera/audk.git
DynamicTablesPkg: Arm Raw/DSDT/SSDT Generator
A Raw generator is a simple generator. This generator provides the ability to install a binary blob (that contains ACPI table data) as an ACPI table. The binary blob could be pre-generated ACPI table data or it may be the pre-compiled output from an iAsl compiler for a DSDT or SSDT table. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Alexei Fedorov <alexei.fedorov@arm.com>
This commit is contained in:
parent
71f2b9060f
commit
74d4ee6729
|
@ -15,6 +15,9 @@
|
||||||
|
|
||||||
[Defines]
|
[Defines]
|
||||||
|
|
||||||
|
[BuildOptions]
|
||||||
|
*_*_*_ASL_FLAGS = -tc -li -so
|
||||||
|
|
||||||
[LibraryClasses.common]
|
[LibraryClasses.common]
|
||||||
TableHelperLib|DynamicTablesPkg/Library/Common/TableHelperLib/TableHelperLib.inf
|
TableHelperLib|DynamicTablesPkg/Library/Common/TableHelperLib/TableHelperLib.inf
|
||||||
|
|
||||||
|
@ -22,7 +25,10 @@
|
||||||
#
|
#
|
||||||
# Dynamic Table Factory Dxe
|
# Dynamic Table Factory Dxe
|
||||||
#
|
#
|
||||||
DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe.inf
|
DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe.inf {
|
||||||
|
<LibraryClasses>
|
||||||
|
NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiRawLibArm/AcpiRawLibArm.inf
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Dynamic Tables Manager Dxe
|
# Dynamic Tables Manager Dxe
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
## @file
|
||||||
|
# Raw Table Generator
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017 - 2018, ARM Limited. All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
##
|
||||||
|
|
||||||
|
[Defines]
|
||||||
|
INF_VERSION = 0x00010019
|
||||||
|
BASE_NAME = AcpiRawLibArm
|
||||||
|
FILE_GUID = 20F31568-D687-49BA-B326-CCD9D38EDE16
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
MODULE_TYPE = DXE_DRIVER
|
||||||
|
LIBRARY_CLASS = NULL|DXE_DRIVER
|
||||||
|
CONSTRUCTOR = AcpiRawLibConstructor
|
||||||
|
DESTRUCTOR = AcpiRawLibDestructor
|
||||||
|
|
||||||
|
[Sources]
|
||||||
|
RawGenerator.c
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
EmbeddedPkg/EmbeddedPkg.dec
|
||||||
|
DynamicTablesPkg/DynamicTablesPkg.dec
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
BaseLib
|
||||||
|
|
||||||
|
[Pcd]
|
||||||
|
|
||||||
|
[Protocols]
|
||||||
|
|
||||||
|
[Guids]
|
||||||
|
|
|
@ -0,0 +1,150 @@
|
||||||
|
/** @file
|
||||||
|
MCFG Table Generator
|
||||||
|
|
||||||
|
Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.
|
||||||
|
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 <Library/AcpiLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Protocol/AcpiTable.h>
|
||||||
|
|
||||||
|
// Module specific include files.
|
||||||
|
#include <AcpiTableGenerator.h>
|
||||||
|
#include <ConfigurationManagerObject.h>
|
||||||
|
#include <ConfigurationManagerHelper.h>
|
||||||
|
#include <Library/TableHelperLib.h>
|
||||||
|
#include <Protocol/ConfigurationManagerProtocol.h>
|
||||||
|
|
||||||
|
/** Construct the ACPI table using the ACPI table data provided.
|
||||||
|
|
||||||
|
This function invokes the Configuration Manager protocol interface
|
||||||
|
to get the required hardware information for generating the ACPI
|
||||||
|
table.
|
||||||
|
|
||||||
|
If this function allocates any resources then they must be freed
|
||||||
|
in the FreeXXXXTableResources function.
|
||||||
|
|
||||||
|
@param [in] This Pointer to the table generator.
|
||||||
|
@param [in] AcpiTableInfo Pointer to the ACPI Table Info.
|
||||||
|
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
|
||||||
|
Protocol Interface.
|
||||||
|
@param [out] Table Pointer to the constructed ACPI Table.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Table generated successfully.
|
||||||
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
BuildRawTable (
|
||||||
|
IN CONST ACPI_TABLE_GENERATOR * CONST This,
|
||||||
|
IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo,
|
||||||
|
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol,
|
||||||
|
OUT EFI_ACPI_DESCRIPTION_HEADER ** CONST Table
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (This != NULL);
|
||||||
|
ASSERT (AcpiTableInfo != NULL);
|
||||||
|
ASSERT (CfgMgrProtocol != NULL);
|
||||||
|
ASSERT (Table != NULL);
|
||||||
|
ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID);
|
||||||
|
ASSERT (AcpiTableInfo->AcpiTableData != NULL);
|
||||||
|
|
||||||
|
if (AcpiTableInfo->AcpiTableData == NULL) {
|
||||||
|
*Table = NULL;
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
*Table = AcpiTableInfo->AcpiTableData;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This macro defines the Raw Generator revision.
|
||||||
|
*/
|
||||||
|
#define RAW_GENERATOR_REVISION CREATE_REVISION (1, 0)
|
||||||
|
|
||||||
|
/** The interface for the Raw Table Generator.
|
||||||
|
*/
|
||||||
|
STATIC
|
||||||
|
CONST
|
||||||
|
ACPI_TABLE_GENERATOR RawGenerator = {
|
||||||
|
// Generator ID
|
||||||
|
CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdRaw),
|
||||||
|
// Generator Description
|
||||||
|
L"ACPI.STD.RAW.GENERATOR",
|
||||||
|
// ACPI Table Signature - Unused
|
||||||
|
0,
|
||||||
|
// ACPI Table Revision - Unused
|
||||||
|
0,
|
||||||
|
// Minimum ACPI Table Revision - Unused
|
||||||
|
0,
|
||||||
|
// Creator ID
|
||||||
|
TABLE_GENERATOR_CREATOR_ID_ARM,
|
||||||
|
// Creator Revision
|
||||||
|
RAW_GENERATOR_REVISION,
|
||||||
|
// Build Table function
|
||||||
|
BuildRawTable,
|
||||||
|
// No additional resources are allocated by the generator.
|
||||||
|
// Hence the Free Resource function is not required.
|
||||||
|
NULL,
|
||||||
|
// Extended build function not needed
|
||||||
|
NULL,
|
||||||
|
// Extended build function not implemented by the generator.
|
||||||
|
// Hence extended free resource function is not required.
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Register the Generator with the ACPI Table Factory.
|
||||||
|
|
||||||
|
@param [in] ImageHandle The handle to the image.
|
||||||
|
@param [in] SystemTable Pointer to the System Table.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The Generator is registered.
|
||||||
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
||||||
|
@retval EFI_ALREADY_STARTED The Generator for the Table ID
|
||||||
|
is already registered.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
AcpiRawLibConstructor (
|
||||||
|
IN CONST EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SYSTEM_TABLE * CONST SystemTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
Status = RegisterAcpiTableGenerator (&RawGenerator);
|
||||||
|
DEBUG ((DEBUG_INFO, "RAW: Register Generator. Status = %r\n", Status));
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Deregister the Generator from the ACPI Table Factory.
|
||||||
|
|
||||||
|
@param [in] ImageHandle The handle to the image.
|
||||||
|
@param [in] SystemTable Pointer to the System Table.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The Generator is deregistered.
|
||||||
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
||||||
|
@retval EFI_NOT_FOUND The Generator is not registered.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
AcpiRawLibDestructor (
|
||||||
|
IN CONST EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SYSTEM_TABLE * CONST SystemTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
Status = DeregisterAcpiTableGenerator (&RawGenerator);
|
||||||
|
DEBUG ((DEBUG_INFO, "RAW: Deregister Generator. Status = %r\n", Status));
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
return Status;
|
||||||
|
}
|
Loading…
Reference in New Issue