Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Mar 2011 02:18:51 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 189641 for review
Message-ID:  <201103070218.p272IpJP093881@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@189641?ac=10

Change 189641 by jhb@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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103070218.p272IpJP093881>