/*********************************************************************************************************************** * FILE DESCRIPTION * ------------------------------------------------------------------------------------------------------------------*/ /** \file * \brief Implementation of pattern/mask based non-volatile information storage * * -------------------------------------------------------------------------------------------------------------------- * COPYRIGHT * -------------------------------------------------------------------------------------------------------------------- * \par Copyright * \verbatim * Copyright (c) 2025 by Vector Informatik GmbH. All rights reserved. * * This software is copyright protected and proprietary to Vector Informatik GmbH. * Vector Informatik GmbH grants to you only those rights as set out in the license conditions. * All other rights remain with Vector Informatik GmbH. * \endverbatim */ /**********************************************************************************************************************/ /*********************************************************************************************************************** * REVISION HISTORY * -------------------------------------------------------------------------------------------------------------------- * Version Date Author Change Id Description * -------------------------------------------------------------------------------------------------------------------- * 02.00.00 2025-03-11 virjjn FBL-9704 Initial version * 02.01.00 2025-06-19 dganesh FBL-11034 No changes **********************************************************************************************************************/ #ifndef FBLLIB_NVPATTERN_H #define FBLLIB_NVPATTERN_H /*********************************************************************************************************************** * VERSION **********************************************************************************************************************/ /* ##V_CFG_MANAGEMENT ##CQProject : FblLib_NvPattern CQComponent : Implementation */ #define FBLLIB_NVPATTERN_VERSION 0x0201u #define FBLLIB_NVPATTERN_RELEASE_VERSION 0x00u /*********************************************************************************************************************** * INCLUDES **********************************************************************************************************************/ #include "FblNvPattern_Cfg.h" #include "fbl_nvpattern_oem.h" /*********************************************************************************************************************** * DEFINES **********************************************************************************************************************/ /* Set Id of separator item to last item if storing arbitrary values is not enabled */ #if !defined( FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES ) # define kFblNvPatternId_Separator kFblNvPatternId_Last #endif /* FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES */ /*********************************************************************************************************************** * GLOBAL DATA TYPES AND STRUCTURES **********************************************************************************************************************/ /** Representation of status of marker/mask */ typedef enum { FBL_NVPATTERN_STATE_NOMEMSEGMENT = 0u, /**< No matching memory segment has been found */ FBL_NVPATTERN_STATE_READERROR, /**< Memory area could not be read */ FBL_NVPATTERN_STATE_ERASED, /**< Marker/mask area is erased */ FBL_NVPATTERN_STATE_UNEXPECTEDVALUE, /**< Unexpected marker/mask value */ FBL_NVPATTERN_STATE_EXPECTEDVALUE /**< Expected marker/mask value is set */ } tFblNvPatternItemState; /** Status of pattern */ typedef struct { tFblNvPatternItemState markerState; tFblNvPatternItemState maskState; } tFblNvPatternState; /*********************************************************************************************************************** * GLOBAL FUNCTION PROTOTYPES **********************************************************************************************************************/ #define FBLNVPATTERN_START_SEC_CODE #include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */ tFblNvPatternState FblNvPatternGetPatternState( const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * pBlockDescriptor, tFblNvPatternId patternId, V_MEMRAM1 IO_PositionType V_MEMRAM2 V_MEMRAM3 * pPatternAddress, V_MEMRAM1 IO_SizeType V_MEMRAM2 V_MEMRAM3 * pPatternLength ); tFblNvPatternState FblNvPatternGetPatternStateByStartAddress( IO_PositionType patternStartAddress, tFblNvPatternId patternId, V_MEMRAM1 IO_PositionType V_MEMRAM2 V_MEMRAM3 * patternAddress, V_MEMRAM1 IO_SizeType V_MEMRAM2 V_MEMRAM3 * patternLength ); vsint16 FblNvPatternGetBaseAddr( vuint8 blockNr, tFblNvPatternId patternId, V_MEMRAM1 IO_PositionType V_MEMRAM2 V_MEMRAM3 * pPatternAddress, V_MEMRAM1 IO_SizeType V_MEMRAM2 V_MEMRAM3 * pPatternLength ); vsint16 FblNvPatternGetBaseAddrByBlockDescriptor( const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId patternId, V_MEMRAM1 IO_PositionType V_MEMRAM2 V_MEMRAM3 * patternAddress, V_MEMRAM1 IO_SizeType V_MEMRAM2 V_MEMRAM3 * patternLength ); tFblResult FblNvPatternGetPatternRegionSizeByStartAddress( IO_PositionType patternStartAddress, V_MEMRAM1 IO_SizeType V_MEMRAM2 V_MEMRAM3 * patternRegionLength ); tFblResult FblNvPatternSet( const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId patternId ); tFblResult FblNvPatternSetByBlockDescriptor( const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId patternId ); tFblResult FblNvPatternSetByStartAddress( IO_PositionType patternStartAddress, tFblNvPatternId patternId ); tFblResult FblNvPatternClr( const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId patternId ); tFblResult FblNvPatternClrByBlockDescriptor( const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId patternId ); tFblResult FblNvPatternClrByStartAddress( IO_PositionType patternStartAddress, tFblNvPatternId patternId ); tFblResult FblNvPatternGet( const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId patternId ); tFblResult FblNvPatternGetByBlockDescriptor( const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId patternId ); tFblResult FblNvPatternGetByStartAddress( IO_PositionType patternStartAddress, tFblNvPatternId patternId ); #if defined( FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES ) tFblResult FblNvPatternGetProperty(const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId propertyId, IO_SizeType bufferLength, vuint8* pDestBuffer ); tFblResult FblNvPatternGetPropertyByBlockDescriptor(const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, tFblNvPatternId propertyId, IO_SizeType bufferLength, vuint8* pDestBuffer ); tFblResult FblNvPatternGetPropertyByStartAddress( IO_PositionType patternStartAddress, tFblNvPatternId propertyId, IO_SizeType bufferLength, vuint8 * destBuffer ); tFblResult FblNvPatternSetProperty(const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, const vuint8* pSrcBuffer, tFblNvPatternId propertyId); tFblResult FblNvPatternSetPropertyByBlockDescriptor(const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, const vuint8* pSrcBuffer, tFblNvPatternId propertyId); tFblResult FblNvPatternSetPropertyByStartAddress( IO_PositionType patternStartAddress, const vuint8* srcBuffer, tFblNvPatternId propertyId ); # if defined( FBLNVPATTERN_ENABLE_SIGN_PRESENCE_PATTERN ) tFblResult FblNvPatternGetPropertyStateAndAddrByBlockDescriptor(const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 *blockDescriptor, tFblNvPatternId propertyId, V_MEMRAM1 IO_PositionType V_MEMRAM2 V_MEMRAM3 *address, V_MEMRAM1 tFblNvPatternItemState V_MEMRAM2 V_MEMRAM3 *state); tFblResult FblNvPatternUpdateCmacByBlockDescriptor(const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 *blockDescriptor, tFblNvPatternId patternId); tFblResult FblNvPatternVerifyCmacByBlockDescriptor(const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 *blockDescriptor, tFblNvPatternId patternId); void FblNvPatternSignedPresencePatternInit(void); void ApplFblNvPatternSignedPresencePatternInit(void); tFblResult ApplFblNvPatternVerifyCMAC(tFblNvPatternId patternId, const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, const V_MEMRAM1 vuint8 V_MEMRAM2 V_MEMRAM3 * signatureBuffer); tFblResult ApplFblNvPatternGenerateCMAC(tFblNvPatternId patternId, const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor, V_MEMRAM1 vuint8 V_MEMRAM2 V_MEMRAM3 * signatureBuffer); # endif /* FBLNVPATTERN_ENABLE_SIGN_PRESENCE_PATTERN */ #endif /* FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES */ #define FBLNVPATTERN_STOP_SEC_CODE #include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */ #endif /* FBLLIB_NVPATTERN_H */ /*********************************************************************************************************************** * END OF FILE: FBL_NVPATTERN.H **********************************************************************************************************************/