void * podulebus_irq_establish(podulebus_intr_handle_t slot, int ipl, int (*func)(void *), void *arg, struct evcnt *ev) { /* XXX: support for checking IRQ bit on podule? */ #if NUNIXBP > 0 if (the_unixbp != NULL) return irq_establish(IRQ_UNIXBP_BASE + slot, ipl, func, arg, ev); #endif return irq_establish(IRQ_PIRQ, ipl, func, arg, ev); }
static void arckbd_attach(device_t parent, device_t self, void *aux) { struct arckbd_softc *sc = device_private(self); struct ioc_attach_args *ioc = aux; bus_space_tag_t bst; bus_space_handle_t bsh; struct wskbddev_attach_args wskbdargs; struct wsmousedev_attach_args wsmouseargs; bst = sc->sc_bst = ioc->ioc_fast_t; bsh = sc->sc_bsh = ioc->ioc_fast_h; sc->sc_dev = self; evcnt_attach_dynamic(&sc->sc_rev, EVCNT_TYPE_INTR, NULL, device_xname(sc->sc_dev), "rx intr"); sc->sc_rirq = irq_establish(IOC_IRQ_SRX, IPL_TTY, arckbd_rint, self, &sc->sc_rev); aprint_verbose("\n%s: interrupting at %s (rx)", device_xname(self), irq_string(sc->sc_rirq)); evcnt_attach_dynamic(&sc->sc_xev, EVCNT_TYPE_INTR, NULL, device_xname(sc->sc_dev), "tx intr"); sc->sc_xirq = irq_establish(IOC_IRQ_STX, IPL_TTY, arckbd_xint, self, &sc->sc_xev); irq_disable(sc->sc_xirq); aprint_verbose(" and %s (tx)", irq_string(sc->sc_xirq)); /* Initialisation of IOC KART per IOC Data Sheet section 6.2.3. */ /* Set up IOC counter 3 */ /* k_BAUD = 1/((latch+1)*16) MHz */ ioc_counter_start(parent, 3, 62500 / ARCKBD_BAUD - 1); /* Read from Rx register and discard. */ (void)bus_space_read_1(bst, bsh, 0); /* Kick the keyboard into life */ arckbd_send(self, ARCKBD_HRST, AS_HRST, 0); sc->sc_mapdata = arckbd_mapdata_default; sc->sc_mapdata.layout = KB_UK; /* Reasonable default */ /* Attach the wskbd console */ arckbd_cnattach(self); aprint_normal("\n"); rnd_attach_source(&sc->sc_rnd_source, device_xname(self), RND_TYPE_TTY, 0); wskbdargs.console = 1; /* XXX FIXME */ wskbdargs.keymap = &sc->sc_mapdata; wskbdargs.accessops = &arckbd_accessops; wskbdargs.accesscookie = sc; sc->sc_wskbddev = config_found_ia(self, "wskbddev", &wskbdargs, NULL); wsmouseargs.accessops = &arcmouse_accessops; wsmouseargs.accesscookie = sc; sc->sc_wsmousedev = config_found_ia(self, "wsmousedev", &wsmouseargs, NULL); }