39#ifndef MCUXCSSLDATAINTEGRITY_SECURECOUNTER_H_
40#define MCUXCSSLDATAINTEGRITY_SECURECOUNTER_H_
42#include <mcuxCsslAnalysis.h>
45#if (1 == MCUX_CSSL_SC_USE_SW_LOCAL) && (0 == MCUX_CSSL_FP_USE_SECURE_COUNTER)
46 #error "Local SW SC is not supported for DI when FP does not use this local SW SC, as SC_ALLOC would be missing."
74#define MCUX_CSSL_DI_CHECK_PASSED_IMPL (MCUX_CSSL_SC_CHECK_PASSED)
81#define MCUX_CSSL_DI_CHECK_FAILED_IMPL (MCUX_CSSL_SC_CHECK_FAILED)
88#if (1 == MCUX_CSSL_SC_USE_HW_SCM)
97#define MCUX_CSSL_DI_BACKUP_SC(backupValue) \
98 uint32_t backupValue = MCUX_CSSL_SC_REF_VALUE_IMPL(); \
99 MCUX_CSSL_SC_REF_VALUE_IMPL() = MCUX_CSSL_SC_VALUE()
108#define MCUX_CSSL_DI_RESTORE_SC_REF(reference) \
109 MCUX_CSSL_SC_REF_VALUE_IMPL() = (reference)
119#define MCUX_CSSL_DI_BACKUP_SC(backupValue) \
120 uint32_t backupValue = MCUX_CSSL_SC_VALUE()
129#define MCUX_CSSL_DI_RESTORE_SC_REF(reference)
137#if (1 == MCUX_CSSL_FP_USE_SECURE_COUNTER)
149#define MCUX_CSSL_DI_INIT_IMPL(backupValue) \
150 uint32_t backupValue = 0u
163#define MCUX_CSSL_DI_INIT_IMPL(backupValue) \
164 MCUX_CSSL_DI_BACKUP_SC(backupValue)
181#define MCUX_CSSL_DI_CHECK_IMPL(reference) \
182 MCUX_CSSL_SC_CHECK(reference)
184#if (1 == MCUX_CSSL_FP_USE_SECURE_COUNTER)
196#define MCUX_CSSL_DI_CHECK_EXIT_IMPL(id, reference, fail) \
214#define MCUX_CSSL_DI_CHECK_EXIT_IMPL(id, reference, fail) \
215 if (MCUX_CSSL_DI_CHECK_PASSED != MCUX_CSSL_DI_CHECK(reference)) \
217 MCUX_CSSL_FP_FUNCTION_EXIT(id, fail); \
219 MCUX_CSSL_DI_RESTORE_SC_REF(reference);
241#define MCUX_CSSL_DI_RECORD_IMPL(identifier, value) \
242 MCUX_CSSL_ANALYSIS_START_PATTERN_DI_CAST() \
243 MCUX_CSSL_SC_ADD(value) \
244 MCUX_CSSL_ANALYSIS_STOP_PATTERN_DI_CAST()
254#define MCUX_CSSL_DI_EXPUNGE_IMPL(identifier, value) \
255 MCUX_CSSL_ANALYSIS_START_PATTERN_DI_CAST() \
256 MCUX_CSSL_SC_SUB(value) \
257 MCUX_CSSL_ANALYSIS_STOP_PATTERN_DI_CAST()
Provides the API for the CSSL flow protection mechanism.