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