Use SerialKind on x86

This commit is contained in:
bjorn3
2025-09-12 18:40:21 +02:00
parent f0eea47896
commit 7a4dd1a1a9
3 changed files with 29 additions and 28 deletions
+8 -6
View File
@@ -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<Log>>,
display: MutexGuard<'a, Option<DebugDisplay>>,
#[cfg(feature = "lpss_debug")]
lpss: MutexGuard<'a, Option<&'static mut SerialPort<Mmio<u32>>>>,
lpss: MutexGuard<'a, Option<SerialKind>>,
#[cfg(feature = "qemu_debug")]
qemu: MutexGuard<'a, Pio<u8>>,
#[cfg(feature = "serial_debug")]
serial: MutexGuard<'a, SerialPort<Pio<u8>>>,
serial: MutexGuard<'a, Option<SerialKind>>,
#[cfg(feature = "system76_ec_debug")]
system76_ec: MutexGuard<'a, Option<System76Ec>>,
}
@@ -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")]
+14 -9
View File
@@ -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<SerialPort<Pio<u8>>> = Mutex::new(SerialPort::<Pio<u8>>::new(0x3F8));
pub static COM2: Mutex<SerialPort<Pio<u8>>> = Mutex::new(SerialPort::<Pio<u8>>::new(0x2F8));
// pub static COM3: Mutex<SerialPort<Pio<u8>>> = Mutex::new(SerialPort::<Pio<u8>>::new(0x3E8));
// pub static COM4: Mutex<SerialPort<Pio<u8>>> = Mutex::new(SerialPort::<Pio<u8>>::new(0x2E8));
pub static COM1: Mutex<Option<SerialKind>> = Mutex::new(Some(SerialKind::Ns16550Pio(
SerialPort::<Pio<u8>>::new(0x3F8),
)));
pub static COM2: Mutex<Option<SerialKind>> = Mutex::new(Some(SerialKind::Ns16550Pio(
SerialPort::<Pio<u8>>::new(0x2F8),
)));
#[cfg(feature = "lpss_debug")]
pub static LPSS: Mutex<Option<&'static mut SerialPort<Mmio<u32>>>> = Mutex::new(None);
pub static LPSS: Mutex<Option<SerialKind>> = Mutex::new(None);
pub unsafe fn init() {
COM1.lock().init();
COM2.lock().init();
SerialPort::<Pio<u8>>::new(0x3F8).init();
SerialPort::<Pio<u8>>::new(0x2F8).init();
#[cfg(feature = "lpss_debug")]
{
@@ -45,6 +50,6 @@ pub unsafe fn init() {
let lpss = unsafe { SerialPort::<Mmio<u32>>::new(crate::PHYS_OFFSET + 0xFE032000) };
lpss.init();
*LPSS.lock() = Some(lpss);
*LPSS.lock() = Some(SerialKind::Ns16550u32(lpss));
}
}
+7 -13
View File
@@ -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) };
});