/** @file Dynamic Platform Info Repository Internal Copyright (c) 2021, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @par Glossary: - Cm or CM - Configuration Manager - Obj or OBJ - Object **/ #ifndef DYNAMIC_PLAT_REPO_INTERNAL_H_ #define DYNAMIC_PLAT_REPO_INTERNAL_H_ #include "TokenMapper.h" #pragma pack(1) /** CmObj node. This is a node wrapper around the CM_OBJ_DESCRIPTOR structure. It also allows to bind a token to the CM_OBJ_DESCRIPTOR. */ typedef struct CmObjectNode { /// This must be the first field in this structure. LIST_ENTRY Link; /// Token associated with the CmObjDesc. CM_OBJECT_TOKEN Token; /// CmObjDesc wrapped. /// Note: the CM_OBJ_DESCRIPTOR.Data field is allocated and copied. CM_OBJ_DESCRIPTOR CmObjDesc; } CM_OBJ_NODE; /** Dynamic repository states. The states must progress as: UnInitialised -> Transient -> Finalized */ typedef enum DynRepoState { DynRepoUnInitialised, ///< Un-Initialised state DynRepoTransient, ///< Transient state - CmObjects can be added. DynRepoFinalized, ///< Repo Locked - No further CmObjects can be added. ///< Getting objects is now possible. DynRepoMax ///< Max value. } EDYNAMIC_REPO_STATE; /** A structure describing the platform configuration manager repository information */ typedef struct DynamicPlatformRepositoryInfo { /// Repo state machine. EDYNAMIC_REPO_STATE RepoState; /// Count of all the objects added to the Dynamic Platform Repo /// during the Transient state. UINTN ObjectCount; /// Link lists of CmObj from the ArmNameSpace /// that are added in the Transient state. LIST_ENTRY ArmCmObjList[EArmObjMax]; /// Structure Members used in Finalized state. /// An array of CmObj Descriptors from the ArmNameSpace /// This array is populated when the Repo is finalized. CM_OBJ_DESCRIPTOR ArmCmObjArray[EArmObjMax]; /// A token mapper for the objects in the ArmNamespaceObjectArray /// The Token mapper is populated when the Repo is finalized in /// a call to DynamicPlatRepoFinalise (). TOKEN_MAPPER TokenMapper; } DYNAMIC_PLATFORM_REPOSITORY_INFO; #pragma pack() #endif // DYNAMIC_PLAT_REPO_INTERNAL_H_