xref: /linux-6.15/tools/include/linux/init.h (revision 9f76c2ad)
1e2ae9cf3SWei Yang /* SPDX-License-Identifier: GPL-2.0 */
2e2ae9cf3SWei Yang #ifndef _TOOLS_LINUX_INIT_H_
3e2ae9cf3SWei Yang #define _TOOLS_LINUX_INIT_H_
4e2ae9cf3SWei Yang 
5e2ae9cf3SWei Yang #include <linux/compiler.h>
6e2ae9cf3SWei Yang 
7e2ae9cf3SWei Yang #ifndef __init
8e2ae9cf3SWei Yang # define __init
9e2ae9cf3SWei Yang #endif
10e2ae9cf3SWei Yang 
11e2ae9cf3SWei Yang #ifndef __exit
12e2ae9cf3SWei Yang # define __exit
13e2ae9cf3SWei Yang #endif
14e2ae9cf3SWei Yang 
15e2ae9cf3SWei Yang #define __section(section)              __attribute__((__section__(section)))
16e2ae9cf3SWei Yang 
17e2ae9cf3SWei Yang #define __initconst
18e2ae9cf3SWei Yang #define __meminit
19e2ae9cf3SWei Yang #define __meminitdata
20e2ae9cf3SWei Yang #define __refdata
21e2ae9cf3SWei Yang #define __initdata
22e2ae9cf3SWei Yang 
23e2ae9cf3SWei Yang struct obs_kernel_param {
24e2ae9cf3SWei Yang 	const char *str;
25e2ae9cf3SWei Yang 	int (*setup_func)(char *st);
26e2ae9cf3SWei Yang 	int early;
27e2ae9cf3SWei Yang };
28e2ae9cf3SWei Yang 
29e2ae9cf3SWei Yang #define __setup_param(str, unique_id, fn, early)			\
30e2ae9cf3SWei Yang 	static const char __setup_str_##unique_id[] __initconst		\
31e2ae9cf3SWei Yang 		__aligned(1) = str;					\
32e2ae9cf3SWei Yang 	static struct obs_kernel_param __setup_##unique_id		\
33e2ae9cf3SWei Yang 		__used __section(".init.setup")				\
34e2ae9cf3SWei Yang 		__aligned(__alignof__(struct obs_kernel_param)) =	\
35e2ae9cf3SWei Yang 		{ __setup_str_##unique_id, fn, early }
36e2ae9cf3SWei Yang 
37*9f76c2adSWei Yang #define __setup(str, fn)						\
38*9f76c2adSWei Yang 	__setup_param(str, fn, fn, 0)
39*9f76c2adSWei Yang 
40e2ae9cf3SWei Yang #define early_param(str, fn)						\
41e2ae9cf3SWei Yang 	__setup_param(str, fn, fn, 1)
42e2ae9cf3SWei Yang 
43e2ae9cf3SWei Yang #endif /*  _TOOLS_LINUX_INIT_H_ */
44