lib.rs 2.5 KB

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