version 1.2, 2008/03/05 14:06:41 |
version 1.3, 2008/03/05 20:27:08 |
|
|
|
|
/* NULLify handlers */ |
/* NULLify handlers */ |
memset(sc->sc_handlers, 0, sizeof(sc->sc_handlers)); |
memset(sc->sc_handlers, 0, sizeof(sc->sc_handlers)); |
|
#if 0 |
/* mask all interrupts.. */ |
/* mask all interrupts.. */ |
bus_space_write_4(sc->sc_bust, sc->sc_bush, SACCIC_INTEN0, 0); |
bus_space_write_4(sc->sc_bust, sc->sc_bush, SACCIC_INTEN0, 0); |
bus_space_write_4(sc->sc_bust, sc->sc_bush, SACCIC_INTEN1, 0); |
bus_space_write_4(sc->sc_bust, sc->sc_bush, SACCIC_INTEN1, 0); |
/* ..and kill all pending ones */ |
/* ..and kill all pending ones */ |
bus_space_write_4(sc->sc_bust, sc->sc_bush, SACCIC_INTSTATCLR0, 0xffffffff); |
bus_space_write_4(sc->sc_bust, sc->sc_bush, SACCIC_INTSTATCLR0, 0xffffffff); |
bus_space_write_4(sc->sc_bust, sc->sc_bush, SACCIC_INTSTATCLR1, 0xffffffff); |
bus_space_write_4(sc->sc_bust, sc->sc_bush, SACCIC_INTSTATCLR1, 0xffffffff); |
|
#endif |
|
printf(": SA-1111 Interrupt Controller\n"); |
/* XXX IPL_AUDIO ? */ |
/* XXX IPL_AUDIO ? */ |
sc->sc_hostih = sa11x0_gpio_intr_establish(saa->sac_xintr, IST_EDGE_RISING, IPL_AUDIO, |
sc->sc_hostih = sa11x0_gpio_intr_establish(saa->sac_xintr, IST_EDGE_RISING, IPL_TTY, |
sacic_dispatcher, NULL, "sacic"); |
sacic_dispatcher, NULL, "sacic"); |
|
|
sacic_sc = sc; |
sacic_sc = sc; |
|
|
if (sc->sc_handlers[intrno] != NULL) |
if (sc->sc_handlers[intrno] != NULL) |
/* jump! */ |
/* jump! */ |
sc->sc_handlers[intrno]->ih_func(sc->sc_handlers[intrno]->ih_arg); |
sc->sc_handlers[intrno]->ih_func(sc->sc_handlers[intrno]->ih_arg); |
else |
|
/* no handler */ |
|
printf("%s: sacic_dispatcher: warning, no handler for pending intrno %d\n", |
|
sc->sc_dev.dv_xname, intrno); |
|
|
|
/* XXX acknowledge intr anyway */ |
/* XXX acknowledge intr anyway */ |
sacic_intr_clear(intrno); |
sacic_intr_clear(intrno); |
|
|
if (sc->sc_handlers[intrno] != NULL) |
if (sc->sc_handlers[intrno] != NULL) |
/* jump! */ |
/* jump! */ |
sc->sc_handlers[intrno]->ih_func(sc->sc_handlers[intrno]->ih_arg); |
sc->sc_handlers[intrno]->ih_func(sc->sc_handlers[intrno]->ih_arg); |
else |
|
/* no handler */ |
|
printf("%s: sacic_dispatcher: warning, no handler for pending intrno %d\n", |
|
sc->sc_dev.dv_xname, intrno); |
|
|
|
/* XXX acknowledge intr anyway */ |
/* XXX acknowledge intr anyway */ |
sacic_intr_clear(intrno); |
sacic_intr_clear(intrno); |