]> bbs.cooldavid.org Git - net-next-2.6.git/blame - include/linux/device.h
driver core: firmware_class: replace kfree(dev) with put_device(dev)
[net-next-2.6.git] / include / linux / device.h
CommitLineData
1da177e4
LT
1/*
2 * device.h - generic, centralized driver model
3 *
4 * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org>
89790fd7 5 * Copyright (c) 2004-2007 Greg Kroah-Hartman <gregkh@suse.de>
1da177e4
LT
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
1da177e4
LT
15#include <linux/ioport.h>
16#include <linux/kobject.h>
465c7a3a 17#include <linux/klist.h>
1da177e4 18#include <linux/list.h>
d2a3b914 19#include <linux/lockdep.h>
4a7fb636 20#include <linux/compiler.h>
1da177e4
LT
21#include <linux/types.h>
22#include <linux/module.h>
23#include <linux/pm.h>
6188e10d 24#include <linux/semaphore.h>
1da177e4 25#include <asm/atomic.h>
c6dbaef2 26#include <asm/device.h>
1da177e4 27
aab0de24 28#define BUS_ID_SIZE 20
1da177e4 29
1da177e4 30struct device;
fb069a5d 31struct device_private;
1da177e4 32struct device_driver;
e5dd1278 33struct driver_private;
1da177e4 34struct class;
7c71448b 35struct class_private;
b8c5cec2 36struct bus_type;
c6f7e72a 37struct bus_type_private;
b8c5cec2
KS
38
39struct bus_attribute {
40 struct attribute attr;
d462943a
GKH
41 ssize_t (*show)(struct bus_type *bus, char *buf);
42 ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count);
b8c5cec2
KS
43};
44
d462943a
GKH
45#define BUS_ATTR(_name, _mode, _show, _store) \
46struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
b8c5cec2
KS
47
48extern int __must_check bus_create_file(struct bus_type *,
49 struct bus_attribute *);
50extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
1da177e4
LT
51
52struct bus_type {
d462943a
GKH
53 const char *name;
54 struct bus_attribute *bus_attrs;
55 struct device_attribute *dev_attrs;
56 struct driver_attribute *drv_attrs;
57
58 int (*match)(struct device *dev, struct device_driver *drv);
59 int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
60 int (*probe)(struct device *dev);
61 int (*remove)(struct device *dev);
62 void (*shutdown)(struct device *dev);
63
64 int (*suspend)(struct device *dev, pm_message_t state);
d462943a 65 int (*resume)(struct device *dev);
b8c5cec2 66
adf09493 67 struct dev_pm_ops *pm;
1eede070 68
c6f7e72a 69 struct bus_type_private *p;
1da177e4
LT
70};
71
d462943a
GKH
72extern int __must_check bus_register(struct bus_type *bus);
73extern void bus_unregister(struct bus_type *bus);
1da177e4 74
d462943a 75extern int __must_check bus_rescan_devices(struct bus_type *bus);
1da177e4 76
1da177e4
LT
77/* iterator helpers for buses */
78
d462943a
GKH
79int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
80 int (*fn)(struct device *dev, void *data));
81struct device *bus_find_device(struct bus_type *bus, struct device *start,
82 void *data,
83 int (*match)(struct device *dev, void *data));
1f9ffc04
GKH
84struct device *bus_find_device_by_name(struct bus_type *bus,
85 struct device *start,
86 const char *name);
1da177e4 87
4a7fb636 88int __must_check bus_for_each_drv(struct bus_type *bus,
d462943a
GKH
89 struct device_driver *start, void *data,
90 int (*fn)(struct device_driver *, void *));
1da177e4 91
99178b03
GKH
92void bus_sort_breadthfirst(struct bus_type *bus,
93 int (*compare)(const struct device *a,
94 const struct device *b));
116af378
BH
95/*
96 * Bus notifiers: Get notified of addition/removal of devices
97 * and binding/unbinding of drivers to devices.
98 * In the long run, it should be a replacement for the platform
99 * notify hooks.
100 */
101struct notifier_block;
102
103extern int bus_register_notifier(struct bus_type *bus,
104 struct notifier_block *nb);
105extern int bus_unregister_notifier(struct bus_type *bus,
106 struct notifier_block *nb);
107
108/* All 4 notifers below get called with the target struct device *
109 * as an argument. Note that those functions are likely to be called
110 * with the device semaphore held in the core, so be careful.
111 */
112#define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */
113#define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */
114#define BUS_NOTIFY_BOUND_DRIVER 0x00000003 /* driver bound to device */
115#define BUS_NOTIFY_UNBIND_DRIVER 0x00000004 /* driver about to be
116 unbound */
117
0fed80f7 118extern struct kset *bus_get_kset(struct bus_type *bus);
b249072e 119extern struct klist *bus_get_device_klist(struct bus_type *bus);
0fed80f7 120
1da177e4 121struct device_driver {
e5dd1278
GKH
122 const char *name;
123 struct bus_type *bus;
1da177e4 124
e5dd1278
GKH
125 struct module *owner;
126 const char *mod_name; /* used for built-in modules */
1da177e4 127
d462943a
GKH
128 int (*probe) (struct device *dev);
129 int (*remove) (struct device *dev);
130 void (*shutdown) (struct device *dev);
131 int (*suspend) (struct device *dev, pm_message_t state);
132 int (*resume) (struct device *dev);
57c74534 133 struct attribute_group **groups;
e5dd1278 134
adf09493 135 struct dev_pm_ops *pm;
1eede070 136
e5dd1278 137 struct driver_private *p;
1da177e4
LT
138};
139
140
d462943a
GKH
141extern int __must_check driver_register(struct device_driver *drv);
142extern void driver_unregister(struct device_driver *drv);
1da177e4 143
d462943a
GKH
144extern struct device_driver *get_driver(struct device_driver *drv);
145extern void put_driver(struct device_driver *drv);
146extern struct device_driver *driver_find(const char *name,
147 struct bus_type *bus);
d779249e 148extern int driver_probe_done(void);
b23530eb 149extern void wait_for_device_probe(void);
216773a7 150
1da177e4 151
405ae7d3 152/* sysfs interface for exporting driver attributes */
1da177e4
LT
153
154struct driver_attribute {
d462943a
GKH
155 struct attribute attr;
156 ssize_t (*show)(struct device_driver *driver, char *buf);
157 ssize_t (*store)(struct device_driver *driver, const char *buf,
158 size_t count);
1da177e4
LT
159};
160
d462943a
GKH
161#define DRIVER_ATTR(_name, _mode, _show, _store) \
162struct driver_attribute driver_attr_##_name = \
163 __ATTR(_name, _mode, _show, _store)
1da177e4 164
d462943a
GKH
165extern int __must_check driver_create_file(struct device_driver *driver,
166 struct driver_attribute *attr);
167extern void driver_remove_file(struct device_driver *driver,
168 struct driver_attribute *attr);
1da177e4 169
cbe9c595
GKH
170extern int __must_check driver_add_kobj(struct device_driver *drv,
171 struct kobject *kobj,
172 const char *fmt, ...);
173
d462943a
GKH
174extern int __must_check driver_for_each_device(struct device_driver *drv,
175 struct device *start,
176 void *data,
177 int (*fn)(struct device *dev,
178 void *));
179struct device *driver_find_device(struct device_driver *drv,
180 struct device *start, void *data,
181 int (*match)(struct device *dev, void *data));
fae3cd00 182
1da177e4
LT
183/*
184 * device classes
185 */
186struct class {
d462943a
GKH
187 const char *name;
188 struct module *owner;
1da177e4 189
d462943a 190 struct class_attribute *class_attrs;
d462943a 191 struct device_attribute *dev_attrs;
e105b8bf 192 struct kobject *dev_kobj;
1da177e4 193
d462943a 194 int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
1da177e4 195
d462943a
GKH
196 void (*class_release)(struct class *class);
197 void (*dev_release)(struct device *dev);
7c8265f5 198
d462943a
GKH
199 int (*suspend)(struct device *dev, pm_message_t state);
200 int (*resume)(struct device *dev);
1eede070 201
adf09493 202 struct dev_pm_ops *pm;
7c71448b 203 struct class_private *p;
1da177e4
LT
204};
205
5a3ceb86
TH
206struct class_dev_iter {
207 struct klist_iter ki;
208 const struct device_type *type;
209};
210
e105b8bf
DW
211extern struct kobject *sysfs_dev_block_kobj;
212extern struct kobject *sysfs_dev_char_kobj;
d2a3b914
MW
213extern int __must_check __class_register(struct class *class,
214 struct lock_class_key *key);
d462943a 215extern void class_unregister(struct class *class);
d2a3b914
MW
216
217/* This is a #define to keep the compiler from merging different
218 * instances of the __key variable */
219#define class_register(class) \
220({ \
221 static struct lock_class_key __key; \
222 __class_register(class, &__key); \
223})
224
5a3ceb86
TH
225extern void class_dev_iter_init(struct class_dev_iter *iter,
226 struct class *class,
227 struct device *start,
228 const struct device_type *type);
229extern struct device *class_dev_iter_next(struct class_dev_iter *iter);
230extern void class_dev_iter_exit(struct class_dev_iter *iter);
231
93562b53
GKH
232extern int class_for_each_device(struct class *class, struct device *start,
233 void *data,
fd04897b 234 int (*fn)(struct device *dev, void *data));
695794ae
GKH
235extern struct device *class_find_device(struct class *class,
236 struct device *start, void *data,
fd04897b 237 int (*match)(struct device *, void *));
1da177e4
LT
238
239struct class_attribute {
d462943a
GKH
240 struct attribute attr;
241 ssize_t (*show)(struct class *class, char *buf);
242 ssize_t (*store)(struct class *class, const char *buf, size_t count);
1da177e4
LT
243};
244
d462943a
GKH
245#define CLASS_ATTR(_name, _mode, _show, _store) \
246struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
1da177e4 247
d462943a
GKH
248extern int __must_check class_create_file(struct class *class,
249 const struct class_attribute *attr);
250extern void class_remove_file(struct class *class,
251 const struct class_attribute *attr);
1da177e4 252
1da177e4
LT
253struct class_interface {
254 struct list_head node;
255 struct class *class;
256
c47ed219
GKH
257 int (*add_dev) (struct device *, struct class_interface *);
258 void (*remove_dev) (struct device *, struct class_interface *);
1da177e4
LT
259};
260
4a7fb636 261extern int __must_check class_interface_register(struct class_interface *);
1da177e4
LT
262extern void class_interface_unregister(struct class_interface *);
263
d2a3b914
MW
264extern struct class * __must_check __class_create(struct module *owner,
265 const char *name,
266 struct lock_class_key *key);
e9ba6365 267extern void class_destroy(struct class *cls);
e9ba6365 268
d2a3b914
MW
269/* This is a #define to keep the compiler from merging different
270 * instances of the __key variable */
271#define class_create(owner, name) \
272({ \
273 static struct lock_class_key __key; \
274 __class_create(owner, name, &__key); \
275})
276
414264f9
KS
277/*
278 * The type of device, "struct device" is embedded in. A class
279 * or bus can contain devices of different types
280 * like "partitions" and "disks", "mouse" and "event".
281 * This identifies the device type and carries type-specific
282 * information, equivalent to the kobj_type of a kobject.
283 * If "name" is specified, the uevent will contain it in
284 * the DEVTYPE variable.
285 */
f9f852df 286struct device_type {
414264f9 287 const char *name;
621a1672 288 struct attribute_group **groups;
7eff2e7a 289 int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
f9f852df 290 void (*release)(struct device *dev);
1eede070 291
adf09493 292 struct dev_pm_ops *pm;
f9f852df
KS
293};
294
a7fd6706
KS
295/* interface for exporting device attributes */
296struct device_attribute {
297 struct attribute attr;
298 ssize_t (*show)(struct device *dev, struct device_attribute *attr,
299 char *buf);
300 ssize_t (*store)(struct device *dev, struct device_attribute *attr,
301 const char *buf, size_t count);
302};
303
d462943a
GKH
304#define DEVICE_ATTR(_name, _mode, _show, _store) \
305struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
a7fd6706 306
4a7fb636 307extern int __must_check device_create_file(struct device *device,
d462943a
GKH
308 struct device_attribute *entry);
309extern void device_remove_file(struct device *dev,
310 struct device_attribute *attr);
2589f188
GKH
311extern int __must_check device_create_bin_file(struct device *dev,
312 struct bin_attribute *attr);
313extern void device_remove_bin_file(struct device *dev,
314 struct bin_attribute *attr);
523ded71 315extern int device_schedule_callback_owner(struct device *dev,
d462943a 316 void (*func)(struct device *dev), struct module *owner);
523ded71
AS
317
318/* This is a macro to avoid include problems with THIS_MODULE */
319#define device_schedule_callback(dev, func) \
320 device_schedule_callback_owner(dev, func, THIS_MODULE)
9ac7849e
TH
321
322/* device resource management */
323typedef void (*dr_release_t)(struct device *dev, void *res);
324typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data);
325
326#ifdef CONFIG_DEBUG_DEVRES
d462943a 327extern void *__devres_alloc(dr_release_t release, size_t size, gfp_t gfp,
9ac7849e
TH
328 const char *name);
329#define devres_alloc(release, size, gfp) \
330 __devres_alloc(release, size, gfp, #release)
331#else
d462943a 332extern void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
9ac7849e
TH
333#endif
334extern void devres_free(void *res);
335extern void devres_add(struct device *dev, void *res);
d462943a 336extern void *devres_find(struct device *dev, dr_release_t release,
9ac7849e 337 dr_match_t match, void *match_data);
d462943a
GKH
338extern void *devres_get(struct device *dev, void *new_res,
339 dr_match_t match, void *match_data);
340extern void *devres_remove(struct device *dev, dr_release_t release,
341 dr_match_t match, void *match_data);
9ac7849e
TH
342extern int devres_destroy(struct device *dev, dr_release_t release,
343 dr_match_t match, void *match_data);
344
345/* devres group */
346extern void * __must_check devres_open_group(struct device *dev, void *id,
347 gfp_t gfp);
348extern void devres_close_group(struct device *dev, void *id);
349extern void devres_remove_group(struct device *dev, void *id);
350extern int devres_release_group(struct device *dev, void *id);
351
352/* managed kzalloc/kfree for device drivers, no kmalloc, always use kzalloc */
353extern void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);
354extern void devm_kfree(struct device *dev, void *p);
355
6b7b6510
FT
356struct device_dma_parameters {
357 /*
358 * a low level driver may set these to teach IOMMU code about
359 * sg limitations.
360 */
361 unsigned int max_segment_size;
362 unsigned long segment_boundary_mask;
363};
364
1da177e4 365struct device {
49a4ec18 366 struct device *parent;
1da177e4 367
fb069a5d
GKH
368 struct device_private *p;
369
1da177e4 370 struct kobject kobj;
c906a48a 371 const char *init_name; /* initial name of the device */
f9f852df 372 struct device_type *type;
1da177e4 373
af70316a
PM
374 struct semaphore sem; /* semaphore to synchronize calls to
375 * its driver.
376 */
377
d462943a 378 struct bus_type *bus; /* type of bus device is on */
1da177e4
LT
379 struct device_driver *driver; /* which driver has allocated this
380 device */
381 void *driver_data; /* data private to the driver */
e67c8562
GKH
382 void *platform_data; /* Platform specific data, device
383 core doesn't touch it */
1da177e4
LT
384 struct dev_pm_info power;
385
87348136
CH
386#ifdef CONFIG_NUMA
387 int numa_node; /* NUMA node this device is close to */
388#endif
1da177e4
LT
389 u64 *dma_mask; /* dma mask (if dma'able device) */
390 u64 coherent_dma_mask;/* Like dma_mask, but for
391 alloc_coherent mappings as
392 not all hardware supports
393 64 bit addresses for consistent
394 allocations such descriptors. */
395
6b7b6510
FT
396 struct device_dma_parameters *dma_parms;
397
1da177e4
LT
398 struct list_head dma_pools; /* dma pools (if dma'ble) */
399
400 struct dma_coherent_mem *dma_mem; /* internal for coherent mem
401 override */
c6dbaef2
BH
402 /* arch specific additions */
403 struct dev_archdata archdata;
1da177e4 404
929d2fa5
MW
405 dev_t devt; /* dev_t, creates the sysfs "dev" */
406
9ac7849e
TH
407 spinlock_t devres_lock;
408 struct list_head devres_head;
409
5a3ceb86 410 struct klist_node knode_class;
b7a3e813 411 struct class *class;
de0ff00d 412 struct attribute_group **groups; /* optional groups */
23681e47 413
d462943a 414 void (*release)(struct device *dev);
1da177e4
LT
415};
416
9a3df1f7
AS
417/* Get the wakeup routines, which depend on struct device */
418#include <linux/pm_wakeup.h>
419
bf9ca69f 420static inline const char *dev_name(const struct device *dev)
06916639 421{
1fa5ae85 422 return kobject_name(&dev->kobj);
06916639
KS
423}
424
413c239f
SR
425extern int dev_set_name(struct device *dev, const char *name, ...)
426 __attribute__((format(printf, 2, 3)));
427
87348136
CH
428#ifdef CONFIG_NUMA
429static inline int dev_to_node(struct device *dev)
430{
431 return dev->numa_node;
432}
433static inline void set_dev_node(struct device *dev, int node)
434{
435 dev->numa_node = node;
436}
437#else
438static inline int dev_to_node(struct device *dev)
439{
440 return -1;
441}
442static inline void set_dev_node(struct device *dev, int node)
443{
444}
445#endif
446
7d1d8999 447static inline void *dev_get_drvdata(const struct device *dev)
1da177e4
LT
448{
449 return dev->driver_data;
450}
451
d462943a 452static inline void dev_set_drvdata(struct device *dev, void *data)
1da177e4
LT
453{
454 dev->driver_data = data;
455}
456
f67f129e
ML
457static inline unsigned int dev_get_uevent_suppress(const struct device *dev)
458{
459 return dev->kobj.uevent_suppress;
460}
461
462static inline void dev_set_uevent_suppress(struct device *dev, int val)
463{
464 dev->kobj.uevent_suppress = val;
465}
466
d305ef5d
DR
467static inline int device_is_registered(struct device *dev)
468{
3f62e570 469 return dev->kobj.state_in_sysfs;
d305ef5d
DR
470}
471
1f21782e
AB
472void driver_init(void);
473
1da177e4
LT
474/*
475 * High level routines for use by the bus drivers
476 */
d462943a
GKH
477extern int __must_check device_register(struct device *dev);
478extern void device_unregister(struct device *dev);
479extern void device_initialize(struct device *dev);
480extern int __must_check device_add(struct device *dev);
481extern void device_del(struct device *dev);
482extern int device_for_each_child(struct device *dev, void *data,
483 int (*fn)(struct device *dev, void *data));
484extern struct device *device_find_child(struct device *dev, void *data,
485 int (*match)(struct device *dev, void *data));
a2de48ca 486extern int device_rename(struct device *dev, char *new_name);
ffa6a705
CH
487extern int device_move(struct device *dev, struct device *new_parent,
488 enum dpm_order dpm_order);
1da177e4 489
0aa0dc41
MM
490/*
491 * Root device objects for grouping under /sys/devices
492 */
493extern struct device *__root_device_register(const char *name,
494 struct module *owner);
495static inline struct device *root_device_register(const char *name)
496{
497 return __root_device_register(name, THIS_MODULE);
498}
499extern void root_device_unregister(struct device *root);
500
1da177e4
LT
501/*
502 * Manual binding of a device to driver. See drivers/base/bus.c
503 * for information on use.
504 */
f86db396 505extern int __must_check device_bind_driver(struct device *dev);
d462943a
GKH
506extern void device_release_driver(struct device *dev);
507extern int __must_check device_attach(struct device *dev);
f86db396
AM
508extern int __must_check driver_attach(struct device_driver *drv);
509extern int __must_check device_reprobe(struct device *dev);
1da177e4 510
23681e47
GKH
511/*
512 * Easy functions for dynamically creating devices on the fly
513 */
8882b394
GKH
514extern struct device *device_create_vargs(struct class *cls,
515 struct device *parent,
516 dev_t devt,
517 void *drvdata,
518 const char *fmt,
519 va_list vargs);
4e106739
GKH
520extern struct device *device_create(struct class *cls, struct device *parent,
521 dev_t devt, void *drvdata,
522 const char *fmt, ...)
8882b394 523 __attribute__((format(printf, 5, 6)));
23681e47 524extern void device_destroy(struct class *cls, dev_t devt);
1da177e4 525
1da177e4
LT
526/*
527 * Platform "fixup" functions - allow the platform to have their say
528 * about devices and actions that the general device layer doesn't
529 * know about.
530 */
531/* Notify platform of device discovery */
d462943a 532extern int (*platform_notify)(struct device *dev);
1da177e4 533
d462943a 534extern int (*platform_notify_remove)(struct device *dev);
1da177e4
LT
535
536
537/**
538 * get_device - atomically increment the reference count for the device.
539 *
540 */
d462943a
GKH
541extern struct device *get_device(struct device *dev);
542extern void put_device(struct device *dev);
1da177e4 543
d4d5291c 544extern void wait_for_device_probe(void);
1da177e4 545
116f232b 546/* drivers/base/power/shutdown.c */
1da177e4
LT
547extern void device_shutdown(void);
548
58b3b71d
RW
549/* drivers/base/sys.c */
550extern void sysdev_shutdown(void);
551
1da177e4 552/* debugging and troubleshooting/diagnostic helpers. */
bf9ca69f 553extern const char *dev_driver_string(const struct device *dev);
1da177e4 554#define dev_printk(level, dev, format, arg...) \
d462943a 555 printk(level "%s %s: " format , dev_driver_string(dev) , \
06916639 556 dev_name(dev) , ## arg)
1da177e4 557
7b8712e5
EM
558#define dev_emerg(dev, format, arg...) \
559 dev_printk(KERN_EMERG , dev , format , ## arg)
560#define dev_alert(dev, format, arg...) \
561 dev_printk(KERN_ALERT , dev , format , ## arg)
562#define dev_crit(dev, format, arg...) \
563 dev_printk(KERN_CRIT , dev , format , ## arg)
564#define dev_err(dev, format, arg...) \
565 dev_printk(KERN_ERR , dev , format , ## arg)
566#define dev_warn(dev, format, arg...) \
567 dev_printk(KERN_WARNING , dev , format , ## arg)
568#define dev_notice(dev, format, arg...) \
569 dev_printk(KERN_NOTICE , dev , format , ## arg)
570#define dev_info(dev, format, arg...) \
571 dev_printk(KERN_INFO , dev , format , ## arg)
572
d0d85ff9
CH
573#if defined(DEBUG)
574#define dev_dbg(dev, format, arg...) \
575 dev_printk(KERN_DEBUG , dev , format , ## arg)
e9d376f0 576#elif defined(CONFIG_DYNAMIC_DEBUG)
346e15be
JB
577#define dev_dbg(dev, format, ...) do { \
578 dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
579 } while (0)
1da177e4 580#else
1429db83
JP
581#define dev_dbg(dev, format, arg...) \
582 ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
1da177e4
LT
583#endif
584
aebdc3b4
DB
585#ifdef VERBOSE_DEBUG
586#define dev_vdbg dev_dbg
587#else
1429db83
JP
588
589#define dev_vdbg(dev, format, arg...) \
590 ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
aebdc3b4
DB
591#endif
592
e6139662
AV
593/*
594 * dev_WARN() acts like dev_printk(), but with the key difference
595 * of using a WARN/WARN_ON to get the message out, including the
596 * file/line information and a backtrace.
597 */
598#define dev_WARN(dev, format, arg...) \
599 WARN(1, "Device: %s\n" format, dev_driver_string(dev), ## arg);
600
1da177e4
LT
601/* Create alias, so I can be autoloaded. */
602#define MODULE_ALIAS_CHARDEV(major,minor) \
603 MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
604#define MODULE_ALIAS_CHARDEV_MAJOR(major) \
605 MODULE_ALIAS("char-major-" __stringify(major) "-*")
606#endif /* _DEVICE_H_ */