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 TokenMapper files, allowing to retrieve a CmObj
from a token/CmObjId couple.
Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Token Mapper
 | |
| 
 | |
|   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 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_
 |