[coreboot] r3770 - trunk/util/msrtool

svn at coreboot.org svn at coreboot.org
Tue Nov 25 03:03:16 CET 2008


Author: stuge
Date: 2008-11-25 03:03:16 +0100 (Tue, 25 Nov 2008)
New Revision: 3770

Modified:
   trunk/util/msrtool/TODO
   trunk/util/msrtool/configure
   trunk/util/msrtool/msrtool.c
   trunk/util/msrtool/msrtool.h
   trunk/util/msrtool/sys.c
Log:
msrtool: Use libpci to let system and target probes find PCI devices.

And some more notes in TODO.

Signed-off-by: Peter Stuge <peter at stuge.se>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>


Modified: trunk/util/msrtool/TODO
===================================================================
--- trunk/util/msrtool/TODO	2008-11-24 20:23:23 UTC (rev 3769)
+++ trunk/util/msrtool/TODO	2008-11-25 02:03:16 UTC (rev 3770)
@@ -1,8 +1,9 @@
 Systems
 -------
 FreeBSD #defines: see svn diff -r 3697:3698 util/
+i586: assembly instruction system driver, may have to ignore -c CPU # option
 
 Other ideas
 -----------
 Move MSR definitions and probe instructions into an external text file?
-Handle PCI registers as well?
+Handle PCI and port IO registers as well?

Modified: trunk/util/msrtool/configure
===================================================================
--- trunk/util/msrtool/configure	2008-11-24 20:23:23 UTC (rev 3769)
+++ trunk/util/msrtool/configure	2008-11-25 02:03:16 UTC (rev 3770)
@@ -135,6 +135,25 @@
 test -n "$DEBUG" && myCFLAGS="-O2 -g" || myCFLAGS="-Os"
 CFLAGS="${CFLAGS} ${myCFLAGS} -Wall -Werror"
 
+cat > .config.c << EOF
+#include <pci/pci.h>
+struct pci_access *pacc;
+int main(int argc, char *argv[])
+{ pacc = pci_alloc(); return 0; }
+EOF
+
+pc_CFLAGS="$(pkg-config libpci --cflags 2>/dev/null)"
+pc_LDFLAGS="$(pkg-config libpci --libs 2>/dev/null)"
+CFLAGS=$(trycompile "libpci (from pciutils)" "${pc_CFLAGS}" "-I/usr/local/include") || {
+	rm -f .config.c
+	exit 1
+}
+LDFLAGS=$(trylink "libpci (from pciutils)" "${pc_LDFLAGS}" "-lpci -lz" "-L/usr/local/lib -lpci -lz") || {
+	rm -f .config.c .config.o
+	exit 1
+}
+rm -f .config.c .config.o .config
+
 PREFIX="${PREFIX:-/usr/local}"
 
 OS_ARCH=$(uname)

Modified: trunk/util/msrtool/msrtool.c
===================================================================
--- trunk/util/msrtool/msrtool.c	2008-11-24 20:23:23 UTC (rev 3769)
+++ trunk/util/msrtool/msrtool.c	2008-11-25 02:03:16 UTC (rev 3770)
@@ -25,6 +25,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
+#include <pci/pci.h>
 
 #include "msrtool.h"
 
@@ -36,6 +37,8 @@
 const struct sysdef *sys = NULL;
 uint8_t reserved = 0, verbose = 0, quiet = 0;
 
+struct pci_access *pacc = NULL;
+
 static struct targetdef alltargets[] = {
 	{ "geodelx", "AMD Geode(tm) LX", geodelx_probe, geodelx_msrs },
 	{ "cs5536", "AMD Geode(tm) CS5536", cs5536_probe, cs5536_msrs },
@@ -296,6 +299,14 @@
 
 	printf_quiet("msrtool %s\n", VERSION);
 
+	pacc = pci_alloc();
+	if (NULL == pacc) {
+		fprintf(stderr, "Could not initialize PCI library! pci_alloc() failed.\n");
+		return 1;
+	}
+	pci_init(pacc);
+	pci_scan_bus(pacc);
+
 	if (!sys && !input && !listknown)
 		for (sys = allsystems; !SYSTEM_ISEOT(*sys); sys++) {
 			printf_verbose("Probing for system %s: %s\n", sys->name, sys->prettyname);

Modified: trunk/util/msrtool/msrtool.h
===================================================================
--- trunk/util/msrtool/msrtool.h	2008-11-24 20:23:23 UTC (rev 3769)
+++ trunk/util/msrtool/msrtool.h	2008-11-25 02:03:16 UTC (rev 3770)
@@ -22,6 +22,7 @@
 
 #include <stdio.h>
 #include <stdint.h>
+#include <pci/pci.h>
 
 #define HEXCHARS "0123456789abcdefABCDEF"
 
@@ -132,6 +133,8 @@
 
 extern uint8_t reserved, verbose, quiet;
 
+extern struct pci_access *pacc;
+
 #define printf_quiet(x...) do { if (!quiet) fprintf(stderr,x); } while(0)
 #define printf_verbose(x...) do { if (verbose && !quiet) fprintf(stderr,x); } while(0)
 
@@ -145,6 +148,7 @@
 
 /* sys.c */
 struct cpuid_t *cpuid(void);
+struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device);
 
 /* msrutils.c */
 void hexprint(FILE *f, const struct msr val, const uint8_t bits);

Modified: trunk/util/msrtool/sys.c
===================================================================
--- trunk/util/msrtool/sys.c	2008-11-24 20:23:23 UTC (rev 3769)
+++ trunk/util/msrtool/sys.c	2008-11-25 02:03:16 UTC (rev 3770)
@@ -17,6 +17,8 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+#include <pci/pci.h>
+
 #include "msrtool.h"
 
 static struct cpuid_t id;
@@ -40,3 +42,18 @@
 	}
 	return &id;
 }
+
+struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device) {
+	struct pci_dev *temp;
+	struct pci_filter filter;
+
+	pci_filter_init(NULL, &filter);
+	filter.vendor = vendor;
+	filter.device = device;
+
+	for (temp = pacc->devices; temp; temp = temp->next)
+		if (pci_filter_match(&filter, temp))
+			return temp;
+
+	return NULL;
+}





More information about the coreboot mailing list