コード例 #1
0
ファイル: podulebus.c プロジェクト: lacombar/netbsd-alc
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);
}
コード例 #2
0
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);
}