1use core::fmt;
4
5use crate::syscall::{sys_kernel_console_write, KernelConsoleSource, KernelConsoleWriteFlags};
6
7#[repr(C)]
8struct KernelLogger;
9
10impl fmt::Write for KernelLogger {
11 fn write_str(&mut self, s: &str) -> fmt::Result {
12 sys_kernel_console_write(
13 KernelConsoleSource::Console,
14 s.as_bytes(),
15 KernelConsoleWriteFlags::empty(),
16 );
17 Ok(())
18 }
19}
20
21#[doc(hidden)]
22pub fn _print_normal(args: core::fmt::Arguments) {
23 use fmt::Write;
24 let _ = KernelLogger.write_fmt(args);
25}
26
27#[macro_export]
28macro_rules! klog_print {
29 ($($arg:tt)*) => {
30 $crate::klog::_print_normal(format_args!($($arg)*))
31 };
32}
33
34#[macro_export]
35macro_rules! klog_println {
36 () => {
37 $crate::klog_print!("\n")
38 };
39 ($fmt:expr) => {
40 $crate::klog_print!(concat!($fmt, "\n"))
41 };
42 ($fmt:expr, $($arg:tt)*) => {
43 $crate::klog_print!(concat!($fmt, "\n"), $($arg)*)
44 };
45}