]> git.proxmox.com Git - mirror_edk2.git/commitdiff
DynamicTablesPkg: Dynamic Table Factory Protocol
authorSami Mujawar <sami.mujawar@arm.com>
Sat, 15 Dec 2018 12:03:40 +0000 (12:03 +0000)
committerSami Mujawar <sami.mujawar@arm.com>
Tue, 19 Feb 2019 10:37:30 +0000 (10:37 +0000)
This patch introduces the dynamic table factory protocol
that provides an interface to register and retrieve
registered generators.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
Reviewed-by: Alexei Fedorov <alexei.fedorov@arm.com>
DynamicTablesPkg/DynamicTablesPkg.dec
DynamicTablesPkg/Include/Protocol/DynamicTableFactoryProtocol.h [new file with mode: 0644]

index e5e731085a721f5f2a0129b4678dedbb0c7b985a..3137c14247920974082bd74173cab4e7ac02b3f7 100644 (file)
@@ -27,3 +27,6 @@
   # Configuration Manager Protocol GUID\r
   gEdkiiConfigurationManagerProtocolGuid = { 0xd85a4835, 0x5a82, 0x4894, { 0xac, 0x2, 0x70, 0x6f, 0x43, 0xd5, 0x97, 0x8e } }\r
 \r
+  # Dynamic Table Factory Protocol GUID\r
+  gEdkiiDynamicTableFactoryProtocolGuid = { 0x91d1e327, 0xfe5a, 0x49b8, { 0xab, 0x65, 0xe, 0xce, 0x2d, 0xdb, 0x45, 0xec } }\r
+\r
diff --git a/DynamicTablesPkg/Include/Protocol/DynamicTableFactoryProtocol.h b/DynamicTablesPkg/Include/Protocol/DynamicTableFactoryProtocol.h
new file mode 100644 (file)
index 0000000..55d62c9
--- /dev/null
@@ -0,0 +1,269 @@
+/** @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