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)
|
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)
|
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;
|
static struct XiziTrapDriver* p_intr_driver = NULL;
|
||||||
int sys_register_irq(int irq_num, int irq_opcode)
|
int sys_register_irq(int irq_num, int irq_opcode)
|
||||||
{
|
{
|
||||||
|
int cpu_id;
|
||||||
|
|
||||||
// init intr resource;
|
// init intr resource;
|
||||||
if (p_intr_driver == NULL) {
|
if (p_intr_driver == NULL) {
|
||||||
struct TraceTag intr_ac_tag;
|
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);
|
p_intr_driver->bind_irq_handler(irq_num, user_irq_handler);
|
||||||
cur_task->bind_irq = true;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue