void pcppi_isa_attach(device_t parent, device_t self, void *aux) { struct pcppi_softc *sc = device_private(self); struct isa_attach_args *ia = aux; bus_space_tag_t iot; sc->sc_dv = self; sc->sc_iot = iot = ia->ia_iot; sc->sc_size = 1; if (bus_space_map(iot, IO_PPI, sc->sc_size, 0, &sc->sc_ppi_ioh)) panic("pcppi_attach: couldn't map"); aprint_naive("\n"); aprint_normal("\n"); pcppi_attach(sc); }
/* * pcppi_acpi_attach: autoconf(9) attach routine */ static void pcppi_acpi_attach(device_t parent, device_t self, void *aux) { struct pcppi_acpi_softc *asc = device_private(self); struct pcppi_softc *sc = &asc->sc_pcppi; struct acpi_attach_args *aa = aux; struct acpi_resources res; struct acpi_io *io; ACPI_STATUS rv; sc->sc_dv = self; /* parse resources */ rv = acpi_resource_parse(sc->sc_dv, aa->aa_node->ad_handle, "_CRS", &res, &acpi_resource_parse_ops_default); if (ACPI_FAILURE(rv)) return; /* find our i/o registers */ io = acpi_res_io(&res, 0); if (io == NULL) { aprint_error_dev(self, "unable to find i/o register resource\n"); goto out; } sc->sc_iot = aa->aa_iot; sc->sc_size = io->ar_length; if (bus_space_map(sc->sc_iot, io->ar_base, sc->sc_size, 0, &sc->sc_ppi_ioh)) { aprint_error_dev(self, "can't map i/o space\n"); goto out; } pcppi_attach(sc); out: acpi_resource_cleanup(&res); }