diff options
author | Michael Shalayeff <mickey@cvs.openbsd.org> | 2004-05-24 22:33:02 +0000 |
---|---|---|
committer | Michael Shalayeff <mickey@cvs.openbsd.org> | 2004-05-24 22:33:02 +0000 |
commit | 76321ada69f766528442c7cbae791cb3795e9de2 (patch) | |
tree | 0884fbe5bc27ea66030a244da13c4f7125f33ce5 /sys/dev/pci | |
parent | 345f1edb248fed7a6edd98e66f652f4210a28c07 (diff) |
repair dmesg and free resources on failures
Diffstat (limited to 'sys/dev/pci')
-rw-r--r-- | sys/dev/pci/fwlynx_pci.c | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/sys/dev/pci/fwlynx_pci.c b/sys/dev/pci/fwlynx_pci.c index 5486e5b039f..803fdc977de 100644 --- a/sys/dev/pci/fwlynx_pci.c +++ b/sys/dev/pci/fwlynx_pci.c @@ -71,64 +71,70 @@ struct cfattach fwlynx_pci_ca = { static int fwlynx_pci_match(struct device *parent, struct cfdata *match, void *aux) { - struct pci_attach_args *pa = (struct pci_attach_args *) aux; + struct pci_attach_args *pa = (struct pci_attach_args *) aux; - if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_TI && - PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_TI_TSB12LV21) - return 1; - - return 0; + if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_TI && + PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_TI_TSB12LV21) + return 1; + + return 0; } static void fwlynx_pci_attach(struct device *parent, struct device *self, void *aux) { - struct pci_attach_args *pa = (struct pci_attach_args *) aux; + struct pci_attach_args *pa = (struct pci_attach_args *) aux; struct fwlynx_pci_softc *psc = (struct fwlynx_pci_softc *) self; - char devinfo[256]; char const *intrstr; pci_intr_handle_t ih; u_int32_t csr; - pci_devinfo(pa->pa_id, pa->pa_class, 0, devinfo, sizeof devinfo); - printf(": %s (rev. 0x%02x)\n", devinfo, PCI_REVISION(pa->pa_class)); +#ifdef __NetBSD__ + char devinfo[256]; + pci_devinfo(pa->pa_id, pa->pa_class, 0, devinfo, sizeof devinfo); + printf(": %s (rev. 0x%02x)\n", devinfo, PCI_REVISION(pa->pa_class)); +#endif psc->psc_sc.sc_dmat = pa->pa_dmat; psc->psc_pc = pa->pa_pc; psc->psc_tag = pa->pa_tag; - /* Map I/O registers */ - if (pci_mapreg_map(pa, PCI_LYNX_MAP_REGISTER, PCI_MAPREG_TYPE_MEM, 0, - &psc->psc_sc.sc_memt, &psc->psc_sc.sc_memh, + /* Map I/O registers */ + if (pci_mapreg_map(pa, PCI_LYNX_MAP_REGISTER, PCI_MAPREG_TYPE_MEM, 0, + &psc->psc_sc.sc_memt, &psc->psc_sc.sc_memh, NULL, &psc->psc_sc.sc_memsize)) { - printf("%s: can't map register space\n", self->dv_xname); - return; - } + printf(": can't map register space\n"); + return; + } - /* Disable interrupts, so we don't get any spurious ones. */ + /* Disable interrupts, so we don't get any spurious ones. */ pci_conf_write(psc->psc_pc, psc->psc_tag, 0); - /* Enable the device. */ - csr = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG); - pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG, - csr | PCI_COMMAND_MASTER_ENABLE); + /* Enable the device. */ + csr = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG); + pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG, + csr | PCI_COMMAND_MASTER_ENABLE); /* Map and establish the interrupt. */ if (pci_intr_map(pa->pa_pc, pa->pa_intrtag, pa->pa_intrpin, pa->pa_intrline, &ih)) { - printf("%s: couldn't map interrupt\n", self->dv_xname); + printf(": couldn't map interrupt\n"); + bus_space_unmap(psc->psc_sc.sc_memt, psc->psc_sc.sc_memh, + psc->psc_sc.sc_memsize); return; } intrstr = pci_intr_string(pa->pa_pc, ih); psc->psc_ih = pci_intr_establish(pa->pa_pc, ih, IPL_BIO, fwlynx_intr, &psc->psc_sc); if (psc->psc_ih == NULL) { - printf("%s: couldn't establish interrupt", self->dv_xname); + printf(": couldn't establish interrupt"); if (intrstr != NULL) printf(" at %s", intrstr); printf("\n"); + bus_space_unmap(psc->psc_sc.sc_memt, psc->psc_sc.sc_memh, + psc->psc_sc.sc_memsize); return; } - printf("%s: interrupting at %s\n", self->dv_xname, intrstr); + printf(": %s\n", intrstr); if (fwlynx_init(&psc->psc_sc, pci_intr_evcnt(pa->pa_pc, ih)) != 0) { pci_intr_disestablish(pa->pa_pc, psc->psc_ih); |