summaryrefslogtreecommitdiffstats
path: root/sys/arm/sa11x0/sa11x0_irqhandler.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arm/sa11x0/sa11x0_irqhandler.c')
-rw-r--r--sys/arm/sa11x0/sa11x0_irqhandler.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/arm/sa11x0/sa11x0_irqhandler.c b/sys/arm/sa11x0/sa11x0_irqhandler.c
index c7e4030..a3f7db4 100644
--- a/sys/arm/sa11x0/sa11x0_irqhandler.c
+++ b/sys/arm/sa11x0/sa11x0_irqhandler.c
@@ -115,16 +115,26 @@ arm_get_irqnb(void *frame)
return(bus_space_read_4(sc->sc_iot, sc->sc_ioh, SAIPIC_IP));
}
+static uint32_t sa11x0_irq_mask = 0xfffffff;
+
+extern vm_offset_t saipic_base;
+
void
arm_mask_irqs(int irq)
{
- /* XXX */
+
+ sa11x0_irq_mask &= ~irq;
+ __asm __volatile("str %0, [%1, #0x04]" /* SAIPIC_MR */
+ : : "r" (sa11x0_irq_mask), "r" (saipic_base));
}
void
arm_unmask_irqs(int irq)
{
- /* XXX */
+
+ sa11x0_irq_mask |= irq;
+ __asm __volatile("str %0, [%1, #0x04]" /* SAIPIC_MR */
+ : : "r" (sa11x0_irq_mask), "r" (saipic_base));
}
void stray_irqhandler(void *);
OpenPOWER on IntegriCloud