PERFORCE change 189641 for review
John Baldwin
jhb at FreeBSD.org
Mon Mar 7 02:18:52 UTC 2011
http://p4web.freebsd.org/@@189641?ac=10
Change 189641 by jhb at jhb_fiver on 2011/03/07 02:18:47
Restore BARs on resume.
Affected files ...
.. //depot/projects/pci/sys/dev/pci/pci.c#5 edit
Differences ...
==== //depot/projects/pci/sys/dev/pci/pci.c#5 (text+ko) ====
@@ -2506,6 +2506,25 @@
return (pm);
}
+static void
+pci_restore_bars(device_t dev)
+{
+ struct pci_devinfo *dinfo;
+ struct pci_map *pm;
+ int ln2range;
+
+ dinfo = device_get_ivars(dev);
+ STAILQ_FOREACH(prev, &dinfo->cfg.maps, pm_link) {
+ if (pm->pm_reg == PCIR_BIOS)
+ ln2range = 32;
+ else
+ ln2range = pci_maprange(pm->pm_value);
+ pci_write_config(dev, pm->pm_reg, pm->pm_value, 4);
+ if (ln2range == 64)
+ pci_write_config(dev, pm->pm_reg + 4, pm->pm_value >> 32, 4);
+ }
+}
+
/*
* Add a resource based on a pci map register. Return 1 if the map
* register is a 32bit map register or 2 if it is a 64bit register.
@@ -4169,6 +4188,7 @@
pci_write_config(dev, PCIR_BAR(i), dinfo->cfg.bar[i], 4);
pci_write_config(dev, PCIR_BIOS, dinfo->cfg.bios, 4);
#endif
+ pci_restore_bars(dev);
pci_write_config(dev, PCIR_COMMAND, dinfo->cfg.cmdreg, 2);
pci_write_config(dev, PCIR_INTLINE, dinfo->cfg.intline, 1);
pci_write_config(dev, PCIR_INTPIN, dinfo->cfg.intpin, 1);
More information about the p4-projects
mailing list