133{
134#define HAS_OPTIONS(x) (cntrs && (cntrs[x].flags || cntrs[x].cnt_mask))
135
141 uint64_t val;
142 unsigned long plm;
143 unsigned int npc, npmc0, npmc1, nf2;
144 unsigned int i, n, k, ucode;
146 unsigned int next_gen, last_gen;
147
148 npc = npmc0 = npmc1 = nf2 = 0;
149
154
157
160
161
162
163
166
167
168
169
170 for(
i=0;
i < n;
i++) {
171
172
173
176
177
178
179
182
183
184
185
186
188 if (++npmc0 > 1) {
189 DPRINT(
"two events compete for a PMC0\n");
191 }
192 }
193
194
195
197 if (++npmc1 > 1) {
198 DPRINT(
"two events compete for a PMC1\n");
200 }
201 }
202 }
203
204 next_gen = 0;
205 last_gen = 1;
206
207
208
209
210 for(
i=0;
i < n;
i++) {
214
216
217 next_gen++;
218 }
222
224
226 }
227 }
228
229
230
231 for(
i=0;
i < n;
i++) {
232 if (assign_pc[
i] == -1) {
233 for(; next_gen <= last_gen; next_gen++) {
236 break;
237 }
238 if (next_gen <= last_gen)
239 assign_pc[
i] = next_gen++;
240 else {
241 DPRINT(
"cannot assign generic counters\n");
243 }
244 }
245 }
246
247 for (
i=0;
i < n ;
i++ ) {
249
250
252
254
256
257 ucode = (val >> 8) & 0xff;
258
261 }
262
263
264
265
266
267
269 && ((ucode & (0x3 << 6)) == 0)) {
270 ucode |= 1 << 6;
271 }
272
273
274
275
276
278 && ((ucode & 0xf) == 0)) {
279 ucode |= 0xf;
280 }
281
282 val |= ucode << 8;
283
289
293
294 if (cntrs) {
296
297
298
299
300 if (cntrs[
i].cnt_mask > 255)
303 }
304
309 }
310
315
316 __pfm_vbprintf(
"[PERFEVTSEL%u(pmc%u)=0x%"PRIx64
" event_sel=0x%x umask=0x%x os=%d usr=%d en=%d int=%d inv=%d edge=%d cnt_mask=%d] %s\n",
317 pc[npc].reg_num,
318 pc[npc].reg_num,
330
332 pc[npc].reg_num,
333 pc[npc].reg_num);
334
335 npc++;
336 }
337
338
339
340 for (
i=0;
i < n ;
i++) {
343
345 }
348
350}
static pme_coreduo_entry_t coreduo_pe[]
#define PFMLIB_ERR_TOOMANY
static int pfm_regmask_isset(pfmlib_regmask_t *h, unsigned int b)
#define PFMLIB_ERR_NOASSIGN
#define PFMLIB_COREDUO_ALL_FLAGS
#define PFM_COREDUO_SEL_EDGE
#define PFM_COREDUO_SEL_INV
#define PMU_COREDUO_NUM_COUNTERS
#define PFMLIB_COREDUO_CSPEC
#define PFMLIB_COREDUO_PMC1
#define PFMLIB_COREDUO_PMC0
#define PFMLIB_COREDUO_MESI
void __pfm_vbprintf(const char *fmt,...)
#define DPRINT(fmt, a...)
unsigned int unit_masks[PFMLIB_MAX_MASKS_PER_EVENT]
pfmlib_reg_t pfp_pmds[PFMLIB_MAX_PMDS]
pfmlib_reg_t pfp_pmcs[PFMLIB_MAX_PMCS]
unsigned int pfp_pmc_count
unsigned int pfp_pmd_count
unsigned long long reg_value
unsigned long reg_alt_addr
unsigned long long reg_addr
pme_coreduo_umask_t pme_umasks[PFMLIB_COREDUO_MAX_UMASK]
unsigned long sel_cnt_mask
unsigned long sel_event_select
unsigned long sel_unit_mask