[edk2-devel] [PATCH v1 3/5] DynamicTablesPkg: DynamicPlatRepo: Add TokenFixer

PierreGondois pierre.gondois at arm.com
Wed Jun 23 13:36:11 UTC 2021


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

The DynamicPlatRepo 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 add the TokenFixer files, allowing to update the
self-token some CmObj have.

Signed-off-by: Sami Mujawar <sami.mujawar at arm.com>
Signed-off-by: Pierre Gondois <Pierre.Gondois at arm.com>
---
 .../DynamicPlatRepoLib/CmObjectTokenFixer.c   | 164 ++++++++++++++++++
 .../DynamicPlatRepoLib/CmObjectTokenFixer.h   |  52 ++++++
 2 files changed, 216 insertions(+)
 create mode 100644 DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c
 create mode 100644 DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.h

diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c
new file mode 100644
index 000000000000..74eeefccf4ce
--- /dev/null
+++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c
@@ -0,0 +1,164 @@
+/** @file
+  Configuration Manager object token fixer
+
+  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
+**/
+
+#include <Library/DebugLib.h>
+#include <Protocol/ConfigurationManagerProtocol.h>
+#include "CmObjectTokenFixer.h"
+
+/** Token fixer not implemented.
+
+  Most of the objects are not generated by this parser. Add the missing
+  functions when needed.
+
+  CmObjectToken fixer function that updates the Tokens in the CmObjects.
+
+  @param [in]  CmObject    Pointer to the Configuration Manager Object.
+  @param [in]  Token       Token to be updated in the CmObject.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_UNSUPPORTED       Not supported.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+TokenFixerNotImplemented (
+  IN  CM_OBJ_DESCRIPTOR   * CmObject,
+  IN  CM_OBJECT_TOKEN       Token
+  )
+{
+  ASSERT (0);
+  return EFI_UNSUPPORTED;
+}
+
+/** EArmObjItsGroup token fixer.
+
+  CmObjectToken fixer function that updates the Tokens in the CmObjects.
+
+  @param [in]  CmObject    Pointer to the Configuration Manager Object.
+  @param [in]  Token       Token to be updated in the CmObject.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_UNSUPPORTED       Not supported.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+TokenFixerItsGroup (
+  IN  CM_OBJ_DESCRIPTOR   * CmObject,
+  IN  CM_OBJECT_TOKEN       Token
+  )
+{
+  ASSERT (CmObject != NULL);
+  ((CM_ARM_ITS_GROUP_NODE*)CmObject)->Token = Token;
+  return EFI_SUCCESS;
+}
+
+/** TokenFixer functions table.
+
+  A CmObj having a CM_OBJECT_TOKEN field might need to have its
+  Token fixed. Each CmObj can have its Token in a specific way.
+*/
+CONST
+CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = {
+  NULL,                             ///<  0 - Reserved
+  NULL,                             ///<  1 - Boot Architecture Info
+  NULL,                             ///<  2 - CPU Info
+  NULL,                             ///<  3 - Power Management Profile Info
+  NULL,                             ///<  4 - GIC CPU Interface Info
+  NULL,                             ///<  5 - GIC Distributor Info
+  NULL,                             ///<  6 - GIC MSI Frame Info
+  NULL,                             ///<  7 - GIC Redistributor Info
+  NULL,                             ///<  8 - GIC ITS Info
+  NULL,                             ///<  9 - Serial Console Port Info
+  NULL,                             ///< 10 - Serial Debug Port Info
+  NULL,                             ///< 11 - Generic Timer Info
+  NULL,                             ///< 12 - Platform GT Block Info
+  NULL,                             ///< 13 - Generic Timer Block Frame Info
+  NULL,                             ///< 14 - Platform Generic Watchdog
+  NULL,                             ///< 15 - PCI Configuration Space Info
+  NULL,                             ///< 16 - Hypervisor Vendor Id
+  NULL,                             ///< 17 - Fixed feature flags for FADT
+  TokenFixerItsGroup,               ///< 18 - ITS Group
+  TokenFixerNotImplemented,         ///< 19 - Named Component
+  TokenFixerNotImplemented,         ///< 20 - Root Complex
+  TokenFixerNotImplemented,         ///< 21 - SMMUv1 or SMMUv2
+  TokenFixerNotImplemented,         ///< 22 - SMMUv3
+  TokenFixerNotImplemented,         ///< 23 - PMCG
+  NULL,                             ///< 24 - GIC ITS Identifier Array
+  NULL,                             ///< 25 - ID Mapping Array
+  NULL,                             ///< 26 - SMMU Interrupt Array
+  TokenFixerNotImplemented,         ///< 27 - Processor Hierarchy Info
+  TokenFixerNotImplemented,         ///< 28 - Cache Info
+  TokenFixerNotImplemented,         ///< 29 - Processor Node ID Info
+  NULL,                             ///< 30 - CM Object Reference
+  NULL,                             ///< 31 - Memory Affinity Info
+  NULL,                             ///< 32 - Device Handle Acpi
+  NULL,                             ///< 33 - Device Handle Pci
+  NULL,                             ///< 34 - Generic Initiator Affinity
+  NULL,                             ///< 35 - Generic Serial Port Info
+  NULL,                             ///< 36 - CMN-600 Info
+  NULL,                             ///< 37 - Lpi Info
+  NULL,                             ///< 38 - Pci Address Map Info
+  NULL,                             ///< 39 - Pci Interrupt Map Info
+};
+
+/** CmObj token fixer.
+
+  Some CmObj structures have a self-token, i.e. they are storing their own
+  token value in the CmObj. Dynamically created CmObj need to have their
+  self-token assigned at some point.
+
+  @param [in]  CmObjDesc   Pointer to the Configuration Manager Object.
+  @param [in]  Token       Token to update the CmObjDesc with.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_UNSUPPORTED       Not supported.
+**/
+EFI_STATUS
+EFIAPI
+FixupCmObjectSelfToken (
+  IN  CM_OBJ_DESCRIPTOR   * CmObjDesc,
+  IN  CM_OBJECT_TOKEN       Token
+  )
+{
+  EFI_STATUS              Status;
+  CM_OBJECT_TOKEN_FIXER   TokenFixerFunc;
+  CM_OBJECT_ID            ArmNamespaceObjId;
+
+  // Only support Arm objects for now.
+  if ((CmObjDesc == NULL)   ||
+      (GET_CM_NAMESPACE_ID (CmObjDesc->ObjectId) != EObjNameSpaceArm)) {
+    ASSERT (0);
+    return EFI_INVALID_PARAMETER;
+  }
+
+  ArmNamespaceObjId = GET_CM_OBJECT_ID (CmObjDesc->ObjectId);
+  if (ArmNamespaceObjId >= EArmObjMax) {
+    ASSERT (0);
+    return EFI_INVALID_PARAMETER;
+  }
+
+  // Fixup self-token if necessary.
+  TokenFixerFunc = TokenFixer[ArmNamespaceObjId];
+  if (TokenFixerFunc != NULL) {
+    Status = TokenFixerFunc (CmObjDesc, Token);
+    if (EFI_ERROR (Status)) {
+      ASSERT (0);
+      return Status;
+    }
+  }
+
+  return EFI_SUCCESS;
+}
diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.h b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.h
new file mode 100644
index 000000000000..d8cc7094697f
--- /dev/null
+++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.h
@@ -0,0 +1,52 @@
+/** @file
+  Configuration Manager object token fixer
+
+  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 CM_OBJECT_TOKEN_FIXER_H_
+#define CM_OBJECT_TOKEN_FIXER_H_
+
+/** CmObjectToken fixer function that updates the Tokens in the CmObjects.
+
+  @param [in]  CmObject    Pointer to the Configuration Manager Object.
+  @param [in]  Token       Token to be updated in the CmObject.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_UNSUPPORTED       Not supported.
+**/
+typedef
+EFI_STATUS
+(EFIAPI * CM_OBJECT_TOKEN_FIXER) (
+  IN  CM_OBJ_DESCRIPTOR   * CmObject,
+  IN  CM_OBJECT_TOKEN       Token
+  );
+
+/** CmObj token fixer.
+
+  Some CmObj structures have a self-token, i.e. they are storing their own
+  token value in the CmObj. Dynamically created CmObj need to have their
+  self-token assigned at some point.
+
+  @param [in]  CmObjDesc   Pointer to the Configuration Manager Object.
+  @param [in]  Token       Token to update the CmObjDesc with.
+
+  @retval EFI_SUCCESS           Success.
+  @retval EFI_INVALID_PARAMETER A parameter is invalid.
+  @retval EFI_UNSUPPORTED       Not supported.
+**/
+EFI_STATUS
+EFIAPI
+FixupCmObjectSelfToken (
+  IN  CM_OBJ_DESCRIPTOR   * CmObjDesc,
+  IN  CM_OBJECT_TOKEN       Token
+  );
+
+#endif // CM_OBJECT_TOKEN_FIXER_H_
-- 
2.17.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76987): https://edk2.groups.io/g/devel/message/76987
Mute This Topic: https://groups.io/mt/83737791/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list