xref: /optee_os/core/include/initcall.h (revision 9f0a24dac7b4ed2320bd88821f14fd9dd675240d)
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