--- /dev/null
+/** @file\r
+\r
+ Copyright (c) 2017 - 2018, ARM Limited. All rights reserved.\r
+\r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+ @par Glossary:\r
+ - ACPI - Advanced Configuration and Power Interface\r
+ - SMBIOS - System Management BIOS\r
+ - DT - Device Tree\r
+**/\r
+\r
+#ifndef DYNAMIC_TABLE_FACTORY_PROTOCOL_H_\r
+#define DYNAMIC_TABLE_FACTORY_PROTOCOL_H_\r
+\r
+#include <AcpiTableGenerator.h>\r
+#include <SmbiosTableGenerator.h>\r
+#include <DeviceTreeTableGenerator.h>\r
+\r
+/** This macro defines the Dynamic Table Factory Protocol GUID.\r
+\r
+ GUID: {91D1E327-FE5A-49B8-AB65-0ECE2DDB45EC}\r
+*/\r
+#define EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL_GUID \\r
+ { 0x91d1e327, 0xfe5a, 0x49b8, \\r
+ { 0xab, 0x65, 0xe, 0xce, 0x2d, 0xdb, 0x45, 0xec } \\r
+ };\r
+\r
+/** This macro defines the Configuration Manager Protocol Revision.\r
+*/\r
+#define EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL_REVISION CREATE_REVISION (1, 0)\r
+\r
+#pragma pack(1)\r
+\r
+/**\r
+ Forward declarations:\r
+*/\r
+typedef struct DynamicTableFactoryProtocol EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL;\r
+typedef struct DynamicTableFactoryInfo EDKII_DYNAMIC_TABLE_FACTORY_INFO;\r
+\r
+/** Return a pointer to the ACPI table generator.\r
+\r
+ @param [in] This Pointer to the Dynamic Table Factory Protocol.\r
+ @param [in] TableId The ACPI table generator ID for the\r
+ requested generator.\r
+ @param [out] Generator Pointer to the requested ACPI table\r
+ generator.\r
+\r
+ @retval EFI_SUCCESS Success.\r
+ @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
+ @retval EFI_NOT_FOUND The requested generator is not found\r
+ in the list of registered generators.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_ACPI_TABLE_GENERATOR) (\r
+ IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL * CONST This,\r
+ IN CONST ACPI_TABLE_GENERATOR_ID GeneratorId,\r
+ OUT CONST ACPI_TABLE_GENERATOR ** CONST Generator\r
+ );\r
+\r
+/** Registers an ACPI table generator.\r
+\r
+ @param [in] Generator Pointer to the ACPI table generator.\r
+\r
+ @retval EFI_SUCCESS The Generator was registered\r
+ successfully.\r
+ @retval EFI_INVALID_PARAMETER The Generator ID is invalid or\r
+ the Generator pointer is NULL.\r
+ @retval EFI_ALREADY_STARTED The Generator for the Table ID is\r
+ already registered.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_ACPI_TABLE_GENERATOR) (\r
+ IN CONST ACPI_TABLE_GENERATOR * CONST Generator\r
+ );\r
+\r
+/** Deregister an ACPI table generator.\r
+\r
+ @param [in] Generator Pointer to the ACPI table generator.\r
+\r
+ @retval EFI_SUCCESS Success.\r
+ @retval EFI_INVALID_PARAMETER The generator is invalid.\r
+ @retval EFI_NOT_FOUND The requested generator is not found\r
+ in the list of registered generators.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_ACPI_TABLE_GENERATOR) (\r
+ IN CONST ACPI_TABLE_GENERATOR * CONST Generator\r
+ );\r
+\r
+/** Return a pointer to the SMBIOS table generator.\r
+\r
+ @param [in] This Pointer to the Dynamic Table Factory Protocol.\r
+ @param [in] TableId The SMBIOS table generator ID for the\r
+ requested generator.\r
+ @param [out] Generator Pointer to the requested SMBIOS table\r
+ generator.\r
+\r
+ @retval EFI_SUCCESS Success.\r
+ @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
+ @retval EFI_NOT_FOUND The requested generator is not found\r
+ in the list of registered generators.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_SMBIOS_TABLE_GENERATOR) (\r
+ IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL * CONST This,\r
+ IN CONST SMBIOS_TABLE_GENERATOR_ID GeneratorId,\r
+ OUT CONST SMBIOS_TABLE_GENERATOR ** CONST Generator\r
+ );\r
+\r
+/** Register a SMBIOS table generator.\r
+\r
+ @param [in] Generator Pointer to the SMBIOS table generator.\r
+\r
+ @retval EFI_SUCCESS The Generator was registered\r
+ successfully.\r
+ @retval EFI_INVALID_PARAMETER The Generator ID is invalid or\r
+ the Generator pointer is NULL.\r
+ @retval EFI_ALREADY_STARTED The Generator for the Table ID is\r
+ already registered.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR) (\r
+ IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator\r
+ );\r
+\r
+/** Deregister a SMBIOS table generator.\r
+\r
+ @param [in] Generator Pointer to the SMBIOS table generator.\r
+\r
+ @retval EFI_SUCCESS Success.\r
+ @retval EFI_INVALID_PARAMETER The generator is invalid.\r
+ @retval EFI_NOT_FOUND The requested generator is not found\r
+ in the list of registered generators.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_SMBIOS_TABLE_GENERATOR) (\r
+ IN CONST SMBIOS_TABLE_GENERATOR * CONST Generator\r
+ );\r
+\r
+/** Return a pointer to the Device Tree table generator.\r
+\r
+ @param [in] This Pointer to the Dynamic Table Factory Protocol.\r
+ @param [in] TableId The Device Tree table generator ID for the\r
+ requested generator.\r
+ @param [out] Generator Pointer to the requested Device Tree table\r
+ generator.\r
+\r
+ @retval EFI_SUCCESS Success.\r
+ @retval EFI_INVALID_PARAMETER A parameter is invalid.\r
+ @retval EFI_NOT_FOUND The requested generator is not found\r
+ in the list of registered generators.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_DT_TABLE_GENERATOR) (\r
+ IN CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL * CONST This,\r
+ IN CONST DT_TABLE_GENERATOR_ID GeneratorId,\r
+ OUT CONST DT_TABLE_GENERATOR ** CONST Generator\r
+ );\r
+\r
+/** Register a DT table generator.\r
+\r
+ @param [in] Generator Pointer to the DT table generator.\r
+\r
+ @retval EFI_SUCCESS The Generator was registered\r
+ successfully.\r
+ @retval EFI_INVALID_PARAMETER The Generator ID is invalid or\r
+ the Generator pointer is NULL.\r
+ @retval EFI_ALREADY_STARTED The Generator for the Table ID is\r
+ already registered.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_DT_TABLE_GENERATOR) (\r
+ IN CONST DT_TABLE_GENERATOR * CONST Generator\r
+ );\r
+\r
+/** Deregister a DT table generator.\r
+\r
+ This function is called by the DT table generator to deregister itself\r
+ from the DT table factory.\r
+\r
+ @param [in] Generator Pointer to the DT table generator.\r
+\r
+ @retval EFI_SUCCESS Success.\r
+ @retval EFI_INVALID_PARAMETER The generator is invalid.\r
+ @retval EFI_NOT_FOUND The requested generator is not found\r
+ in the list of registered generators.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+EFIAPI\r
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_DT_TABLE_GENERATOR) (\r
+ IN CONST DT_TABLE_GENERATOR * CONST Generator\r
+ );\r
+\r
+/** A structure describing the Dynamic Table Factory Protocol interface.\r
+*/\r
+typedef struct DynamicTableFactoryProtocol {\r
+ /// The Dynamic Table Factory Protocol revision.\r
+ UINT32 Revision;\r
+\r
+ /// The interface used to request an ACPI Table Generator.\r
+ EDKII_DYNAMIC_TABLE_FACTORY_GET_ACPI_TABLE_GENERATOR GetAcpiTableGenerator;\r
+\r
+ /// Register an ACPI table Generator\r
+ EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_ACPI_TABLE_GENERATOR\r
+ RegisterAcpiTableGenerator;\r
+\r
+ /// Deregister an ACPI table Generator\r
+ EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_ACPI_TABLE_GENERATOR\r
+ DeregisterAcpiTableGenerator;\r
+\r
+ /// The interface used to request a SMBIOS Table Generator.\r
+ EDKII_DYNAMIC_TABLE_FACTORY_GET_SMBIOS_TABLE_GENERATOR GetSmbiosTableGenerator;\r
+\r
+ /// Register an SMBIOS table Generator\r
+ EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR\r
+ RegisterSmbiosTableGenerator;\r
+\r
+ /// Deregister an SMBIOS table Generator\r
+ EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR\r
+ DeregisterSmbiosTableGenerator;\r
+\r
+ /// The interface used to request a Device Tree Table Generator.\r
+ EDKII_DYNAMIC_TABLE_FACTORY_GET_DT_TABLE_GENERATOR GetDtTableGenerator;\r
+\r
+ /// Register a DT generator\r
+ EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_DT_TABLE_GENERATOR\r
+ RegisterDtTableGenerator;\r
+\r
+ /// Deregister a DT generator\r
+ EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_DT_TABLE_GENERATOR\r
+ DeregisterDtTableGenerator;\r
+\r
+ /** Pointer to the data structure that holds the\r
+ list of registered table generators\r
+ */\r
+ EDKII_DYNAMIC_TABLE_FACTORY_INFO * TableFactoryInfo;\r
+} EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL;\r
+\r
+/** The Dynamic Table Factory Protocol GUID.\r
+*/\r
+extern EFI_GUID gEdkiiDynamicTableFactoryProtocolGuid;\r
+\r
+#pragma pack()\r
+\r
+#endif // DYNAMIC_TABLE_FACTORY_PROTOCOL_H_\r