Skip to content

Commit 2cb9c69

Browse files
Make mouse and keyboard async (#67)
1 parent 45e3fd5 commit 2cb9c69

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

kernel/src/devices/keyboard.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
//!
33
//! Currently does not support fancy stuff like key repeats
44
use crate::{
5+
events::schedule_kernel,
56
interrupts::{idt::without_interrupts, x2apic},
67
serial_println,
78
};
@@ -190,10 +191,15 @@ pub extern "x86-interrupt" fn keyboard_handler(_frame: InterruptStackFrame) {
190191
let mut port = Port::new(0x60);
191192
let scancode: u8 = unsafe { port.read() };
192193

193-
let mut keyboard = KEYBOARD.lock();
194-
if let Err(e) = keyboard.process_scancode(scancode) {
195-
serial_println!("Error processing keyboard scancode: {:?}", e);
196-
}
194+
schedule_kernel(
195+
async move {
196+
let mut keyboard = KEYBOARD.lock();
197+
if let Err(e) = keyboard.process_scancode(scancode) {
198+
serial_println!("Error processing keyboard scancode: {:?}", e);
199+
}
200+
},
201+
0,
202+
);
197203

198204
x2apic::send_eoi();
199205
}

kernel/src/devices/mouse.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//! synchronous and asynchronous interfaces for mouse events
55
66
use crate::{
7+
events::schedule_kernel,
78
interrupts::{idt::without_interrupts, x2apic},
89
serial_println,
910
};
@@ -597,10 +598,15 @@ pub extern "x86-interrupt" fn mouse_handler(_frame: InterruptStackFrame) {
597598
let mut data_port = Port::new(PS2Port::DATA);
598599
let data: u8 = unsafe { data_port.read() };
599600

600-
let mut mouse = MOUSE.lock();
601-
if let Err(e) = mouse.process_mouse_byte(data) {
602-
serial_println!("Error processing mouse data: {:?}", e);
603-
}
601+
schedule_kernel(
602+
async move {
603+
let mut mouse = MOUSE.lock();
604+
if let Err(e) = mouse.process_mouse_byte(data) {
605+
serial_println!("Error processing mouse data: {:?}", e);
606+
}
607+
},
608+
0,
609+
);
604610

605611
x2apic::send_eoi();
606612
}

0 commit comments

Comments
 (0)