diff --git a/framework/include/fwk_align.h b/framework/include/fwk_align.h index 52d7e3a0744644ab6951ca31da3811f968c629aa..dedf4862a24b1803409b2ad51f68f52193c237d4 100644 --- a/framework/include/fwk_align.h +++ b/framework/include/fwk_align.h @@ -22,4 +22,11 @@ # include #endif +#ifdef BUILD_OPTEE +#include +#ifndef _GCC_MAX_ALIGN_T +typedef uintmax_t max_align_t; +#endif +#endif /*BUILD_OPTEE*/ + #endif /* FWK_ALIGN_H */ diff --git a/framework/include/fwk_host.h b/framework/include/fwk_host.h index 8cb210a0aa6aaed289546257bea6c2314c2bd7a4..ff94047c3464bd53d92adf06423e3eb1aef70f99 100644 --- a/framework/include/fwk_host.h +++ b/framework/include/fwk_host.h @@ -23,6 +23,9 @@ */ #define FWK_HOST_PRINT printf +#elif defined(BUILD_OPTEE) +#include +#define FWK_HOST_PRINT(...) DMSG(__VA_ARGS__) #else #define FWK_HOST_PRINT(...) \ do { \ diff --git a/framework/include/internal/fwk_thread.h b/framework/include/internal/fwk_thread.h index 09988a55892fd37a99006c64bf7af7344d7064d9..fbdd981c5d0a831fc7996818112c09b39f6bff85 100644 --- a/framework/include/internal/fwk_thread.h +++ b/framework/include/internal/fwk_thread.h @@ -31,6 +31,13 @@ int __fwk_thread_init(size_t event_count); */ noreturn void __fwk_thread_run(void); +/* + * \brief Processing events already raised by modules and interrupt handlers. + * + * \return The function does not return. + */ +void __fwk_run_event(void); + /* * \brief Get the event being currently processed. * diff --git a/framework/src/fwk_assert.c b/framework/src/fwk_assert.c index 0f9d92833912e5a5db27e8dffbb726bcf1ddfe92..06ba72128cb71b1e3d4f5675b19461254c27ac5e 100644 --- a/framework/src/fwk_assert.c +++ b/framework/src/fwk_assert.c @@ -8,6 +8,10 @@ #include #include +#if defined(BUILD_OPTEE) +#include +#endif + void fwk_trap(void) { #ifdef BUILD_MODE_DEBUG @@ -28,6 +32,8 @@ void fwk_unreachable(void) { #ifdef BUILD_MODE_DEBUG fwk_trap(); + #elif defined(BUILD_OPTEE) + panic(); #else /* * Let the optimizer know that anything after this point is unreachable. diff --git a/framework/src/fwk_module.c b/framework/src/fwk_module.c index f42b1a29ec3fc402805ed4200cb7f3cfe1c49a91..3450b94db64d4ff640faf615cdd595e1eded226a 100644 --- a/framework/src/fwk_module.c +++ b/framework/src/fwk_module.c @@ -55,7 +55,7 @@ extern const struct fwk_module_config *module_config_table[]; static struct context ctx; -#ifdef BUILD_HOST +#if defined(BUILD_HOST) || defined(BUILD_OPTEE) static const char err_msg_line[] = "[MOD] Error %d in %s @%d\n"; static const char err_msg_func[] = "[MOD] Error %d in %s\n"; #endif @@ -419,7 +419,9 @@ int __fwk_module_init(void) ctx.initialized = true; + #ifndef BUILD_OPTEE __fwk_thread_run(); + #endif return FWK_SUCCESS; } diff --git a/framework/src/fwk_multi_thread.c b/framework/src/fwk_multi_thread.c index 546d2fc758e7f7b203675f3e5ca6d47e45536939..96418df451b1440a6d5ea7b4e13f8b463ed87c06 100644 --- a/framework/src/fwk_multi_thread.c +++ b/framework/src/fwk_multi_thread.c @@ -25,9 +25,12 @@ #define SIGNAL_NO_READY_THREAD 0x08 static struct __fwk_multi_thread_ctx ctx; -#ifdef BUILD_HOST -static const char err_msg_line[] = "[THR] Error %d @%d\n"; -static const char err_msg_func[] = "[THR] Error %d in %s\n"; + +#if defined(BUILD_HOST) || defined(BUILD_OPTEE) +static const char __attribute__((unused)) err_msg_line[] = + "[THR] Error %d @%d\n"; +static const char __attribute__((unused)) err_msg_func[] = + "[THR] Error %d in %s\n"; #endif /* diff --git a/framework/src/fwk_thread.c b/framework/src/fwk_thread.c index 0982a3194471d8cbb271f78b3b6d0929cedd4c65..2e92a06090662164e90412e0828c4b96d00132ae 100644 --- a/framework/src/fwk_thread.c +++ b/framework/src/fwk_thread.c @@ -24,9 +24,11 @@ static struct __fwk_thread_ctx ctx; -#ifdef BUILD_HOST -static const char err_msg_line[] = "[THR] Error %d in %s @%d\n"; -static const char err_msg_func[] = "[THR] Error %d in %s\n"; +#if defined(BUILD_HOST) || defined(BUILD_OPTEE) +static const char __attribute__((unused)) err_msg_line[] = + "[THR] Error %d in %s @%d\n"; +static const char __attribute__((unused)) err_msg_func[] = + "[THR] Error %d in %s\n"; #endif /* @@ -172,6 +174,19 @@ noreturn void __fwk_thread_run(void) } } +void __fwk_run_event(void) +{ + for (;;) { + while (!fwk_list_is_empty(&ctx.event_queue)) + process_next_event(); + + if (fwk_list_is_empty(&ctx.isr_event_queue)) + return; + + process_isr(); + } +} + struct __fwk_thread_ctx *__fwk_thread_get_ctx(void) { return &ctx;