DynamicTablesPkg[all]  1.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
AcpiTableGenerator.h File Reference

Data Structures

struct  AcpiTableGenerator
 

Macros

#define IS_GENERATOR_TYPE_ACPI(TableGeneratorId)   (GET_TABLE_TYPE (TableGeneratorId) == ETableGeneratorTypeAcpi)
 
#define IS_VALID_STD_ACPI_GENERATOR_ID(TableGeneratorId)
 
#define CREATE_STD_ACPI_TABLE_GEN_ID(TableId)
 
#define CREATE_OEM_ACPI_TABLE_GEN_ID(TableId)
 
#define TABLE_GENERATOR_CREATOR_ID_ARM   SIGNATURE_32('A', 'R', 'M', 'H')
 
#define ACPI_HEADER(Signature, Type, Revision)
 
#define DUMP_ACPI_TABLE_HEADER(AcpiHeader)
 

Typedefs

typedef TABLE_GENERATOR_ID ACPI_TABLE_GENERATOR_ID
 
typedef enum StdAcpiTableId ESTD_ACPI_TABLE_ID
 
typedef struct
ConfigurationManagerProtocol 
EDKII_CONFIGURATION_MANAGER_PROTOCOL
 
typedef struct
CmAStdObjAcpiTableInfo 
CM_STD_OBJ_ACPI_TABLE_INFO
 
typedef struct AcpiTableGenerator ACPI_TABLE_GENERATOR
 
typedef EFI_STATUS(* ACPI_TABLE_GENERATOR_BUILD_TABLE )(IN CONST ACPI_TABLE_GENERATOR *This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, OUT EFI_ACPI_DESCRIPTION_HEADER **Table)
 
typedef EFI_STATUS(* ACPI_TABLE_GENERATOR_FREE_TABLE )(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, IN OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table)
 
typedef EFI_STATUS(* ACPI_TABLE_GENERATOR_BUILD_TABLEEX )(IN CONST ACPI_TABLE_GENERATOR *This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, OUT EFI_ACPI_DESCRIPTION_HEADER ***Table, OUT UINTN *CONST TableCount)
 
typedef EFI_STATUS(* ACPI_TABLE_GENERATOR_FREE_TABLEEX )(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, IN OUT EFI_ACPI_DESCRIPTION_HEADER ***CONST Table, IN CONST UINTN TableCount)
 

Enumerations

enum  StdAcpiTableId {
  EStdAcpiTableIdReserved = 0x0000, EStdAcpiTableIdRaw, EStdAcpiTableIdDsdt = EStdAcpiTableIdRaw, EStdAcpiTableIdSsdt = EStdAcpiTableIdRaw,
  EStdAcpiTableIdFadt, EStdAcpiTableIdMadt, EStdAcpiTableIdGtdt, EStdAcpiTableIdDbg2,
  EStdAcpiTableIdSpcr, EStdAcpiTableIdMcfg, EStdAcpiTableIdIort, EStdAcpiTableIdPptt,
  EStdAcpiTableIdSrat, EStdAcpiTableIdSsdtSerialPort, EStdAcpiTableIdSsdtCmn600, EStdAcpiTableIdSsdtCpuTopology,
  EStdAcpiTableIdMax
}
 

Functions

EFI_STATUS EFIAPI RegisterAcpiTableGenerator (IN CONST ACPI_TABLE_GENERATOR *CONST Generator)
 
EFI_STATUS EFIAPI DeregisterAcpiTableGenerator (IN CONST ACPI_TABLE_GENERATOR *CONST Generator)
 

Detailed Description

Copyright (c) 2017 - 2021, Arm Limited. All rights reserved.

SPDX-License-Identifier: BSD-2-Clause-Patent

Glossary:
  • Cm or CM - Configuration Manager
  • Obj or OBJ - Object
  • Std or STD - Standard

Macro Definition Documentation

#define ACPI_HEADER (   Signature,
  Type,
  Revision 
)
Value:
{ \
Signature, /* UINT32 Signature */ \
sizeof (Type), /* UINT32 Length */ \
Revision, /* UINT8 Revision */ \
0, /* UINT8 Checksum */ \
{ 0, 0, 0, 0, 0, 0 }, /* UINT8 OemId[6] */ \
0, /* UINT64 OemTableId */ \
0, /* UINT32 OemRevision */ \
0, /* UINT32 CreatorId */ \
0 /* UINT32 CreatorRevision */\
}

