static void spic_acpi_attach(device_t parent, device_t self, void *aux) { struct spic_acpi_softc *sc = device_private(self); struct acpi_attach_args *aa = aux; struct acpi_io *io; struct acpi_irq *irq; struct acpi_resources res; ACPI_STATUS rv; aprint_naive(": Sony Programmable I/O Controller\n"); aprint_normal(": Sony Programmable I/O Controller\n"); sc->sc_spic.sc_dev = self; sc->sc_node = aa->aa_node; /* Parse our resources. */ rv = acpi_resource_parse(self, sc->sc_node->ad_handle, "_CRS", &res, &acpi_resource_parse_ops_default); if (ACPI_FAILURE(rv)) return; sc->sc_spic.sc_iot = aa->aa_iot; io = acpi_res_io(&res, 0); if (io == NULL) { aprint_error_dev(self, "unable to find io resource\n"); goto out; } if (bus_space_map(sc->sc_spic.sc_iot, io->ar_base, io->ar_length, 0, &sc->sc_spic.sc_ioh) != 0) { aprint_error_dev(self, "unable to map data register\n"); goto out; } irq = acpi_res_irq(&res, 0); if (irq == NULL) { aprint_error_dev(self, "unable to find irq resource\n"); /* XXX unmap */ goto out; } #if 0 sc->sc_ih = isa_intr_establish(NULL, irq->ar_irq, IST_EDGE, IPL_TTY, spic_intr, sc); #endif if (!pmf_device_register(self, spic_suspend, spic_resume)) aprint_error_dev(self, "couldn't establish power handler\n"); else pmf_class_input_register(self); spic_attach(&sc->sc_spic); out: acpi_resource_cleanup(&res); }
void spic_acpi_attach(struct device *parent, struct device *self, void *aux) { struct spic_acpi_softc *sc = (void *) self; struct acpi_attach_args *aa = aux; struct acpi_io *io; struct acpi_irq *irq; ACPI_STATUS rv; printf(": Sony Programmable I/O Controller\n"); sc->sc_node = aa->aa_node; /* Parse our resources. */ rv = acpi_resource_parse(&sc->sc_spic.sc_dev, sc->sc_node, &sc->sc_res, &acpi_resource_parse_ops_default); if (ACPI_FAILURE(rv)) return; sc->sc_spic.sc_iot = aa->aa_iot; io = acpi_res_io(&sc->sc_res, 0); if (io == NULL) { printf("%s: unable to find io resource\n", sc->sc_spic.sc_dev.dv_xname); return; } if (bus_space_map(sc->sc_spic.sc_iot, io->ar_base, io->ar_length, 0, &sc->sc_spic.sc_ioh) != 0) { printf("%s: unable to map data register\n", sc->sc_spic.sc_dev.dv_xname); return; } irq = acpi_res_irq(&sc->sc_res, 0); if (irq == NULL) { printf("%s: unable to find irq resource\n", sc->sc_spic.sc_dev.dv_xname); /* XXX unmap */ return; } #if 0 sc->sc_ih = isa_intr_establish(NULL, irq->ar_irq, IST_EDGE, IPL_TTY, spic_intr, sc); #endif spic_attach(&sc->sc_spic); }