blob: a7b1590903b3df8e4c26b22579215ad38a757231 [file] [log] [blame]
/** @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_