diff -r e3c5ba764922 sys/arm/arm/gic.c --- a/sys/arm/arm/gic.c Fri Aug 02 19:17:49 2013 +0300 +++ b/sys/arm/arm/gic.c Tue Aug 06 12:26:36 2013 +0300 @@ -83,6 +83,10 @@ #define GICC_ABPR 0x001C /* v1 ICCABPR */ #define GICC_IIDR 0x00FC /* v1 ICCIIDR*/ +static int gic_get_next_irq(int); +static void gic_mask_irq(uintptr_t); +static void gic_unmask_irq(uintptr_t); + struct arm_gic_softc { struct resource * gic_res[3]; bus_space_tag_t gic_c_bst; @@ -171,6 +175,9 @@ } arm_post_filter = gic_post_filter; + arm_get_next_irq = gic_get_next_irq; + arm_mask_irq = gic_mask_irq; + arm_unmask_irq = gic_unmask_irq; /* Distributor Interface */ sc->gic_d_bst = rman_get_bustag(sc->gic_res[0]); @@ -250,12 +257,12 @@ gic_c_write_4(GICC_EOIR, irq); } -int -arm_get_next_irq(int last_irq) +static int +gic_get_next_irq(int last_irq) { uint32_t active_irq; - active_irq = gic_c_read_4(GICC_IAR); + active_irq = gic_c_read_4(GICC_HPPIR); /* * Immediatly EOIR the SGIs, because doing so requires the other @@ -277,14 +284,14 @@ return active_irq; } -void -arm_mask_irq(uintptr_t nb) +static void +gic_mask_irq(uintptr_t nb) { gic_d_write_4(GICD_ICENABLER(nb >> 5), (1UL << (nb & 0x1F))); } -void -arm_unmask_irq(uintptr_t nb) +static void +gic_unmask_irq(uintptr_t nb) { gic_c_write_4(GICC_EOIR, nb); diff -r e3c5ba764922 sys/arm/arm/intr.c --- a/sys/arm/arm/intr.c Fri Aug 02 19:17:49 2013 +0300 +++ b/sys/arm/arm/intr.c Tue Aug 06 12:26:36 2013 +0300 @@ -58,6 +58,9 @@ void arm_handler_execute(struct trapframe *, int); +int (*arm_get_next_irq)(int) = NULL; +void (*arm_mask_irq)(uintptr_t) = NULL; +void (*arm_unmask_irq)(uintptr_t) = NULL; void (*arm_post_filter)(void *) = NULL; /* diff -r e3c5ba764922 sys/arm/include/intr.h --- a/sys/arm/include/intr.h Fri Aug 02 19:17:49 2013 +0300 +++ b/sys/arm/include/intr.h Tue Aug 06 12:26:36 2013 +0300 @@ -67,9 +67,9 @@ #include -int arm_get_next_irq(int); -void arm_mask_irq(uintptr_t); -void arm_unmask_irq(uintptr_t); +extern int (*arm_get_next_irq)(int); +extern void (*arm_mask_irq)(uintptr_t); +extern void (*arm_unmask_irq)(uintptr_t); void arm_intrnames_init(void); void arm_setup_irqhandler(const char *, int (*)(void*), void (*)(void*), void *, int, int, void **);