Branch data Line data Source code
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 : :
15 : : struct device;
16 : :
17 : : struct 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 : :
28 : : static inline int
29 : : attribute_container_no_classdevs(struct attribute_container *atc)
30 : : {
31 : 0 : return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS;
32 : : }
33 : :
34 : : static inline void
35 : : attribute_container_set_no_classdevs(struct attribute_container *atc)
36 : : {
37 : 0 : atc->flags |= ATTRIBUTE_CONTAINER_NO_CLASSDEVS;
38 : : }
39 : :
40 : : int attribute_container_register(struct attribute_container *cont);
41 : : int __must_check attribute_container_unregister(struct attribute_container *cont);
42 : : void attribute_container_create_device(struct device *dev,
43 : : int (*fn)(struct attribute_container *,
44 : : struct device *,
45 : : struct device *));
46 : : void attribute_container_add_device(struct device *dev,
47 : : int (*fn)(struct attribute_container *,
48 : : struct device *,
49 : : struct device *));
50 : : void attribute_container_remove_device(struct device *dev,
51 : : void (*fn)(struct attribute_container *,
52 : : struct device *,
53 : : struct device *));
54 : : void attribute_container_device_trigger(struct device *dev,
55 : : int (*fn)(struct attribute_container *,
56 : : struct device *,
57 : : struct device *));
58 : : void attribute_container_trigger(struct device *dev,
59 : : int (*fn)(struct attribute_container *,
60 : : struct device *));
61 : : int attribute_container_add_attrs(struct device *classdev);
62 : : int attribute_container_add_class_device(struct device *classdev);
63 : : int attribute_container_add_class_device_adapter(struct attribute_container *cont,
64 : : struct device *dev,
65 : : struct device *classdev);
66 : : void attribute_container_remove_attrs(struct device *classdev);
67 : : void attribute_container_class_device_del(struct device *classdev);
68 : : struct attribute_container *attribute_container_classdev_to_container(struct device *);
69 : : struct device *attribute_container_find_class_device(struct attribute_container *, struct device *);
70 : : struct device_attribute **attribute_container_classdev_to_attrs(const struct device *classdev);
71 : :
72 : : #endif
|