Gaudi Framework, version v23r2

Home   Generated: Thu Jun 28 2012

pfmlib_amd64.h

Go to the documentation of this file.
00001 /*
00002  * AMD64 PMU specific types and definitions (64 and 32 bit modes)
00003  *
00004  * Copyright (c) 2005-2006 Hewlett-Packard Development Company, L.P.
00005  * Contributed by Stephane Eranian <eranian@hpl.hp.com>
00006  *
00007  * Permission is hereby granted, free of charge, to any person obtaining a copy
00008  * of this software and associated documentation files (the "Software"), to deal
00009  * in the Software without restriction, including without limitation the rights
00010  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
00011  * of the Software, and to permit persons to whom the Software is furnished to do so,
00012  * subject to the following conditions:
00013  *
00014  * The above copyright notice and this permission notice shall be included in all
00015  * copies or substantial portions of the Software.
00016  *
00017  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
00018  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
00019  * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
00020  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
00021  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
00022  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00023  */
00024 
00025 #ifndef __PFMLIB_AMD64_H__
00026 #define __PFMLIB_AMD64_H__
00027 
00028 #include <stdint.h>
00029 
00030 /*
00031  * privilege level mask usage for AMD64:
00032  *
00033  * PFM_PLM0 = OS (kernel, hypervisor, ..)
00034  * PFM_PLM1 = invalid parameters
00035  * PFM_PLM2 = invalid parameters
00036  * PFM_PLM3 = USR (user level)
00037  */
00038 
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042 
00043 #define PMU_AMD64_MAX_COUNTERS  4       /* total numbers of performance counters */
00044 
00045 /*
00046  * AMD64 MSR definitions
00047  */
00048 
00049 typedef union {
00050         uint64_t val;                           /* complete register value */
00051         struct {
00052                 uint64_t sel_event_mask:8;      /* event mask */
00053                 uint64_t sel_unit_mask:8;       /* unit mask */
00054                 uint64_t sel_usr:1;             /* user level */
00055                 uint64_t sel_os:1;              /* system level */
00056                 uint64_t sel_edge:1;            /* edge detec */
00057                 uint64_t sel_pc:1;              /* pin control */
00058                 uint64_t sel_int:1;             /* enable APIC intr */
00059                 uint64_t sel_res1:1;            /* reserved */
00060                 uint64_t sel_en:1;              /* enable */
00061                 uint64_t sel_inv:1;             /* invert counter mask */
00062                 uint64_t sel_cnt_mask:8;        /* counter mask */
00063                 uint64_t sel_event_mask2:4;     /* 10h only: event mask [11:8] */
00064                 uint64_t sel_res2:4;            /* reserved */
00065                 uint64_t sel_guest:1;           /* 10h only: guest only counter */
00066                 uint64_t sel_host:1;            /* 10h only: host only counter */
00067                 uint64_t sel_res3:22;           /* reserved */
00068         } perfsel;
00069 } pfm_amd64_sel_reg_t; /* MSR 0xc001000-0xc001003 */
00070 
00071 typedef union {
00072         uint64_t val;                           /* complete register value */
00073         struct {
00074                 uint64_t ctr_count:48;          /* 48-bit hardware counter  */
00075                 uint64_t ctr_res1:16;           /* reserved */
00076         } perfctr;
00077 } pfm_amd64_ctr_reg_t; /* MSR 0xc001004-0xc001007 */
00078 
00079 typedef union {
00080         uint64_t val;                           /* complete register value */
00081         struct {
00082                 uint64_t ibsfetchmaxcnt:16;
00083                 uint64_t ibsfetchcnt:16;
00084                 uint64_t ibsfetchlat:16;
00085                 uint64_t ibsfetchen:1;
00086                 uint64_t ibsfetchval:1;
00087                 uint64_t ibsfetchcomp:1;
00088                 uint64_t ibsicmiss:1;
00089                 uint64_t ibsphyaddrvalid:1;
00090                 uint64_t ibsl1tlbpgsz:2;
00091                 uint64_t ibsl1tlbmiss:1;
00092                 uint64_t ibsl2tlbmiss:1;
00093                 uint64_t ibsranden:1;
00094                 uint64_t reserved:6;
00095         } reg;
00096 } ibsfetchctl_t; /* MSR 0xc0011030 */
00097 
00098 typedef union {
00099         uint64_t val;                           /* complete register value */
00100         struct {
00101                 uint64_t ibsopmaxcnt:16;
00102                 uint64_t reserved1:1;
00103                 uint64_t ibsopen:1;
00104                 uint64_t ibsopval:1;
00105                 uint64_t ibsopcntl:1;
00106                 uint64_t reserved2:44;
00107         } reg;
00108 } ibsopctl_t; /* MSR 0xc0011033 */
00109 
00110 typedef union {
00111         uint64_t val;                           /* complete register value */
00112         struct {
00113                 uint64_t ibscomptoretctr:16;
00114                 uint64_t ibstagtoretctr:16;
00115                 uint64_t ibsopbrnresync:1;
00116                 uint64_t ibsopmispreturn:1;
00117                 uint64_t ibsopreturn:1;
00118                 uint64_t ibsopbrntaken:1;
00119                 uint64_t ibsopbrnmisp:1;
00120                 uint64_t ibsopbrnret:1;
00121                 uint64_t reserved:26;
00122         } reg;
00123 } ibsopdata_t; /* MSR 0xc0011035 */
00124 
00125 typedef union {
00126         uint64_t val;                           /* complete register value */
00127         struct {
00128                 uint64_t nbibsreqsrc:3;
00129                 uint64_t reserved1:1;
00130                 uint64_t nbibsreqdstproc:1;
00131                 uint64_t nbibsreqcachehitst:1;
00132                 uint64_t reserved2:58;
00133         } reg;
00134 } ibsopdata2_t; /* MSR 0xc0011036 */
00135 
00136 typedef union {
00137         uint64_t val;                           /* complete register value */
00138         struct {
00139                 uint64_t ibsldop:1;
00140                 uint64_t ibsstop:1;
00141                 uint64_t ibsdcl1tlbmiss:1;
00142                 uint64_t ibsdcl2tlbmiss:1;
00143                 uint64_t ibsdcl1tlbhit2m:1;
00144                 uint64_t ibsdcl1tlbhit1g:1;
00145                 uint64_t ibsdcl2tlbhit2m:1;
00146                 uint64_t ibsdcmiss:1;
00147                 uint64_t ibsdcmissacc:1;
00148                 uint64_t ibsdcldbnkcon:1;
00149                 uint64_t ibsdcstbnkcon:1;
00150                 uint64_t ibsdcsttoldfwd:1;
00151                 uint64_t ibsdcsttoldcan:1;
00152                 uint64_t ibsdcucmemacc:1;
00153                 uint64_t ibsdcwcmemacc:1;
00154                 uint64_t ibsdclockedop:1;
00155                 uint64_t ibsdcmabhit:1;
00156                 uint64_t ibsdclinaddrvalid:1;
00157                 uint64_t ibsdcphyaddrvalid:1;
00158                 uint64_t reserved1:13;
00159                 uint64_t ibsdcmisslat:16;
00160                 uint64_t reserved2:16;
00161         } reg;
00162 } ibsopdata3_t; /* MSR 0xc0011037 */
00163 
00164 /*
00165  * AMD64 specific input parameters for the library
00166  */
00167 
00168 typedef struct {
00169         uint32_t        cnt_mask;       /* threshold ([4-255] are reserved) */
00170         uint32_t        flags;          /* counter specific flag */
00171 } pfmlib_amd64_counter_t;
00172 
00173 #define PFM_AMD64_SEL_INV       0x1     /* inverse */
00174 #define PFM_AMD64_SEL_EDGE      0x2     /* edge detect */
00175 #define PFM_AMD64_SEL_GUEST     0x4     /* guest only */
00176 #define PFM_AMD64_SEL_HOST      0x8     /* host only */
00177 
00178 /*
00179  * IBS input parameters
00180  *
00181  * Maxcnt specifies the maximum count value of the periodic counter,
00182  * 20 bits, bits 3:0 are always set to zero.
00183  */
00184 typedef struct {
00185         unsigned int maxcnt;
00186         unsigned int options;
00187 } ibs_param_t;
00188 
00189 /*
00190  * values for ibs_param_t.options
00191  */
00192 #define IBS_OPTIONS_RANDEN 1    /* enable randomization (IBS fetch only) */
00193 #define IBS_OPTIONS_UOPS   1    /* count dispatched uops (IBS op only) */
00194 
00195 typedef struct {
00196         pfmlib_amd64_counter_t pfp_amd64_counters[PMU_AMD64_MAX_COUNTERS]; /* extended counter features */
00197         uint32_t        flags;          /* use flags */
00198         uint32_t        reserved1;      /* for future use */
00199         ibs_param_t     ibsfetch;       /* IBS fetch control */
00200         ibs_param_t     ibsop;          /* IBS execution control */
00201         uint64_t        reserved2;      /* for future use */
00202 } pfmlib_amd64_input_param_t;
00203 
00204 /* A bit mask, meaning multiple usage types may be defined */
00205 #define PFMLIB_AMD64_USE_IBSFETCH       1
00206 #define PFMLIB_AMD64_USE_IBSOP          2
00207 
00208 /*
00209  * AMD64 specific output parameters for the library
00210  *
00211  * The values ibsfetch_base and ibsop_base pass back the index of the
00212  * ibsopctl and ibsfetchctl register in pfp_pmds[].
00213  */
00214 
00215 typedef struct {
00216         uint32_t        ibsfetch_base;  /* Perfmon2 base register index */
00217         uint32_t        ibsop_base;     /* Perfmon2 base register index */
00218         uint64_t        reserved[7];    /* for future use */
00219 } pfmlib_amd64_output_param_t;
00220 
00221 /* Perfmon2 registers relative to base register */
00222 #define PMD_IBSFETCHCTL         0
00223 #define PMD_IBSFETCHLINAD       1
00224 #define PMD_IBSFETCHPHYSAD      2
00225 #define PMD_IBSOPCTL            0
00226 #define PMD_IBSOPRIP            1
00227 #define PMD_IBSOPDATA           2
00228 #define PMD_IBSOPDATA2          3
00229 #define PMD_IBSOPDATA3          4
00230 #define PMD_IBSDCLINAD          5
00231 #define PMD_IBSDCPHYSAD         6
00232 
00233 #ifdef __cplusplus /* extern C */
00234 }
00235 #endif
00236 
00237 #endif /* __PFMLIB_AMD64_H__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Thu Jun 28 2012 23:27:27 for Gaudi Framework, version v23r2 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004