summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Kochkov <anton.kochkov@gmail.com>2012-07-21 07:29:48 +0400
committerPeter Stuge <peter@stuge.se>2012-07-21 17:35:46 +0200
commit59b36f1026090ea9b39ca2bc8386c8addf1b03d6 (patch)
tree544cf2d39f7bd51c7004aa0a8e133def13e52a0e
parentc7fc4422a0039b6fd6c44bd98050ec648ee0312a (diff)
msrtool: Factor out cpuid() from target probe functions into main()
Almost all probe functions called cpuid(). Those calls are replaced by a single cpuid() call in main() and a new parameter to the target probe functions with the cpuid() result. The vendor_t and struct cpuid_t definitions are moved closer to the top of msrtool.h and the vendor_t enum is reformatted to simplify addition of further values. Change-Id: Icd615636207499cfa46b8b99bf819ef8ca2d97c0 Signed-off-by: Anton Kochkov <anton.kochkov@gmail.com> Signed-off-by: Peter Stuge <peter@stuge.se> Reviewed-on: http://review.coreboot.org/1259 Tested-by: build bot (Jenkins)
-rw-r--r--util/msrtool/cs5536.c2
-rw-r--r--util/msrtool/geodegx2.c3
-rw-r--r--util/msrtool/geodelx.c3
-rw-r--r--util/msrtool/intel_core1.c3
-rw-r--r--util/msrtool/intel_core2_early.c3
-rw-r--r--util/msrtool/intel_core2_later.c3
-rw-r--r--util/msrtool/intel_nehalem.c3
-rw-r--r--util/msrtool/intel_pentium3.c3
-rw-r--r--util/msrtool/intel_pentium3_early.c3
-rw-r--r--util/msrtool/intel_pentium4_early.c3
-rw-r--r--util/msrtool/intel_pentium4_later.c3
-rw-r--r--util/msrtool/k8.c3
-rw-r--r--util/msrtool/msrtool.c3
-rw-r--r--util/msrtool/msrtool.h52
14 files changed, 41 insertions, 49 deletions
diff --git a/util/msrtool/cs5536.c b/util/msrtool/cs5536.c
index 666a93aa6b..656383d1a4 100644
--- a/util/msrtool/cs5536.c
+++ b/util/msrtool/cs5536.c
@@ -19,7 +19,7 @@
#include "msrtool.h"
-int cs5536_probe(const struct targetdef *target) {
+int cs5536_probe(const struct targetdef *target, const struct cpuid_t *id) {
return (NULL != pci_dev_find(0x1022, 0x2090));
}
diff --git a/util/msrtool/geodegx2.c b/util/msrtool/geodegx2.c
index ae5d887c2d..29d1a13c8f 100644
--- a/util/msrtool/geodegx2.c
+++ b/util/msrtool/geodegx2.c
@@ -20,8 +20,7 @@
#include "msrtool.h"
-int geodegx2_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int geodegx2_probe(const struct targetdef *target, const struct cpuid_t *id) {
return 5 == id->family && 5 == id->model;
}
diff --git a/util/msrtool/geodelx.c b/util/msrtool/geodelx.c
index 063e0311b4..a8b685fa65 100644
--- a/util/msrtool/geodelx.c
+++ b/util/msrtool/geodelx.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int geodelx_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int geodelx_probe(const struct targetdef *target, const struct cpuid_t *id) {
return 5 == id->family && 10 == id->model;
}
diff --git a/util/msrtool/intel_core1.c b/util/msrtool/intel_core1.c
index 1ebc7df7df..73e09fd424 100644
--- a/util/msrtool/intel_core1.c
+++ b/util/msrtool/intel_core1.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int intel_core1_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int intel_core1_probe(const struct targetdef *target, const struct cpuid_t *id) {
return ((0x6 == id->family) && (0xe == id->model));
}
diff --git a/util/msrtool/intel_core2_early.c b/util/msrtool/intel_core2_early.c
index 674d7db8da..84711b6123 100644
--- a/util/msrtool/intel_core2_early.c
+++ b/util/msrtool/intel_core2_early.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int intel_core2_early_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int intel_core2_early_probe(const struct targetdef *target, const struct cpuid_t *id) {
return ((0x6 == id->family) && (0xf == id->model));
}
diff --git a/util/msrtool/intel_core2_later.c b/util/msrtool/intel_core2_later.c
index 1c06c43557..541907a809 100644
--- a/util/msrtool/intel_core2_later.c
+++ b/util/msrtool/intel_core2_later.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int intel_core2_later_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int intel_core2_later_probe(const struct targetdef *target, const struct cpuid_t *id) {
return ((0x6 == id->family)&(0x17 == id->model));
}
diff --git a/util/msrtool/intel_nehalem.c b/util/msrtool/intel_nehalem.c
index e69fe57001..0ffc72dd74 100644
--- a/util/msrtool/intel_nehalem.c
+++ b/util/msrtool/intel_nehalem.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int intel_nehalem_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int intel_nehalem_probe(const struct targetdef *target, const struct cpuid_t *id) {
return ((0x6 == id->family) && (
(0x1a == id->model) ||
(0x1e == id->model) ||
diff --git a/util/msrtool/intel_pentium3.c b/util/msrtool/intel_pentium3.c
index 442ae3d323..05fbbf66d7 100644
--- a/util/msrtool/intel_pentium3.c
+++ b/util/msrtool/intel_pentium3.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int intel_pentium3_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int intel_pentium3_probe(const struct targetdef *target, const struct cpuid_t *id) {
return ((0x6 == id->family) && (
(0xa == id->model) ||
(0xb == id->model)
diff --git a/util/msrtool/intel_pentium3_early.c b/util/msrtool/intel_pentium3_early.c
index ced303778b..b5ee345a42 100644
--- a/util/msrtool/intel_pentium3_early.c
+++ b/util/msrtool/intel_pentium3_early.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int intel_pentium3_early_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int intel_pentium3_early_probe(const struct targetdef *target, const struct cpuid_t *id) {
return ((0x6 == id->family) && (
(0x7 == id->model) ||
(0x8 == id->model)
diff --git a/util/msrtool/intel_pentium4_early.c b/util/msrtool/intel_pentium4_early.c
index cb6c53e4da..0c6b83bfaa 100644
--- a/util/msrtool/intel_pentium4_early.c
+++ b/util/msrtool/intel_pentium4_early.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int intel_pentium4_early_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int intel_pentium4_early_probe(const struct targetdef *target, const struct cpuid_t *id) {
return ((0xf == id->family) && (0x2 == id->model));
}
diff --git a/util/msrtool/intel_pentium4_later.c b/util/msrtool/intel_pentium4_later.c
index 7c077eef49..7b7148f891 100644
--- a/util/msrtool/intel_pentium4_later.c
+++ b/util/msrtool/intel_pentium4_later.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int intel_pentium4_later_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int intel_pentium4_later_probe(const struct targetdef *target, const struct cpuid_t *id) {
return ((0xf == id->family) && (
(0x3 == id->model) ||
(0x4 == id->model)
diff --git a/util/msrtool/k8.c b/util/msrtool/k8.c
index 6d2500d40a..6154db5cfb 100644
--- a/util/msrtool/k8.c
+++ b/util/msrtool/k8.c
@@ -19,8 +19,7 @@
#include "msrtool.h"
-int k8_probe(const struct targetdef *target) {
- struct cpuid_t *id = cpuid();
+int k8_probe(const struct targetdef *target, const struct cpuid_t *id) {
return 0xF == id->family;
}
diff --git a/util/msrtool/msrtool.c b/util/msrtool/msrtool.c
index 433fc32e43..434d332126 100644
--- a/util/msrtool/msrtool.c
+++ b/util/msrtool/msrtool.c
@@ -270,6 +270,7 @@ int main(int argc, char *argv[]) {
int ret = 1;
const struct sysdef *s;
const struct targetdef *t;
+ const struct cpuid_t *id = cpuid();
uint8_t tn, listmsrs = 0, listknown = 0, input = 0;
uint32_t addr = 0;
const char *streamfn = NULL, *difffn = NULL;
@@ -357,7 +358,7 @@ int main(int argc, char *argv[]) {
else
for (t = alltargets; !TARGET_ISEOT(*t); t++) {
printf_verbose("Probing for target %s: %s\n", t->name, t->prettyname);
- if (!t->probe(t))
+ if (!t->probe(t, id))
continue;
printf_quiet("Detected target %s: %s\n", t->name, t->prettyname);
add_target(t);
diff --git a/util/msrtool/msrtool.h b/util/msrtool/msrtool.h
index 73671e5ad3..2c13862bf0 100644
--- a/util/msrtool/msrtool.h
+++ b/util/msrtool/msrtool.h
@@ -97,10 +97,24 @@ struct msrdef {
#define MAX_CORES 8
+typedef enum {
+ VENDOR_INTEL = 1,
+ VENDOR_AMD = 2,
+} vendor_t;
+
+struct cpuid_t {
+ uint8_t family;
+ uint8_t model;
+ uint8_t stepping;
+ uint8_t ext_family;
+ uint8_t ext_model;
+ vendor_t vendor;
+};
+
struct targetdef {
const char *name;
const char *prettyname;
- int (*probe)(const struct targetdef *target);
+ int (*probe)(const struct targetdef *target, const struct cpuid_t *id);
const struct msrdef *msrs;
};
@@ -126,18 +140,6 @@ struct sysdef {
#define SYSTEM_EOT .name = NULL
#define SYSTEM_ISEOT(s) (NULL == (s).name)
-typedef enum { VENDOR_INTEL = 1, VENDOR_AMD = 2 } vendor_t;
-
-struct cpuid_t {
- uint8_t family;
- uint8_t model;
- uint8_t stepping;
- uint8_t ext_family;
- uint8_t ext_model;
- vendor_t vendor;
-};
-
-
extern const struct sysdef *sys;
extern uint8_t targets_found;
@@ -201,51 +203,51 @@ extern int freebsd_rdmsr(uint8_t cpu, uint32_t addr, struct msr *val);
/** target externs **/
/* geodegx2.c */
-extern int geodegx2_probe(const struct targetdef *t);
+extern int geodegx2_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef geodegx2_msrs[];
/* geodelx.c */
-extern int geodelx_probe(const struct targetdef *t);
+extern int geodelx_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef geodelx_msrs[];
/* cs5536.c */
-extern int cs5536_probe(const struct targetdef *t);
+extern int cs5536_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef cs5536_msrs[];
/* k8.c */
-extern int k8_probe(const struct targetdef *t);
+extern int k8_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef k8_msrs[];
/* intel_pentium3_early.c */
-extern int intel_pentium3_early_probe(const struct targetdef *t);
+extern int intel_pentium3_early_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef intel_pentium3_early_msrs[];
/* intel_pentium3.c */
-extern int intel_pentium3_probe(const struct targetdef *t);
+extern int intel_pentium3_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef intel_pentium3_msrs[];
/* intel_core1.c */
-extern int intel_core1_probe(const struct targetdef *t);
+extern int intel_core1_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef intel_core1_msrs[];
/* intel_core2_early.c */
-extern int intel_core2_early_probe(const struct targetdef *t);
+extern int intel_core2_early_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef intel_core2_early_msrs[];
/* intel_core2_later.c */
-extern int intel_core2_later_probe(const struct targetdef *t);
+extern int intel_core2_later_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef intel_core2_later_msrs[];
/* intel_pentium4_early.c */
-extern int intel_pentium4_early_probe(const struct targetdef *t);
+extern int intel_pentium4_early_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef intel_pentium4_early_msrs[];
/* intel_pentium4_later.c */
-extern int intel_pentium4_later_probe(const struct targetdef *t);
+extern int intel_pentium4_later_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef intel_pentium4_later_msrs[];
/* intel_nehalem.c */
-extern int intel_nehalem_probe(const struct targetdef *t);
+extern int intel_nehalem_probe(const struct targetdef *t, const struct cpuid_t *id);
extern const struct msrdef intel_nehalem_msrs[];
#endif /* MSRTOOL_H */