public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Sami Mujawar <sami.mujawar@arm.com>
To: edk2-devel@lists.01.org
Cc: alexei.fedorov@arm.com, leif.lindholm@linaro.org,
	Matteo.Carlini@arm.com,  Stephanie.Hughes-Fitt@arm.com,
	nd@arm.com
Subject: [PATCH v2 12/22] DynamicTablesPkg: Dynamic Table Factory Protocol
Date: Thu, 24 Jan 2019 15:44:26 +0000	[thread overview]
Message-ID: <20190124154436.21996-13-sami.mujawar@arm.com> (raw)
In-Reply-To: <20190124154436.21996-1-sami.mujawar@arm.com>

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>
---
 DynamicTablesPkg/DynamicTablesPkg.dec                           |   3 +
 DynamicTablesPkg/Include/Protocol/DynamicTableFactoryProtocol.h | 269 ++++++++++++++++++++
 2 files changed, 272 insertions(+)

diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/DynamicTablesPkg.dec
index e5e731085a721f5f2a0129b4678dedbb0c7b985a..3137c14247920974082bd74173cab4e7ac02b3f7 100644
--- a/DynamicTablesPkg/DynamicTablesPkg.dec
+++ b/DynamicTablesPkg/DynamicTablesPkg.dec
@@ -27,3 +27,6 @@ [Protocols]
   # Configuration Manager Protocol GUID
   gEdkiiConfigurationManagerProtocolGuid = { 0xd85a4835, 0x5a82, 0x4894, { 0xac, 0x2, 0x70, 0x6f, 0x43, 0xd5, 0x97, 0x8e } }
 