A macro to initialise the common header part of EFI ACPI tables as defined by the EFI_ACPI_DESCRIPTION_HEADER structure.

Parameters
[in]SignatureThe ACPI table signature.
[in]TypeThe ACPI table structure.
[in]RevisionThe ACPI table revision.
#define CREATE_OEM_ACPI_TABLE_GEN_ID (   TableId)
Value:
TableId \
)
OEM Namespace.
Definition: TableGenerator.h:125
#define CREATE_TABLE_GEN_ID(TableType, TableNameSpaceId, TableId)
Definition: TableGenerator.h:196
ACPI Table Generator Type.
Definition: TableGenerator.h:115

This macro creates an OEM ACPI Table Generator ID.

Parameters
[in]TableIdThe table generator ID.
Returns
an OEM ACPI table generator ID.
#define CREATE_STD_ACPI_TABLE_GEN_ID (   TableId)
Value:
TableId \
)
Standard Namespace.
Definition: TableGenerator.h:124
#define CREATE_TABLE_GEN_ID(TableType, TableNameSpaceId, TableId)
Definition: TableGenerator.h:196
ACPI Table Generator Type.
Definition: TableGenerator.h:115

This macro creates a standard ACPI Table Generator ID.

Parameters
[in]TableIdThe table generator ID.
Returns
a standard ACPI table generator ID.
#define DUMP_ACPI_TABLE_HEADER (   AcpiHeader)
Value:
DEBUG (( \
DEBUG_INFO, \
"ACPI TABLE %c%c%c%c : Rev 0x%x : Length : 0x%x\n", \
(AcpiHeader->Signature & 0xFF), \
((AcpiHeader->Signature >> 8) & 0xFF), \
((AcpiHeader->Signature >> 16) & 0xFF), \
((AcpiHeader->Signature >> 24) & 0xFF), \
AcpiHeader->Revision, \
AcpiHeader->Length \
));

A macro to dump the common header part of EFI ACPI tables as defined by the EFI_ACPI_DESCRIPTION_HEADER structure.

Parameters
[in]AcpiHeaderThe pointer to the ACPI table header.
#define IS_GENERATOR_TYPE_ACPI (   TableGeneratorId)    (GET_TABLE_TYPE (TableGeneratorId) == ETableGeneratorTypeAcpi)

This macro checks if the Table Generator ID is for an ACPI Table Generator.

Parameters
[in]TableGeneratorIdThe table generator ID.
Returns
TRUE if the table generator ID is for an ACPI Table Generator.
#define IS_VALID_STD_ACPI_GENERATOR_ID (   TableGeneratorId)
Value:
( \
IS_GENERATOR_NAMESPACE_STD (TableGeneratorId) && \
IS_GENERATOR_TYPE_ACPI (TableGeneratorId) && \
)
IN CONST ACPI_TABLE_GENERATOR_ID GeneratorId
Definition: DynamicTableFactoryProtocol.h:58
Definition: AcpiTableGenerator.h:96
#define GET_TABLE_ID(TableGeneratorId)
Definition: TableGenerator.h:154
#define IS_GENERATOR_TYPE_ACPI(TableGeneratorId)
Definition: AcpiTableGenerator.h:106
#define IS_GENERATOR_NAMESPACE_STD(TableGeneratorId)
Definition: TableGenerator.h:182
RAW Generator.
Definition: AcpiTableGenerator.h:81

This macro checks if the Table Generator ID is for a standard ACPI Table Generator.

Parameters
[in]TableGeneratorIdThe table generator ID.
Returns
TRUE if the table generator ID is for a standard ACPI Table Generator.
#define TABLE_GENERATOR_CREATOR_ID_ARM   SIGNATURE_32('A', 'R', 'M', 'H')

The Creator ID for the ACPI tables generated using the standard ACPI table generators.

Typedef Documentation

