]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - include/linux/device.h
driver core: remove no longer used "struct class_device"
[linux-2.6-omap-h63xx.git] / include / linux / device.h
1 /*
2  * device.h - generic, centralized driver model
3  *
4  * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org>
5  * Copyright (c) 2004-2007 Greg Kroah-Hartman <gregkh@suse.de>
6  *
7  * This file is released under the GPLv2
8  *
9  * See Documentation/driver-model/ for more information.
10  */
11
12 #ifndef _DEVICE_H_
13 #define _DEVICE_H_
14
15 #include <linux/ioport.h>
16 #include <linux/kobject.h>
17 #include <linux/klist.h>
18 #include <linux/list.h>
19 #include <linux/compiler.h>
20 #include <linux/types.h>
21 #include <linux/module.h>
22 #include <linux/pm.h>
23 #include <linux/semaphore.h>
24 #include <asm/atomic.h>
25 #include <asm/device.h>
26
27 #define DEVICE_NAME_SIZE        50
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
34 struct device;
35 struct device_driver;
36 struct driver_private;
37 struct class;
38 struct bus_type;
39 struct bus_type_private;
40
41 struct bus_attribute {
42         struct attribute        attr;
43         ssize_t (*show)(struct bus_type *bus, char *buf);
44         ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count);
45 };
46
47 #define BUS_ATTR(_name, _mode, _show, _store)   \
48 struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
49
50 extern int __must_check bus_create_file(struct bus_type *,
51                                         struct bus_attribute *);
52 extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
53
54 struct bus_type {
55         const char              *name;
56         struct bus_attribute    *bus_attrs;
57         struct device_attribute *dev_attrs;
58         struct driver_attribute *drv_attrs;
59
60         int (*match)(struct device *dev, struct device_driver *drv);
61         int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
62         int (*probe)(struct device *dev);
63         int (*remove)(struct device *dev);
64         void (*shutdown)(struct device *dev);
65
66         int (*suspend)(struct device *dev, pm_message_t state);
67         int (*suspend_late)(struct device *dev, pm_message_t state);
68         int (*resume_early)(struct device *dev);
69         int (*resume)(struct device *dev);
70
71         struct bus_type_private *p;
72 };
73
74 extern int __must_check bus_register(struct bus_type *bus);
75 extern void bus_unregister(struct bus_type *bus);
76
77 extern int __must_check bus_rescan_devices(struct bus_type *bus);
78
79 /* iterator helpers for buses */
80
81 int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
82                      int (*fn)(struct device *dev, void *data));
83 struct device *bus_find_device(struct bus_type *bus, struct device *start,
84                                void *data,
85                                int (*match)(struct device *dev, void *data));
86 struct device *bus_find_device_by_name(struct bus_type *bus,
87                                        struct device *start,
88                                        const char *name);
89
90 int __must_check bus_for_each_drv(struct bus_type *bus,
91                                   struct device_driver *start, void *data,
92                                   int (*fn)(struct device_driver *, void *));
93
94 /*
95  * Bus notifiers: Get notified of addition/removal of devices
96  * and binding/unbinding of drivers to devices.
97  * In the long run, it should be a replacement for the platform
98  * notify hooks.
99  */
100 struct notifier_block;
101
102 extern int bus_register_notifier(struct bus_type *bus,
103                                  struct notifier_block *nb);
104 extern int bus_unregister_notifier(struct bus_type *bus,
105                                    struct notifier_block *nb);
106
107 /* All 4 notifers below get called with the target struct device *
108  * as an argument. Note that those functions are likely to be called
109  * with the device semaphore held in the core, so be careful.
110  */
111 #define BUS_NOTIFY_ADD_DEVICE           0x00000001 /* device added */
112 #define BUS_NOTIFY_DEL_DEVICE           0x00000002 /* device removed */
113 #define BUS_NOTIFY_BOUND_DRIVER         0x00000003 /* driver bound to device */
114 #define BUS_NOTIFY_UNBIND_DRIVER        0x00000004 /* driver about to be
115                                                       unbound */
116
117 extern struct kset *bus_get_kset(struct bus_type *bus);
118 extern struct klist *bus_get_device_klist(struct bus_type *bus);
119
120 struct device_driver {
121         const char              *name;
122         struct bus_type         *bus;
123
124         struct module           *owner;
125         const char              *mod_name;      /* used for built-in modules */
126
127         int (*probe) (struct device *dev);
128         int (*remove) (struct device *dev);
129         void (*shutdown) (struct device *dev);
130         int (*suspend) (struct device *dev, pm_message_t state);
131         int (*resume) (struct device *dev);
132         struct attribute_group **groups;
133
134         struct driver_private *p;
135 };
136
137
138 extern int __must_check driver_register(struct device_driver *drv);
139 extern void driver_unregister(struct device_driver *drv);
140
141 extern struct device_driver *get_driver(struct device_driver *drv);
142 extern void put_driver(struct device_driver *drv);
143 extern struct device_driver *driver_find(const char *name,
144                                          struct bus_type *bus);
145 extern int driver_probe_done(void);
146
147 /* sysfs interface for exporting driver attributes */
148
149 struct driver_attribute {
150         struct attribute attr;
151         ssize_t (*show)(struct device_driver *driver, char *buf);
152         ssize_t (*store)(struct device_driver *driver, const char *buf,
153                          size_t count);
154 };
155
156 #define DRIVER_ATTR(_name, _mode, _show, _store)        \
157 struct driver_attribute driver_attr_##_name =           \
158         __ATTR(_name, _mode, _show, _store)
159
160 extern int __must_check driver_create_file(struct device_driver *driver,
161                                            struct driver_attribute *attr);
162 extern void driver_remove_file(struct device_driver *driver,
163                                struct driver_attribute *attr);
164
165 extern int __must_check driver_add_kobj(struct device_driver *drv,
166                                         struct kobject *kobj,
167                                         const char *fmt, ...);
168
169 extern int __must_check driver_for_each_device(struct device_driver *drv,
170                                                struct device *start,
171                                                void *data,
172                                                int (*fn)(struct device *dev,
173                                                          void *));
174 struct device *driver_find_device(struct device_driver *drv,
175                                   struct device *start, void *data,
176                                   int (*match)(struct device *dev, void *data));
177
178 /*
179  * device classes
180  */
181 struct class {
182         const char              *name;
183         struct module           *owner;
184
185         struct kset             subsys;
186         struct list_head        children;
187         struct list_head        devices;
188         struct list_head        interfaces;
189         struct kset             class_dirs;
190         struct semaphore        sem; /* locks children, devices, interfaces */
191         struct class_attribute          *class_attrs;
192         struct device_attribute         *dev_attrs;
193
194         int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
195
196         void (*class_release)(struct class *class);
197         void (*dev_release)(struct device *dev);
198
199         int (*suspend)(struct device *dev, pm_message_t state);
200         int (*resume)(struct device *dev);
201 };
202
203 extern int __must_check class_register(struct class *class);
204 extern void class_unregister(struct class *class);
205 extern int class_for_each_device(struct class *class, void *data,
206                                  int (*fn)(struct device *dev, void *data));
207 extern struct device *class_find_device(struct class *class, void *data,
208                                         int (*match)(struct device *, void *));
209
210 struct class_attribute {
211         struct attribute attr;
212         ssize_t (*show)(struct class *class, char *buf);
213         ssize_t (*store)(struct class *class, const char *buf, size_t count);
214 };
215
216 #define CLASS_ATTR(_name, _mode, _show, _store)                 \
217 struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
218
219 extern int __must_check class_create_file(struct class *class,
220                                           const struct class_attribute *attr);
221 extern void class_remove_file(struct class *class,
222                               const struct class_attribute *attr);
223
224 struct class_interface {
225         struct list_head        node;
226         struct class            *class;
227
228         int (*add_dev)          (struct device *, struct class_interface *);
229         void (*remove_dev)      (struct device *, struct class_interface *);
230 };
231
232 extern int __must_check class_interface_register(struct class_interface *);
233 extern void class_interface_unregister(struct class_interface *);
234
235 extern struct class *class_create(struct module *owner, const char *name);
236 extern void class_destroy(struct class *cls);
237
238 /*
239  * The type of device, "struct device" is embedded in. A class
240  * or bus can contain devices of different types
241  * like "partitions" and "disks", "mouse" and "event".
242  * This identifies the device type and carries type-specific
243  * information, equivalent to the kobj_type of a kobject.
244  * If "name" is specified, the uevent will contain it in
245  * the DEVTYPE variable.
246  */
247 struct device_type {
248         const char *name;
249         struct attribute_group **groups;
250         int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
251         void (*release)(struct device *dev);
252         int (*suspend)(struct device *dev, pm_message_t state);
253         int (*resume)(struct device *dev);
254 };
255
256 /* interface for exporting device attributes */
257 struct device_attribute {
258         struct attribute        attr;
259         ssize_t (*show)(struct device *dev, struct device_attribute *attr,
260                         char *buf);
261         ssize_t (*store)(struct device *dev, struct device_attribute *attr,
262                          const char *buf, size_t count);
263 };
264
265 #define DEVICE_ATTR(_name, _mode, _show, _store) \
266 struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
267
268 extern int __must_check device_create_file(struct device *device,
269                                            struct device_attribute *entry);
270 extern void device_remove_file(struct device *dev,
271                                struct device_attribute *attr);
272 extern int __must_check device_create_bin_file(struct device *dev,
273                                                struct bin_attribute *attr);
274 extern void device_remove_bin_file(struct device *dev,
275                                    struct bin_attribute *attr);
276 extern int device_schedule_callback_owner(struct device *dev,
277                 void (*func)(struct device *dev), struct module *owner);
278
279 /* This is a macro to avoid include problems with THIS_MODULE */
280 #define device_schedule_callback(dev, func)                     \
281         device_schedule_callback_owner(dev, func, THIS_MODULE)
282
283 /* device resource management */
284 typedef void (*dr_release_t)(struct device *dev, void *res);
285 typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data);
286
287 #ifdef CONFIG_DEBUG_DEVRES
288 extern void *__devres_alloc(dr_release_t release, size_t size, gfp_t gfp,
289                              const char *name);
290 #define devres_alloc(release, size, gfp) \
291         __devres_alloc(release, size, gfp, #release)
292 #else
293 extern void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
294 #endif
295 extern void devres_free(void *res);
296 extern void devres_add(struct device *dev, void *res);
297 extern void *devres_find(struct device *dev, dr_release_t release,
298                          dr_match_t match, void *match_data);
299 extern void *devres_get(struct device *dev, void *new_res,
300                         dr_match_t match, void *match_data);
301 extern void *devres_remove(struct device *dev, dr_release_t release,
302                            dr_match_t match, void *match_data);
303 extern int devres_destroy(struct device *dev, dr_release_t release,
304                           dr_match_t match, void *match_data);
305
306 /* devres group */
307 extern void * __must_check devres_open_group(struct device *dev, void *id,
308                                              gfp_t gfp);
309 extern void devres_close_group(struct device *dev, void *id);
310 extern void devres_remove_group(struct device *dev, void *id);
311 extern int devres_release_group(struct device *dev, void *id);
312
313 /* managed kzalloc/kfree for device drivers, no kmalloc, always use kzalloc */
314 extern void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);
315 extern void devm_kfree(struct device *dev, void *p);
316
317 struct device_dma_parameters {
318         /*
319          * a low level driver may set these to teach IOMMU code about
320          * sg limitations.
321          */
322         unsigned int max_segment_size;
323         unsigned long segment_boundary_mask;
324 };
325
326 struct device {
327         struct klist            klist_children;
328         struct klist_node       knode_parent;   /* node in sibling list */
329         struct klist_node       knode_driver;
330         struct klist_node       knode_bus;
331         struct device           *parent;
332
333         struct kobject kobj;
334         char    bus_id[BUS_ID_SIZE];    /* position on parent bus */
335         struct device_type      *type;
336         unsigned                uevent_suppress:1;
337
338         struct semaphore        sem;    /* semaphore to synchronize calls to
339                                          * its driver.
340                                          */
341
342         struct bus_type *bus;           /* type of bus device is on */
343         struct device_driver *driver;   /* which driver has allocated this
344                                            device */
345         void            *driver_data;   /* data private to the driver */
346         void            *platform_data; /* Platform specific data, device
347                                            core doesn't touch it */
348         struct dev_pm_info      power;
349
350 #ifdef CONFIG_NUMA
351         int             numa_node;      /* NUMA node this device is close to */
352 #endif
353         u64             *dma_mask;      /* dma mask (if dma'able device) */
354         u64             coherent_dma_mask;/* Like dma_mask, but for
355                                              alloc_coherent mappings as
356                                              not all hardware supports
357                                              64 bit addresses for consistent
358                                              allocations such descriptors. */
359
360         struct device_dma_parameters *dma_parms;
361
362         struct list_head        dma_pools;      /* dma pools (if dma'ble) */
363
364         struct dma_coherent_mem *dma_mem; /* internal for coherent mem
365                                              override */
366         /* arch specific additions */
367         struct dev_archdata     archdata;
368
369         spinlock_t              devres_lock;
370         struct list_head        devres_head;
371
372         struct list_head        node;
373         struct class            *class;
374         dev_t                   devt;   /* dev_t, creates the sysfs "dev" */
375         struct attribute_group  **groups;       /* optional groups */
376
377         void    (*release)(struct device *dev);
378 };
379
380 /* Get the wakeup routines, which depend on struct device */
381 #include <linux/pm_wakeup.h>
382
383 #ifdef CONFIG_NUMA
384 static inline int dev_to_node(struct device *dev)
385 {
386         return dev->numa_node;
387 }
388 static inline void set_dev_node(struct device *dev, int node)
389 {
390         dev->numa_node = node;
391 }
392 #else
393 static inline int dev_to_node(struct device *dev)
394 {
395         return -1;
396 }
397 static inline void set_dev_node(struct device *dev, int node)
398 {
399 }
400 #endif
401
402 static inline void *dev_get_drvdata(struct device *dev)
403 {
404         return dev->driver_data;
405 }
406
407 static inline void dev_set_drvdata(struct device *dev, void *data)
408 {
409         dev->driver_data = data;
410 }
411
412 static inline int device_is_registered(struct device *dev)
413 {
414         return dev->kobj.state_in_sysfs;
415 }
416
417 void driver_init(void);
418
419 /*
420  * High level routines for use by the bus drivers
421  */
422 extern int __must_check device_register(struct device *dev);
423 extern void device_unregister(struct device *dev);
424 extern void device_initialize(struct device *dev);
425 extern int __must_check device_add(struct device *dev);
426 extern void device_del(struct device *dev);
427 extern int device_for_each_child(struct device *dev, void *data,
428                      int (*fn)(struct device *dev, void *data));
429 extern struct device *device_find_child(struct device *dev, void *data,
430                                 int (*match)(struct device *dev, void *data));
431 extern int device_rename(struct device *dev, char *new_name);
432 extern int device_move(struct device *dev, struct device *new_parent);
433
434 /*
435  * Manual binding of a device to driver. See drivers/base/bus.c
436  * for information on use.
437  */
438 extern int __must_check device_bind_driver(struct device *dev);
439 extern void device_release_driver(struct device *dev);
440 extern int  __must_check device_attach(struct device *dev);
441 extern int __must_check driver_attach(struct device_driver *drv);
442 extern int __must_check device_reprobe(struct device *dev);
443
444 /*
445  * Easy functions for dynamically creating devices on the fly
446  */
447 extern struct device *device_create(struct class *cls, struct device *parent,
448                                     dev_t devt, const char *fmt, ...)
449                                     __attribute__((format(printf, 4, 5)));
450 extern void device_destroy(struct class *cls, dev_t devt);
451
452 /*
453  * Platform "fixup" functions - allow the platform to have their say
454  * about devices and actions that the general device layer doesn't
455  * know about.
456  */
457 /* Notify platform of device discovery */
458 extern int (*platform_notify)(struct device *dev);
459
460 extern int (*platform_notify_remove)(struct device *dev);
461
462
463 /**
464  * get_device - atomically increment the reference count for the device.
465  *
466  */
467 extern struct device *get_device(struct device *dev);
468 extern void put_device(struct device *dev);
469
470
471 /* drivers/base/power/shutdown.c */
472 extern void device_shutdown(void);
473
474 /* drivers/base/sys.c */
475 extern void sysdev_shutdown(void);
476
477 /* debugging and troubleshooting/diagnostic helpers. */
478 extern const char *dev_driver_string(struct device *dev);
479 #define dev_printk(level, dev, format, arg...)  \
480         printk(level "%s %s: " format , dev_driver_string(dev) , \
481                (dev)->bus_id , ## arg)
482
483 #define dev_emerg(dev, format, arg...)          \
484         dev_printk(KERN_EMERG , dev , format , ## arg)
485 #define dev_alert(dev, format, arg...)          \
486         dev_printk(KERN_ALERT , dev , format , ## arg)
487 #define dev_crit(dev, format, arg...)           \
488         dev_printk(KERN_CRIT , dev , format , ## arg)
489 #define dev_err(dev, format, arg...)            \
490         dev_printk(KERN_ERR , dev , format , ## arg)
491 #define dev_warn(dev, format, arg...)           \
492         dev_printk(KERN_WARNING , dev , format , ## arg)
493 #define dev_notice(dev, format, arg...)         \
494         dev_printk(KERN_NOTICE , dev , format , ## arg)
495 #define dev_info(dev, format, arg...)           \
496         dev_printk(KERN_INFO , dev , format , ## arg)
497
498 #ifdef DEBUG
499 #define dev_dbg(dev, format, arg...)            \
500         dev_printk(KERN_DEBUG , dev , format , ## arg)
501 #else
502 #define dev_dbg(dev, format, arg...)            \
503         ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
504 #endif
505
506 #ifdef VERBOSE_DEBUG
507 #define dev_vdbg        dev_dbg
508 #else
509
510 #define dev_vdbg(dev, format, arg...)           \
511         ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
512 #endif
513
514 /* Create alias, so I can be autoloaded. */
515 #define MODULE_ALIAS_CHARDEV(major,minor) \
516         MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
517 #define MODULE_ALIAS_CHARDEV_MAJOR(major) \
518         MODULE_ALIAS("char-major-" __stringify(major) "-*")
519 #endif /* _DEVICE_H_ */