forked from yystopf/xiuos
According to ARMv8 architecture, the IRQ should be enable by calling gic_setup_spi when the NO. is larger than 31.
This commit is contained in:
parent
332bb5b870
commit
7000c5cd18
|
@ -70,7 +70,12 @@ static void _cpu_irq_disable(void)
|
|||
|
||||
static void _single_irq_enable(int irq, int cpu, int prio)
|
||||
{
|
||||
gic_setup_ppi((uint32_t)cpu, (uint32_t)irq);
|
||||
if (irq < 32) {
|
||||
gic_setup_ppi((uint32_t)cpu, (uint32_t)irq);
|
||||
}
|
||||
else {
|
||||
gic_setup_spi((uint32_t)cpu, (uint32_t)irq);
|
||||
}
|
||||
}
|
||||
|
||||
static void _single_irq_disable(int irq, int cpu)
|
||||
|
|
|
@ -104,6 +104,8 @@ extern struct session_backend* create_session_inner(struct Thread* client, struc
|
|||
static struct XiziTrapDriver* p_intr_driver = NULL;
|
||||
int sys_register_irq(int irq_num, int irq_opcode)
|
||||
{
|
||||
int cpu_id;
|
||||
|
||||
// init intr resource;
|
||||
if (p_intr_driver == NULL) {
|
||||
struct TraceTag intr_ac_tag;
|
||||
|
@ -140,6 +142,10 @@ int sys_register_irq(int irq_num, int irq_opcode)
|
|||
p_intr_driver->bind_irq_handler(irq_num, user_irq_handler);
|
||||
cur_task->bind_irq = true;
|
||||
|
||||
// enable irq
|
||||
cpu_id = p_intr_driver->cur_cpu_id();
|
||||
p_intr_driver->single_irq_enable(irq_num, cpu_id, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue