/** @file Token Mapper 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 TOKEN_MAPPER_H_ #define TOKEN_MAPPER_H_ #pragma pack(1) /** Token mapping descriptor. Bind a token and a CmObj together. */ typedef struct TokenMapDescriptor { /// Object Token. CM_OBJECT_TOKEN Token; /// CmObjectDescriptor CM_OBJ_DESCRIPTOR.Data is a reference copy /// and not allocated. It points to the individual objects in the /// Dynamic Plat Repo ArmNameSpaceObjectArray. CM_OBJ_DESCRIPTOR CmObjDesc; } TOKEN_MAP_DESCRIPTOR; /** Token mapper. Contain all the Token/CmObj couple mapping. **/ typedef struct TokenMapper { /// Maximum number of TOKEN_MAP_DESCRIPTOR entries in TokenDescArray. UINTN MaxTokenDescCount; /// Next TOKEN_MAP_DESCRIPTOR entry to use in TokenDescArray. UINTN ItemCount; /// Array of TOKEN_MAP_DESCRIPTOR. TOKEN_MAP_DESCRIPTOR *TokenDescArray; } TOKEN_MAPPER; #pragma pack() /** Add a CmObjDesc to the TokenMapper. @param [in] TokenMapper The TokenMapper instance. @param [in] Token CmObj token. @param [in] ObjectId CmObj ObjectId. @param [in] Size CmObj Size. @param [in] Data CmObj Data. This memory is referenced, not copied. @retval EFI_SUCCESS The function completed successfully. @retval EFI_BUFFER_TOO_SMALL Buffer too small. @retval EFI_INVALID_PARAMETER A parameter is invalid. **/ EFI_STATUS EFIAPI TokenMapperAddObject ( IN TOKEN_MAPPER *TokenMapper, IN CM_OBJECT_TOKEN Token, IN CM_OBJECT_ID ObjectId, IN UINT32 Size, IN VOID *Data ); /** Get a CmObjDesc from a ObjectId/Token couple. The Token parameter is not optional. An existing token must be provided. @param [in] TokenMapper The TokenMapper instance. @param [in] Token Token of the CmObj to search. @param [in] ObjectId Object Id of the CmObj to search. @param [out] CmObjDesc CM_OBJ_DESCRIPTOR containing the CmObj searched. @retval EFI_SUCCESS The function completed successfully. @retval EFI_INVALID_PARAMETER A parameter is invalid. @retval EFI_NOT_FOUND Not found. **/ EFI_STATUS EFIAPI TokenMapperGetObject ( IN TOKEN_MAPPER *TokenMapper, IN CM_OBJECT_TOKEN Token, IN CM_OBJECT_ID ObjectId, OUT CM_OBJ_DESCRIPTOR *CmObjDesc ); /** Initialise a TokenMapper. @param [in] TokenMapper The TokenMapper to initialise. @param [in] DescriptorCount Number of entries to allocate. @retval EFI_SUCCESS The function completed successfully. @retval EFI_ALREADY_STARTED Instance already initialised. @retval EFI_INVALID_PARAMETER A parameter is invalid. **/ EFI_STATUS EFIAPI TokenMapperInitialise ( IN TOKEN_MAPPER *TokenMapper, IN UINTN DescriptorCount ); /** Shutdown a TokenMapper. @param [in] TokenMapper The TokenMapper to shutdown. @retval EFI_SUCCESS The function completed successfully. @retval EFI_INVALID_PARAMETER A parameter is invalid. **/ EFI_STATUS EFIAPI TokenMapperShutdown ( IN TOKEN_MAPPER *TokenMapper ); #endif // TOKEN_MAPPER_H_