diff --git a/arch/x86_64/src/device/serial.rs b/arch/x86_64/src/device/serial.rs index 02037da..87e18c7 100644 --- a/arch/x86_64/src/device/serial.rs +++ b/arch/x86_64/src/device/serial.rs @@ -85,13 +85,15 @@ impl SerialPort { } pub fn on_receive(&mut self) { - let data = self.data.read(); + while self.line_sts().contains(INPUT_FULL) { + let data = self.data.read(); - extern { - fn debug_input(byte: u8); + extern { + fn debug_input(byte: u8); + } + + unsafe { debug_input(data) }; } - - unsafe { debug_input(data) }; } } diff --git a/arch/x86_64/src/interrupt/irq.rs b/arch/x86_64/src/interrupt/irq.rs index f6f3862..a83a33f 100644 --- a/arch/x86_64/src/interrupt/irq.rs +++ b/arch/x86_64/src/interrupt/irq.rs @@ -50,14 +50,17 @@ interrupt!(keyboard, { interrupt!(cascade, { // No need to do any operations on cascade + pic::MASTER.ack(); }); interrupt!(com2, { COM2.lock().on_receive(); + pic::MASTER.ack(); }); interrupt!(com1, { COM1.lock().on_receive(); + pic::MASTER.ack(); }); interrupt!(lpt2, {