+  # Dynamic Table Factory Protocol GUID
+  gEdkiiDynamicTableFactoryProtocolGuid = { 0x91d1e327, 0xfe5a, 0x49b8, { 0xab, 0x65, 0xe, 0xce, 0x2d, 0xdb, 0x45, 0xec } }
+
diff --git a/DynamicTablesPkg/Include/Protocol/DynamicTableFactoryProtocol.h b/DynamicTablesPkg/Include/Protocol/DynamicTableFactoryProtocol.h
new file mode 100644
index 0000000000000000000000000000000000000000..55d62c9e7244c1cca35aaa6c7e3b1dbf9125c3b5
--- /dev/null
+++ b/DynamicTablesPkg/Include/Protocol/DynamicTableFactoryProtocol.h
@@ -0,0 +1,269 @@
+/** @file
+
+  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.
+
+  @par Glossary:
+    - ACPI   - Advanced Configuration and Power Interface
+    - SMBIOS - System Management BIOS
+    - DT     - Device Tree
+**/
+
+#ifndef DYNAMIC_TABLE_FACTORY_PROTOCOL_H_
+#define DYNAMIC_TABLE_FACTORY_PROTOCOL_H_
+
+#include <AcpiTableGenerator.h>
+#include <SmbiosTableGenerator.h>
+#include <DeviceTreeTableGenerator.h>
+
+/** This macro defines the Dynamic Table Factory Protocol GUID.
+
+  GUID: {91D1E327-FE5A-49B8-AB65-0ECE2DDB45EC}
+*/
+#define EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL_GUID       \
+  { 0x91d1e327, 0xfe5a, 0x49b8,                         \
+    { 0xab, 0x65, 0xe, 0xce, 0x2d, 0xdb, 0x45, 0xec }   \
+  };
+
+/** This macro defines the Configuration Manager Protocol Revision.
+*/
+#define EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL_REVISION  CREATE_REVISION (1, 0)
+
+#pragma pack(1)
+
+/**
+  Forward declarations:
+*/
+typedef struct DynamicTableFactoryProtocol EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL;
+typedef struct DynamicTableFactoryInfo EDKII_DYNAMIC_TABLE_FACTORY_INFO;
+
+/** Return a pointer to the ACPI table generator.
+
+  @param [in]  This       Pointer to the Dynamic Table Factory Protocol.
+  @param [in]  TableId    The ACPI table generator ID for the
+                          requested generator.
+  @param [out] Generator  Pointer to the requested ACPI table
+                          generator.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_NOT_FOUND         The requested generator is not found
+                                in the list of registered generators.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_ACPI_TABLE_GENERATOR) (
+  IN  CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL  * CONST This,
+  IN  CONST ACPI_TABLE_GENERATOR_ID                       GeneratorId,
+  OUT CONST ACPI_TABLE_GENERATOR                 ** CONST Generator
+  );
+
+/** Registers an ACPI table generator.
+
+  @param [in]  Generator        Pointer to the ACPI table generator.
+
+  @retval EFI_SUCCESS           The Generator was registered
+                                successfully.
+  @retval EFI_INVALID_PARAMETER The Generator ID is invalid or
+                                the Generator pointer is NULL.
+  @retval EFI_ALREADY_STARTED   The Generator for the Table ID is
+                                already registered.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_ACPI_TABLE_GENERATOR) (
+  IN  CONST ACPI_TABLE_GENERATOR                * CONST Generator
+  );
+
+/** Deregister an ACPI table generator.
+
+  @param [in]  Generator       Pointer to the ACPI table generator.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER The generator is invalid.
+  @retval EFI_NOT_FOUND         The requested generator is not found
+                                in the list of registered generators.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_ACPI_TABLE_GENERATOR) (
+  IN  CONST ACPI_TABLE_GENERATOR                * CONST Generator
+  );
+
+/** Return a pointer to the SMBIOS table generator.
+
+  @param [in]  This       Pointer to the Dynamic Table Factory Protocol.
+  @param [in]  TableId    The SMBIOS table generator ID for the
+                          requested generator.
+  @param [out] Generator  Pointer to the requested SMBIOS table
+                          generator.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_NOT_FOUND         The requested generator is not found
+                                in the list of registered generators.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_SMBIOS_TABLE_GENERATOR) (
+  IN  CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL  * CONST This,
+  IN  CONST SMBIOS_TABLE_GENERATOR_ID                     GeneratorId,
+  OUT CONST SMBIOS_TABLE_GENERATOR               ** CONST Generator
+  );
+
+/** Register a SMBIOS table generator.
+
+  @param [in]  Generator       Pointer to the SMBIOS table generator.
+
+  @retval EFI_SUCCESS           The Generator was registered
+                                successfully.
+  @retval EFI_INVALID_PARAMETER The Generator ID is invalid or
+                                the Generator pointer is NULL.
+  @retval EFI_ALREADY_STARTED   The Generator for the Table ID is
+                                already registered.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR) (
+  IN  CONST SMBIOS_TABLE_GENERATOR              * CONST Generator
+  );
+
+/** Deregister a SMBIOS table generator.
+
+  @param [in]  Generator       Pointer to the SMBIOS table generator.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER The generator is invalid.
+  @retval EFI_NOT_FOUND         The requested generator is not found
+                                in the list of registered generators.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_SMBIOS_TABLE_GENERATOR) (
+  IN  CONST SMBIOS_TABLE_GENERATOR              * CONST Generator
+  );
+
+/** Return a pointer to the Device Tree table generator.
+
+  @param [in]  This       Pointer to the Dynamic Table Factory Protocol.
+  @param [in]  TableId    The Device Tree table generator ID for the
+                          requested generator.
+  @param [out] Generator  Pointer to the requested Device Tree table
+                          generator.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_NOT_FOUND         The requested generator is not found
+                                in the list of registered generators.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_GET_DT_TABLE_GENERATOR) (
+  IN  CONST EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL  * CONST This,
+  IN  CONST DT_TABLE_GENERATOR_ID                         GeneratorId,
+  OUT CONST DT_TABLE_GENERATOR                   ** CONST Generator
+  );
+
+/** Register a DT table generator.
+
+  @param [in]  Generator       Pointer to the DT table generator.
+
+  @retval EFI_SUCCESS           The Generator was registered
+                                successfully.
+  @retval EFI_INVALID_PARAMETER The Generator ID is invalid or
+                                the Generator pointer is NULL.
+  @retval EFI_ALREADY_STARTED   The Generator for the Table ID is
+                                already registered.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_DT_TABLE_GENERATOR) (
+  IN  CONST DT_TABLE_GENERATOR                * CONST Generator
+  );
+
+/** Deregister a DT table generator.
+
+  This function is called by the DT table generator to deregister itself
+  from the DT table factory.
+
+  @param [in]  Generator       Pointer to the DT table generator.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER The generator is invalid.
+  @retval EFI_NOT_FOUND         The requested generator is not found
+                                in the list of registered generators.
+**/
+typedef
+EFI_STATUS
+EFIAPI
+(EFIAPI * EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_DT_TABLE_GENERATOR) (
+  IN  CONST DT_TABLE_GENERATOR                * CONST Generator
+  );
+
+/** A structure describing the Dynamic Table Factory Protocol interface.
+*/
+typedef struct DynamicTableFactoryProtocol {
+  /// The Dynamic Table Factory Protocol revision.
+  UINT32                                                 Revision;
+
+  /// The interface used to request an ACPI Table Generator.
+  EDKII_DYNAMIC_TABLE_FACTORY_GET_ACPI_TABLE_GENERATOR   GetAcpiTableGenerator;
+
+  /// Register an ACPI table Generator
+  EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_ACPI_TABLE_GENERATOR
+    RegisterAcpiTableGenerator;
+
+  /// Deregister an ACPI table Generator
+  EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_ACPI_TABLE_GENERATOR
+    DeregisterAcpiTableGenerator;
+
+  /// The interface used to request a SMBIOS Table Generator.
+  EDKII_DYNAMIC_TABLE_FACTORY_GET_SMBIOS_TABLE_GENERATOR GetSmbiosTableGenerator;
+
+  /// Register an SMBIOS table Generator
+  EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR
+    RegisterSmbiosTableGenerator;
+
+  /// Deregister an SMBIOS table Generator
+  EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_SMBIOS_TABLE_GENERATOR
+    DeregisterSmbiosTableGenerator;
+
+  /// The interface used to request a Device Tree Table Generator.
+  EDKII_DYNAMIC_TABLE_FACTORY_GET_DT_TABLE_GENERATOR     GetDtTableGenerator;
+
+  /// Register a DT generator
+  EDKII_DYNAMIC_TABLE_FACTORY_REGISTER_DT_TABLE_GENERATOR
+    RegisterDtTableGenerator;
+
+  /// Deregister a DT generator
+  EDKII_DYNAMIC_TABLE_FACTORY_DEREGISTER_DT_TABLE_GENERATOR
+    DeregisterDtTableGenerator;
+
+  /** Pointer to the data structure that holds the
+      list of registered table generators
+  */
+  EDKII_DYNAMIC_TABLE_FACTORY_INFO          * TableFactoryInfo;
+} EDKII_DYNAMIC_TABLE_FACTORY_PROTOCOL;
+
+/** The Dynamic Table Factory Protocol GUID.
+*/
+extern EFI_GUID gEdkiiDynamicTableFactoryProtocolGuid;
+
+#pragma pack()
+
+#endif // DYNAMIC_TABLE_FACTORY_PROTOCOL_H_
-- 
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'




  parent reply	other threads:[~2019-01-24 16:40 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-24 15:44 [PATCH v2 00/22] DynamicTablesPkg: Introduce Dynamic Tables Framework Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 01/22] DynamicTablesPkg: " Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 02/22] DynamicTablesPkg: Table Generator definition Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 03/22] DynamicTablesPkg: Acpi Table Generator Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 04/22] DynamicTablesPkg: SMBIOS " Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 05/22] DynamicTablesPkg: DT " Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 06/22] DynamicTablesPkg: Standard NameSpace Objects Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 07/22] DynamicTablesPkg: Arm " Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 08/22] DynamicTablesPkg: Configuration Manager Objects Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 09/22] DynamicTablesPkg: Configuration Manager Protocol Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 10/22] DynamicTablesPkg: Configuration Manager Helper Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 11/22] DynamicTablesPkg: Table Helper Library Sami Mujawar
2019-01-24 15:44 ` Sami Mujawar [this message]
2019-01-24 15:44 ` [PATCH v2 13/22] DynamicTablesPkg: Dynamic Table Factory Dxe Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 14/22] DynamicTablesPkg: Dynamic Table Manager Dxe Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 15/22] DynamicTablesPkg: Arm Raw/DSDT/SSDT Generator Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 16/22] DynamicTablesPkg: Arm ACPI FADT Generator Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 17/22] DynamicTablesPkg: Arm ACPI MADT Generator Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 18/22] DynamicTablesPkg: Arm ACPI GTDT Generator Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 19/22] DynamicTablesPkg: Arm SPCR Table Generator Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 20/22] DynamicTablesPkg: Arm DBG2 " Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 21/22] DynamicTablesPkg: Arm PCI MCFG " Sami Mujawar
2019-01-24 15:44 ` [PATCH v2 22/22] DynamicTablesPkg: Arm IORT " Sami Mujawar
2019-01-29 11:27 ` [PATCH v2 00/22] DynamicTablesPkg: Introduce Dynamic Tables Framework Alexei Fedorov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190124154436.21996-13-sami.mujawar@arm.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox