1/* 2 * attribute_container.h - a generic container for all classes 3 * 4 * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com> 5 * 6 * This file is licensed under GPLv2 7 */ 8 9#ifndef _ATTRIBUTE_CONTAINER_H_ 10#define _ATTRIBUTE_CONTAINER_H_ 11 12#include <linux/list.h> 13#include <linux/klist.h> 14 15struct device; 16 17struct attribute_container { 18 struct list_head node; 19 struct klist containers; 20 struct class *class; 21 const struct attribute_group *grp; 22 struct device_attribute **attrs; 23 int (*match)(struct attribute_container *, struct device *); 24#define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 25 unsigned long flags; 26}; 27 28static inline int 29attribute_container_no_classdevs(struct attribute_container *atc) 30{ 31 return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS; 32} 33 34static inline void 35attribute_container_set_no_classdevs(struct attribute_container *atc) 36{ 37 atc->flags |= ATTRIBUTE_CONTAINER_NO_CLASSDEVS; 38} 39 40int attribute_container_register(struct attribute_container *cont); 41int __must_check attribute_container_unregister(struct attribute_container *cont); 42void attribute_container_create_device(struct device *dev, 43 int (*fn)(struct attribute_container *, 44 struct device *, 45 struct device *)); 46void attribute_container_add_device(struct device *dev, 47 int (*fn)(struct attribute_container *, 48 struct device *, 49 struct device *)); 50void attribute_container_remove_device(struct device *dev, 51 void (*fn)(struct attribute_container *, 52 struct device *, 53 struct device *)); 54void attribute_container_device_trigger(struct device *dev, 55 int (*fn)(struct attribute_container *, 56 struct device *, 57 struct device *)); 58void attribute_container_trigger(struct device *dev, 59 int (*fn)(struct attribute_container *, 60 struct device *)); 61int attribute_container_add_attrs(struct device *classdev); 62int attribute_container_add_class_device(struct device *classdev); 63int attribute_container_add_class_device_adapter(struct attribute_container *cont, 64 struct device *dev, 65 struct device *classdev); 66void attribute_container_remove_attrs(struct device *classdev); 67void attribute_container_class_device_del(struct device *classdev); 68struct attribute_container *attribute_container_classdev_to_container(struct device *); 69struct device *attribute_container_find_class_device(struct attribute_container *, struct device *); 70struct device_attribute **attribute_container_classdev_to_attrs(const struct device *classdev); 71 72#endif 73