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