1
2
3
4
5
6
7
8
9
10
11
12#ifndef _DEVICE_H_
13#define _DEVICE_H_
14
15#include <linux/dev_printk.h>
16#include <linux/ioport.h>
17#include <linux/kobject.h>
18#include <linux/klist.h>
19#include <linux/list.h>
20#include <linux/lockdep.h>
21#include <linux/compiler.h>
22#include <linux/types.h>
23#include <linux/mutex.h>
24#include <linux/pm.h>
25#include <linux/atomic.h>
26#include <linux/uidgid.h>
27#include <linux/gfp.h>
28#include <linux/overflow.h>
29#include <linux/device/bus.h>
30#include <linux/device/class.h>
31#include <linux/device/driver.h>
32#include <asm/device.h>
33
34struct device;
35struct device_private;
36struct device_driver;
37struct driver_private;
38struct module;
39struct class;
40struct subsys_private;
41struct device_node;
42struct fwnode_handle;
43struct iommu_ops;
44struct iommu_group;
45struct iommu_fwspec;
46struct dev_pin_info;
47struct iommu_param;
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62struct subsys_interface {
63 const char *name;
64 struct bus_type *subsys;
65 struct list_head node;
66 int (*add_dev)(struct device *dev, struct subsys_interface *sif);
67 void (*remove_dev)(struct device *dev, struct subsys_interface *sif);
68};
69
70int subsys_interface_register(struct subsys_interface *sif);
71void subsys_interface_unregister(struct subsys_interface *sif);
72
73int subsys_system_register(struct bus_type *subsys,
74 const struct attribute_group **groups);
75int subsys_virtual_register(struct bus_type *subsys,
76 const struct attribute_group **groups);
77
78
79
80
81
82
83
84
85
86
87struct device_type {
88 const char *name;
89 const struct attribute_group **groups;
90 int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
91 char *(*devnode)(struct device *dev, umode_t *mode,
92 kuid_t *uid, kgid_t *gid);
93 void (*release)(struct device *dev);
94
95 const struct dev_pm_ops *pm;
96};
97
98
99struct device_attribute {
100 struct attribute attr;
101 ssize_t (*show)(struct device *dev, struct device_attribute *attr,
102 char *buf);
103 ssize_t (*store)(struct device *dev, struct device_attribute *attr,
104 const char *buf, size_t count);
105};
106
107struct dev_ext_attribute {
108 struct device_attribute attr;
109 void *var;
110};
111
112ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr,
113 char *buf);
114ssize_t device_store_ulong(struct device *dev, struct device_attribute *attr,
115 const char *buf, size_t count);
116ssize_t device_show_int(struct device *dev, struct device_attribute *attr,
117 char *buf);
118ssize_t device_store_int(struct device *dev, struct device_attribute *attr,
119 const char *buf, size_t count);
120ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
121 char *buf);
122ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
123 const char *buf, size_t count);
124
125#define DEVICE_ATTR(_name, _mode, _show, _store) \
126 struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
127#define DEVICE_ATTR_PREALLOC(_name, _mode, _show, _store) \
128 struct device_attribute dev_attr_##_name = \
129 __ATTR_PREALLOC(_name, _mode, _show, _store)
130#define DEVICE_ATTR_RW(_name) \
131 struct device_attribute dev_attr_##_name = __ATTR_RW(_name)
132#define DEVICE_ATTR_RO(_name) \
133 struct device_attribute dev_attr_##_name = __ATTR_RO(_name)
134#define DEVICE_ATTR_WO(_name) \
135 struct device_attribute dev_attr_##_name = __ATTR_WO(_name)
136#define DEVICE_ULONG_ATTR(_name, _mode, _var) \
137 struct dev_ext_attribute dev_attr_##_name = \
138 { __ATTR(_name, _mode, device_show_ulong, device_store_ulong), &(_var) }
139#define DEVICE_INT_ATTR(_name, _mode, _var) \
140 struct dev_ext_attribute dev_attr_##_name = \
141 { __ATTR(_name, _mode, device_show_int, device_store_int), &(_var) }
142#define DEVICE_BOOL_ATTR(_name, _mode, _var) \
143 struct dev_ext_attribute dev_attr_##_name = \
144 { __ATTR(_name, _mode, device_show_bool, device_store_bool), &(_var) }
145#define DEVICE_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
146 struct device_attribute dev_attr_##_name = \
147 __ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
148
149extern int device_create_file(struct device *device,
150 const struct device_attribute *entry);
151extern void device_remove_file(struct device *dev,
152 const struct device_attribute *attr);
153extern bool device_remove_file_self(struct device *dev,
154 const struct device_attribute *attr);
155extern int __must_check device_create_bin_file(struct device *dev,
156 const struct bin_attribute *attr);
157extern void device_remove_bin_file(struct device *dev,
158 const struct bin_attribute *attr);
159
160
161typedef void (*dr_release_t)(struct device *dev, void *res);
162typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data);
163
164#ifdef CONFIG_DEBUG_DEVRES
165extern void *__devres_alloc_node(dr_release_t release, size_t size, gfp_t gfp,
166 int nid, const char *name) __malloc;
167#define devres_alloc(release, size, gfp) \
168 __devres_alloc_node(release, size, gfp, NUMA_NO_NODE, #release)
169#define devres_alloc_node(release, size, gfp, nid) \
170 __devres_alloc_node(release, size, gfp, nid, #release)
171#else
172extern void *devres_alloc_node(dr_release_t release, size_t size, gfp_t gfp,
173 int nid) __malloc;
174static inline void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp)
175{
176 return devres_alloc_node(release, size, gfp, NUMA_NO_NODE);
177}
178#endif
179
180extern void devres_for_each_res(struct device *dev, dr_release_t release,
181 dr_match_t match, void *match_data,
182 void (*fn)(struct device *, void *, void *),
183 void *data);
184extern void devres_free(void *res);
185extern void devres_add(struct device *dev, void *res);
186extern void *devres_find(struct device *dev, dr_release_t release,
187 dr_match_t match, void *match_data);
188extern void *devres_get(struct device *dev, void *new_res,
189 dr_match_t match, void *match_data);
190extern void *devres_remove(struct device *dev, dr_release_t release,
191 dr_match_t match, void *match_data);
192extern int devres_destroy(struct device *dev, dr_release_t release,
193 dr_match_t match, void *match_data);
194extern int devres_release(struct device *dev, dr_release_t release,
195 dr_match_t match, void *match_data);
196
197
198extern void * __must_check devres_open_group(struct device *dev, void *id,
199 gfp_t gfp);
200extern void devres_close_group(struct device *dev, void *id);
201extern void devres_remove_group(struct device *dev, void *id);
202extern int devres_release_group(struct device *dev, void *id);
203
204
205extern void *devm_kmalloc(struct device *dev, size_t size, gfp_t gfp) __malloc;
206extern __printf(3, 0)
207char *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt,
208 va_list ap) __malloc;
209extern __printf(3, 4)
210char *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...) __malloc;
211static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
212{
213 return devm_kmalloc(dev, size, gfp | __GFP_ZERO);
214}
215static inline void *devm_kmalloc_array(struct device *dev,
216 size_t n, size_t size, gfp_t flags)
217{
218 size_t bytes;
219
220 if (unlikely(check_mul_overflow(n, size, &bytes)))
221 return NULL;
222
223 return devm_kmalloc(dev, bytes, flags);
224}
225static inline void *devm_kcalloc(struct device *dev,
226 size_t n, size_t size, gfp_t flags)
227{
228 return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
229}
230extern void devm_kfree(struct device *dev, const void *p);
231extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp) __malloc;
232extern const char *devm_kstrdup_const(struct device *dev,
233 const char *s, gfp_t gfp);
234extern void *devm_kmemdup(struct device *dev, const void *src, size_t len,
235 gfp_t gfp);
236
237extern unsigned long devm_get_free_pages(struct device *dev,
238 gfp_t gfp_mask, unsigned int order);
239extern void devm_free_pages(struct device *dev, unsigned long addr);
240
241void __iomem *devm_ioremap_resource(struct device *dev,
242 const struct resource *res);
243void __iomem *devm_ioremap_resource_wc(struct device *dev,
244 const struct resource *res);
245
246void __iomem *devm_of_iomap(struct device *dev,
247 struct device_node *node, int index,
248 resource_size_t *size);
249
250
251int devm_add_action(struct device *dev, void (*action)(void *), void *data);
252void devm_remove_action(struct device *dev, void (*action)(void *), void *data);
253void devm_release_action(struct device *dev, void (*action)(void *), void *data);
254
255static inline int devm_add_action_or_reset(struct device *dev,
256 void (*action)(void *), void *data)
257{
258 int ret;
259
260 ret = devm_add_action(dev, action, data);
261 if (ret)
262 action(data);
263
264 return ret;
265}
266
267
268
269
270
271
272
273
274
275
276
277
278#define devm_alloc_percpu(dev, type) \
279 ((typeof(type) __percpu *)__devm_alloc_percpu((dev), sizeof(type), \
280 __alignof__(type)))
281
282void __percpu *__devm_alloc_percpu(struct device *dev, size_t size,
283 size_t align);
284void devm_free_percpu(struct device *dev, void __percpu *pdata);
285
286struct device_dma_parameters {
287
288
289
290
291 unsigned int max_segment_size;
292 unsigned long segment_boundary_mask;
293};
294
295
296
297
298
299
300
301
302
303
304
305
306struct device_connection {
307 struct fwnode_handle *fwnode;
308 const char *endpoint[2];
309 const char *id;
310 struct list_head list;
311};
312
313typedef void *(*devcon_match_fn_t)(struct device_connection *con, int ep,
314 void *data);
315
316void *fwnode_connection_find_match(struct fwnode_handle *fwnode,
317 const char *con_id, void *data,
318 devcon_match_fn_t match);
319void *device_connection_find_match(struct device *dev, const char *con_id,
320 void *data, devcon_match_fn_t match);
321
322struct device *device_connection_find(struct device *dev, const char *con_id);
323
324void device_connection_add(struct device_connection *con);
325void device_connection_remove(struct device_connection *con);
326
327
328
329
330
331static inline void device_connections_add(struct device_connection *cons)
332{
333 struct device_connection *c;
334
335 for (c = cons; c->endpoint[0]; c++)
336 device_connection_add(c);
337}
338
339
340
341
342
343static inline void device_connections_remove(struct device_connection *cons)
344{
345 struct device_connection *c;
346
347 for (c = cons; c->endpoint[0]; c++)
348 device_connection_remove(c);
349}
350
351
352
353
354
355
356
357
358
359
360enum device_link_state {
361 DL_STATE_NONE = -1,
362 DL_STATE_DORMANT = 0,
363 DL_STATE_AVAILABLE,
364 DL_STATE_CONSUMER_PROBE,
365 DL_STATE_ACTIVE,
366 DL_STATE_SUPPLIER_UNBIND,
367};
368
369
370
371
372
373
374
375
376
377
378
379
380
381#define DL_FLAG_STATELESS BIT(0)
382#define DL_FLAG_AUTOREMOVE_CONSUMER BIT(1)
383#define DL_FLAG_PM_RUNTIME BIT(2)
384#define DL_FLAG_RPM_ACTIVE BIT(3)
385#define DL_FLAG_AUTOREMOVE_SUPPLIER BIT(4)
386#define DL_FLAG_AUTOPROBE_CONSUMER BIT(5)
387#define DL_FLAG_MANAGED BIT(6)
388#define DL_FLAG_SYNC_STATE_ONLY BIT(7)
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403struct device_link {
404 struct device *supplier;
405 struct list_head s_node;
406 struct device *consumer;
407 struct list_head c_node;
408 enum device_link_state status;
409 u32 flags;
410 refcount_t rpm_active;
411 struct kref kref;
412#ifdef CONFIG_SRCU
413 struct rcu_head rcu_head;
414#endif
415 bool supplier_preactivated;
416};
417
418
419
420
421
422
423
424
425enum dl_dev_state {
426 DL_DEV_NO_DRIVER = 0,
427 DL_DEV_PROBING,
428 DL_DEV_DRIVER_BOUND,
429 DL_DEV_UNBINDING,
430};
431
432
433
434
435
436
437
438
439
440
441
442struct dev_links_info {
443 struct list_head suppliers;
444 struct list_head consumers;
445 struct list_head needs_suppliers;
446 struct list_head defer_sync;
447 bool need_for_probe;
448 enum dl_dev_state status;
449};
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537struct device {
538 struct kobject kobj;
539 struct device *parent;
540
541 struct device_private *p;
542
543 const char *init_name;
544 const struct device_type *type;
545
546 struct bus_type *bus;
547 struct device_driver *driver;
548
549 void *platform_data;
550
551 void *driver_data;
552
553#ifdef CONFIG_PROVE_LOCKING
554 struct mutex lockdep_mutex;
555#endif
556 struct mutex mutex;
557
558
559
560 struct dev_links_info links;
561 struct dev_pm_info power;
562 struct dev_pm_domain *pm_domain;
563
564#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN
565 struct irq_domain *msi_domain;
566#endif
567#ifdef CONFIG_PINCTRL
568 struct dev_pin_info *pins;
569#endif
570#ifdef CONFIG_GENERIC_MSI_IRQ
571 struct list_head msi_list;
572#endif
573
574 const struct dma_map_ops *dma_ops;
575 u64 *dma_mask;
576 u64 coherent_dma_mask;
577
578
579
580
581 u64 bus_dma_limit;
582 unsigned long dma_pfn_offset;
583
584 struct device_dma_parameters *dma_parms;
585
586 struct list_head dma_pools;
587
588#ifdef CONFIG_DMA_DECLARE_COHERENT
589 struct dma_coherent_mem *dma_mem;
590
591#endif
592#ifdef CONFIG_DMA_CMA
593 struct cma *cma_area;
594
595#endif
596
597 struct dev_archdata archdata;
598
599 struct device_node *of_node;
600 struct fwnode_handle *fwnode;
601
602#ifdef CONFIG_NUMA
603 int numa_node;
604#endif
605 dev_t devt;
606 u32 id;
607
608 spinlock_t devres_lock;
609 struct list_head devres_head;
610
611 struct class *class;
612 const struct attribute_group **groups;
613
614 void (*release)(struct device *dev);
615 struct iommu_group *iommu_group;
616 struct iommu_fwspec *iommu_fwspec;
617 struct iommu_param *iommu_param;
618
619 bool offline_disabled:1;
620 bool offline:1;
621 bool of_node_reused:1;
622 bool state_synced:1;
623#if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
624 defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || \
625 defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
626 bool dma_coherent:1;
627#endif
628};
629
630static inline struct device *kobj_to_dev(struct kobject *kobj)
631{
632 return container_of(kobj, struct device, kobj);
633}
634
635
636
637
638
639
640static inline bool device_iommu_mapped(struct device *dev)
641{
642 return (dev->iommu_group != NULL);
643}
644
645
646#include <linux/pm_wakeup.h>
647
648static inline const char *dev_name(const struct device *dev)
649{
650
651 if (dev->init_name)
652 return dev->init_name;
653
654 return kobject_name(&dev->kobj);
655}
656
657extern __printf(2, 3)
658int dev_set_name(struct device *dev, const char *name, ...);
659
660#ifdef CONFIG_NUMA
661static inline int dev_to_node(struct device *dev)
662{
663 return dev->numa_node;
664}
665static inline void set_dev_node(struct device *dev, int node)
666{
667 dev->numa_node = node;
668}
669#else
670static inline int dev_to_node(struct device *dev)
671{
672 return NUMA_NO_NODE;
673}
674static inline void set_dev_node(struct device *dev, int node)
675{
676}
677#endif
678
679static inline struct irq_domain *dev_get_msi_domain(const struct device *dev)
680{
681#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN
682 return dev->msi_domain;
683#else
684 return NULL;
685#endif
686}
687
688static inline void dev_set_msi_domain(struct device *dev, struct irq_domain *d)
689{
690#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN
691 dev->msi_domain = d;
692#endif
693}
694
695static inline void *dev_get_drvdata(const struct device *dev)
696{
697 return dev->driver_data;
698}
699
700static inline void dev_set_drvdata(struct device *dev, void *data)
701{
702 dev->driver_data = data;
703}
704
705static inline struct pm_subsys_data *dev_to_psd(struct device *dev)
706{
707 return dev ? dev->power.subsys_data : NULL;
708}
709
710static inline unsigned int dev_get_uevent_suppress(const struct device *dev)
711{
712 return dev->kobj.uevent_suppress;
713}
714
715static inline void dev_set_uevent_suppress(struct device *dev, int val)
716{
717 dev->kobj.uevent_suppress = val;
718}
719
720static inline int device_is_registered(struct device *dev)
721{
722 return dev->kobj.state_in_sysfs;
723}
724
725static inline void device_enable_async_suspend(struct device *dev)
726{
727 if (!dev->power.is_prepared)
728 dev->power.async_suspend = true;
729}
730
731static inline void device_disable_async_suspend(struct device *dev)
732{
733 if (!dev->power.is_prepared)
734 dev->power.async_suspend = false;
735}
736
737static inline bool device_async_suspend_enabled(struct device *dev)
738{
739 return !!dev->power.async_suspend;
740}
741
742static inline bool device_pm_not_required(struct device *dev)
743{
744 return dev->power.no_pm;
745}
746
747static inline void device_set_pm_not_required(struct device *dev)
748{
749 dev->power.no_pm = true;
750}
751
752static inline void dev_pm_syscore_device(struct device *dev, bool val)
753{
754#ifdef CONFIG_PM_SLEEP
755 dev->power.syscore = val;
756#endif
757}
758
759static inline void dev_pm_set_driver_flags(struct device *dev, u32 flags)
760{
761 dev->power.driver_flags = flags;
762}
763
764static inline bool dev_pm_test_driver_flags(struct device *dev, u32 flags)
765{
766 return !!(dev->power.driver_flags & flags);
767}
768
769static inline void device_lock(struct device *dev)
770{
771 mutex_lock(&dev->mutex);
772}
773
774static inline int device_lock_interruptible(struct device *dev)
775{
776 return mutex_lock_interruptible(&dev->mutex);
777}
778
779static inline int device_trylock(struct device *dev)
780{
781 return mutex_trylock(&dev->mutex);
782}
783
784static inline void device_unlock(struct device *dev)
785{
786 mutex_unlock(&dev->mutex);
787}
788
789static inline void device_lock_assert(struct device *dev)
790{
791 lockdep_assert_held(&dev->mutex);
792}
793
794static inline struct device_node *dev_of_node(struct device *dev)
795{
796 if (!IS_ENABLED(CONFIG_OF) || !dev)
797 return NULL;
798 return dev->of_node;
799}
800
801static inline bool dev_has_sync_state(struct device *dev)
802{
803 if (!dev)
804 return false;
805 if (dev->driver && dev->driver->sync_state)
806 return true;
807 if (dev->bus && dev->bus->sync_state)
808 return true;
809 return false;
810}
811
812
813
814
815extern int __must_check device_register(struct device *dev);
816extern void device_unregister(struct device *dev);
817extern void device_initialize(struct device *dev);
818extern int __must_check device_add(struct device *dev);
819extern void device_del(struct device *dev);
820extern int device_for_each_child(struct device *dev, void *data,
821 int (*fn)(struct device *dev, void *data));
822extern int device_for_each_child_reverse(struct device *dev, void *data,
823 int (*fn)(struct device *dev, void *data));
824extern struct device *device_find_child(struct device *dev, void *data,
825 int (*match)(struct device *dev, void *data));
826extern struct device *device_find_child_by_name(struct device *parent,
827 const char *name);
828extern int device_rename(struct device *dev, const char *new_name);
829extern int device_move(struct device *dev, struct device *new_parent,
830 enum dpm_order dpm_order);
831extern const char *device_get_devnode(struct device *dev,
832 umode_t *mode, kuid_t *uid, kgid_t *gid,
833 const char **tmp);
834
835static inline bool device_supports_offline(struct device *dev)
836{
837 return dev->bus && dev->bus->offline && dev->bus->online;
838}
839
840extern void lock_device_hotplug(void);
841extern void unlock_device_hotplug(void);
842extern int lock_device_hotplug_sysfs(void);
843extern int device_offline(struct device *dev);
844extern int device_online(struct device *dev);
845extern void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode);
846extern void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode);
847void device_set_of_node_from_dev(struct device *dev, const struct device *dev2);
848
849static inline int dev_num_vf(struct device *dev)
850{
851 if (dev->bus && dev->bus->num_vf)
852 return dev->bus->num_vf(dev);
853 return 0;
854}
855
856
857
858
859extern struct device *__root_device_register(const char *name,
860 struct module *owner);
861
862
863#define root_device_register(name) \
864 __root_device_register(name, THIS_MODULE)
865
866extern void root_device_unregister(struct device *root);
867
868static inline void *dev_get_platdata(const struct device *dev)
869{
870 return dev->platform_data;
871}
872
873
874
875
876
877extern int __must_check device_bind_driver(struct device *dev);
878extern void device_release_driver(struct device *dev);
879extern int __must_check device_attach(struct device *dev);
880extern int __must_check driver_attach(struct device_driver *drv);
881extern void device_initial_probe(struct device *dev);
882extern int __must_check device_reprobe(struct device *dev);
883
884extern bool device_is_bound(struct device *dev);
885
886
887
888
889extern __printf(5, 0)
890struct device *device_create_vargs(struct class *cls, struct device *parent,
891 dev_t devt, void *drvdata,
892 const char *fmt, va_list vargs);
893extern __printf(5, 6)
894struct device *device_create(struct class *cls, struct device *parent,
895 dev_t devt, void *drvdata,
896 const char *fmt, ...);
897extern __printf(6, 7)
898struct device *device_create_with_groups(struct class *cls,
899 struct device *parent, dev_t devt, void *drvdata,
900 const struct attribute_group **groups,
901 const char *fmt, ...);
902extern void device_destroy(struct class *cls, dev_t devt);
903
904extern int __must_check device_add_groups(struct device *dev,
905 const struct attribute_group **groups);
906extern void device_remove_groups(struct device *dev,
907 const struct attribute_group **groups);
908
909static inline int __must_check device_add_group(struct device *dev,
910 const struct attribute_group *grp)
911{
912 const struct attribute_group *groups[] = { grp, NULL };
913
914 return device_add_groups(dev, groups);
915}
916
917static inline void device_remove_group(struct device *dev,
918 const struct attribute_group *grp)
919{
920 const struct attribute_group *groups[] = { grp, NULL };
921
922 return device_remove_groups(dev, groups);
923}
924
925extern int __must_check devm_device_add_groups(struct device *dev,
926 const struct attribute_group **groups);
927extern void devm_device_remove_groups(struct device *dev,
928 const struct attribute_group **groups);
929extern int __must_check devm_device_add_group(struct device *dev,
930 const struct attribute_group *grp);
931extern void devm_device_remove_group(struct device *dev,
932 const struct attribute_group *grp);
933
934
935
936
937
938
939
940extern int (*platform_notify)(struct device *dev);
941
942extern int (*platform_notify_remove)(struct device *dev);
943
944
945
946
947
948
949extern struct device *get_device(struct device *dev);
950extern void put_device(struct device *dev);
951extern bool kill_device(struct device *dev);
952
953#ifdef CONFIG_DEVTMPFS
954extern int devtmpfs_mount(void);
955#else
956static inline int devtmpfs_mount(void) { return 0; }
957#endif
958
959
960extern void device_shutdown(void);
961
962
963extern const char *dev_driver_string(const struct device *dev);
964
965
966struct device_link *device_link_add(struct device *consumer,
967 struct device *supplier, u32 flags);
968void device_link_del(struct device_link *link);
969void device_link_remove(void *consumer, struct device *supplier);
970void device_links_supplier_sync_state_pause(void);
971void device_links_supplier_sync_state_resume(void);
972
973
974#define MODULE_ALIAS_CHARDEV(major,minor) \
975 MODULE_ALIAS("char-major-" __stringify(major) "-" __stringify(minor))
976#define MODULE_ALIAS_CHARDEV_MAJOR(major) \
977 MODULE_ALIAS("char-major-" __stringify(major) "-*")
978
979#ifdef CONFIG_SYSFS_DEPRECATED
980extern long sysfs_deprecated;
981#else
982#define sysfs_deprecated 0
983#endif
984
985#endif
986