x86: fix ps/2 E0-keys not working on some devices

This commit is contained in:
2025-03-01 23:26:22 +02:00
parent 3291df4eeb
commit aefa7a93fa
+6 -4
View File
@@ -22,6 +22,8 @@ mod codeset;
struct Inner {
command: IoPort<u8>,
data: IoPort<u8>,
e0: bool,
}
/// PS/2 controller driver
@@ -79,7 +81,6 @@ impl InterruptHandler for PS2Controller {
fn handle_irq(self: Arc<Self>, _vector: IrqVector) -> bool {
let mut count = 0;
let mut inner = self.inner.lock();
let mut e0 = false;
loop {
let Some(mut scancode) = inner.try_recv() else {
@@ -89,7 +90,7 @@ impl InterruptHandler for PS2Controller {
count += 1;
if scancode == 0xE0 {
e0 = true;
inner.e0 = true;
continue;
}
let release = scancode >= 0x80;
@@ -98,14 +99,14 @@ impl InterruptHandler for PS2Controller {
scancode -= 0x80;
}
let key = translate(e0, scancode);
let key = translate(inner.e0, scancode);
let event = if release {
KeyboardKeyEvent::Released(key)
} else {
KeyboardKeyEvent::Pressed(key)
};
e0 = false;
inner.e0 = false;
ygg_driver_input::send_event(event);
}
@@ -156,6 +157,7 @@ impl PS2Controller {
let inner = Inner {
command: IoPort::new(cmd_port),
data: IoPort::new(data_port),
e0: false,
};
Self {