11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */ 203c21dc9SSY Chiu /* 303c21dc9SSY Chiu * Copyright (c) 2014, Linaro Limited 403c21dc9SSY Chiu */ 503c21dc9SSY Chiu 603c21dc9SSY Chiu #ifndef INITCALL_H 703c21dc9SSY Chiu #define INITCALL_H 803c21dc9SSY Chiu 99e592338SJens Wiklander #include <scattered_array.h> 1003c21dc9SSY Chiu #include <tee_api_types.h> 119f0a24daSJens Wiklander #include <trace.h> 1203c21dc9SSY Chiu 139f0a24daSJens Wiklander struct initcall { 149f0a24daSJens Wiklander TEE_Result (*func)(void); 159f0a24daSJens Wiklander #if TRACE_LEVEL >= TRACE_DEBUG 169f0a24daSJens Wiklander int level; 179f0a24daSJens Wiklander const char *func_name; 189f0a24daSJens Wiklander #endif 199f0a24daSJens Wiklander }; 2003c21dc9SSY Chiu 219f0a24daSJens Wiklander #if TRACE_LEVEL >= TRACE_DEBUG 229f0a24daSJens Wiklander #define __define_initcall(lvl, fn) \ 239f0a24daSJens Wiklander SCATTERED_ARRAY_DEFINE_PG_ITEM_ORDERED(initcall, lvl, \ 249f0a24daSJens Wiklander struct initcall) = \ 259f0a24daSJens Wiklander { .func = (fn), .level = (lvl), .func_name = #fn, } 269f0a24daSJens Wiklander #else 279f0a24daSJens Wiklander #define __define_initcall(lvl, fn) \ 289f0a24daSJens Wiklander SCATTERED_ARRAY_DEFINE_PG_ITEM_ORDERED(initcall, lvl, \ 299f0a24daSJens Wiklander struct initcall) = \ 309f0a24daSJens Wiklander { .func = (fn), } 319f0a24daSJens Wiklander #endif 3203c21dc9SSY Chiu 339f0a24daSJens Wiklander #define initcall_begin SCATTERED_ARRAY_BEGIN(initcall, struct initcall) 349f0a24daSJens Wiklander #define initcall_end SCATTERED_ARRAY_END(initcall, struct initcall) 359e592338SJens Wiklander 3608fc7359SRouven Czerwinski #define early_init(fn) __define_initcall(1, fn) 3708fc7359SRouven Czerwinski #define early_init_late(fn) __define_initcall(2, fn) 3808fc7359SRouven Czerwinski #define service_init(fn) __define_initcall(3, fn) 3908fc7359SRouven Czerwinski #define service_init_late(fn) __define_initcall(4, fn) 4008fc7359SRouven Czerwinski #define driver_init(fn) __define_initcall(5, fn) 4108fc7359SRouven Czerwinski #define driver_init_late(fn) __define_initcall(6, fn) 429e592338SJens Wiklander 43*c5c56024SJens Wiklander void call_initcalls(void); 4403c21dc9SSY Chiu 4503c21dc9SSY Chiu #endif 46