summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci/pci.c
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2010-11-25 18:36:44 +0000
committerdim <dim@FreeBSD.org>2010-11-25 18:36:44 +0000
commitce4ad7ab6156be02b01fdf19735a19a9c4d5a8ad (patch)
tree7fb434479af2e2b02b32b54ca0e7312065b0f6ed /sys/dev/pci/pci.c
parent71b42433f68a7680bcd07cef6c81b5a9bbe4e948 (diff)
parent835f186e056004cd67b3e5a1ee17f3ae1202646c (diff)
downloadFreeBSD-src-ce4ad7ab6156be02b01fdf19735a19a9c4d5a8ad.zip
FreeBSD-src-ce4ad7ab6156be02b01fdf19735a19a9c4d5a8ad.tar.gz
Sync: merge r215709 through r215824 from ^/head.
Diffstat (limited to 'sys/dev/pci/pci.c')
-rw-r--r--sys/dev/pci/pci.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 6069b6d..e3b6159 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -3022,8 +3022,35 @@ pci_resume(device_t dev)
if (!device_is_attached(child))
pci_cfg_save(child, dinfo, 1);
}
+
+ /*
+ * Resume critical devices first, then everything else later.
+ */
+ for (i = 0; i < numdevs; i++) {
+ child = devlist[i];
+ switch (pci_get_class(child)) {
+ case PCIC_DISPLAY:
+ case PCIC_MEMORY:
+ case PCIC_BRIDGE:
+ case PCIC_BASEPERIPH:
+ DEVICE_RESUME(child);
+ break;
+ }
+ }
+ for (i = 0; i < numdevs; i++) {
+ child = devlist[i];
+ switch (pci_get_class(child)) {
+ case PCIC_DISPLAY:
+ case PCIC_MEMORY:
+ case PCIC_BRIDGE:
+ case PCIC_BASEPERIPH:
+ break;
+ default:
+ DEVICE_RESUME(child);
+ }
+ }
free(devlist, M_TEMP);
- return (bus_generic_resume(dev));
+ return (0);
}
static void
OpenPOWER on IntegriCloud