1*78d5ff0eSmpi /* $OpenBSD: lpt_ssio.c,v 1.2 2022/03/13 08:04:38 mpi Exp $ */
24cbe4815Skettenis
34cbe4815Skettenis /*
44cbe4815Skettenis * Copyright (c) 2007 Mark Kettenis
54cbe4815Skettenis *
64cbe4815Skettenis * Permission to use, copy, modify, and distribute this software for any
74cbe4815Skettenis * purpose with or without fee is hereby granted, provided that the above
84cbe4815Skettenis * copyright notice and this permission notice appear in all copies.
94cbe4815Skettenis *
104cbe4815Skettenis * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
114cbe4815Skettenis * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
124cbe4815Skettenis * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
134cbe4815Skettenis * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
144cbe4815Skettenis * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
154cbe4815Skettenis * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
164cbe4815Skettenis * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
174cbe4815Skettenis */
184cbe4815Skettenis
194cbe4815Skettenis #include <sys/param.h>
204cbe4815Skettenis #include <sys/systm.h>
214cbe4815Skettenis #include <sys/device.h>
224cbe4815Skettenis
234cbe4815Skettenis #include <machine/bus.h>
244cbe4815Skettenis
254cbe4815Skettenis #include <dev/ic/lptreg.h>
264cbe4815Skettenis #include <dev/ic/lptvar.h>
274cbe4815Skettenis
284cbe4815Skettenis #include <hppa/dev/ssiovar.h>
294cbe4815Skettenis
304cbe4815Skettenis int lpt_ssio_match(struct device *, void *, void *);
314cbe4815Skettenis void lpt_ssio_attach(struct device *, struct device *, void *);
324cbe4815Skettenis
33*78d5ff0eSmpi const struct cfattach lpt_ssio_ca = {
344cbe4815Skettenis sizeof(struct lpt_softc), lpt_ssio_match, lpt_ssio_attach
354cbe4815Skettenis };
364cbe4815Skettenis
374cbe4815Skettenis int
lpt_ssio_match(struct device * parent,void * match,void * aux)384cbe4815Skettenis lpt_ssio_match(struct device *parent, void *match, void *aux)
394cbe4815Skettenis {
404cbe4815Skettenis struct cfdata *cf = match;
414cbe4815Skettenis struct ssio_attach_args *saa = aux;
424cbe4815Skettenis
434cbe4815Skettenis if (strcmp(saa->saa_name, "lpt") != 0)
444cbe4815Skettenis return (0);
454cbe4815Skettenis
464cbe4815Skettenis /* Check locators. */
474cbe4815Skettenis if (cf->ssiocf_irq != SSIO_UNK_IRQ && cf->ssiocf_irq != saa->saa_irq)
484cbe4815Skettenis return (0);
494cbe4815Skettenis
504cbe4815Skettenis return (1);
514cbe4815Skettenis }
524cbe4815Skettenis
534cbe4815Skettenis void
lpt_ssio_attach(struct device * parent,struct device * self,void * aux)544cbe4815Skettenis lpt_ssio_attach(struct device *parent, struct device *self, void *aux)
554cbe4815Skettenis {
564cbe4815Skettenis struct lpt_softc *sc = (void *)self;
574cbe4815Skettenis struct ssio_attach_args *saa = aux;
584cbe4815Skettenis
594cbe4815Skettenis sc->sc_iot = saa->saa_iot;
604cbe4815Skettenis if (bus_space_map(sc->sc_iot, saa->saa_iobase, LPT_NPORTS,
614cbe4815Skettenis 0, &sc->sc_ioh)) {
624cbe4815Skettenis printf(": cannot map io space\n");
634cbe4815Skettenis return;
644cbe4815Skettenis }
654cbe4815Skettenis
664cbe4815Skettenis lpt_attach_common(sc);
674cbe4815Skettenis
684cbe4815Skettenis sc->sc_ih = ssio_intr_establish(IPL_TTY, saa->saa_irq,
694cbe4815Skettenis lptintr, sc, sc->sc_dev.dv_xname);
704cbe4815Skettenis }
71