1/* 2 * class_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/device.h> 13#include <linux/list.h> 14#include <linux/klist.h> 15#include <linux/spinlock.h> 16 17struct attribute_container { 18 struct list_head node; 19 struct klist containers; 20 struct class *class; 21 struct class_device_attribute **attrs; 22 int (*match)(struct attribute_container *, struct device *); 23#define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 24 unsigned long flags; 25}; 26 27static inline int 28attribute_container_no_classdevs(struct attribute_container *atc) 29{ 30 return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS; 31} 32 33static inline void 34attribute_container_set_no_classdevs(struct attribute_container *atc) 35{ 36 atc->flags |= ATTRIBUTE_CONTAINER_NO_CLASSDEVS; 37} 38 39int attribute_container_register(struct attribute_container *cont); 40int attribute_container_unregister(struct attribute_container *cont); 41void attribute_container_create_device(struct device *dev, 42 int (*fn)(struct attribute_container *, 43 struct device *, 44 struct class_device *)); 45void attribute_container_add_device(struct device *dev, 46 int (*fn)(struct attribute_container *, 47 struct device *, 48 struct class_device *)); 49void attribute_container_remove_device(struct device *dev, 50 void (*fn)(struct attribute_container *, 51 struct device *, 52 struct class_device *)); 53void attribute_container_device_trigger(struct device *dev, 54 int (*fn)(struct attribute_container *, 55 struct device *, 56 struct class_device *)); 57void attribute_container_trigger(struct device *dev, 58 int (*fn)(struct attribute_container *, 59 struct device *)); 60int attribute_container_add_attrs(struct class_device *classdev); 61int attribute_container_add_class_device(struct class_device *classdev); 62int attribute_container_add_class_device_adapter(struct attribute_container *cont, 63 struct device *dev, 64 struct class_device *classdev); 65void attribute_container_remove_attrs(struct class_device *classdev); 66void attribute_container_class_device_del(struct class_device *classdev); 67struct attribute_container *attribute_container_classdev_to_container(struct class_device *); 68struct class_device *attribute_container_find_class_device(struct attribute_container *, struct device *); 69struct class_device_attribute **attribute_container_classdev_to_attrs(const struct class_device *classdev); 70 71#endif 72