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> 11*9f0a24daSJens Wiklander #include <trace.h> 1203c21dc9SSY Chiu 13*9f0a24daSJens Wiklander struct initcall { 14*9f0a24daSJens Wiklander TEE_Result (*func)(void); 15*9f0a24daSJens Wiklander #if TRACE_LEVEL >= TRACE_DEBUG 16*9f0a24daSJens Wiklander int level; 17*9f0a24daSJens Wiklander const char *func_name; 18*9f0a24daSJens Wiklander #endif 19*9f0a24daSJens Wiklander }; 2003c21dc9SSY Chiu 21*9f0a24daSJens Wiklander #if TRACE_LEVEL >= TRACE_DEBUG 22*9f0a24daSJens Wiklander #define __define_initcall(lvl, fn) \ 23*9f0a24daSJens Wiklander SCATTERED_ARRAY_DEFINE_PG_ITEM_ORDERED(initcall, lvl, \ 24*9f0a24daSJens Wiklander struct initcall) = \ 25*9f0a24daSJens Wiklander { .func = (fn), .level = (lvl), .func_name = #fn, } 26*9f0a24daSJens Wiklander #else 27*9f0a24daSJens Wiklander #define __define_initcall(lvl, fn) \ 28*9f0a24daSJens Wiklander SCATTERED_ARRAY_DEFINE_PG_ITEM_ORDERED(initcall, lvl, \ 29*9f0a24daSJens Wiklander struct initcall) = \ 30*9f0a24daSJens Wiklander { .func = (fn), } 31*9f0a24daSJens Wiklander #endif 3203c21dc9SSY Chiu 33*9f0a24daSJens Wiklander #define initcall_begin SCATTERED_ARRAY_BEGIN(initcall, struct initcall) 34*9f0a24daSJens 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 4303c21dc9SSY Chiu 4403c21dc9SSY Chiu #endif 45