aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/device.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/device.h')
-rw-r--r--include/linux/device.h67
1 files changed, 45 insertions, 22 deletions
diff --git a/include/linux/device.h b/include/linux/device.h
index 6a2d04c011bc..d24a47f80f9c 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -16,6 +16,7 @@
16#include <linux/kobject.h> 16#include <linux/kobject.h>
17#include <linux/klist.h> 17#include <linux/klist.h>
18#include <linux/list.h> 18#include <linux/list.h>
19#include <linux/lockdep.h>
19#include <linux/compiler.h> 20#include <linux/compiler.h>
20#include <linux/types.h> 21#include <linux/types.h>
21#include <linux/module.h> 22#include <linux/module.h>
@@ -24,17 +25,13 @@
24#include <asm/atomic.h> 25#include <asm/atomic.h>
25#include <asm/device.h> 26#include <asm/device.h>
26 27
27#define DEVICE_NAME_SIZE 50 28#define BUS_ID_SIZE 20
28/* DEVICE_NAME_HALF is really less than half to accommodate slop */
29#define DEVICE_NAME_HALF __stringify(20)
30#define DEVICE_ID_SIZE 32
31#define BUS_ID_SIZE KOBJ_NAME_LEN
32
33 29
34struct device; 30struct device;
35struct device_driver; 31struct device_driver;
36struct driver_private; 32struct driver_private;
37struct class; 33struct class;
34struct class_private;
38struct bus_type; 35struct bus_type;
39struct bus_type_private; 36struct bus_type_private;
40 37
@@ -68,6 +65,8 @@ struct bus_type {
68 int (*resume_early)(struct device *dev); 65 int (*resume_early)(struct device *dev);
69 int (*resume)(struct device *dev); 66 int (*resume)(struct device *dev);
70 67
68 struct pm_ext_ops *pm;
69
71 struct bus_type_private *p; 70 struct bus_type_private *p;
72}; 71};
73 72
@@ -131,6 +130,8 @@ struct device_driver {
131 int (*resume) (struct device *dev); 130 int (*resume) (struct device *dev);
132 struct attribute_group **groups; 131 struct attribute_group **groups;
133 132
133 struct pm_ops *pm;
134
134 struct driver_private *p; 135 struct driver_private *p;
135}; 136};
136 137
@@ -182,13 +183,9 @@ struct class {
182 const char *name; 183 const char *name;
183 struct module *owner; 184 struct module *owner;
184 185
185 struct kset subsys;
186 struct list_head devices;
187 struct list_head interfaces;
188 struct kset class_dirs;
189 struct semaphore sem; /* locks children, devices, interfaces */
190 struct class_attribute *class_attrs; 186 struct class_attribute *class_attrs;
191 struct device_attribute *dev_attrs; 187 struct device_attribute *dev_attrs;
188 struct kobject *dev_kobj;
192 189
193 int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); 190 int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
194 191
@@ -197,13 +194,30 @@ struct class {
197 194
198 int (*suspend)(struct device *dev, pm_message_t state); 195 int (*suspend)(struct device *dev, pm_message_t state);
199 int (*resume)(struct device *dev); 196 int (*resume)(struct device *dev);
197
198 struct pm_ops *pm;
199 struct class_private *p;
200}; 200};
201 201
202extern int __must_check class_register(struct class *class); 202extern struct kobject *sysfs_dev_block_kobj;
203extern struct kobject *sysfs_dev_char_kobj;
204extern int __must_check __class_register(struct class *class,
205 struct lock_class_key *key);
203extern void class_unregister(struct class *class); 206extern void class_unregister(struct class *class);
204extern int class_for_each_device(struct class *class, void *data, 207
208/* This is a #define to keep the compiler from merging different
209 * instances of the __key variable */
210#define class_register(class) \
211({ \
212 static struct lock_class_key __key; \
213 __class_register(class, &__key); \
214})
215
216extern int class_for_each_device(struct class *class, struct device *start,
217 void *data,
205 int (*fn)(struct device *dev, void *data)); 218 int (*fn)(struct device *dev, void *data));
206extern struct device *class_find_device(struct class *class, void *data, 219extern struct device *class_find_device(struct class *class,
220 struct device *start, void *data,
207 int (*match)(struct device *, void *)); 221 int (*match)(struct device *, void *));
208 222
209struct class_attribute { 223struct class_attribute {
@@ -231,9 +245,19 @@ struct class_interface {
231extern int __must_check class_interface_register(struct class_interface *); 245extern int __must_check class_interface_register(struct class_interface *);
232extern void class_interface_unregister(struct class_interface *); 246extern void class_interface_unregister(struct class_interface *);
233 247
234extern struct class *class_create(struct module *owner, const char *name); 248extern struct class * __must_check __class_create(struct module *owner,
249 const char *name,
250 struct lock_class_key *key);
235extern void class_destroy(struct class *cls); 251extern void class_destroy(struct class *cls);
236 252
253/* This is a #define to keep the compiler from merging different
254 * instances of the __key variable */
255#define class_create(owner, name) \
256({ \
257 static struct lock_class_key __key; \
258 __class_create(owner, name, &__key); \
259})
260
237/* 261/*
238 * The type of device, "struct device" is embedded in. A class 262 * The type of device, "struct device" is embedded in. A class
239 * or bus can contain devices of different types 263 * or bus can contain devices of different types
@@ -248,8 +272,11 @@ struct device_type {
248 struct attribute_group **groups; 272 struct attribute_group **groups;
249 int (*uevent)(struct device *dev, struct kobj_uevent_env *env); 273 int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
250 void (*release)(struct device *dev); 274 void (*release)(struct device *dev);
275
251 int (*suspend)(struct device *dev, pm_message_t state); 276 int (*suspend)(struct device *dev, pm_message_t state);
252 int (*resume)(struct device *dev); 277 int (*resume)(struct device *dev);
278
279 struct pm_ops *pm;
253}; 280};
254 281
255/* interface for exporting device attributes */ 282/* interface for exporting device attributes */
@@ -459,14 +486,10 @@ extern struct device *device_create_vargs(struct class *cls,
459 const char *fmt, 486 const char *fmt,
460 va_list vargs); 487 va_list vargs);
461extern struct device *device_create(struct class *cls, struct device *parent, 488extern struct device *device_create(struct class *cls, struct device *parent,
462 dev_t devt, const char *fmt, ...) 489 dev_t devt, void *drvdata,
463 __attribute__((format(printf, 4, 5))); 490 const char *fmt, ...)
464extern struct device *device_create_drvdata(struct class *cls,
465 struct device *parent,
466 dev_t devt,
467 void *drvdata,
468 const char *fmt, ...)
469 __attribute__((format(printf, 5, 6))); 491 __attribute__((format(printf, 5, 6)));
492#define device_create_drvdata device_create
470extern void device_destroy(struct class *cls, dev_t devt); 493extern void device_destroy(struct class *cls, dev_t devt);
471 494
472/* 495/*