From 7a4dd1a1a97155afded92cf582cf22b85ac47ab5 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Fri, 12 Sep 2025 18:40:21 +0200 Subject: [PATCH] Use SerialKind on x86 --- src/arch/x86_shared/debug.rs | 14 ++++++++------ src/arch/x86_shared/device/serial.rs | 23 ++++++++++++++--------- src/arch/x86_shared/interrupt/irq.rs | 20 +++++++------------- 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/arch/x86_shared/debug.rs b/src/arch/x86_shared/debug.rs index cac56ce74d..513d65e7e5 100644 --- a/src/arch/x86_shared/debug.rs +++ b/src/arch/x86_shared/debug.rs @@ -3,11 +3,13 @@ use core::fmt; use spin::Mutex; use spin::MutexGuard; -#[cfg(any(feature = "lpss_debug", feature = "serial_debug"))] +#[cfg(feature = "serial_debug")] +use crate::devices::serial::SerialKind; +#[cfg(feature = "lpss_debug")] use crate::devices::uart_16550::SerialPort; #[cfg(feature = "lpss_debug")] use crate::syscall::io::Mmio; -#[cfg(any(feature = "qemu_debug", feature = "serial_debug"))] +#[cfg(feature = "qemu_debug")] use crate::syscall::io::Pio; use crate::{ devices::graphical_debug::{DebugDisplay, DEBUG_DISPLAY}, @@ -30,11 +32,11 @@ pub struct Writer<'a> { log: MutexGuard<'a, Option>, display: MutexGuard<'a, Option>, #[cfg(feature = "lpss_debug")] - lpss: MutexGuard<'a, Option<&'static mut SerialPort>>>, + lpss: MutexGuard<'a, Option>, #[cfg(feature = "qemu_debug")] qemu: MutexGuard<'a, Pio>, #[cfg(feature = "serial_debug")] - serial: MutexGuard<'a, SerialPort>>, + serial: MutexGuard<'a, Option>, #[cfg(feature = "system76_ec_debug")] system76_ec: MutexGuard<'a, Option>, } @@ -81,8 +83,8 @@ impl<'a> Writer<'a> { } #[cfg(feature = "serial_debug")] - { - self.serial.write(buf); + if let Some(serial) = &mut *self.serial { + serial.write(buf) } #[cfg(feature = "system76_ec_debug")] diff --git a/src/arch/x86_shared/device/serial.rs b/src/arch/x86_shared/device/serial.rs index b2e13ee3ea..fd2c2d1631 100644 --- a/src/arch/x86_shared/device/serial.rs +++ b/src/arch/x86_shared/device/serial.rs @@ -1,19 +1,24 @@ #[cfg(feature = "lpss_debug")] use crate::syscall::io::Mmio; -use crate::{devices::uart_16550::SerialPort, syscall::io::Pio}; +use crate::{ + devices::{serial::SerialKind, uart_16550::SerialPort}, + syscall::io::Pio, +}; use spin::Mutex; -pub static COM1: Mutex>> = Mutex::new(SerialPort::>::new(0x3F8)); -pub static COM2: Mutex>> = Mutex::new(SerialPort::>::new(0x2F8)); -// pub static COM3: Mutex>> = Mutex::new(SerialPort::>::new(0x3E8)); -// pub static COM4: Mutex>> = Mutex::new(SerialPort::>::new(0x2E8)); +pub static COM1: Mutex> = Mutex::new(Some(SerialKind::Ns16550Pio( + SerialPort::>::new(0x3F8), +))); +pub static COM2: Mutex> = Mutex::new(Some(SerialKind::Ns16550Pio( + SerialPort::>::new(0x2F8), +))); #[cfg(feature = "lpss_debug")] -pub static LPSS: Mutex>>> = Mutex::new(None); +pub static LPSS: Mutex> = Mutex::new(None); pub unsafe fn init() { - COM1.lock().init(); - COM2.lock().init(); + SerialPort::>::new(0x3F8).init(); + SerialPort::>::new(0x2F8).init(); #[cfg(feature = "lpss_debug")] { @@ -45,6 +50,6 @@ pub unsafe fn init() { let lpss = unsafe { SerialPort::>::new(crate::PHYS_OFFSET + 0xFE032000) }; lpss.init(); - *LPSS.lock() = Some(lpss); + *LPSS.lock() = Some(SerialKind::Ns16550u32(lpss)); } } diff --git a/src/arch/x86_shared/interrupt/irq.rs b/src/arch/x86_shared/interrupt/irq.rs index 642b2acdcb..bfd14d1934 100644 --- a/src/arch/x86_shared/interrupt/irq.rs +++ b/src/arch/x86_shared/interrupt/irq.rs @@ -11,11 +11,7 @@ use crate::{ interrupt, interrupt_stack, ipi::{ipi, IpiKind, IpiTarget}, percpu::PercpuBlock, - scheme::{ - debug::{debug_input, debug_notify}, - irq::irq_trigger, - serio::serio_input, - }, + scheme::{irq::irq_trigger, serio::serio_input}, time, }; @@ -201,18 +197,16 @@ interrupt!(cascade, || { }); interrupt!(com2, || { - while let Some(c) = COM2.lock().receive() { - debug_input(c); - } - debug_notify(); + if let Some(serial) = &mut *COM2.lock() { + serial.receive() + }; unsafe { eoi(3) }; }); interrupt!(com1, || { - while let Some(c) = COM1.lock().receive() { - debug_input(c); - } - debug_notify(); + if let Some(serial) = &mut *COM1.lock() { + serial.receive() + }; unsafe { eoi(4) }; });