#include #include #include #include #include #include #include #include #include struct mcpcfiic_isa_softc { struct pcfiic_softc sc_pcfiic; bus_space_tag_t sc_iot; bus_space_handle_t sc_ioh; }; int mcpcfiic_isa_match(struct device *, void *, void *); void mcpcfiic_isa_attach(struct device *, struct device *, void *); struct cfattach mcpcfiic_isa_ca = { sizeof (struct mcpcfiic_isa_softc), mcpcfiic_isa_match, mcpcfiic_isa_attach, }; int mcpcfiic_isa_match(parent, match, aux) struct device *parent; void *match; void *aux; { struct isa_attach_args *ia = aux; bus_space_handle_t ioh; if ((ia->ia_iobase != IOBASEUNK && ia->ia_iobase != 0xe0000) || ia->ia_maddr != MADDRUNK || ia->ia_msize != 0 || ia->ia_irq != IRQUNK || ia->ia_drq != DRQUNK) return (0); if (bus_space_map(ia->ia_iot, 0xe0000, 0x2, 0, &ioh)) return (0); bus_space_unmap(ia->ia_iot, ioh, 0x2); ia->ia_iobase = 0xe0000; ia->ia_iosize = 0x2; return (1); } void mcpcfiic_isa_attach(parent, self, aux) struct device *parent, *self; void *aux; { struct isa_attach_args *ia = aux; struct mcpcfiic_isa_softc *sc = (struct mcpcfiic_isa_softc *)self; struct pcfiic_softc *psc = &sc->sc_pcfiic; sc->sc_iot = ia->ia_iot; if (bus_space_map(sc->sc_iot, ia->ia_iobase, ia->ia_iosize, 0, &sc->sc_ioh)) panic("mcpcfiic_isa_attach: couldn't map clock I/O space"); pcfiic_attach(psc, (i2c_addr_t)ia->ia_iobase, PCF_CLOCK_8, 0, 0, NULL); }