/** * help_for_event - output event name and description * @param i event number * * output an help string for the event @i */ static void help_for_event(struct op_event * event) { uint i, j; uint mask; size_t nr_counters = op_get_nr_counters(cpu_type); printf("%s", event->name); printf(": (counter: "); mask = event->counter_mask; if (hweight(mask) == nr_counters) { printf("all"); } else { for (i = 0; i < CHAR_BIT * sizeof(event->counter_mask); ++i) { if (mask & (1 << i)) { printf("%d", i); mask &= ~(1 << i); if (mask) printf(", "); } } } printf(")\n\t%s (min count: %d)\n", event->desc, event->min_count); if (strcmp(event->unit->name, "zero")) { printf("\tUnit masks (default 0x%x)\n", event->unit->default_mask); printf("\t----------\n"); for (j = 0; j < event->unit->num; j++) { printf("\t0x%.2x: %s\n", event->unit->um[j].value, event->unit->um[j].desc); } } }
/** * help_for_event - output event name and description * @param i event number * * output an help string for the event @i */ static void help_for_event(struct op_event * event) { int column; uint i, j; uint mask; size_t nr_counters; char buf[32]; do_arch_specific_event_help(event); nr_counters = op_get_nr_counters(cpu_type); /* Sanity check */ if (!event) return; printf("%s", event->name); if(event->counter_mask != 0) { printf(": (counter: "); mask = event->counter_mask; if (hweight(mask) == nr_counters) { printf("all"); } else { for (i = 0; i < CHAR_BIT * sizeof(event->counter_mask); ++i) { if (mask & (1 << i)) { printf("%d", i); mask &= ~(1 << i); if (mask) printf(", "); } } } } else if (event->ext != NULL) { /* Handling extended feature interface */ printf(": (ext: %s", event->ext); } else { /* Handling arch_perfmon case */ printf(": (counter: all"); } printf(")\n\t"); column = 8; word_wrap(8, &column, event->desc); snprintf(buf, sizeof buf, " (min count: %d)", event->min_count); word_wrap(8, &column, buf); putchar('\n'); if (strcmp(event->unit->name, "zero")) { if (event->unit->default_mask_name) { printf("\tUnit masks (default %s)\n", event->unit->default_mask_name); } else { printf("\tUnit masks (default 0x%x)\n", event->unit->default_mask); } printf("\t----------\n"); for (j = 0; j < event->unit->num; j++) { printf("\t0x%.2x: ", event->unit->um[j].value); column = 14; /* Named mask */ if (event->unit->um[j].name) { word_wrap(14, &column, "(name="); word_wrap(14, &column, event->unit->um[j].name); word_wrap(14, &column, ") "); } word_wrap(14, &column, event->unit->um[j].desc); putchar('\n'); } } }