mirror of https://gitee.com/openkylin/qemu.git
hw: arm_gic: Introduce gic_set_priority function
To make the code slightly cleaner to look at and make the save/restore code easier to understand, introduce this function to set the priority of interrupts. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org> Message-id: 1387606179-22709-3-git-send-email-christoffer.dall@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
04050c5c6a
commit
9df90ad078
|
@ -168,6 +168,15 @@ uint32_t gic_acknowledge_irq(GICState *s, int cpu)
|
||||||
return new_irq;
|
return new_irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gic_set_priority(GICState *s, int cpu, int irq, uint8_t val)
|
||||||
|
{
|
||||||
|
if (irq < GIC_INTERNAL) {
|
||||||
|
s->priority1[irq][cpu] = val;
|
||||||
|
} else {
|
||||||
|
s->priority2[(irq) - GIC_INTERNAL] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void gic_complete_irq(GICState *s, int cpu, int irq)
|
void gic_complete_irq(GICState *s, int cpu, int irq)
|
||||||
{
|
{
|
||||||
int update = 0;
|
int update = 0;
|
||||||
|
@ -443,11 +452,7 @@ static void gic_dist_writeb(void *opaque, hwaddr offset,
|
||||||
irq = (offset - 0x400) + GIC_BASE_IRQ;
|
irq = (offset - 0x400) + GIC_BASE_IRQ;
|
||||||
if (irq >= s->num_irq)
|
if (irq >= s->num_irq)
|
||||||
goto bad_reg;
|
goto bad_reg;
|
||||||
if (irq < GIC_INTERNAL) {
|
gic_set_priority(s, cpu, irq, value);
|
||||||
s->priority1[irq][cpu] = value;
|
|
||||||
} else {
|
|
||||||
s->priority2[irq - GIC_INTERNAL] = value;
|
|
||||||
}
|
|
||||||
} else if (offset < 0xc00) {
|
} else if (offset < 0xc00) {
|
||||||
/* Interrupt CPU Target. RAZ/WI on uniprocessor GICs, with the
|
/* Interrupt CPU Target. RAZ/WI on uniprocessor GICs, with the
|
||||||
* annoying exception of the 11MPCore's GIC.
|
* annoying exception of the 11MPCore's GIC.
|
||||||
|
|
|
@ -61,5 +61,6 @@ uint32_t gic_acknowledge_irq(GICState *s, int cpu);
|
||||||
void gic_complete_irq(GICState *s, int cpu, int irq);
|
void gic_complete_irq(GICState *s, int cpu, int irq);
|
||||||
void gic_update(GICState *s);
|
void gic_update(GICState *s);
|
||||||
void gic_init_irqs_and_distributor(GICState *s, int num_irq);
|
void gic_init_irqs_and_distributor(GICState *s, int num_irq);
|
||||||
|
void gic_set_priority(GICState *s, int cpu, int irq, uint8_t val);
|
||||||
|
|
||||||
#endif /* !QEMU_ARM_GIC_INTERNAL_H */
|
#endif /* !QEMU_ARM_GIC_INTERNAL_H */
|
||||||
|
|
Loading…
Reference in New Issue