⚠️ VeridianOS Kernel Documentation - This is low-level kernel code. All functions are unsafe unless explicitly marked otherwise. no_std

veridian_kernel/
serial.rs

1//! Generic serial interface for kernel console output.
2//!
3//! Provides a unified `Uart16550Compat` type and `serial_print!` /
4//! `serial_println!` macros that delegate to the architecture-specific
5//! UART implementation.
6
7use core::fmt;
8
9#[cfg(target_arch = "aarch64")]
10pub use crate::arch::aarch64::serial::*;
11#[cfg(target_arch = "riscv64")]
12pub use crate::arch::riscv64::serial::*;
13// Re-export architecture-specific serial implementations
14#[cfg(target_arch = "x86_64")]
15pub use crate::arch::x86_64::serial::*;
16
17// Serial print macros for testing
18#[macro_export]
19macro_rules! serial_print {
20    ($($arg:tt)*) => {
21        $crate::serial::_serial_print(format_args!($($arg)*))
22    };
23}
24
25#[macro_export]
26macro_rules! serial_println {
27    () => ($crate::serial_print!("\n"));
28    ($($arg:tt)*) => {
29        $crate::serial_print!("{}\n", format_args!($($arg)*))
30    };
31}
32
33// Delegate to architecture-specific implementation
34#[doc(hidden)]
35pub fn _serial_print(args: fmt::Arguments) {
36    #[cfg(target_arch = "x86_64")]
37    crate::arch::x86_64::serial::_serial_print(args);
38
39    #[cfg(target_arch = "aarch64")]
40    crate::arch::aarch64::serial::_serial_print(args);
41
42    #[cfg(target_arch = "riscv64")]
43    crate::arch::riscv64::serial::_serial_print(args);
44}