From 331590e129607947971754d19f224c92d35f092c Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Fri, 1 Nov 2019 20:35:02 -0600
Subject: [PATCH] Support COM3 and COM4

---
 src/arch/x86_64/debug.rs         | 1 +
 src/arch/x86_64/device/serial.rs | 4 ++++
 src/arch/x86_64/interrupt/irq.rs | 8 +++++++-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/arch/x86_64/debug.rs b/src/arch/x86_64/debug.rs
index 3da2a663..591e65da 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 c2b424c0..83fe75b6 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 8c755baa..ccd505c7 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();
 });
 
-- 
GitLab