Add mouse and clean virtio

This commit is contained in:
2026-03-11 16:42:58 +01:00
parent 60ddc88b38
commit f67718c3fe
14 changed files with 453 additions and 255 deletions

View File

@@ -9,16 +9,16 @@ use log::info;
use shared::syscall::SysCall;
use crate::{
KBD_DRIVER,
boot::sbi::{EextensionID, TimerFunctionID},
clear_csr, println,
KBD_DRIVER, MOUSE_DRIVER,
boot::sbi::{ExtensionID, TimerFunctionID},
clear_csr,
process::{ExecutionContext, exit_process, sleep},
read_csr,
riscv::disable_interrupt,
scheduler::SCHEDULER,
set_csr, syscall,
time::{IRQ_M_EXTERNAL, IRQ_M_TIMER, setup_next_timer_interrupt},
virtio::input::S_MODE_CLAIM_COMPLETE,
virtio::input::HANDLING_INTERRUPT,
virtual_fs::{FILE_SYSTEM, VirtualFileSystem},
write_csr,
};
@@ -58,7 +58,7 @@ unsafe extern "C" fn machine_trap_handler(
#[allow(clippy::single_match)]
match eid {
c if c == EextensionID::Time as usize => match fid {
c if c == ExtensionID::Time as usize => match fid {
c if c == TimerFunctionID::SetTimer as usize => {
clear_csr!(mip, 1 << 5);
}
@@ -199,7 +199,7 @@ unsafe extern "C" fn supervisor_trap_handler(
"ecall",
in("a0") 0,
in("a6") TimerFunctionID::SetTimer as u64,
in("a7") EextensionID::Time as u64,
in("a7") ExtensionID::Time as u64,
clobber_abi("system")
);
}
@@ -207,17 +207,21 @@ unsafe extern "C" fn supervisor_trap_handler(
SCHEDULER.lock().schedule(&mut interrupt_state);
}
9 => {
println!("click");
let irq = core::ptr::read_volatile(S_MODE_CLAIM_COMPLETE);
unsafe {
let irq = core::ptr::read_volatile((HANDLING_INTERRUPT + 0x1004) as *const u32);
if irq != 0 {
// ... Traiter l'interruption VirtIO ici ...
if irq != 0 {
if irq == 34 {
KBD_DRIVER.handle_interrupt();
} else if irq == 35 {
MOUSE_DRIVER.handle_interrupt();
}
// 2. Écrire l'IRQ (Complete) <--- INDISPENSABLE
core::ptr::write_volatile(S_MODE_CLAIM_COMPLETE, irq);
KBD_DRIVER.as_mut().unwrap().handle_interrupt();
} else {
panic!()
// Complete interrupt
core::ptr::write_volatile((HANDLING_INTERRUPT + 0x1004) as *mut u32, irq);
} else {
panic!()
}
}
}
_ => {}