rust: print: add more `pr_*!` levels
Currently, only `pr_info!` (for the minimal sample) and `pr_emerg!` (for the panic handler) are there. Add the other levels as new macros, i.e. `pr_alert!`, `pr_crit!`, `pr_err!`, `pr_warn!`, `pr_notice!` and `pr_debug!`. Co-developed-by: Adam Bratschi-Kaye <ark.email@gmail.com> Signed-off-by: Adam Bratschi-Kaye <ark.email@gmail.com> Co-developed-by: Wedson Almeida Filho <wedsonaf@gmail.com> Signed-off-by: Wedson Almeida Filho <wedsonaf@gmail.com> Co-developed-by: Gary Guo <gary@garyguo.net> Signed-off-by: Gary Guo <gary@garyguo.net> Reviewed-by: Boqun Feng <boqun.feng@gmail.com> Reviewed-by: Wei Liu <wei.liu@kernel.org> Reviewed-by: Sergio Gonzalez Collado <sergio.collado@gmail.com> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
474be44555
commit
4c7f949906
|
@ -17,7 +17,7 @@ pub use alloc::{boxed::Box, vec::Vec};
|
|||
|
||||
pub use macros::module;
|
||||
|
||||
pub use super::{pr_emerg, pr_info};
|
||||
pub use super::{pr_alert, pr_crit, pr_debug, pr_emerg, pr_err, pr_info, pr_notice, pr_warn};
|
||||
|
||||
pub use super::error::{Error, Result};
|
||||
|
||||
|
|
|
@ -74,7 +74,13 @@ pub mod format_strings {
|
|||
// Furthermore, `static` instead of `const` is used to share the strings
|
||||
// for all the kernel.
|
||||
pub static EMERG: [u8; LENGTH] = generate(false, bindings::KERN_EMERG);
|
||||
pub static ALERT: [u8; LENGTH] = generate(false, bindings::KERN_ALERT);
|
||||
pub static CRIT: [u8; LENGTH] = generate(false, bindings::KERN_CRIT);
|
||||
pub static ERR: [u8; LENGTH] = generate(false, bindings::KERN_ERR);
|
||||
pub static WARNING: [u8; LENGTH] = generate(false, bindings::KERN_WARNING);
|
||||
pub static NOTICE: [u8; LENGTH] = generate(false, bindings::KERN_NOTICE);
|
||||
pub static INFO: [u8; LENGTH] = generate(false, bindings::KERN_INFO);
|
||||
pub static DEBUG: [u8; LENGTH] = generate(false, bindings::KERN_DEBUG);
|
||||
}
|
||||
|
||||
/// Prints a message via the kernel's [`_printk`].
|
||||
|
@ -172,6 +178,126 @@ macro_rules! pr_emerg (
|
|||
)
|
||||
);
|
||||
|
||||
/// Prints an alert-level message (level 1).
|
||||
///
|
||||
/// Use this level if action must be taken immediately.
|
||||
///
|
||||
/// Equivalent to the kernel's [`pr_alert`] macro.
|
||||
///
|
||||
/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and
|
||||
/// `alloc::format!` for information about the formatting syntax.
|
||||
///
|
||||
/// [`pr_alert`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_alert
|
||||
/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// pr_alert!("hello {}\n", "there");
|
||||
/// ```
|
||||
#[macro_export]
|
||||
macro_rules! pr_alert (
|
||||
($($arg:tt)*) => (
|
||||
$crate::print_macro!($crate::print::format_strings::ALERT, $($arg)*)
|
||||
)
|
||||
);
|
||||
|
||||
/// Prints a critical-level message (level 2).
|
||||
///
|
||||
/// Use this level for critical conditions.
|
||||
///
|
||||
/// Equivalent to the kernel's [`pr_crit`] macro.
|
||||
///
|
||||
/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and
|
||||
/// `alloc::format!` for information about the formatting syntax.
|
||||
///
|
||||
/// [`pr_crit`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_crit
|
||||
/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// pr_crit!("hello {}\n", "there");
|
||||
/// ```
|
||||
#[macro_export]
|
||||
macro_rules! pr_crit (
|
||||
($($arg:tt)*) => (
|
||||
$crate::print_macro!($crate::print::format_strings::CRIT, $($arg)*)
|
||||
)
|
||||
);
|
||||
|
||||
/// Prints an error-level message (level 3).
|
||||
///
|
||||
/// Use this level for error conditions.
|
||||
///
|
||||
/// Equivalent to the kernel's [`pr_err`] macro.
|
||||
///
|
||||
/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and
|
||||
/// `alloc::format!` for information about the formatting syntax.
|
||||
///
|
||||
/// [`pr_err`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_err
|
||||
/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// pr_err!("hello {}\n", "there");
|
||||
/// ```
|
||||
#[macro_export]
|
||||
macro_rules! pr_err (
|
||||
($($arg:tt)*) => (
|
||||
$crate::print_macro!($crate::print::format_strings::ERR, $($arg)*)
|
||||
)
|
||||
);
|
||||
|
||||
/// Prints a warning-level message (level 4).
|
||||
///
|
||||
/// Use this level for warning conditions.
|
||||
///
|
||||
/// Equivalent to the kernel's [`pr_warn`] macro.
|
||||
///
|
||||
/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and
|
||||
/// `alloc::format!` for information about the formatting syntax.
|
||||
///
|
||||
/// [`pr_warn`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_warn
|
||||
/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// pr_warn!("hello {}\n", "there");
|
||||
/// ```
|
||||
#[macro_export]
|
||||
macro_rules! pr_warn (
|
||||
($($arg:tt)*) => (
|
||||
$crate::print_macro!($crate::print::format_strings::WARNING, $($arg)*)
|
||||
)
|
||||
);
|
||||
|
||||
/// Prints a notice-level message (level 5).
|
||||
///
|
||||
/// Use this level for normal but significant conditions.
|
||||
///
|
||||
/// Equivalent to the kernel's [`pr_notice`] macro.
|
||||
///
|
||||
/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and
|
||||
/// `alloc::format!` for information about the formatting syntax.
|
||||
///
|
||||
/// [`pr_notice`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_notice
|
||||
/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// pr_notice!("hello {}\n", "there");
|
||||
/// ```
|
||||
#[macro_export]
|
||||
macro_rules! pr_notice (
|
||||
($($arg:tt)*) => (
|
||||
$crate::print_macro!($crate::print::format_strings::NOTICE, $($arg)*)
|
||||
)
|
||||
);
|
||||
|
||||
/// Prints an info-level message (level 6).
|
||||
///
|
||||
/// Use this level for informational messages.
|
||||
|
@ -196,3 +322,31 @@ macro_rules! pr_info (
|
|||
$crate::print_macro!($crate::print::format_strings::INFO, $($arg)*)
|
||||
)
|
||||
);
|
||||
|
||||
/// Prints a debug-level message (level 7).
|
||||
///
|
||||
/// Use this level for debug messages.
|
||||
///
|
||||
/// Equivalent to the kernel's [`pr_debug`] macro, except that it doesn't support dynamic debug
|
||||
/// yet.
|
||||
///
|
||||
/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and
|
||||
/// `alloc::format!` for information about the formatting syntax.
|
||||
///
|
||||
/// [`pr_debug`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_debug
|
||||
/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// pr_debug!("hello {}\n", "there");
|
||||
/// ```
|
||||
#[macro_export]
|
||||
#[doc(alias = "print")]
|
||||
macro_rules! pr_debug (
|
||||
($($arg:tt)*) => (
|
||||
if cfg!(debug_assertions) {
|
||||
$crate::print_macro!($crate::print::format_strings::DEBUG, $($arg)*)
|
||||
}
|
||||
)
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue