Map keyboard to bépo
This commit is contained in:
@@ -7,7 +7,7 @@ use crate::{
|
||||
virtio::{DeviceStatus, QUEUE_SIZE, VirtioPciCommonCfg, Virtqueue},
|
||||
};
|
||||
|
||||
pub struct VirtioPciDriver<F: Fn(&VirtioInputEvent) = fn(&VirtioInputEvent)> {
|
||||
pub struct VirtioPciDriver<S, F: Fn(&mut S, &VirtioInputEvent) = fn(&mut S, &VirtioInputEvent)> {
|
||||
common_cfg: *mut VirtioPciCommonCfg,
|
||||
notify_cfg: *mut u16,
|
||||
isr_cfg: *mut u8,
|
||||
@@ -18,6 +18,7 @@ pub struct VirtioPciDriver<F: Fn(&VirtioInputEvent) = fn(&VirtioInputEvent)> {
|
||||
notify_off: u32, // Multiplier from PCI notify capability (used to compute notify address)
|
||||
|
||||
handle_event: F,
|
||||
state: S,
|
||||
}
|
||||
|
||||
#[repr(u16)]
|
||||
@@ -84,8 +85,8 @@ impl VirtioInputEvent {
|
||||
}
|
||||
}
|
||||
|
||||
impl<F: Fn(&VirtioInputEvent)> VirtioPciDriver<F> {
|
||||
pub const unsafe fn new(handle_event: F, queue_mem: &'static mut Virtqueue) -> Self {
|
||||
impl<S, F: Fn(&mut S, &VirtioInputEvent)> VirtioPciDriver<S, F> {
|
||||
pub const unsafe fn new(handle_event: F, state: S, queue_mem: &'static mut Virtqueue) -> Self {
|
||||
Self {
|
||||
common_cfg: core::ptr::null_mut(),
|
||||
notify_cfg: core::ptr::null_mut(),
|
||||
@@ -99,6 +100,7 @@ impl<F: Fn(&VirtioInputEvent)> VirtioPciDriver<F> {
|
||||
last_used_idx: 0,
|
||||
notify_off: 0,
|
||||
handle_event,
|
||||
state,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,7 +205,7 @@ impl<F: Fn(&VirtioInputEvent)> VirtioPciDriver<F> {
|
||||
let used_elem = &self.queue.used.ring[ring_slot];
|
||||
let event = &self.event_pool[used_elem.id as usize];
|
||||
|
||||
(self.handle_event)(event);
|
||||
(self.handle_event)(&mut self.state, event);
|
||||
|
||||
// Recyclage
|
||||
let avail_head = self.queue.available.idx.load(Ordering::Relaxed) as usize % QUEUE_SIZE;
|
||||
|
||||
Reference in New Issue
Block a user