11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2ee959b00c335d7780136c5abda37809191fe52c3Tony Jones * attribute_container.h - a generic container for all classes 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com> 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file is licensed under GPLv2 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _ATTRIBUTE_CONTAINER_H_ 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ATTRIBUTE_CONTAINER_H_ 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/list.h> 1353c165e0a6c8a4ff7df316557528fa7a52d20711James Bottomley#include <linux/klist.h> 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 15313162d0b83836e2f57e51b9b8650fb4b9c396eaPaul Gortmakerstruct device; 16313162d0b83836e2f57e51b9b8650fb4b9c396eaPaul Gortmaker 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct attribute_container { 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head node; 1953c165e0a6c8a4ff7df316557528fa7a52d20711James Bottomley struct klist containers; 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct class *class; 21a4dbd6740df0872cdf0a86841f75beec8381964dDavid Brownell const struct attribute_group *grp; 22ee959b00c335d7780136c5abda37809191fe52c3Tony Jones struct device_attribute **attrs; 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*match)(struct attribute_container *, struct device *); 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long flags; 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline int 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsattribute_container_no_classdevs(struct attribute_container *atc) 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS; 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsattribute_container_set_no_classdevs(struct attribute_container *atc) 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds atc->flags |= ATTRIBUTE_CONTAINER_NO_CLASSDEVS; 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint attribute_container_register(struct attribute_container *cont); 412f3edc6936e3f6be3f1df1e89c141ae028fa605eJames Bottomleyint __must_check attribute_container_unregister(struct attribute_container *cont); 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid attribute_container_create_device(struct device *dev, 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*fn)(struct attribute_container *, 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct device *, 45ee959b00c335d7780136c5abda37809191fe52c3Tony Jones struct device *)); 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid attribute_container_add_device(struct device *dev, 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*fn)(struct attribute_container *, 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct device *, 49ee959b00c335d7780136c5abda37809191fe52c3Tony Jones struct device *)); 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid attribute_container_remove_device(struct device *dev, 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void (*fn)(struct attribute_container *, 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct device *, 53ee959b00c335d7780136c5abda37809191fe52c3Tony Jones struct device *)); 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid attribute_container_device_trigger(struct device *dev, 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*fn)(struct attribute_container *, 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct device *, 57ee959b00c335d7780136c5abda37809191fe52c3Tony Jones struct device *)); 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid attribute_container_trigger(struct device *dev, 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*fn)(struct attribute_container *, 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct device *)); 61ee959b00c335d7780136c5abda37809191fe52c3Tony Jonesint attribute_container_add_attrs(struct device *classdev); 62ee959b00c335d7780136c5abda37809191fe52c3Tony Jonesint attribute_container_add_class_device(struct device *classdev); 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint attribute_container_add_class_device_adapter(struct attribute_container *cont, 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct device *dev, 65ee959b00c335d7780136c5abda37809191fe52c3Tony Jones struct device *classdev); 66ee959b00c335d7780136c5abda37809191fe52c3Tony Jonesvoid attribute_container_remove_attrs(struct device *classdev); 67ee959b00c335d7780136c5abda37809191fe52c3Tony Jonesvoid attribute_container_class_device_del(struct device *classdev); 68ee959b00c335d7780136c5abda37809191fe52c3Tony Jonesstruct attribute_container *attribute_container_classdev_to_container(struct device *); 69ee959b00c335d7780136c5abda37809191fe52c3Tony Jonesstruct device *attribute_container_find_class_device(struct attribute_container *, struct device *); 70ee959b00c335d7780136c5abda37809191fe52c3Tony Jonesstruct device_attribute **attribute_container_classdev_to_attrs(const struct device *classdev); 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 73