summaryrefslogtreecommitdiffstats
path: root/sys/i386/include/pmc_mdep.h
diff options
context:
space:
mode:
authorjkoshy <jkoshy@FreeBSD.org>2008-11-27 09:00:47 +0000
committerjkoshy <jkoshy@FreeBSD.org>2008-11-27 09:00:47 +0000
commitaa86a7c59edb19ee67bcf28d9465dc88c0b1fd6a (patch)
treeb416bbd4293b5dc3b86cfd87f09039063e60517b /sys/i386/include/pmc_mdep.h
parent272e95193bef3d1cacf8bf5d82b6f7bbe6d500a7 (diff)
downloadFreeBSD-src-aa86a7c59edb19ee67bcf28d9465dc88c0b1fd6a.zip
FreeBSD-src-aa86a7c59edb19ee67bcf28d9465dc88c0b1fd6a.tar.gz
- Add support for PMCs in Intel CPUs of Family 6, model 0xE (Core Solo
and Core Duo), models 0xF (Core2), model 0x17 (Core2Extreme) and model 0x1C (Atom). In these CPUs, the actual numbers, kinds and widths of PMCs present need to queried at run time. Support for specific "architectural" events also needs to be queried at run time. Model 0xE CPUs support programmable PMCs, subsequent CPUs additionally support "fixed-function" counters. - Use event names that are close to vendor documentation, taking in account that: - events with identical semantics on two or more CPUs in this family can have differing names in vendor documentation, - identical vendor event names may map to differing events across CPUs, - each type of CPU supports a different subset of measurable events. Fixed-function and programmable counters both use the same vendor names for events. The use of a class name prefix ("iaf-" or "iap-" respectively) permits these to be distinguished. - In libpmc, refactor pmc_name_of_event() into a public interface and an internal helper function, for use by log handling code. - Minor code tweaks: staticize a global, freshen a few comments. Tested by: gnn
Diffstat (limited to 'sys/i386/include/pmc_mdep.h')
-rw-r--r--sys/i386/include/pmc_mdep.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/i386/include/pmc_mdep.h b/sys/i386/include/pmc_mdep.h
index 720f1f3..63d5f8b 100644
--- a/sys/i386/include/pmc_mdep.h
+++ b/sys/i386/include/pmc_mdep.h
@@ -52,6 +52,7 @@ struct pmc_mdep;
*/
#include <dev/hwpmc/hwpmc_amd.h> /* K7 and K8 */
+#include <dev/hwpmc/hwpmc_core.h>
#include <dev/hwpmc/hwpmc_piv.h>
#include <dev/hwpmc/hwpmc_ppro.h>
#include <dev/hwpmc/hwpmc_pentium.h>
@@ -68,8 +69,8 @@ struct pmc_mdep;
#define PMC_MDEP_CLASS_INDEX_P4 1
#define PMC_MDEP_CLASS_INDEX_P5 1
#define PMC_MDEP_CLASS_INDEX_P6 1
-#define PMC_MDEP_CLASS_INDEX_IAF 1
-#define PMC_MDEP_CLASS_INDEX_IAP 2
+#define PMC_MDEP_CLASS_INDEX_IAP 1
+#define PMC_MDEP_CLASS_INDEX_IAF 2
/*
* Architecture specific extensions to <sys/pmc.h> structures.
@@ -77,9 +78,11 @@ struct pmc_mdep;
union pmc_md_op_pmcallocate {
struct pmc_md_amd_op_pmcallocate pm_amd;
- struct pmc_md_ppro_op_pmcallocate pm_ppro;
- struct pmc_md_pentium_op_pmcallocate pm_pentium;
+ struct pmc_md_iaf_op_pmcallocate pm_iaf;
+ struct pmc_md_iap_op_pmcallocate pm_iap;
struct pmc_md_p4_op_pmcallocate pm_p4;
+ struct pmc_md_pentium_op_pmcallocate pm_pentium;
+ struct pmc_md_ppro_op_pmcallocate pm_ppro;
uint64_t __pad[4];
};
@@ -92,9 +95,11 @@ union pmc_md_op_pmcallocate {
/* MD extension for 'struct pmc' */
union pmc_md_pmc {
struct pmc_md_amd_pmc pm_amd;
- struct pmc_md_ppro_pmc pm_ppro;
- struct pmc_md_pentium_pmc pm_pentium;
+ struct pmc_md_iaf_pmc pm_iaf;
+ struct pmc_md_iap_pmc pm_iap;
struct pmc_md_p4_pmc pm_p4;
+ struct pmc_md_pentium_pmc pm_pentium;
+ struct pmc_md_ppro_pmc pm_ppro;
};
struct pmc;
OpenPOWER on IntegriCloud