static int counter_sysfs_attr_add()

in counter-sysfs.c [830:889]


static int counter_sysfs_attr_add(struct counter_device *const counter,
				  struct counter_attribute_group *cattr_group)
{
	const enum counter_scope scope = COUNTER_SCOPE_DEVICE;
	struct device *const dev = &counter->dev;
	int err;
	size_t i;
	struct counter_comp *ext;

	/* Add Signals sysfs attributes */
	err = counter_sysfs_signals_add(counter, cattr_group);
	if (err < 0)
		return err;
	cattr_group += counter->num_signals;

	/* Add Counts sysfs attributes */
	err = counter_sysfs_counts_add(counter, cattr_group);
	if (err < 0)
		return err;
	cattr_group += counter->num_counts;

	/* Create name attribute */
	err = counter_name_attr_create(dev, cattr_group, counter->name);
	if (err < 0)
		return err;

	/* Create num_signals attribute */
	err = counter_attr_create(dev, cattr_group, &counter_num_signals_comp,
				  scope, NULL);
	if (err < 0)
		return err;

	/* Create num_counts attribute */
	err = counter_attr_create(dev, cattr_group, &counter_num_counts_comp,
				  scope, NULL);
	if (err < 0)
		return err;

	/* Create events_queue_size attribute */
	err = counter_attr_create(dev, cattr_group,
				  &counter_events_queue_size_comp, scope, NULL);
	if (err < 0)
		return err;

	/* Create an attribute for each extension */
	for (i = 0; i < counter->num_ext; i++) {
		ext = &counter->ext[i];

		err = counter_attr_create(dev, cattr_group, ext, scope, NULL);
		if (err < 0)
			return err;

		err = counter_comp_id_attr_create(dev, cattr_group, ext->name,
						  i);
		if (err < 0)
			return err;
	}

	return 0;
}