| /** @file | |
| Dynamic Platform Info Repository Internal | |
| 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_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]; | |
| /// Link lists of CmObj from the ArchCommon Namespace | |
| /// that are added in the Transient state. | |
| LIST_ENTRY ArchCommonCmObjList[EArchCommonObjMax]; | |
| /// Structure Members used in Finalized state. | |
| /// An array of CmObj Descriptors from the ArchCommon Namespace | |
| /// This array is populated when the Repo is finalized. | |
| CM_OBJ_DESCRIPTOR ArchCommonCmObjArray[EArchCommonObjMax]; | |
| /// A token mapper for the objects in the <Arm|ArchCommon>CmObjArray | |
| /// 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_ |