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@stuge.se Acked-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@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; +}