The ACPI_TABLE_GENERATOR structure provides an interface that the Table Manager can use to invoke the functions to build ACPI tables.

Note: Although the Generator is required to implement at least one pair of interfaces (BuildAcpiTable & FreeTableResources or BuildAcpiTableEx & FreeTableResourcesEx) for generating the ACPI table(s), if both pair of interfaces are implemented the extended version will take precedence.

typedef EFI_STATUS(* ACPI_TABLE_GENERATOR_BUILD_TABLE)(IN CONST ACPI_TABLE_GENERATOR *This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, OUT EFI_ACPI_DESCRIPTION_HEADER **Table)

This function pointer describes the interface to ACPI table build functions provided by the ACPI table generator and called by the Table Manager to build an ACPI table.

Parameters
[in]ThisPointer to the ACPI table generator.
[in]AcpiTableInfoPointer to the ACPI table information.
[in]CfgMgrProtocolPointer to the Configuration Manager Protocol interface.
[out]TablePointer to the generated ACPI table.
Returns
EFI_SUCCESS If the table is generated successfully or other failure codes as returned by the generator.
typedef EFI_STATUS(* ACPI_TABLE_GENERATOR_BUILD_TABLEEX)(IN CONST ACPI_TABLE_GENERATOR *This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, OUT EFI_ACPI_DESCRIPTION_HEADER ***Table, OUT UINTN *CONST TableCount)

This function pointer describes an extended interface to build ACPI Tables. The ACPI table generator can generate multiple ACPI Tables and return a pointer to the list of ACPI tables. The FreeTableResourcesEx() must be called to free any resources that may have been allocated using this interface.

Parameters
[in]ThisPointer to the ACPI table generator.
[in]AcpiTableInfoPointer to the ACPI table information.
[in]CfgMgrProtocolPointer to the Configuration Manager Protocol interface.
[out]TablePointer to a list of generated ACPI table(s).
[out]TableCountNumber of generated ACPI table(s).
Returns
EFI_SUCCESS If the table is generated successfully or other failure codes as returned by the generator.
typedef EFI_STATUS(* ACPI_TABLE_GENERATOR_FREE_TABLE)(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, IN OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table)

This function pointer describes the interface used by the Table Manager to give the generator an opportunity to free any resources allocated for building the ACPI table.

Parameters
[in]ThisPointer to the ACPI table generator.
[in]AcpiTableInfoPointer to the ACPI Table Info.
[in]CfgMgrProtocolPointer to the Configuration Manager Protocol Interface.
[in,out]TablePointer to the ACPI Table.
Returns
EFI_SUCCESS If freed successfully or other failure codes as returned by the generator.
typedef EFI_STATUS(* ACPI_TABLE_GENERATOR_FREE_TABLEEX)(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, IN OUT EFI_ACPI_DESCRIPTION_HEADER ***CONST Table, IN CONST UINTN TableCount)

This function pointer describes an extended interface used by the Table Manager to give the generator an opportunity to free any resources allocated for building the ACPI table. This interface must be used in conjunction with the BuildAcpiTableEx interface.

Parameters
[in]ThisPointer to the ACPI table generator.
[in]AcpiTableInfoPointer to the ACPI Table Info.
[in]CfgMgrProtocolPointer to the Configuration Manager Protocol Interface.
[in,out]TablePointer to the list of ACPI Table(s).
[in]TableCountNumber of ACPI table(s).
Returns
EFI_SUCCESS If freed successfully or other failure codes as returned by the generator.

The Dynamic Tables Framework provisions two classes of ACPI table generators.

  • Standard generators: The ACPI table generators implemented by the Dynamic Tables Framework.
  • OEM generators: The ACPI table generators customized by the OEM.

