Use SerialKind on x86
This commit is contained in:
@@ -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")]
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) };
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user