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