public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "PierreGondois" <pierre.gondois@arm.com>
To: pierre.gondois@arm.com, devel@edk2.groups.io
Cc: Sami Mujawar <sami.mujawar@arm.com>,
	Alexei Fedorov <Alexei.Fedorov@arm.com>
Subject: [PATCH v2 1/5] DynamicTablesPkg: Definition for DynamicPlatRepoLib interface
Date: Tue, 23 Nov 2021 12:10:06 +0100	[thread overview]
Message-ID: <20211123111010.72679-2-Pierre.Gondois@arm.com> (raw)
In-Reply-To: <20211123111010.72679-1-Pierre.Gondois@arm.com>

From: Pierre Gondois <Pierre.Gondois@arm.com>

The DynamicPlatRepoLib library allows to handle dynamically created
CmObj. The dynamic platform repository can be in the following states:
1 - Non-initialised
2 - Transient:
    Possibility to add CmObj to the platform, but not to query them.
3 - Finalised:
    Possibility to query CmObj, but not to add new.

A token is allocated to each CmObj added to the dynamic platform
repository (except for reference tokens CmObj). This allows to
retrieve dynamic CmObjs among all CmObj (static CmObj for instance).

This patch defines the library interface of the DynamicPlatRepo.

Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
---
 DynamicTablesPkg/DynamicTablesPkg.dec         |   3 +
 .../Include/Library/DynamicPlatRepoLib.h      | 114 ++++++++++++++++++
 2 files changed, 117 insertions(+)
 create mode 100644 DynamicTablesPkg/Include/Library/DynamicPlatRepoLib.h

diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/DynamicTablesPkg.dec
index 80a61dd2dbac..9b74c5a67178 100644
--- a/DynamicTablesPkg/DynamicTablesPkg.dec
+++ b/DynamicTablesPkg/DynamicTablesPkg.dec
@@ -24,6 +24,9 @@ [LibraryClasses]
   ##  @libraryclass  Defines a set of APIs for Dynamic AML generation.
   AmlLib|Include/Library/AmlLib/AmlLib.h
 
+  ##  @libraryclass  Defines a set of APIs to handle dynamically created CmObj.
+  DynamicPlatRepoLib|Include/Library/DynamicPlatRepoLib.h
+
   ##  @libraryclass  Defines a set of APIs to a hardware information parser.
   HwInfoParserLib|Include/Library/HwInfoParserLib.h
 
diff --git a/DynamicTablesPkg/Include/Library/DynamicPlatRepoLib.h b/DynamicTablesPkg/Include/Library/DynamicPlatRepoLib.h
new file mode 100644
index 000000000000..4a76b30399b4
--- /dev/null
+++ b/DynamicTablesPkg/Include/Library/DynamicPlatRepoLib.h
@@ -0,0 +1,114 @@
+/** @file
+  Dynamic Platform Info Repository
+
+  Copyright (c) 2021, Arm Limited. All rights reserved.<BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+  @par Glossary:
+    - Cm or CM   - Configuration Manager
+    - Obj or OBJ - Object
+**/
+
+#ifndef DYNAMIC_PLAT_REPO_H_
+#define DYNAMIC_PLAT_REPO_H_
+
+#include <Protocol/ConfigurationManagerProtocol.h>
+
+/** A structure describing the platform configuration
+    manager repository information
+*/
+typedef VOID*                DYNAMIC_PLATFORM_REPOSITORY_INFO;
+
+/** Add an object to the dynamic platform repository.
+
+  @param [in]  This       This dynamic platform repository.
+  @param [in]  CmObjDesc  CmObj to add. The data is copied.
+  @param [out] Token      If not NULL, token allocated to this CmObj.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_OUT_OF_RESOURCES  An allocation has failed.
+**/
+EFI_STATUS
+EFIAPI
+DynPlatRepoAddObject (
+  IN        DYNAMIC_PLATFORM_REPOSITORY_INFO    * This,
+  IN  CONST CM_OBJ_DESCRIPTOR                   * CmObjDesc,
+  OUT       CM_OBJECT_TOKEN                     * Token OPTIONAL
+  );
+
+/** Finalise the dynamic repository.
+
+  Finalising means:
+   - Preventing any further objects from being added.
+   - Allowing to get objects from the dynamic repository
+     (not possible before a call to this function).
+
+  @param [in]  This       This dynamic platform repository.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_ALREADY_STARTED   Instance already initialised.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_BUFFER_TOO_SMALL  Buffer too small.
+  @retval EFI_OUT_OF_RESOURCES  An allocation has failed.
+**/
+EFI_STATUS
+EFIAPI
+DynamicPlatRepoFinalise (
+  IN  DYNAMIC_PLATFORM_REPOSITORY_INFO      * This
+  );
+
+/** Get a CmObj from the dynamic repository.
+
+  @param [in]      This        Pointer to the Dynamic Platform Repository.
+  @param [in]      CmObjectId  The Configuration Manager Object ID.
+  @param [in]      Token       An optional token identifying the object. If
+                               unused this must be CM_NULL_TOKEN.
+  @param [in, out] CmObjDesc   Pointer to the Configuration Manager Object
+                               descriptor describing the requested Object.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_NOT_FOUND         The required object information is not found.
+**/
+EFI_STATUS
+EFIAPI
+DynamicPlatRepoGetObject (
+  IN      DYNAMIC_PLATFORM_REPOSITORY_INFO    * This,
+  IN      CM_OBJECT_ID                          CmObjectId,
+  IN      CM_OBJECT_TOKEN                       Token OPTIONAL,
+  IN  OUT CM_OBJ_DESCRIPTOR                   * CmObjDesc
+  );
+
+/** Initialize the dynamic platform repository.
+
+  @param [out]  DynPlatRepo   If success, contains the initialised dynamic
+                              platform repository.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_OUT_OF_RESOURCES  An allocation has failed.
+**/
+EFI_STATUS
+EFIAPI
+DynamicPlatRepoInit (
+  OUT DYNAMIC_PLATFORM_REPOSITORY_INFO   ** DynPlatRepo
+  );
+
+/** Shutdown the dynamic platform repository.
+
+  Free all the memory allocated for the dynamic platform repository.
+
+  @param [in]  DynPlatRepo    The dynamic platform repository.
+
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_SUCCESS           Success.
+**/
+EFI_STATUS
+EFIAPI
+DynamicPlatRepoShutdown (
+  IN  DYNAMIC_PLATFORM_REPOSITORY_INFO * DynPlatRepo
+  );
+
+#endif // DYNAMIC_PLAT_REPO_H_
-- 
2.25.1


  reply	other threads:[~2021-11-23 11:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-23 11:10 [PATCH v2 0/5] Add DynamicPlatRepoLib PierreGondois
2021-11-23 11:10 ` PierreGondois [this message]
2021-11-23 11:10 ` [PATCH v2 2/5] DynamicTablesPkg: DynamicPlatRepo: Add TokenGenerator PierreGondois
2021-11-23 11:10 ` [PATCH v2 3/5] DynamicTablesPkg: DynamicPlatRepo: Add TokenFixer PierreGondois
2021-11-23 11:10 ` [PATCH v2 4/5] DynamicTablesPkg: DynamicPlatRepo: Add TokenMapper PierreGondois
2021-11-23 11:10 ` [PATCH v2 5/5] DynamicTablesPkg: Add DynamicPlatRepo library PierreGondois

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=20211123111010.72679-2-Pierre.Gondois@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