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.c133
1 files changed, 20 insertions, 113 deletions
diff --git a/sys/arm/sa11x0/sa11x0_irqhandler.c b/sys/arm/sa11x0/sa11x0_irqhandler.c
index 5b7e430..c7e4030 100644
--- a/sys/arm/sa11x0/sa11x0_irqhandler.c
+++ b/sys/arm/sa11x0/sa11x0_irqhandler.c
@@ -93,141 +93,48 @@ __FBSDID("$FreeBSD$");
#include <arm/sa11x0/sa11x0_var.h>
#include <machine/cpu.h>
+#include <machine/intr.h>
#define NIRQS 0x20
struct intrhand *irqhandlers[NIRQS];
int current_intr_depth;
-u_int actual_mask;
-#define IPL_LEVELS 13
-#ifdef hpcarm
-#define IPL_LEVELS (NIPL+1)
-u_int imask[NIPL];
-#else
-u_int spl_mask;
-u_int irqmasks[IPL_LEVELS];
-#endif
-u_int irqblock[NIRQS];
-u_int levels[IPL_LEVELS];
-
-
-extern void set_spl_masks(void);
-#if 0
-static int fakeintr(void *);
-#endif
-#ifdef DEBUG
-static int dumpirqhandlers(void);
-#endif
+extern struct sa11x0_softc *sa11x0_softc;
+
/* Recalculate the interrupt masks from scratch.
* We could code special registry and deregistry versions of this function that
* would be faster, but the code would be nastier, and we don't expect this to
* happen very much anyway.
*/
-void intr_calculatemasks(void);
-void
-intr_calculatemasks(void)
-{
- int irq;
- int intrlevel[ICU_LEN];
- int level;
-
- /* First, figure out which levels each IRQ uses. */
- for (irq = 0; irq < ICU_LEN; irq++) {
- intrlevel[irq] = levels[irq];
- }
- /* Then figure out which IRQs use each level. */
-#ifdef hpcarm
- for (level = 0; level < NIPL; level++) {
-#else
- for (level = 0; level <= IPL_LEVELS; level++) {
-#endif
- int irqs = 0;
- for (irq = 0; irq < ICU_LEN; irq++) {
- if (intrlevel[irq] & (1 << level)) {
- irqs |= 1 << irq;
- }
- }
-#ifdef hpcarm
-
- imask[level] = irqs;
-#else
- irqmasks[level] = irqs;
- printf("level %d set to %x\n", level, irqs);
-#endif
- }
- /*
- * Enforce a hierarchy that gives slow devices a better chance at not
- * dropping data.
- */
-#ifdef hpcarm
- for (level = NIPL - 1; level > 0; level--)
- imask[level - 1] |= imask[level];
-#else
- for (level = IPL_LEVELS; level > 0; level--)
- irqmasks[level - 1] |= irqmasks[level];
-#endif
- /*
- * Calculate irqblock[], which emulates hardware interrupt levels.
- */
-#if 0
- for (irq = 0; irq < ICU_LEN; irq++) {
- int irqs = 1 << irq;
- for (q = irqhandlers[irq]; q; q = q->ih_next)
-#ifdef hpcarm
- irqs |= ~imask[q->ih_level];
-#else
- irqs |= ~irqmasks[q->ih_level];
-#endif
- irqblock[irq] = irqs;
- }
-#endif
-}
-
-const struct evcnt *sa11x0_intr_evcnt(sa11x0_chipset_tag_t, int);
-void stray_irqhandler(void *);
+int
+arm_get_irqnb(void *frame)
+{
+ struct sa11x0_softc *sc = sa11x0_softc;
+ return(bus_space_read_4(sc->sc_iot, sc->sc_ioh, SAIPIC_IP));
+}
-const struct evcnt *
-sa11x0_intr_evcnt(sa11x0_chipset_tag_t ic, int irq)
+void
+arm_mask_irqs(int irq)
{
+ /* XXX */
+}
- /* XXX for now, no evcnt parent reported */
- return NULL;
+void
+arm_unmask_irqs(int irq)
+{
+ /* XXX */
}
+void stray_irqhandler(void *);
+
+
void
stray_irqhandler(void *p)
{
printf("stray interrupt %p\n", p);
- printf("bla\n");
-}
-
-#if 0
-int
-fakeintr(void *p)
-{
-
- return 0;
-}
-#endif
-#ifdef DEBUG
-int
-dumpirqhandlers()
-{
- int irq;
- struct irqhandler *p;
-
- for (irq = 0; irq < ICU_LEN; irq++) {
- printf("irq %d:", irq);
- p = irqhandlers[irq];
- for (; p; p = p->ih_next)
- printf("ih_func: 0x%lx, ", (unsigned long)p->ih_func);
- printf("\n");
- }
- return 0;
}
-#endif
/* End of irqhandler.c */
OpenPOWER on IntegriCloud