1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2014, Linaro Limited 4 */ 5 6 #ifndef INITCALL_H 7 #define INITCALL_H 8 9 #include <scattered_array.h> 10 #include <tee_api_types.h> 11 #include <trace.h> 12 13 struct initcall { 14 TEE_Result (*func)(void); 15 #if TRACE_LEVEL >= TRACE_DEBUG 16 int level; 17 const char *func_name; 18 #endif 19 }; 20 21 #if TRACE_LEVEL >= TRACE_DEBUG 22 #define __define_initcall(lvl, fn) \ 23 SCATTERED_ARRAY_DEFINE_PG_ITEM_ORDERED(initcall, lvl, \ 24 struct initcall) = \ 25 { .func = (fn), .level = (lvl), .func_name = #fn, } 26 #else 27 #define __define_initcall(lvl, fn) \ 28 SCATTERED_ARRAY_DEFINE_PG_ITEM_ORDERED(initcall, lvl, \ 29 struct initcall) = \ 30 { .func = (fn), } 31 #endif 32 33 #define initcall_begin SCATTERED_ARRAY_BEGIN(initcall, struct initcall) 34 #define initcall_end SCATTERED_ARRAY_END(initcall, struct initcall) 35 36 #define early_init(fn) __define_initcall(1, fn) 37 #define early_init_late(fn) __define_initcall(2, fn) 38 #define service_init(fn) __define_initcall(3, fn) 39 #define service_init_late(fn) __define_initcall(4, fn) 40 #define driver_init(fn) __define_initcall(5, fn) 41 #define driver_init_late(fn) __define_initcall(6, fn) 42 43 void call_initcalls(void); 44 45 #endif 46