The Dynamic Tables Framework implements the following ACPI table generators:

  • RAW : This is the simplest ACPI table generator. It simply installs the ACPI table provided in the AcpiTableData member of the CM_STD_OBJ_ACPI_TABLE_INFO. The ACPI table data is provided by the Configuration Manager and is generated using an implementation defined mechanism.
  • DSDT : The DSDT generator is a clone of the RAW generator. The difference is in the way the ACPI Table Data is generated from an AML file.
  • SSDT : The SSDT generator is a clone of the RAW generator. The difference is in the way the ACPI Table Data is generated from an AML file.
  • FADT : The FADT generator collates the required platform information from the Configuration Manager and builds the FADT table.
  • MADT : The MADT generator collates the GIC information from the Configuration Manager and builds the MADT table.
  • GTDT : The GTDT generator collates the Timer information from the Configuration Manager and builds the GTDT table.
  • DBG2 : The DBG2 generator collates the debug serial port information from the Configuration Manager and builds the DBG2 table.
  • SPCR : The SPCR generator collates the serial port information from the Configuration Manager and builds the SPCR table.
  • MCFG : The MCFG generator collates the PCI configuration space information from the Configuration Manager and builds the MCFG table.
  • IORT : The IORT generator collates the IO Topology information from the Configuration Manager and builds the IORT table.
  • PPTT : The PPTT generator collates the processor topology information from the Configuration Manager and builds the PPTT table.
  • SRAT : The SRAT generator collates the system resource affinity information from the Configuration Manager and builds the SRAT table.
  • SSDT Serial-Port: The SSDT Serial generator collates the Serial port information from the Configuration Manager and patches the SSDT Serial Port template to build the SSDT Serial port table.
  • SSDT CMN-600: The SSDT CMN-600 generator collates the CMN-600 information from the Configuration Manager and patches the SSDT CMN-600 template to build the SSDT CMN-600 table.
  • SSDT Cpu-Topology: The SSDT Cpu-Topology generator collates the cpu and LPI information from the Configuration Manager and generates a SSDT table describing the CPU hierarchy.The ACPI_TABLE_GENERATOR_ID type describes ACPI table generator ID.

The ESTD_ACPI_TABLE_ID enum describes the ACPI table IDs reserved for the standard generators.

Enumeration Type Documentation

The ESTD_ACPI_TABLE_ID enum describes the ACPI table IDs reserved for the standard generators.

Enumerator
EStdAcpiTableIdReserved 

Reserved.

EStdAcpiTableIdRaw 

RAW Generator.

EStdAcpiTableIdDsdt 

DSDT Generator.

EStdAcpiTableIdSsdt 

SSDT Generator.

EStdAcpiTableIdFadt 

FADT Generator.

EStdAcpiTableIdMadt 

MADT Generator.

EStdAcpiTableIdGtdt 

GTDT Generator.

EStdAcpiTableIdDbg2 

DBG2 Generator.

EStdAcpiTableIdSpcr 

SPCR Generator.

EStdAcpiTableIdMcfg 

MCFG Generator.

EStdAcpiTableIdIort 

IORT Generator.

EStdAcpiTableIdPptt 

PPTT Generator.

EStdAcpiTableIdSrat 

SRAT Generator.

EStdAcpiTableIdSsdtSerialPort 

SSDT Serial-Port Generator.

EStdAcpiTableIdSsdtCmn600 

SSDT Cmn-600 Generator.

EStdAcpiTableIdSsdtCpuTopology 

SSDT Cpu Topology.

EStdAcpiTableIdMax 

Function Documentation

EFI_STATUS EFIAPI DeregisterAcpiTableGenerator ( IN CONST ACPI_TABLE_GENERATOR *CONST  Generator)

Deregister ACPI generator.

This function is called by the ACPI table generator to deregister itself from the ACPI table factory.

Parameters
[in]GeneratorPointer to the ACPI table generator.
Return values
EFI_SUCCESSSuccess.
EFI_INVALID_PARAMETERThe generator is invalid.
EFI_NOT_FOUNDThe requested generator is not found in the list of registered generators.
EFI_STATUS EFIAPI RegisterAcpiTableGenerator ( IN CONST ACPI_TABLE_GENERATOR *CONST  Generator)

Register ACPI table factory generator.

The ACPI table factory maintains a list of the Standard and OEM ACPI table generators.

Parameters
[in]GeneratorPointer to the ACPI table generator.
Return values
EFI_SUCCESSThe Generator was registered successfully.
EFI_INVALID_PARAMETERThe Generator ID is invalid or the Generator pointer is NULL.
EFI_ALREADY_STARTEDThe Generator for the Table ID is already registered.