xref: /DragonOS/kernel/crates/kcmdline_macros/src/lib.rs (revision f9fe30be89e89499aad4ef52b4648986bef5a7d8)
1*f9fe30beSLoGin #![no_std]
2*f9fe30beSLoGin #![deny(clippy::all)]
3*f9fe30beSLoGin #![allow(clippy::crate_in_macro_def)]
4*f9fe30beSLoGin 
5*f9fe30beSLoGin /// 定义一个bool类型的参数
6*f9fe30beSLoGin ///
7*f9fe30beSLoGin /// # 参数
8*f9fe30beSLoGin ///
9*f9fe30beSLoGin /// - `$varname`: 参数的变量名
10*f9fe30beSLoGin /// - `$name`: 参数的名称
11*f9fe30beSLoGin /// - `$default_bool`: 默认值
12*f9fe30beSLoGin /// - `$inv`: 是否反转
13*f9fe30beSLoGin #[macro_export]
14*f9fe30beSLoGin macro_rules! kernel_cmdline_param_arg {
15*f9fe30beSLoGin     ($varname:ident, $name:ident, $default_bool:expr, $inv:expr) => {
16*f9fe30beSLoGin         #[::linkme::distributed_slice(crate::init::cmdline::KCMDLINE_PARAM_ARG)]
17*f9fe30beSLoGin         static $varname: crate::init::cmdline::KernelCmdlineParameter =
18*f9fe30beSLoGin             crate::init::cmdline::KernelCmdlineParamBuilder::new(
19*f9fe30beSLoGin                 stringify!($name),
20*f9fe30beSLoGin                 crate::init::cmdline::KCmdlineParamType::Arg,
21*f9fe30beSLoGin             )
22*f9fe30beSLoGin             .default_bool($default_bool)
23*f9fe30beSLoGin             .inv($inv)
24*f9fe30beSLoGin             .build()
25*f9fe30beSLoGin             .unwrap();
26*f9fe30beSLoGin     };
27*f9fe30beSLoGin }
28*f9fe30beSLoGin 
29*f9fe30beSLoGin /// 定义一个key-value类型的参数
30*f9fe30beSLoGin ///
31*f9fe30beSLoGin /// # 参数
32*f9fe30beSLoGin /// - `$varname`: 参数的变量名
33*f9fe30beSLoGin /// - `$name`: 参数的名称
34*f9fe30beSLoGin /// - `$default_str`: 默认值
35*f9fe30beSLoGin #[macro_export]
36*f9fe30beSLoGin macro_rules! kernel_cmdline_param_kv {
37*f9fe30beSLoGin     ($varname:ident, $name:ident, $default_str:expr) => {
38*f9fe30beSLoGin         #[::linkme::distributed_slice(crate::init::cmdline::KCMDLINE_PARAM_KV)]
39*f9fe30beSLoGin         static $varname: crate::init::cmdline::KernelCmdlineParameter =
40*f9fe30beSLoGin             crate::init::cmdline::KernelCmdlineParamBuilder::new(
41*f9fe30beSLoGin                 stringify!($name),
42*f9fe30beSLoGin                 crate::init::cmdline::KCmdlineParamType::KV,
43*f9fe30beSLoGin             )
44*f9fe30beSLoGin             .default_str($default_str)
45*f9fe30beSLoGin             .build()
46*f9fe30beSLoGin             .unwrap();
47*f9fe30beSLoGin     };
48*f9fe30beSLoGin }
49*f9fe30beSLoGin 
50*f9fe30beSLoGin /// 定义一个内存管理初始化之前就要设置的key-value类型的参数
51*f9fe30beSLoGin ///
52*f9fe30beSLoGin /// # 参数
53*f9fe30beSLoGin /// - `$varname`: 参数的变量名
54*f9fe30beSLoGin /// - `$name`: 参数的名称
55*f9fe30beSLoGin /// - `$default_str`: 默认值
56*f9fe30beSLoGin #[macro_export]
57*f9fe30beSLoGin macro_rules! kernel_cmdline_param_early_kv {
58*f9fe30beSLoGin     ($varname:ident, $name:ident, $default_str:expr) => {
59*f9fe30beSLoGin         #[::linkme::distributed_slice(crate::init::cmdline::KCMDLINE_PARAM_EARLY_KV)]
60*f9fe30beSLoGin         static $varname: crate::init::cmdline::KernelCmdlineParameter = {
61*f9fe30beSLoGin             static ___KV: crate::init::cmdline::KernelCmdlineEarlyKV = {
62*f9fe30beSLoGin                 const { assert!($default_str.len() < KernelCmdlineEarlyKV::VALUE_MAX_LEN) };
63*f9fe30beSLoGin                 crate::init::cmdline::KernelCmdlineParamBuilder::new(
64*f9fe30beSLoGin                     stringify!($name),
65*f9fe30beSLoGin                     crate::init::cmdline::KCmdlineParamType::EarlyKV,
66*f9fe30beSLoGin                 )
67*f9fe30beSLoGin                 .default_str($default_str)
68*f9fe30beSLoGin                 .build_early_kv()
69*f9fe30beSLoGin                 .unwrap()
70*f9fe30beSLoGin             };
71*f9fe30beSLoGin             crate::init::cmdline::KernelCmdlineParameter::EarlyKV(&___KV)
72*f9fe30beSLoGin         };
73*f9fe30beSLoGin     };
74*f9fe30beSLoGin }
75