summaryrefslogtreecommitdiff
path: root/sys/dev/pci/siop_pci_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci/siop_pci_common.c')
-rw-r--r--sys/dev/pci/siop_pci_common.c60
1 files changed, 33 insertions, 27 deletions
diff --git a/sys/dev/pci/siop_pci_common.c b/sys/dev/pci/siop_pci_common.c
index 301634027e3..d487ade4254 100644
--- a/sys/dev/pci/siop_pci_common.c
+++ b/sys/dev/pci/siop_pci_common.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: siop_pci_common.c,v 1.10 2003/09/06 22:24:14 krw Exp $ */
+/* $OpenBSD: siop_pci_common.c,v 1.11 2003/09/29 18:53:58 mickey Exp $ */
/* $NetBSD: siop_pci_common.c,v 1.17 2002/05/04 18:11:06 bouyer Exp $ */
/*
@@ -224,11 +224,12 @@ siop_pci_attach_common(pci_sc, siop_sc, pa, intr)
pcireg_t memtype;
int memh_valid, ioh_valid;
bus_addr_t ioaddr, memaddr;
+ bus_size_t memsize, iosize;
pci_sc->sc_pp =
siop_lookup_product(pa->pa_id, PCI_REVISION(pa->pa_class));
if (pci_sc->sc_pp == NULL) {
- printf("siop: broken match/attach!\n");
+ printf(": broken match/attach!\n");
return 0;
}
/* copy interesting infos about the chip */
@@ -263,7 +264,7 @@ siop_pci_attach_common(pci_sc, siop_sc, pa, intr)
}
ioh_valid = (pci_mapreg_map(pa, 0x10, PCI_MAPREG_TYPE_IO, 0,
- &iot, &ioh, &ioaddr, NULL, 0) == 0);
+ &iot, &ioh, &ioaddr, &iosize, 0) == 0);
if (memh_valid) {
siop_sc->sc_rt = memt;
@@ -274,11 +275,33 @@ siop_pci_attach_common(pci_sc, siop_sc, pa, intr)
siop_sc->sc_rh = ioh;
siop_sc->sc_raddr = ioaddr;
} else {
- printf("\n%s: unable to map device registers\n",
- siop_sc->sc_dev.dv_xname);
+ printf(": unable to map device registers\n");
return 0;
}
+ if (pci_intr_map(pa, &intrhandle) != 0) {
+ printf(": couldn't map interrupt\n");
+ bus_space_unmap(siop_sc->sc_rt, siop_sc->sc_rh, iosize);
+ return 0;
+ }
+ intrstr = pci_intr_string(pa->pa_pc, intrhandle);
+ pci_sc->sc_ih = pci_intr_establish(pa->pa_pc, intrhandle, IPL_BIO,
+ intr, siop_sc, siop_sc->sc_dev.dv_xname);
+ if (pci_sc->sc_ih != NULL) {
+ printf(": %s",
+ intrstr ? intrstr : "?");
+ } else {
+ printf(": couldn't establish interrupt");
+ if (intrstr != NULL)
+ printf(" at %s", intrstr);
+ printf("\n");
+ bus_space_unmap(siop_sc->sc_rt, siop_sc->sc_rh, iosize);
+ return 0;
+ }
+
+#ifdef __hppa__
+ siop_sc->features &= ~SF_CHIP_RAM;
+#endif
if (siop_sc->features & SF_CHIP_RAM) {
int bar;
switch (memtype) {
@@ -291,33 +314,16 @@ siop_pci_attach_common(pci_sc, siop_sc, pa, intr)
}
if (pci_mapreg_map(pa, bar, memtype, 0,
&siop_sc->sc_ramt, &siop_sc->sc_ramh,
- &siop_sc->sc_scriptaddr, NULL, 0) == 0) {
- printf(" using on-board RAM");
+ &siop_sc->sc_scriptaddr, &memsize, 0) == 0) {
+ printf(", using %dK of on-board RAM", memsize / 1024);
} else {
- printf(" can't map on-board RAM");
+ printf(", can't map on-board RAM");
siop_sc->features &= ~SF_CHIP_RAM;
}
}
- if (pci_intr_map(pa, &intrhandle) != 0) {
- printf("\n%s: couldn't map interrupt\n",
- siop_sc->sc_dev.dv_xname);
- return 0;
- }
- intrstr = pci_intr_string(pa->pa_pc, intrhandle);
- pci_sc->sc_ih = pci_intr_establish(pa->pa_pc, intrhandle, IPL_BIO,
- intr, siop_sc, siop_sc->sc_dev.dv_xname);
- if (pci_sc->sc_ih != NULL) {
- printf(" %s\n",
- intrstr ? intrstr : "?");
- } else {
- printf("\n%s: couldn't establish interrupt",
- siop_sc->sc_dev.dv_xname);
- if (intrstr != NULL)
- printf(" at %s", intrstr);
- printf("\n");
- return 0;
- }
+ printf("\n");
+
return 1;
}