From 2394db2dc5f6f4a9a8f5459ea8248881315aaba5 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Fri, 12 Sep 2025 19:20:23 +0200 Subject: [PATCH] Move most of the arch debug::Writer impls into a common location --- src/arch/aarch64/debug.rs | 33 ++-------------------------- src/arch/riscv64/debug.rs | 33 ++-------------------------- src/arch/x86_shared/debug.rs | 28 +----------------------- src/log.rs | 42 +++++++++++++++++++++++++++++++++++- src/macros.rs | 4 ++-- src/scheme/debug.rs | 2 +- 6 files changed, 49 insertions(+), 93 deletions(-) diff --git a/src/arch/aarch64/debug.rs b/src/arch/aarch64/debug.rs index ac9f64c11f..614f6b4b85 100644 --- a/src/arch/aarch64/debug.rs +++ b/src/arch/aarch64/debug.rs @@ -1,50 +1,21 @@ -use core::fmt; use spin::MutexGuard; -use crate::{ - device::serial::COM1, - devices::{ - graphical_debug::{DebugDisplay, DEBUG_DISPLAY}, - serial::SerialKind, - }, - log::{Log, LOG}, -}; +use crate::{device::serial::COM1, devices::serial::SerialKind}; pub struct Writer<'a> { - log: MutexGuard<'a, Option>, - display: MutexGuard<'a, Option>, serial: MutexGuard<'a, Option>, } impl<'a> Writer<'a> { pub fn new() -> Writer<'a> { Writer { - log: LOG.lock(), - display: DEBUG_DISPLAY.lock(), serial: COM1.lock(), } } - pub fn write(&mut self, buf: &[u8], preserve: bool) { - if preserve { - if let Some(ref mut log) = *self.log { - log.write(buf); - } - } - - if let Some(ref mut display) = *self.display { - let _ = display.write(buf); - } - + pub fn write(&mut self, buf: &[u8]) { if let Some(ref mut serial) = *self.serial { serial.write(buf); } } } - -impl<'a> fmt::Write for Writer<'a> { - fn write_str(&mut self, s: &str) -> Result<(), fmt::Error> { - self.write(s.as_bytes(), true); - Ok(()) - } -} diff --git a/src/arch/riscv64/debug.rs b/src/arch/riscv64/debug.rs index 58cdd0eb7f..614f6b4b85 100644 --- a/src/arch/riscv64/debug.rs +++ b/src/arch/riscv64/debug.rs @@ -1,50 +1,21 @@ -use core::fmt; use spin::MutexGuard; -use crate::{ - device::serial::COM1, - devices::{ - graphical_debug::{DebugDisplay, DEBUG_DISPLAY}, - serial::SerialKind, - }, - log::{Log, LOG}, -}; +use crate::{device::serial::COM1, devices::serial::SerialKind}; pub struct Writer<'a> { - log: MutexGuard<'a, Option>, serial: MutexGuard<'a, Option>, - display: MutexGuard<'a, Option>, } impl<'a> Writer<'a> { pub fn new() -> Writer<'a> { Writer { - log: LOG.lock(), - display: DEBUG_DISPLAY.lock(), serial: COM1.lock(), } } - pub fn write(&mut self, buf: &[u8], preserve: bool) { - if preserve { - if let Some(ref mut log) = *self.log { - log.write(buf); - } - } - - if let Some(ref mut display) = *self.display { - let _ = display.write(buf); - } - + pub fn write(&mut self, buf: &[u8]) { if let Some(ref mut serial) = *self.serial { serial.write(buf); } } } - -impl<'a> fmt::Write for Writer<'a> { - fn write_str(&mut self, s: &str) -> Result<(), fmt::Error> { - self.write(s.as_bytes(), true); - Ok(()) - } -} diff --git a/src/arch/x86_shared/debug.rs b/src/arch/x86_shared/debug.rs index fa7d6ef809..6442d023f6 100644 --- a/src/arch/x86_shared/debug.rs +++ b/src/arch/x86_shared/debug.rs @@ -1,4 +1,3 @@ -use core::fmt; #[cfg(feature = "qemu_debug")] use spin::Mutex; use spin::MutexGuard; @@ -10,10 +9,6 @@ use crate::devices::uart_16550::SerialPort; use crate::syscall::io::Mmio; #[cfg(feature = "qemu_debug")] use crate::syscall::io::Pio; -use crate::{ - devices::graphical_debug::{DebugDisplay, DEBUG_DISPLAY}, - log::{Log, LOG}, -}; #[cfg(feature = "qemu_debug")] use syscall::io::Io; @@ -27,8 +22,6 @@ use super::device::system76_ec::{System76Ec, SYSTEM76_EC}; pub static QEMU: Mutex> = Mutex::new(Pio::::new(0x402)); pub struct Writer<'a> { - log: MutexGuard<'a, Option>, - display: MutexGuard<'a, Option>, #[cfg(feature = "lpss_debug")] lpss: MutexGuard<'a, Option>, #[cfg(feature = "qemu_debug")] @@ -41,8 +34,6 @@ pub struct Writer<'a> { impl<'a> Writer<'a> { pub fn new() -> Writer<'a> { Writer { - log: LOG.lock(), - display: DEBUG_DISPLAY.lock(), #[cfg(feature = "lpss_debug")] lpss: LPSS.lock(), #[cfg(feature = "qemu_debug")] @@ -53,17 +44,7 @@ impl<'a> Writer<'a> { } } - pub fn write(&mut self, buf: &[u8], preserve: bool) { - if preserve { - if let Some(ref mut log) = *self.log { - log.write(buf); - } - } - - if let Some(ref mut display) = *self.display { - display.write(buf); - } - + pub fn write(&mut self, buf: &[u8]) { #[cfg(feature = "lpss_debug")] { if let Some(ref mut lpss) = *self.lpss { @@ -90,10 +71,3 @@ impl<'a> Writer<'a> { } } } - -impl<'a> fmt::Write for Writer<'a> { - fn write_str(&mut self, s: &str) -> Result<(), fmt::Error> { - self.write(s.as_bytes(), true); - Ok(()) - } -} diff --git a/src/log.rs b/src/log.rs index de538960b4..b774759320 100644 --- a/src/log.rs +++ b/src/log.rs @@ -1,5 +1,8 @@ use alloc::collections::VecDeque; -use spin::{Mutex, Once}; +use core::fmt; +use spin::{Mutex, MutexGuard, Once}; + +use crate::devices::graphical_debug::{DebugDisplay, DEBUG_DISPLAY}; pub static LOG: Mutex> = Mutex::new(None); @@ -66,3 +69,40 @@ pub fn init_logger(log_func: fn(&log::Record)) { } static LOGGER: Once = Once::new(); + +pub struct Writer<'a> { + log: MutexGuard<'a, Option>, + display: MutexGuard<'a, Option>, + arch: crate::arch::debug::Writer<'a>, +} + +impl<'a> Writer<'a> { + pub fn new() -> Writer<'a> { + Writer { + log: LOG.lock(), + display: DEBUG_DISPLAY.lock(), + arch: crate::arch::debug::Writer::new(), + } + } + + pub fn write(&mut self, buf: &[u8], preserve: bool) { + if preserve { + if let Some(ref mut log) = *self.log { + log.write(buf); + } + } + + if let Some(display) = &mut *self.display { + display.write(buf); + } + + self.arch.write(buf); + } +} + +impl<'a> fmt::Write for Writer<'a> { + fn write_str(&mut self, s: &str) -> Result<(), fmt::Error> { + self.write(s.as_bytes(), true); + Ok(()) + } +} diff --git a/src/macros.rs b/src/macros.rs index aa4692ffff..63a0629297 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -3,7 +3,7 @@ macro_rules! print { ($($arg:tt)*) => ({ use core::fmt::Write; - let _ = write!($crate::arch::debug::Writer::new(), $($arg)*); + let _ = write!($crate::log::Writer::new(), $($arg)*); }); } @@ -12,6 +12,6 @@ macro_rules! print { macro_rules! println { ($($arg:tt)*) => ({ use core::fmt::Write; - let _ = writeln!($crate::arch::debug::Writer::new(), $($arg)*); + let _ = writeln!($crate::log::Writer::new(), $($arg)*); }); } diff --git a/src/scheme/debug.rs b/src/scheme/debug.rs index bb3feea7c7..7e18674118 100644 --- a/src/scheme/debug.rs +++ b/src/scheme/debug.rs @@ -2,9 +2,9 @@ use core::sync::atomic::{AtomicUsize, Ordering}; use spin::RwLock; use crate::{ - arch::debug::Writer, devices::graphical_debug, event, + log::Writer, scheme::*, sync::WaitQueue, syscall::{