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> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3770 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
@ -1,8 +1,9 @@
|
|||||||
Systems
|
Systems
|
||||||
-------
|
-------
|
||||||
FreeBSD #defines: see svn diff -r 3697:3698 util/
|
FreeBSD #defines: see svn diff -r 3697:3698 util/
|
||||||
|
i586: assembly instruction system driver, may have to ignore -c CPU # option
|
||||||
|
|
||||||
Other ideas
|
Other ideas
|
||||||
-----------
|
-----------
|
||||||
Move MSR definitions and probe instructions into an external text file?
|
Move MSR definitions and probe instructions into an external text file?
|
||||||
Handle PCI registers as well?
|
Handle PCI and port IO registers as well?
|
||||||
|
19
util/msrtool/configure
vendored
19
util/msrtool/configure
vendored
@ -135,6 +135,25 @@ INSTALL=$(findprog "install" "${INSTALL}" install ginstall) || exit
|
|||||||
test -n "$DEBUG" && myCFLAGS="-O2 -g" || myCFLAGS="-Os"
|
test -n "$DEBUG" && myCFLAGS="-O2 -g" || myCFLAGS="-Os"
|
||||||
CFLAGS="${CFLAGS} ${myCFLAGS} -Wall -Werror"
|
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}"
|
PREFIX="${PREFIX:-/usr/local}"
|
||||||
|
|
||||||
OS_ARCH=$(uname)
|
OS_ARCH=$(uname)
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <pci/pci.h>
|
||||||
|
|
||||||
#include "msrtool.h"
|
#include "msrtool.h"
|
||||||
|
|
||||||
@ -36,6 +37,8 @@ const struct targetdef **targets = NULL;
|
|||||||
const struct sysdef *sys = NULL;
|
const struct sysdef *sys = NULL;
|
||||||
uint8_t reserved = 0, verbose = 0, quiet = 0;
|
uint8_t reserved = 0, verbose = 0, quiet = 0;
|
||||||
|
|
||||||
|
struct pci_access *pacc = NULL;
|
||||||
|
|
||||||
static struct targetdef alltargets[] = {
|
static struct targetdef alltargets[] = {
|
||||||
{ "geodelx", "AMD Geode(tm) LX", geodelx_probe, geodelx_msrs },
|
{ "geodelx", "AMD Geode(tm) LX", geodelx_probe, geodelx_msrs },
|
||||||
{ "cs5536", "AMD Geode(tm) CS5536", cs5536_probe, cs5536_msrs },
|
{ "cs5536", "AMD Geode(tm) CS5536", cs5536_probe, cs5536_msrs },
|
||||||
@ -296,6 +299,14 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
printf_quiet("msrtool %s\n", VERSION);
|
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)
|
if (!sys && !input && !listknown)
|
||||||
for (sys = allsystems; !SYSTEM_ISEOT(*sys); sys++) {
|
for (sys = allsystems; !SYSTEM_ISEOT(*sys); sys++) {
|
||||||
printf_verbose("Probing for system %s: %s\n", sys->name, sys->prettyname);
|
printf_verbose("Probing for system %s: %s\n", sys->name, sys->prettyname);
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <pci/pci.h>
|
||||||
|
|
||||||
#define HEXCHARS "0123456789abcdefABCDEF"
|
#define HEXCHARS "0123456789abcdefABCDEF"
|
||||||
|
|
||||||
@ -132,6 +133,8 @@ extern const struct targetdef **targets;
|
|||||||
|
|
||||||
extern uint8_t reserved, verbose, quiet;
|
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_quiet(x...) do { if (!quiet) fprintf(stderr,x); } while(0)
|
||||||
#define printf_verbose(x...) do { if (verbose && !quiet) fprintf(stderr,x); } while(0)
|
#define printf_verbose(x...) do { if (verbose && !quiet) fprintf(stderr,x); } while(0)
|
||||||
|
|
||||||
@ -145,6 +148,7 @@ extern uint8_t reserved, verbose, quiet;
|
|||||||
|
|
||||||
/* sys.c */
|
/* sys.c */
|
||||||
struct cpuid_t *cpuid(void);
|
struct cpuid_t *cpuid(void);
|
||||||
|
struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device);
|
||||||
|
|
||||||
/* msrutils.c */
|
/* msrutils.c */
|
||||||
void hexprint(FILE *f, const struct msr val, const uint8_t bits);
|
void hexprint(FILE *f, const struct msr val, const uint8_t bits);
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <pci/pci.h>
|
||||||
|
|
||||||
#include "msrtool.h"
|
#include "msrtool.h"
|
||||||
|
|
||||||
static struct cpuid_t id;
|
static struct cpuid_t id;
|
||||||
@ -40,3 +42,18 @@ struct cpuid_t *cpuid(void) {
|
|||||||
}
|
}
|
||||||
return &id;
|
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;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user