1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright 2009 Paul Mackerras, IBM Corporation. 4*4882a593Smuzhiyun * Copyright 2013 Michael Ellerman, IBM Corporation. 5*4882a593Smuzhiyun * Copyright 2016 Madhavan Srinivasan, IBM Corporation. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef _LINUX_POWERPC_PERF_ISA207_COMMON_H_ 9*4882a593Smuzhiyun #define _LINUX_POWERPC_PERF_ISA207_COMMON_H_ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/kernel.h> 12*4882a593Smuzhiyun #include <linux/perf_event.h> 13*4882a593Smuzhiyun #include <asm/firmware.h> 14*4882a593Smuzhiyun #include <asm/cputable.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include "internal.h" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define EVENT_EBB_MASK 1ull 19*4882a593Smuzhiyun #define EVENT_EBB_SHIFT PERF_EVENT_CONFIG_EBB_SHIFT 20*4882a593Smuzhiyun #define EVENT_BHRB_MASK 1ull 21*4882a593Smuzhiyun #define EVENT_BHRB_SHIFT 62 22*4882a593Smuzhiyun #define EVENT_WANTS_BHRB (EVENT_BHRB_MASK << EVENT_BHRB_SHIFT) 23*4882a593Smuzhiyun #define EVENT_IFM_MASK 3ull 24*4882a593Smuzhiyun #define EVENT_IFM_SHIFT 60 25*4882a593Smuzhiyun #define EVENT_THR_CMP_SHIFT 40 /* Threshold CMP value */ 26*4882a593Smuzhiyun #define EVENT_THR_CMP_MASK 0x3ff 27*4882a593Smuzhiyun #define EVENT_THR_CTL_SHIFT 32 /* Threshold control value (start/stop) */ 28*4882a593Smuzhiyun #define EVENT_THR_CTL_MASK 0xffull 29*4882a593Smuzhiyun #define EVENT_THR_SEL_SHIFT 29 /* Threshold select value */ 30*4882a593Smuzhiyun #define EVENT_THR_SEL_MASK 0x7 31*4882a593Smuzhiyun #define EVENT_THRESH_SHIFT 29 /* All threshold bits */ 32*4882a593Smuzhiyun #define EVENT_THRESH_MASK 0x1fffffull 33*4882a593Smuzhiyun #define EVENT_SAMPLE_SHIFT 24 /* Sampling mode & eligibility */ 34*4882a593Smuzhiyun #define EVENT_SAMPLE_MASK 0x1f 35*4882a593Smuzhiyun #define EVENT_CACHE_SEL_SHIFT 20 /* L2/L3 cache select */ 36*4882a593Smuzhiyun #define EVENT_CACHE_SEL_MASK 0xf 37*4882a593Smuzhiyun #define EVENT_IS_L1 (4 << EVENT_CACHE_SEL_SHIFT) 38*4882a593Smuzhiyun #define EVENT_PMC_SHIFT 16 /* PMC number (1-based) */ 39*4882a593Smuzhiyun #define EVENT_PMC_MASK 0xf 40*4882a593Smuzhiyun #define EVENT_UNIT_SHIFT 12 /* Unit */ 41*4882a593Smuzhiyun #define EVENT_UNIT_MASK 0xf 42*4882a593Smuzhiyun #define EVENT_COMBINE_SHIFT 11 /* Combine bit */ 43*4882a593Smuzhiyun #define EVENT_COMBINE_MASK 0x1 44*4882a593Smuzhiyun #define EVENT_COMBINE(v) (((v) >> EVENT_COMBINE_SHIFT) & EVENT_COMBINE_MASK) 45*4882a593Smuzhiyun #define EVENT_MARKED_SHIFT 8 /* Marked bit */ 46*4882a593Smuzhiyun #define EVENT_MARKED_MASK 0x1 47*4882a593Smuzhiyun #define EVENT_IS_MARKED (EVENT_MARKED_MASK << EVENT_MARKED_SHIFT) 48*4882a593Smuzhiyun #define EVENT_PSEL_MASK 0xff /* PMCxSEL value */ 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /* Bits defined by Linux */ 51*4882a593Smuzhiyun #define EVENT_LINUX_MASK \ 52*4882a593Smuzhiyun ((EVENT_EBB_MASK << EVENT_EBB_SHIFT) | \ 53*4882a593Smuzhiyun (EVENT_BHRB_MASK << EVENT_BHRB_SHIFT) | \ 54*4882a593Smuzhiyun (EVENT_IFM_MASK << EVENT_IFM_SHIFT)) 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #define EVENT_VALID_MASK \ 57*4882a593Smuzhiyun ((EVENT_THRESH_MASK << EVENT_THRESH_SHIFT) | \ 58*4882a593Smuzhiyun (EVENT_SAMPLE_MASK << EVENT_SAMPLE_SHIFT) | \ 59*4882a593Smuzhiyun (EVENT_CACHE_SEL_MASK << EVENT_CACHE_SEL_SHIFT) | \ 60*4882a593Smuzhiyun (EVENT_PMC_MASK << EVENT_PMC_SHIFT) | \ 61*4882a593Smuzhiyun (EVENT_UNIT_MASK << EVENT_UNIT_SHIFT) | \ 62*4882a593Smuzhiyun (EVENT_COMBINE_MASK << EVENT_COMBINE_SHIFT) | \ 63*4882a593Smuzhiyun (EVENT_MARKED_MASK << EVENT_MARKED_SHIFT) | \ 64*4882a593Smuzhiyun EVENT_LINUX_MASK | \ 65*4882a593Smuzhiyun EVENT_PSEL_MASK) 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #define ONLY_PLM \ 68*4882a593Smuzhiyun (PERF_SAMPLE_BRANCH_USER |\ 69*4882a593Smuzhiyun PERF_SAMPLE_BRANCH_KERNEL |\ 70*4882a593Smuzhiyun PERF_SAMPLE_BRANCH_HV) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* Contants to support power9 raw encoding format */ 73*4882a593Smuzhiyun #define p9_EVENT_COMBINE_SHIFT 10 /* Combine bit */ 74*4882a593Smuzhiyun #define p9_EVENT_COMBINE_MASK 0x3ull 75*4882a593Smuzhiyun #define p9_EVENT_COMBINE(v) (((v) >> p9_EVENT_COMBINE_SHIFT) & p9_EVENT_COMBINE_MASK) 76*4882a593Smuzhiyun #define p9_SDAR_MODE_SHIFT 50 77*4882a593Smuzhiyun #define p9_SDAR_MODE_MASK 0x3ull 78*4882a593Smuzhiyun #define p9_SDAR_MODE(v) (((v) >> p9_SDAR_MODE_SHIFT) & p9_SDAR_MODE_MASK) 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #define p9_EVENT_VALID_MASK \ 81*4882a593Smuzhiyun ((p9_SDAR_MODE_MASK << p9_SDAR_MODE_SHIFT | \ 82*4882a593Smuzhiyun (EVENT_THRESH_MASK << EVENT_THRESH_SHIFT) | \ 83*4882a593Smuzhiyun (EVENT_SAMPLE_MASK << EVENT_SAMPLE_SHIFT) | \ 84*4882a593Smuzhiyun (EVENT_CACHE_SEL_MASK << EVENT_CACHE_SEL_SHIFT) | \ 85*4882a593Smuzhiyun (EVENT_PMC_MASK << EVENT_PMC_SHIFT) | \ 86*4882a593Smuzhiyun (EVENT_UNIT_MASK << EVENT_UNIT_SHIFT) | \ 87*4882a593Smuzhiyun (p9_EVENT_COMBINE_MASK << p9_EVENT_COMBINE_SHIFT) | \ 88*4882a593Smuzhiyun (EVENT_MARKED_MASK << EVENT_MARKED_SHIFT) | \ 89*4882a593Smuzhiyun EVENT_LINUX_MASK | \ 90*4882a593Smuzhiyun EVENT_PSEL_MASK)) 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /* Contants to support power10 raw encoding format */ 93*4882a593Smuzhiyun #define p10_SDAR_MODE_SHIFT 22 94*4882a593Smuzhiyun #define p10_SDAR_MODE_MASK 0x3ull 95*4882a593Smuzhiyun #define p10_SDAR_MODE(v) (((v) >> p10_SDAR_MODE_SHIFT) & \ 96*4882a593Smuzhiyun p10_SDAR_MODE_MASK) 97*4882a593Smuzhiyun #define p10_EVENT_L2L3_SEL_MASK 0x1f 98*4882a593Smuzhiyun #define p10_L2L3_SEL_SHIFT 3 99*4882a593Smuzhiyun #define p10_L2L3_EVENT_SHIFT 40 100*4882a593Smuzhiyun #define p10_EVENT_THRESH_MASK 0xffffull 101*4882a593Smuzhiyun #define p10_EVENT_CACHE_SEL_MASK 0x3ull 102*4882a593Smuzhiyun #define p10_EVENT_MMCR3_MASK 0x7fffull 103*4882a593Smuzhiyun #define p10_EVENT_MMCR3_SHIFT 45 104*4882a593Smuzhiyun #define p10_EVENT_RADIX_SCOPE_QUAL_SHIFT 9 105*4882a593Smuzhiyun #define p10_EVENT_RADIX_SCOPE_QUAL_MASK 0x1 106*4882a593Smuzhiyun #define p10_MMCR1_RADIX_SCOPE_QUAL_SHIFT 45 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #define p10_EVENT_VALID_MASK \ 109*4882a593Smuzhiyun ((p10_SDAR_MODE_MASK << p10_SDAR_MODE_SHIFT | \ 110*4882a593Smuzhiyun (p10_EVENT_THRESH_MASK << EVENT_THRESH_SHIFT) | \ 111*4882a593Smuzhiyun (EVENT_SAMPLE_MASK << EVENT_SAMPLE_SHIFT) | \ 112*4882a593Smuzhiyun (p10_EVENT_CACHE_SEL_MASK << EVENT_CACHE_SEL_SHIFT) | \ 113*4882a593Smuzhiyun (EVENT_PMC_MASK << EVENT_PMC_SHIFT) | \ 114*4882a593Smuzhiyun (EVENT_UNIT_MASK << EVENT_UNIT_SHIFT) | \ 115*4882a593Smuzhiyun (p9_EVENT_COMBINE_MASK << p9_EVENT_COMBINE_SHIFT) | \ 116*4882a593Smuzhiyun (p10_EVENT_MMCR3_MASK << p10_EVENT_MMCR3_SHIFT) | \ 117*4882a593Smuzhiyun (EVENT_MARKED_MASK << EVENT_MARKED_SHIFT) | \ 118*4882a593Smuzhiyun (p10_EVENT_RADIX_SCOPE_QUAL_MASK << p10_EVENT_RADIX_SCOPE_QUAL_SHIFT) | \ 119*4882a593Smuzhiyun EVENT_LINUX_MASK | \ 120*4882a593Smuzhiyun EVENT_PSEL_MASK)) 121*4882a593Smuzhiyun /* 122*4882a593Smuzhiyun * Layout of constraint bits: 123*4882a593Smuzhiyun * 124*4882a593Smuzhiyun * 60 56 52 48 44 40 36 32 125*4882a593Smuzhiyun * | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | 126*4882a593Smuzhiyun * [ fab_match ] [ thresh_cmp ] [ thresh_ctl ] [ ] 127*4882a593Smuzhiyun * | 128*4882a593Smuzhiyun * thresh_sel -* 129*4882a593Smuzhiyun * 130*4882a593Smuzhiyun * 28 24 20 16 12 8 4 0 131*4882a593Smuzhiyun * | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | - - - - | 132*4882a593Smuzhiyun * [ ] | [ ] | [ sample ] [ ] [6] [5] [4] [3] [2] [1] 133*4882a593Smuzhiyun * | | | | | 134*4882a593Smuzhiyun * BHRB IFM -* | | |*radix_scope | Count of events for each PMC. 135*4882a593Smuzhiyun * EBB -* | | p1, p2, p3, p4, p5, p6. 136*4882a593Smuzhiyun * L1 I/D qualifier -* | 137*4882a593Smuzhiyun * nc - number of counters -* 138*4882a593Smuzhiyun * 139*4882a593Smuzhiyun * The PMC fields P1..P6, and NC, are adder fields. As we accumulate constraints 140*4882a593Smuzhiyun * we want the low bit of each field to be added to any existing value. 141*4882a593Smuzhiyun * 142*4882a593Smuzhiyun * Everything else is a value field. 143*4882a593Smuzhiyun */ 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun #define CNST_FAB_MATCH_VAL(v) (((v) & EVENT_THR_CTL_MASK) << 56) 146*4882a593Smuzhiyun #define CNST_FAB_MATCH_MASK CNST_FAB_MATCH_VAL(EVENT_THR_CTL_MASK) 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun /* We just throw all the threshold bits into the constraint */ 149*4882a593Smuzhiyun #define CNST_THRESH_VAL(v) (((v) & EVENT_THRESH_MASK) << 32) 150*4882a593Smuzhiyun #define CNST_THRESH_MASK CNST_THRESH_VAL(EVENT_THRESH_MASK) 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun #define CNST_THRESH_CTL_SEL_VAL(v) (((v) & 0x7ffull) << 32) 153*4882a593Smuzhiyun #define CNST_THRESH_CTL_SEL_MASK CNST_THRESH_CTL_SEL_VAL(0x7ff) 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun #define CNST_EBB_VAL(v) (((v) & EVENT_EBB_MASK) << 24) 156*4882a593Smuzhiyun #define CNST_EBB_MASK CNST_EBB_VAL(EVENT_EBB_MASK) 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun #define CNST_IFM_VAL(v) (((v) & EVENT_IFM_MASK) << 25) 159*4882a593Smuzhiyun #define CNST_IFM_MASK CNST_IFM_VAL(EVENT_IFM_MASK) 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun #define CNST_L1_QUAL_VAL(v) (((v) & 3) << 22) 162*4882a593Smuzhiyun #define CNST_L1_QUAL_MASK CNST_L1_QUAL_VAL(3) 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun #define CNST_SAMPLE_VAL(v) (((v) & EVENT_SAMPLE_MASK) << 16) 165*4882a593Smuzhiyun #define CNST_SAMPLE_MASK CNST_SAMPLE_VAL(EVENT_SAMPLE_MASK) 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun #define CNST_CACHE_GROUP_VAL(v) (((v) & 0xffull) << 55) 168*4882a593Smuzhiyun #define CNST_CACHE_GROUP_MASK CNST_CACHE_GROUP_VAL(0xff) 169*4882a593Smuzhiyun #define CNST_CACHE_PMC4_VAL (1ull << 54) 170*4882a593Smuzhiyun #define CNST_CACHE_PMC4_MASK CNST_CACHE_PMC4_VAL 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #define CNST_L2L3_GROUP_VAL(v) (((v) & 0x1full) << 55) 173*4882a593Smuzhiyun #define CNST_L2L3_GROUP_MASK CNST_L2L3_GROUP_VAL(0x1f) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun #define CNST_RADIX_SCOPE_GROUP_VAL(v) (((v) & 0x1ull) << 21) 176*4882a593Smuzhiyun #define CNST_RADIX_SCOPE_GROUP_MASK CNST_RADIX_SCOPE_GROUP_VAL(1) 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun /* 179*4882a593Smuzhiyun * For NC we are counting up to 4 events. This requires three bits, and we need 180*4882a593Smuzhiyun * the fifth event to overflow and set the 4th bit. To achieve that we bias the 181*4882a593Smuzhiyun * fields by 3 in test_adder. 182*4882a593Smuzhiyun */ 183*4882a593Smuzhiyun #define CNST_NC_SHIFT 12 184*4882a593Smuzhiyun #define CNST_NC_VAL (1 << CNST_NC_SHIFT) 185*4882a593Smuzhiyun #define CNST_NC_MASK (8 << CNST_NC_SHIFT) 186*4882a593Smuzhiyun #define ISA207_TEST_ADDER (3 << CNST_NC_SHIFT) 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun /* 189*4882a593Smuzhiyun * For the per-PMC fields we have two bits. The low bit is added, so if two 190*4882a593Smuzhiyun * events ask for the same PMC the sum will overflow, setting the high bit, 191*4882a593Smuzhiyun * indicating an error. So our mask sets the high bit. 192*4882a593Smuzhiyun */ 193*4882a593Smuzhiyun #define CNST_PMC_SHIFT(pmc) ((pmc - 1) * 2) 194*4882a593Smuzhiyun #define CNST_PMC_VAL(pmc) (1 << CNST_PMC_SHIFT(pmc)) 195*4882a593Smuzhiyun #define CNST_PMC_MASK(pmc) (2 << CNST_PMC_SHIFT(pmc)) 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun /* Our add_fields is defined as: */ 198*4882a593Smuzhiyun #define ISA207_ADD_FIELDS \ 199*4882a593Smuzhiyun CNST_PMC_VAL(1) | CNST_PMC_VAL(2) | CNST_PMC_VAL(3) | \ 200*4882a593Smuzhiyun CNST_PMC_VAL(4) | CNST_PMC_VAL(5) | CNST_PMC_VAL(6) | CNST_NC_VAL 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun /* Bits in MMCR1 for PowerISA v2.07 */ 203*4882a593Smuzhiyun #define MMCR1_UNIT_SHIFT(pmc) (60 - (4 * ((pmc) - 1))) 204*4882a593Smuzhiyun #define MMCR1_COMBINE_SHIFT(pmc) (35 - ((pmc) - 1)) 205*4882a593Smuzhiyun #define MMCR1_PMCSEL_SHIFT(pmc) (24 - (((pmc) - 1)) * 8) 206*4882a593Smuzhiyun #define MMCR1_FAB_SHIFT 36 207*4882a593Smuzhiyun #define MMCR1_DC_IC_QUAL_MASK 0x3 208*4882a593Smuzhiyun #define MMCR1_DC_IC_QUAL_SHIFT 46 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun /* MMCR1 Combine bits macro for power9 */ 211*4882a593Smuzhiyun #define p9_MMCR1_COMBINE_SHIFT(pmc) (38 - ((pmc - 1) * 2)) 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun /* Bits in MMCRA for PowerISA v2.07 */ 214*4882a593Smuzhiyun #define MMCRA_SAMP_MODE_SHIFT 1 215*4882a593Smuzhiyun #define MMCRA_SAMP_ELIG_SHIFT 4 216*4882a593Smuzhiyun #define MMCRA_THR_CTL_SHIFT 8 217*4882a593Smuzhiyun #define MMCRA_THR_SEL_SHIFT 16 218*4882a593Smuzhiyun #define MMCRA_THR_CMP_SHIFT 32 219*4882a593Smuzhiyun #define MMCRA_SDAR_MODE_SHIFT 42 220*4882a593Smuzhiyun #define MMCRA_SDAR_MODE_TLB (1ull << MMCRA_SDAR_MODE_SHIFT) 221*4882a593Smuzhiyun #define MMCRA_SDAR_MODE_NO_UPDATES ~(0x3ull << MMCRA_SDAR_MODE_SHIFT) 222*4882a593Smuzhiyun #define MMCRA_SDAR_MODE_DCACHE (2ull << MMCRA_SDAR_MODE_SHIFT) 223*4882a593Smuzhiyun #define MMCRA_IFM_SHIFT 30 224*4882a593Smuzhiyun #define MMCRA_THR_CTR_MANT_SHIFT 19 225*4882a593Smuzhiyun #define MMCRA_THR_CTR_MANT_MASK 0x7Ful 226*4882a593Smuzhiyun #define MMCRA_THR_CTR_MANT(v) (((v) >> MMCRA_THR_CTR_MANT_SHIFT) &\ 227*4882a593Smuzhiyun MMCRA_THR_CTR_MANT_MASK) 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun #define MMCRA_THR_CTR_EXP_SHIFT 27 230*4882a593Smuzhiyun #define MMCRA_THR_CTR_EXP_MASK 0x7ul 231*4882a593Smuzhiyun #define MMCRA_THR_CTR_EXP(v) (((v) >> MMCRA_THR_CTR_EXP_SHIFT) &\ 232*4882a593Smuzhiyun MMCRA_THR_CTR_EXP_MASK) 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun #define P10_MMCRA_THR_CTR_MANT_MASK 0xFFul 235*4882a593Smuzhiyun #define P10_MMCRA_THR_CTR_MANT(v) (((v) >> MMCRA_THR_CTR_MANT_SHIFT) &\ 236*4882a593Smuzhiyun P10_MMCRA_THR_CTR_MANT_MASK) 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun /* MMCRA Threshold Compare bit constant for power9 */ 239*4882a593Smuzhiyun #define p9_MMCRA_THR_CMP_SHIFT 45 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun /* Bits in MMCR2 for PowerISA v2.07 */ 242*4882a593Smuzhiyun #define MMCR2_FCS(pmc) (1ull << (63 - (((pmc) - 1) * 9))) 243*4882a593Smuzhiyun #define MMCR2_FCP(pmc) (1ull << (62 - (((pmc) - 1) * 9))) 244*4882a593Smuzhiyun #define MMCR2_FCH(pmc) (1ull << (57 - (((pmc) - 1) * 9))) 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun #define MAX_ALT 2 247*4882a593Smuzhiyun #define MAX_PMU_COUNTERS 6 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun /* Bits in MMCR3 for PowerISA v3.10 */ 250*4882a593Smuzhiyun #define MMCR3_SHIFT(pmc) (49 - (15 * ((pmc) - 1))) 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun #define ISA207_SIER_TYPE_SHIFT 15 253*4882a593Smuzhiyun #define ISA207_SIER_TYPE_MASK (0x7ull << ISA207_SIER_TYPE_SHIFT) 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #define ISA207_SIER_LDST_SHIFT 1 256*4882a593Smuzhiyun #define ISA207_SIER_LDST_MASK (0x7ull << ISA207_SIER_LDST_SHIFT) 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun #define ISA207_SIER_DATA_SRC_SHIFT 53 259*4882a593Smuzhiyun #define ISA207_SIER_DATA_SRC_MASK (0x7ull << ISA207_SIER_DATA_SRC_SHIFT) 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun #define P(a, b) PERF_MEM_S(a, b) 262*4882a593Smuzhiyun #define PH(a, b) (P(LVL, HIT) | P(a, b)) 263*4882a593Smuzhiyun #define PM(a, b) (P(LVL, MISS) | P(a, b)) 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp); 266*4882a593Smuzhiyun int isa207_compute_mmcr(u64 event[], int n_ev, 267*4882a593Smuzhiyun unsigned int hwc[], struct mmcr_regs *mmcr, 268*4882a593Smuzhiyun struct perf_event *pevents[]); 269*4882a593Smuzhiyun void isa207_disable_pmc(unsigned int pmc, struct mmcr_regs *mmcr); 270*4882a593Smuzhiyun int isa207_get_alternatives(u64 event, u64 alt[], int size, unsigned int flags, 271*4882a593Smuzhiyun const unsigned int ev_alt[][MAX_ALT]); 272*4882a593Smuzhiyun void isa207_get_mem_data_src(union perf_mem_data_src *dsrc, u32 flags, 273*4882a593Smuzhiyun struct pt_regs *regs); 274*4882a593Smuzhiyun void isa207_get_mem_weight(u64 *weight); 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun #endif 277