FLEX-FORD-OBC-BM/Source/bsw/Fbl/fbl_lbt_access.h

191 lines
10 KiB
C
Raw Normal View History

2026-03-19 11:49:16 +01:00
/***********************************************************************************************************************
* FILE DESCRIPTION
* ------------------------------------------------------------------------------------------------------------------*/
/** \file
* \brief Interface layer for accessing the logical block table (LBT)
*
* --------------------------------------------------------------------------------------------------------------------
* COPYRIGHT
* --------------------------------------------------------------------------------------------------------------------
* \par Copyright
* \verbatim
* Copyright (c) 2023 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
* --------------------------------------------------------------------------------------------------------------------
* 01.00.00 2018-05-24 visci - Initial version
* 01.01.00 2018-11-27 visshs ESCAN00101459 Add Support for Secure Boot
* 01.02.00 2019-02-26 visrie ESCAN00102278 Added additional getter functions
* 01.02.01 2019-09-05 visrcn ESCAN00103604 Modified memory qualifiers
* 01.03.00 2022-03-31 visstn FBL-4366 Perform MISRA 2012 migration
* 01.04.00 2022-10-17 visjns FBL-4925 No changes
* 01.04.01 2023-04-24 vismix ESCAN00113819 No changes
* 01.05.00 2023-12-14 vistbe FBL-7967 Add new filename attribute for LBT
**********************************************************************************************************************/
#ifndef FBL_LBT_ACCESS_H
#define FBL_LBT_ACCESS_H
/***********************************************************************************************************************
* VERSION
**********************************************************************************************************************/
/* ##V_CFG_MANAGEMENT ##CQProject : FblLib_Lbt CQComponent : Implementation */
#define FBLLIB_LBT_VERSION 0x0105u
#define FBLLIB_LBT_RELEASE_VERSION 0x00u
/***********************************************************************************************************************
* INCLUDES
**********************************************************************************************************************/
/* Required due to usage of "boolean" type */
#include "Platform_Types.h"
/***********************************************************************************************************************
* TYPEDEFS
**********************************************************************************************************************/
/** Settings for mandatoryType sub-filter */
typedef struct
{
tFblLbtMandatoryType value;
boolean enabled;
} tFblLbtMandatoryFilter;
#if defined( FBL_LBT_ENABLE_BLOCK_TYPE )
/** Settings for blockType sub-filter */
typedef struct
{
tFblLbtBlockType value;
boolean enabled;
} tFblLbtTypeFilter;
#endif /* FBL_LBT_ENABLE_BLOCK_TYPE */
/** Global filter settings */
typedef struct
{
tFblLbtMandatoryFilter mandatoryType;
#if defined( FBL_LBT_ENABLE_BLOCK_TYPE )
tFblLbtTypeFilter blockType;
#endif
} tFblLbtBlockFilter;
#define FBLLBT_START_SEC_CODE
#include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */
/***********************************************************************************************************************
* GLOBAL FUNCTION PROTOTYPES
**********************************************************************************************************************/
void FblLbtInitPowerOn(void);
/* Setter */
void FblLbtBlockFilterInit(V_MEMRAM1 tFblLbtBlockFilter V_MEMRAM2 V_MEMRAM3 * blockFilter);
void FblLbtBlockFilterSetMandatoryType(V_MEMRAM1 tFblLbtBlockFilter V_MEMRAM2 V_MEMRAM3 * blockFilter, tFblLbtMandatoryType mandatoryType);
#if defined( FBL_LBT_ENABLE_BLOCK_TYPE )
void FblLbtBlockFilterSetBlockType(V_MEMRAM1 tFblLbtBlockFilter V_MEMRAM2 V_MEMRAM3 * blockFilter, tFblLbtBlockType blockType);
#endif
/* Getter */
tFblLbtBlockCount FblLbtGetBlockCount(void);
tFblLbtMagicFlag FblLbtGetMagicFlag(void);
tFblResult FblLbtGetBlockNrByAddressLength(tFblAddress address, tFblLength length, V_MEMRAM1 tFblLbtBlockNr V_MEMRAM2 V_MEMRAM3 * blockNr);
tFblResult FblLbtGetBlockDescriptorByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor);
tFblResult FblLbtGetBlockDescriptorByAddressLength(tFblAddress address, tFblLength length, V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor);
#if defined( FBL_LBT_ENABLE_BLOCK_TYPE )
tFblResult FblLbtGetBlockDescriptorByType(tFblLbtBlockType blockType, V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor);
#endif
#if defined( FBL_LBT_ENABLE_BLOCK_TYPE )
tFblResult FblLbtGetBlockTypeByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tFblLbtBlockType V_MEMRAM2 V_MEMRAM3 * blockType);
#endif
#if defined( FBL_LBT_ENABLE_BLOCK_INDEX )
tFblResult FblLbtGetBlockIndexByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tFblLbtBlockIndex V_MEMRAM2 V_MEMRAM3 * blockIndex);
#endif
#if defined( FBL_LBT_ENABLE_HEADER_ADDRESS )
tFblResult FblLbtGetBlockHeaderAddressByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tFblAddress V_MEMRAM2 V_MEMRAM3 * blockHeaderAddress);
#endif
#if defined( FBL_LBT_ENABLE_BM_HEADER_ADDRESS )
tFblResult FblLbtGetBlockBmHeaderAddressByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tFblAddress V_MEMRAM2 V_MEMRAM3 * bmHeaderAddress);
#endif
#if defined( FBL_LBT_ENABLE_MAX_PROG_ATTEMPTS )
tFblResult FblLbtGetBlockMaxProgAttemptsByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tFblLbtMaxProgAttempts V_MEMRAM2 V_MEMRAM3 * maxProgAttempts);
#endif
#if defined( FBL_LBT_ENABLE_VERIFY_INPUT )
tFblResult FblLbtGetBlockVerifyInputFuncByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tExportFct V_MEMRAM2 V_MEMRAM3 * blockVerifyFunc);
#endif
#if defined( FBL_LBT_ENABLE_VERIFY_PROCESSED )
tFblResult FblLbtGetBlockVerifyProcessedFuncByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tExportFct V_MEMRAM2 V_MEMRAM3 * blockVerifyFunc);
#endif
#if defined( FBL_LBT_ENABLE_VERIFY_PIPELINED )
tFblResult FblLbtGetBlockVerifyPipelinedFuncByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tExportFct V_MEMRAM2 V_MEMRAM3 * blockVerifyFunc);
#endif
#if defined( FBL_LBT_ENABLE_VERIFY_OUTPUT )
tFblResult FblLbtGetBlockVerifyOutputFuncByNr(tFblLbtBlockNr blockNr, V_MEMRAM1 tExportFct V_MEMRAM2 V_MEMRAM3 * blockVerifyFunc);
#endif
#if defined( FBL_LBT_ENABLE_BLOCK_INDEX )
tFblResult FblLbtGetBlockDescriptorByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor);
tFblResult FblLbtGetBlockNrByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tFblLbtBlockNr V_MEMRAM2 V_MEMRAM3 * blockNr);
# if defined( FBL_LBT_ENABLE_BLOCK_TYPE )
tFblResult FblLbtGetBlockTypeByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tFblLbtBlockType V_MEMRAM2 V_MEMRAM3 * blockType);
# endif
# if defined( FBL_LBT_ENABLE_HEADER_ADDRESS )
tFblResult FblLbtGetBlockHeaderAddressByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tFblAddress V_MEMRAM2 V_MEMRAM3 * blockHeaderAddress);
# endif
# if defined( FBL_LBT_ENABLE_BM_HEADER_ADDRESS )
tFblResult FblLbtGetBlockBmHeaderAddressByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tFblAddress V_MEMRAM2 V_MEMRAM3 * bmHeaderAddress);
# endif
# if defined( FBL_LBT_ENABLE_MAX_PROG_ATTEMPTS )
tFblResult FblLbtGetBlockMaxProgAttemptsByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tFblLbtMaxProgAttempts V_MEMRAM2 V_MEMRAM3 * maxProgAttempts);
# endif
# if defined( FBL_LBT_ENABLE_VERIFY_INPUT )
tFblResult FblLbtGetBlockVerifyInputFuncByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tExportFct V_MEMRAM2 V_MEMRAM3 * blockVerifyFunc);
# endif
# if defined( FBL_LBT_ENABLE_VERIFY_PROCESSED )
tFblResult FblLbtGetBlockVerifyProcessedFuncByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tExportFct V_MEMRAM2 V_MEMRAM3 * blockVerifyFunc);
# endif
# if defined( FBL_LBT_ENABLE_VERIFY_PIPELINED )
tFblResult FblLbtGetBlockVerifyPipelinedFuncByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tExportFct V_MEMRAM2 V_MEMRAM3 * blockVerifyFunc);
# endif
# if defined( FBL_LBT_ENABLE_VERIFY_OUTPUT )
tFblResult FblLbtGetBlockVerifyOutputFuncByIndex(tFblLbtBlockIndex blockIndex, V_MEMRAM1 tExportFct V_MEMRAM2 V_MEMRAM3 * blockVerifyFunc);
# endif
#endif /* FBL_LBT_ENABLE_BLOCK_INDEX */
#if defined( FBL_LBT_ENABLE_FILE_NAME )
tFblResult FblLbtGetBlockDescriptorByFilenameLength(const V_MEMRAM1 tFblLbtFileName V_MEMRAM2 V_MEMRAM3 * fileName,
tFblLbtFileNameSize fileNameSize, tFblLength fileLength, V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * blockDescriptor);
#endif /* FBL_LBT_ENABLE_FILE_NAME */
/* Iterator */
tBlockDescriptor FblLbtBlockFirst(const V_MEMRAM1 tFblLbtBlockFilter V_MEMRAM2 V_MEMRAM3 * blockFilter);
tBlockDescriptor FblLbtBlockNext(void);
boolean FblLbtBlockDone(void);
/* Checker */
tFblResult FblLbtCheckAddressRange(tFblAddress address, tFblAddress rangeStart, tFblLength rangeLength);
tFblResult FblLbtCheckRangeContained(tFblAddress address, tFblLength length, tFblAddress rangeStart, tFblLength rangeLength);
#if defined( FBL_LBT_ENABLE_REPROGRAMMABLE_LBT )
tFblResult FblLbtCheckConsistency(void);
void FblLbtActivateLbtBlock(void);
#endif /* FBL_LBT_ENABLE_REPROGRAMMABLE_LBT */
void FblLbtActivateLbtBlockByAddress(tFblAddress address);
#define FBLLBT_STOP_SEC_CODE
#include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */
#endif /* FBLLIB_LBT_ACCESS_H */
/***********************************************************************************************************************
* END OF FILE: FBL_LBT_ACCESS.H
**********************************************************************************************************************/