]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - include/linux/device.h
driver-core: add dev_name() to help transition away from using bus_id
[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 static inline const char *dev_name(struct device *dev)
384 {
385         /* will be changed into kobject_name(&dev->kobj) in the near future */
386         return dev->bus_id;
387 }
388
389 #ifdef CONFIG_NUMA
390 static inline int dev_to_node(struct device *dev)
391 {
392         return dev->numa_node;
393 }
394 static inline void set_dev_node(struct device *dev, int node)
395 {
396         dev->numa_node = node;
397 }
398 #else
399 static inline int dev_to_node(struct device *dev)
400 {
401         return -1;
402 }
403 static inline void set_dev_node(struct device *dev, int node)
404 {
405 }
406 #endif
407
408 static inline void *dev_get_drvdata(struct device *dev)
409 {
410         return dev->driver_data;
411 }
412
413 static inline void dev_set_drvdata(struct device *dev, void *data)
414 {
415         dev->driver_data = data;
416 }
417
418 static inline int device_is_registered(struct device *dev)
419 {
420         return dev->kobj.state_in_sysfs;
421 }
422
423 void driver_init(void);
424
425 /*
426  * High level routines for use by the bus drivers
427  */
428 extern int __must_check device_register(struct device *dev);
429 extern void device_unregister(struct device *dev);
430 extern void device_initialize(struct device *dev);
431 extern int __must_check device_add(struct device *dev);
432 extern void device_del(struct device *dev);
433 extern int device_for_each_child(struct device *dev, void *data,
434                      int (*fn)(struct device *dev, void *data));
435 extern struct device *device_find_child(struct device *dev, void *data,
436                                 int (*match)(struct device *dev, void *data));
437 extern int device_rename(struct device *dev, char *new_name);
438 extern int device_move(struct device *dev, struct device *new_parent);
439
440 /*
441  * Manual binding of a device to driver. See drivers/base/bus.c
442  * for information on use.
443  */
444 extern int __must_check device_bind_driver(struct device *dev);
445 extern void device_release_driver(struct device *dev);
446 extern int  __must_check device_attach(struct device *dev);
447 extern int __must_check driver_attach(struct device_driver *drv);
448 extern int __must_check device_reprobe(struct device *dev);
449
450 /*
451  * Easy functions for dynamically creating devices on the fly
452  */
453 extern struct device *device_create(struct class *cls, struct device *parent,
454                                     dev_t devt, const char *fmt, ...)
455                                     __attribute__((format(printf, 4, 5)));
456 extern void device_destroy(struct class *cls, dev_t devt);
457
458 /*
459  * Platform "fixup" functions - allow the platform to have their say
460  * about devices and actions that the general device layer doesn't
461  * know about.
462  */
463 /* Notify platform of device discovery */
464 extern int (*platform_notify)(struct device *dev);
465
466 extern int (*platform_notify_remove)(struct device *dev);
467
468
469 /**
470  * get_device - atomically increment the reference count for the device.
471  *
472  */
473 extern struct device *get_device(struct device *dev);
474 extern void put_device(struct device *dev);
475
476
477 /* drivers/base/power/shutdown.c */
478 extern void device_shutdown(void);
479
480 /* drivers/base/sys.c */
481 extern void sysdev_shutdown(void);
482
483 /* debugging and troubleshooting/diagnostic helpers. */
484 extern const char *dev_driver_string(struct device *dev);
485 #define dev_printk(level, dev, format, arg...)  \
486         printk(level "%s %s: " format , dev_driver_string(dev) , \
487                dev_name(dev) , ## arg)
488
489 #define dev_emerg(dev, format, arg...)          \
490         dev_printk(KERN_EMERG , dev , format , ## arg)
491 #define dev_alert(dev, format, arg...)          \
492         dev_printk(KERN_ALERT , dev , format , ## arg)
493 #define dev_crit(dev, format, arg...)           \
494         dev_printk(KERN_CRIT , dev , format , ## arg)
495 #define dev_err(dev, format, arg...)            \
496         dev_printk(KERN_ERR , dev , format , ## arg)
497 #define dev_warn(dev, format, arg...)           \
498         dev_printk(KERN_WARNING , dev , format , ## arg)
499 #define dev_notice(dev, format, arg...)         \
500         dev_printk(KERN_NOTICE , dev , format , ## arg)
501 #define dev_info(dev, format, arg...)           \
502         dev_printk(KERN_INFO , dev , format , ## arg)
503
504 #ifdef DEBUG
505 #define dev_dbg(dev, format, arg...)            \
506         dev_printk(KERN_DEBUG , dev , format , ## arg)
507 #else
508 #define dev_dbg(dev, format, arg...)            \
509         ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
510 #endif
511
512 #ifdef VERBOSE_DEBUG
513 #define dev_vdbg        dev_dbg
514 #else
515
516 #define dev_vdbg(dev, format, arg...)           \
517         ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
518 #endif
519
520 /* Create alias, so I can be autoloaded. */
521 #define MODULE_ALIAS_CHARDEV(major,minor) \
522         MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
523 #define MODULE_ALIAS_CHARDEV_MAJOR(major) \
524         MODULE_ALIAS("char-major-" __stringify(major) "-*")
525 #endif /* _DEVICE_H_ */