in arm-ccn.c [323:363]
static ssize_t arm_ccn_pmu_event_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct arm_ccn *ccn = pmu_to_arm_ccn(dev_get_drvdata(dev));
struct arm_ccn_pmu_event *event = container_of(attr,
struct arm_ccn_pmu_event, attr);
int res;
res = sysfs_emit(buf, "type=0x%x", event->type);
if (event->event)
res += sysfs_emit_at(buf, res, ",event=0x%x", event->event);
if (event->def)
res += sysfs_emit_at(buf, res, ",%s", event->def);
if (event->mask)
res += sysfs_emit_at(buf, res, ",mask=0x%x", event->mask);
/* Arguments required by an event */
switch (event->type) {
case CCN_TYPE_CYCLES:
break;
case CCN_TYPE_XP:
res += sysfs_emit_at(buf, res, ",xp=?,vc=?");
if (event->event == CCN_EVENT_WATCHPOINT)
res += sysfs_emit_at(buf, res,
",port=?,dir=?,cmp_l=?,cmp_h=?,mask=?");
else
res += sysfs_emit_at(buf, res, ",bus=?");
break;
case CCN_TYPE_MN:
res += sysfs_emit_at(buf, res, ",node=%d", ccn->mn_id);
break;
default:
res += sysfs_emit_at(buf, res, ",node=?");
break;
}
res += sysfs_emit_at(buf, res, "\n");
return res;
}