diff --git a/src/arch/x86_64/debug.rs b/src/arch/x86_64/debug.rs index 3da2a6634cf31569a2d931e2bfceb651ffed846f..591e65da10a602c68c08612ab747b2e850436bab 100644 --- a/src/arch/x86_64/debug.rs +++ b/src/arch/x86_64/debug.rs @@ -6,6 +6,7 @@ use spin::MutexGuard; use crate::log::{LOG, Log}; #[cfg(feature = "qemu_debug")] use syscall::io::Io; +#[cfg(any(feature = "qemu_debug", feature = "serial_debug"))] use crate::syscall::io::Pio; #[cfg(feature = "serial_debug")] use crate::devices::uart_16550::SerialPort; diff --git a/src/arch/x86_64/device/serial.rs b/src/arch/x86_64/device/serial.rs index c2b424c0f183f780214e4da72f8791fbbce07356..83fe75b635d93b89d875947aa0d609e8b8843179 100644 --- a/src/arch/x86_64/device/serial.rs +++ b/src/arch/x86_64/device/serial.rs @@ -4,8 +4,12 @@ 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 unsafe fn init() { COM1.lock().init(); COM2.lock().init(); + COM3.lock().init(); + COM4.lock().init(); } diff --git a/src/arch/x86_64/interrupt/irq.rs b/src/arch/x86_64/interrupt/irq.rs index 8c755baa31dd4974fab94ad9c74786c6f2806bf0..ccd505c7cc29d9a0079c95d4fc90940790ed7da9 100644 --- a/src/arch/x86_64/interrupt/irq.rs +++ b/src/arch/x86_64/interrupt/irq.rs @@ -2,7 +2,7 @@ use core::sync::atomic::{AtomicUsize, Ordering}; use crate::context::timeout; use crate::device::pic; -use crate::device::serial::{COM1, COM2}; +use crate::device::serial::{COM1, COM2, COM3, COM4}; use crate::ipi::{ipi, IpiKind, IpiTarget}; use crate::scheme::debug::debug_input; use crate::{context, ptrace, time}; @@ -78,6 +78,9 @@ interrupt!(com2, { while let Some(c) = COM2.lock().receive() { debug_input(c); } + while let Some(c) = COM4.lock().receive() { + debug_input(c); + } pic::MASTER.ack(); }); @@ -85,6 +88,9 @@ interrupt!(com1, { while let Some(c) = COM1.lock().receive() { debug_input(c); } + while let Some(c) = COM3.lock().receive() { + debug_input(c); + } pic::MASTER.ack(); });