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