summaryrefslogtreecommitdiffstats
path: root/sys/sparc64/pci
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2014-09-06 15:23:28 +0000
committerjhb <jhb@FreeBSD.org>2014-09-06 15:23:28 +0000
commit3a8cf1a38b96c596b62254406e9a4599340dea51 (patch)
tree4b6d323d2c22200ffbb3107e8dc814b6c1d9cf1d /sys/sparc64/pci
parentcd70b067cc30d9b2494dffc0658705e127c96c2c (diff)
downloadFreeBSD-src-3a8cf1a38b96c596b62254406e9a4599340dea51.zip
FreeBSD-src-3a8cf1a38b96c596b62254406e9a4599340dea51.tar.gz
Create a separate structure for per-CPU state saved across suspend and
resume that is a superset of a pcb. Move the FPU state out of the pcb and into this new structure. As part of this, move the FPU resume code on amd64 into a C function. This allows resumectx() to still operate only on a pcb and more closely mirrors the i386 code. Reviewed by: kib (earlier version)
Diffstat (limited to 'sys/sparc64/pci')
-rw-r--r--sys/sparc64/pci/psycho.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/sys/sparc64/pci/psycho.c b/sys/sparc64/pci/psycho.c
index 57e0f48..cd04f28 100644
--- a/sys/sparc64/pci/psycho.c
+++ b/sys/sparc64/pci/psycho.c
@@ -448,24 +448,30 @@ psycho_attach(device_t dev)
i = OF_getprop_alloc(node, "ranges", sizeof(*range), (void **)&range);
/*
- * Make sure that the expected ranges are present. The
- * OFW_PCI_CS_MEM64 one is not currently used though.
- */
- if (i != PSYCHO_NRANGE)
- panic("%s: unsupported number of ranges", __func__);
- /*
* Find the addresses of the various bus spaces.
* There should not be multiple ones of one kind.
* The physical start addresses of the ranges are the configuration,
* memory and I/O handles.
*/
- for (i = 0; i < PSYCHO_NRANGE; i++) {
+ for (; i >= 0; i--) {
j = OFW_PCI_RANGE_CS(&range[i]);
if (sc->sc_pci_bh[j] != 0)
panic("%s: duplicate range for space %d",
__func__, j);
sc->sc_pci_bh[j] = OFW_PCI_RANGE_PHYS(&range[i]);
}
+
+ /*
+ * Make sure that the expected ranges are present. The
+ * OFW_PCI_CS_MEM64 one is not currently used.
+ */
+ if (sc->sc_pci_bh[OFW_PCI_CS_CONFIG] == 0)
+ panic("%s: missing CONFIG range", __func__);
+ if (sc->sc_pci_bh[OFW_PCI_CS_IO] == 0)
+ panic("%s: missing IO range", __func__);
+ if (sc->sc_pci_bh[OFW_PCI_CS_MEM32] == 0)
+ panic("%s: missing MEM32 range", __func__);
+
free(range, M_OFWPROP);
/* Register the softc, this is needed for paired Psychos. */
OpenPOWER on IntegriCloud