forked from rcore-os/zCore
use a magic mapping
This commit is contained in:
parent
12b2c0830e
commit
d304d2209e
|
@ -53,6 +53,7 @@ pub fn irq_handle(irq: u8) {
|
||||||
|
|
||||||
#[export_name = "hal_irq_add_handle"]
|
#[export_name = "hal_irq_add_handle"]
|
||||||
pub fn irq_add_handle(irq: u8, handle: Arc<dyn Fn() + Send + Sync>) -> bool {
|
pub fn irq_add_handle(irq: u8, handle: Arc<dyn Fn() + Send + Sync>) -> bool {
|
||||||
|
info!("IRQ add handle {}", irq);
|
||||||
let irq = irq as usize;
|
let irq = irq as usize;
|
||||||
let mut table = IRQ_TABLE.lock();
|
let mut table = IRQ_TABLE.lock();
|
||||||
match table[irq] {
|
match table[irq] {
|
||||||
|
@ -66,6 +67,7 @@ pub fn irq_add_handle(irq: u8, handle: Arc<dyn Fn() + Send + Sync>) -> bool {
|
||||||
|
|
||||||
#[export_name = "hal_irq_remove_handle"]
|
#[export_name = "hal_irq_remove_handle"]
|
||||||
pub fn irq_remove_handle(irq: u8) -> bool {
|
pub fn irq_remove_handle(irq: u8) -> bool {
|
||||||
|
info!("IRQ remove handle {}", irq);
|
||||||
let irq = irq as usize;
|
let irq = irq as usize;
|
||||||
let mut table = IRQ_TABLE.lock();
|
let mut table = IRQ_TABLE.lock();
|
||||||
match table[irq] {
|
match table[irq] {
|
||||||
|
|
|
@ -58,15 +58,16 @@ impl Interrupt {
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_event(vector: usize, options: InterruptOptions) -> ZxResult<Arc<Self>> {
|
pub fn new_event(mut vector: usize, options: InterruptOptions) -> ZxResult<Arc<Self>> {
|
||||||
let mode = options.to_mode();
|
let mode = options.to_mode();
|
||||||
if mode != InterruptOptions::MODE_DEFAULT && mode != InterruptOptions::MODE_EDGE_HIGH {
|
if mode != InterruptOptions::MODE_DEFAULT && mode != InterruptOptions::MODE_EDGE_HIGH {
|
||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
// I don't know how to remap a vector
|
// I don't know the real mapping, +16 only to avoid conflict
|
||||||
// if options.contains(InterruptOptions::REMAP_IRQ) {
|
if options.contains(InterruptOptions::REMAP_IRQ) {
|
||||||
// vector = EventInterrupt::remap(vector);
|
vector = vector + 16;
|
||||||
// }
|
// vector = EventInterrupt::remap(vector);
|
||||||
|
}
|
||||||
let event_interrupt = Arc::new(Interrupt {
|
let event_interrupt = Arc::new(Interrupt {
|
||||||
base: KObjectBase::new(),
|
base: KObjectBase::new(),
|
||||||
hasvcpu: false,
|
hasvcpu: false,
|
||||||
|
|
|
@ -210,6 +210,7 @@ impl Syscall<'_> {
|
||||||
Sys::CPRNG_DRAW_ONCE => self.sys_cprng_draw_once(a0 as _, a1 as _),
|
Sys::CPRNG_DRAW_ONCE => self.sys_cprng_draw_once(a0 as _, a1 as _),
|
||||||
Sys::NANOSLEEP => self.sys_nanosleep(a0.into()).await,
|
Sys::NANOSLEEP => self.sys_nanosleep(a0.into()).await,
|
||||||
Sys::CLOCK_GET => self.sys_clock_get(a0 as _, a1.into()),
|
Sys::CLOCK_GET => self.sys_clock_get(a0 as _, a1.into()),
|
||||||
|
Sys::CLOCK_ADJUST => self.sys_clock_adjust(a0 as _, a1 as _, a2 as _),
|
||||||
Sys::TIMER_CREATE => self.sys_timer_create(a0 as _, a1 as _, a2.into()),
|
Sys::TIMER_CREATE => self.sys_timer_create(a0 as _, a1 as _, a2.into()),
|
||||||
Sys::DEBUG_WRITE => self.sys_debug_write(a0.into(), a1 as _),
|
Sys::DEBUG_WRITE => self.sys_debug_write(a0.into(), a1 as _),
|
||||||
Sys::DEBUGLOG_CREATE => self.sys_debuglog_create(a0 as _, a1 as _, a2.into()),
|
Sys::DEBUGLOG_CREATE => self.sys_debuglog_create(a0 as _, a1 as _, a2.into()),
|
||||||
|
|
Loading…
Reference in New Issue