350{
353 unsigned int event_cnt;
354 unsigned int signal_cnt = 0, pmcs_cnt = 0;
355 unsigned int signal_type;
356 unsigned long long signal_bit;
358 int pmx_offset = 0;
360 int input_control, polarity, count_cycle, count_enable;
362 int shift0, shift1;
363 unsigned int pmx_ctrl_bits;
365
366 count_enable = 1;
367
368 group[0].signal_type = group[1].signal_type =
NONE_SIGNAL;
369 group[0].word = group[1].word = 0L;
370 group[0].freq = group[1].freq = 0L;
371 group[0].subunit = group[1].subunit = 0;
372 group[0].word_type = group[1].word_type =
WORD_NONE;
373
378
379
384 if (event_cnt > max_event_cnt)
386
387
391
392
397 }
398
399
401 if (signal_cnt == 1) {
404 } else if (signal_cnt == 2) {
408 }
409 pmcs_cnt++;
410
412 if (signal_cnt == 1) {
416 pc[pmcs_cnt].
reg_value = group[0].freq << shift0;
417 } else if (signal_cnt == 2) {
424 pc[pmcs_cnt].
reg_value = (group[0].freq << shift0) |
425 (group[1].
freq << shift1);
426 }
428 pmcs_cnt++;
429
432 pmcs_cnt++;
433
436 pmcs_cnt++;
437
440 pmcs_cnt++;
441
444 (mod_in->
control & ~PFM_CELL_PM_CONTROL_PPU_CNTR_MODE_MASK) |
446 pmcs_cnt++;
447
450 pmcs_cnt++;
451
454 pmcs_cnt++;
455
456 pmx_ctrl_bits = 0;
457
458
459 for(
i = 0;
i < event_cnt;
i++) {
460
462 &pmx_ctrl_bits);
464 DPRINT(
"pmX already used\n");
466 }
467
472 pmcs_cnt++;
475 pmcs_cnt++;
478 continue;
479 }
480
486 count_cycle = 1;
487 break;
488
490 count_cycle = 0;
491 break;
492
493 default:
495 }
496
503 }
504
505 pc[pmcs_cnt].
reg_value = ( (signal_bit << (31 - 5))
506 | (input_control << (31 - 6))
507 | (polarity << (31 - 7))
508 | (count_cycle << (31 - 8))
509 | (count_enable << (31 - 9)) );
511
514 }
515
516 pmcs_cnt++;
517
518
520
521
524 (group[0].word << 48) | (
subunit << 32));
527 (group[1].word << 48) | (
subunit << 32));
531 } else {
533 }
534 pmcs_cnt++;
535
536
539 }
540
543
545}
#define PFMLIB_ERR_NOTFOUND
#define PFMLIB_ERR_TOOMANY
#define PFMLIB_ERR_NOASSIGN
#define PFM_CELL_DEFAULT_TRIGGER_EVENT_UNIT
static unsigned int get_signal_bit(unsigned long long event_code)
#define PFM_CELL_GRP_CONTROL_REG_GRP0_BIT
#define PFM_CELL_32BIT_CNTR_EVENT_MAX
static unsigned int get_ppu_count_mode(unsigned int plm)
#define PFM_CELL_EVENT_MIN
static int get_debug_bus_word(struct pfm_cell_signal_group_desc *group0, struct pfm_cell_signal_group_desc *group1)
static int check_signal_type(pfmlib_input_param_t *inp, pfmlib_cell_input_param_t *mod_in, struct pfm_cell_signal_group_desc *group0, struct pfm_cell_signal_group_desc *group1)
#define PFM_CELL_COUNTER_CONTROL_GRP1
#define PFM_CELL_GRP_CONTROL_REG_GRP1_BIT
#define PFM_CELL_16BIT_CNTR_EVENT_MAX
#define PFM_CELL_WORD_UNIT_FIELD_WIDTH
#define PFM_CELL_PM_CONTROL_16BIT_CNTR_MASK
#define PM_COUNTER_CTRL_CYLES
#define PFM_CELL_BASE_WORD_UNIT_FIELD_BIT
#define PFM_CELL_MAX_WORD_NUMBER
static int get_pmx_offset(int pmx_num, unsigned int *pmx_ctrl_bits)
#define COUNT_TYPE_SINGLE_CYCLE
#define REG_GROUP_CONTROL
#define COUNT_TYPE_MULTI_CYCLE
#define REG_EXT_TRACE_TIMER
#define REG_PM_START_STOP
#define COUNT_TYPE_CUMULATIVE_LEN
#define COUNT_TYPE_BOTH_TYPE
#define COUNT_TYPE_OCCURRENCE
#define REG_TRACE_ADDRESS
#define REG_DEBUG_BUS_CONTROL
unsigned int input_control
unsigned int pmX_control_num
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 long pme_code