|
@@ -0,0 +1,146 @@
|
|
|
+/** @file
|
|
|
+ Raw DSDT Table Generator
|
|
|
+
|
|
|
+ Copyright 2020 NXP
|
|
|
+ Copyright 2020 Puresoftware Ltd.
|
|
|
+
|
|
|
+ SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
+
|
|
|
+**/
|
|
|
+
|
|
|
+#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>
|
|
|
+
|
|
|
+#include "PlatformAcpiLib.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
|
|
|
+BuildRawDsdtTable (
|
|
|
+ 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);
|
|
|
+
|
|
|
+ if (AcpiTableInfo->AcpiTableData == NULL) {
|
|
|
+ // Add the dsdt aml code here, Currently NULL place holder.
|
|
|
+ *Table = (EFI_ACPI_DESCRIPTION_HEADER *)&dsdt_aml_code;
|
|
|
+ }
|
|
|
+
|
|
|
+ return EFI_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+/** This macro defines the Raw Generator revision.
|
|
|
+*/
|
|
|
+#define DSDT_GENERATOR_REVISION CREATE_REVISION (1, 0)
|
|
|
+
|
|
|
+/** The interface for the Raw Table Generator.
|
|
|
+*/
|
|
|
+STATIC
|
|
|
+CONST
|
|
|
+ACPI_TABLE_GENERATOR RawDsdtGenerator = {
|
|
|
+ // Generator ID
|
|
|
+ CREATE_OEM_ACPI_TABLE_GEN_ID (PlatAcpiTableIdDsdt),
|
|
|
+ // Generator Description
|
|
|
+ L"ACPI.OEM.RAW.DSDT.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
|
|
|
+ DSDT_GENERATOR_REVISION,
|
|
|
+ // Build Table function
|
|
|
+ BuildRawDsdtTable,
|
|
|
+ // 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
|
|
|
+AcpiDsdtLibConstructor (
|
|
|
+ IN CONST EFI_HANDLE ImageHandle,
|
|
|
+ IN EFI_SYSTEM_TABLE * CONST SystemTable
|
|
|
+ )
|
|
|
+{
|
|
|
+ EFI_STATUS Status;
|
|
|
+ Status = RegisterAcpiTableGenerator (&RawDsdtGenerator);
|
|
|
+ DEBUG ((DEBUG_INFO, "OEM: Register DSDT 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
|
|
|
+AcpiDsdtLibDestructor (
|
|
|
+ IN CONST EFI_HANDLE ImageHandle,
|
|
|
+ IN EFI_SYSTEM_TABLE * CONST SystemTable
|
|
|
+ )
|
|
|
+{
|
|
|
+ EFI_STATUS Status;
|
|
|
+ Status = DeregisterAcpiTableGenerator (&RawDsdtGenerator);
|
|
|
+ DEBUG ((DEBUG_INFO, "OEM: Deregister DSDT Generator. Status = %r\n", Status));
|
|
|
+ ASSERT_EFI_ERROR (Status);
|
|
|
+ return Status;
|
|
|
+}
|