in counter-sysfs.c [697:744]
static int counter_count_attrs_create(struct counter_device *const counter,
struct counter_attribute_group *const cattr_group,
struct counter_count *const count)
{
const enum counter_scope scope = COUNTER_SCOPE_COUNT;
struct device *const dev = &counter->dev;
int err;
struct counter_comp comp;
size_t i;
struct counter_comp *ext;
/* Create main Count attribute */
comp = counter_count_comp;
comp.count_u64_read = counter->ops->count_read;
comp.count_u64_write = counter->ops->count_write;
err = counter_attr_create(dev, cattr_group, &comp, scope, count);
if (err < 0)
return err;
/* Create Count name attribute */
err = counter_name_attr_create(dev, cattr_group, count->name);
if (err < 0)
return err;
/* Create Count function attribute */
comp = counter_function_comp;
comp.count_u32_read = counter->ops->function_read;
comp.count_u32_write = counter->ops->function_write;
err = counter_attr_create(dev, cattr_group, &comp, scope, count);
if (err < 0)
return err;
/* Create an attribute for each extension */
for (i = 0; i < count->num_ext; i++) {
ext = &count->ext[i];
err = counter_attr_create(dev, cattr_group, ext, scope, count);
if (err < 0)
return err;
err = counter_comp_id_attr_create(dev, cattr_group, ext->name,
i);
if (err < 0)
return err;
}
return 0;
}