VSF Documented
device.h
Go to the documentation of this file.
1#ifndef __VSF_LINUX_DEVICE_H__
2#define __VSF_LINUX_DEVICE_H__
3
4#include <linux/kobject.h>
5#include <linux/types.h>
6#include <linux/mutex.h>
7#include <linux/slab.h>
8#include <linux/sysfs.h>
9
10#include <linux/device/bus.h>
11#include <linux/device/class.h>
12#include <linux/device/driver.h>
13
14#include <linux/gfp.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
21 const char *name;
22 int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
23 void (*release)(struct device *dev);
24 const struct dev_pm_ops *pm;
25};
26
29 ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf);
30 ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count);
31};
32
33struct device {
34 struct kobject kobj;
35 struct device *parent;
36
38 const struct device_type *type;
39 struct bus_type *bus;
42
44};
45
46static inline struct device * kobj_to_dev(struct kobject *kobj)
47{
48 return vsf_container_of(kobj, struct device, kobj);
49}
50
51static inline const char * dev_bus_name(const struct device *dev)
52{
53 return dev->bus ? dev->bus->name : NULL;
54}
55
56static inline const char * dev_name(const struct device *dev)
57{
58 return kobject_name(&dev->kobj);
59}
60
61static inline void * dev_get_drvdata(const struct device *dev)
62{
63 return dev->driver_data;
64}
65
66static inline void dev_set_drvdata(struct device *dev, void *data)
67{
68 dev->driver_data = data;
69}
70
71#define dev_dbg(__dev, __fmt, ...) pr_debug(__fmt, ##__VA_ARGS__)
72#define dev_emerg(__dev, __fmt, ...) pr_emerg(__fmt, ##__VA_ARGS__)
73#define dev_crit(__dev, __fmt, ...) pr_crit(__fmt, ##__VA_ARGS__)
74#define dev_alert(__dev, __fmt, ...) pr_alert(__fmt, ##__VA_ARGS__)
75#define dev_err(__dev, __fmt, ...) pr_err(__fmt, ##__VA_ARGS__)
76#define dev_warn(__dev, __fmt, ...) pr_warn(__fmt, ##__VA_ARGS__)
77#define dev_notice(__dev, __fmt, ...) pr_notice(__fmt, ##__VA_ARGS__)
78#define dev_info(__dev, __fmt, ...) pr_info(__fmt, ##__VA_ARGS__)
79
80#define dev_level_once(__level, __dev, __fmt, ...) \
81 do { \
82 static bool __printed = false; \
83 if (!__printed) { \
84 __printed = true; \
85 __level(__dev, __fmt, ##__VA_ARGS__); \
86 } \
87 } while (0)
88#define dev_dbg_once(__dev, __fmt, ...) dev_level_once(dev_dbg, __dev, __fmt, ##__VA_ARGS__)
89#define dev_emerg_once(__dev, __fmt, ...) dev_level_once(dev_emerg, __dev, __fmt, ##__VA_ARGS__)
90#define dev_crit_once(__dev, __fmt, ...) dev_level_once(dev_crit, __dev, __fmt, ##__VA_ARGS__)
91#define dev_alert_once(__dev, __fmt, ...) dev_level_once(dev_alert, __dev, __fmt, ##__VA_ARGS__)
92#define dev_err_once(__dev, __fmt, ...) dev_level_once(dev_err, __dev, __fmt, ##__VA_ARGS__)
93#define dev_warn_once(__dev, __fmt, ...) dev_level_once(dev_warn, __dev, __fmt, ##__VA_ARGS__)
94#define dev_notice_once(__dev, __fmt, ...) dev_level_once(dev_notice, __dev, __fmt, ##__VA_ARGS__)
95#define dev_info_once(__dev, __fmt, ...) dev_level_once(dev_info, __dev, __fmt, ##__VA_ARGS__)
96
97extern struct device *get_device(struct device *dev);
98extern void put_device(struct device *dev);
99extern bool kill_device(struct device *dev);
100
101extern int dev_set_name(struct device *dev, const char *fmt, ...);
102
103#define device_wakeup_enable(__dev)
104#define device_wakeup_disable(__dev)
105
106static inline int device_is_registered(struct device *dev)
107{
108 return dev->kobj.state_in_sysfs;
109}
110extern int device_register(struct device *dev);
111extern void device_unregister(struct device *dev);
112extern void device_initialize(struct device *dev);
113extern int device_add(struct device *dev);
114extern void device_del(struct device *dev);
115
116// devres and devm
117
118typedef void (*dr_release_t)(struct device *dev, void *res);
119
120extern void devres_add(struct device *dev, void *res);
121extern int devres_release_all(struct device *dev);
122
123static inline void * devm_kmalloc(struct device *dev, size_t size, gfp_t gfp)
124{
125 return kmalloc(size, gfp);
126}
127static inline void * devm_krealloc(struct device *dev, void *ptr, size_t size, gfp_t gfp)
128{
129 return krealloc(ptr, size, gfp);
130}
131static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
132{
133 return devm_kmalloc(dev, size, gfp | __GFP_ZERO);
134}
135static inline void devm_kfree(struct device *dev, const void *p)
136{
137 kfree(p);
138}
139
140extern char * devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, va_list ap);
141extern char * devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...);
142
143int __devm_add_action(struct device *dev, void (*action)(void *), void *data, const char *name);
144#define devm_add_action(dev, action, data) __devm_add_action(dev, action, data, #action)
145
146static inline int __devm_add_action_or_reset(struct device *dev, void (*action)(void *), void *data, const char *name)
147{
148 int ret = __devm_add_action(dev, action, data, name);
149 if (ret) { action(data); }
150 return ret;
151}
152#define devm_add_action_or_reset(dev, action, data) __devm_add_action_or_reset(dev, action, data, #action)
153
154#ifdef __cplusplus
155}
156#endif
157
158#endif
#define vsf_container_of(__ptr, __type, __member)
Definition __type.h:164
#define __GFP_ZERO
Definition gfp.h:12
unsigned int gfp_t
Definition gfp.h:10
struct ieee80211_ext_chansw_ie data
Definition ieee80211.h:80
u8 action
Definition ieee80211.h:120
int ssize_t
Definition types.h:71
#define NULL
Definition lvgl.h:26
uint32_t u32
Definition lvgl.h:43
int device_register(struct device *dev)
Definition vsf_linux_core.c:602
char * devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt,...)
Definition vsf_linux_core.c:1042
bool kill_device(struct device *dev)
int __devm_add_action(struct device *dev, void(*action)(void *), void *data, const char *name)
Definition vsf_linux_core.c:1094
int devres_release_all(struct device *dev)
Definition vsf_linux_core.c:1067
int device_add(struct device *dev)
Definition vsf_linux_core.c:569
void device_unregister(struct device *dev)
Definition vsf_linux_core.c:608
int dev_set_name(struct device *dev, const char *fmt,...)
Definition vsf_linux_core.c:553
char * devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, va_list ap)
Definition vsf_linux_core.c:1023
void device_initialize(struct device *dev)
Definition vsf_linux_core.c:564
void devres_add(struct device *dev, void *res)
Definition vsf_linux_core.c:1088
void put_device(struct device *dev)
Definition vsf_linux_core.c:546
void device_del(struct device *dev)
Definition vsf_linux_core.c:593
struct device * get_device(struct device *dev)
Definition vsf_linux_core.c:538
void(* dr_release_t)(struct device *dev, void *res)
Definition device.h:118
Definition sysfs.h:10
Definition bus.h:15
const char * name
Definition bus.h:16
Definition pm.h:10
Definition device.h:27
struct attribute attr
Definition device.h:28
ssize_t(* show)(struct device *dev, struct device_attribute *attr, char *buf)
Definition device.h:29
ssize_t(* store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
Definition device.h:30
Definition driver.h:28
Definition device.h:20
int(* uevent)(struct device *dev, struct kobj_uevent_env *env)
Definition device.h:22
const struct dev_pm_ops * pm
Definition device.h:24
const char * name
Definition device.h:21
void(* release)(struct device *dev)
Definition device.h:23
Definition device.h:33
const struct device_type * type
Definition device.h:38
struct device * parent
Definition device.h:35
struct bus_type * bus
Definition device.h:39
struct kobject kobj
Definition device.h:34
struct device_driver * driver
Definition device.h:40
struct vsf_dlist_t devres_head
Definition device.h:43
u32 id
Definition device.h:37
void * driver_data
Definition device.h:41
Definition kobject.h:27
Definition kobject.h:14
bool state_in_sysfs
Definition kobject.h:20
Definition vsf_list.h:883
uint32_t size
Definition vsf_memfs.h:50
Generated from commit: vsfteam/vsf@f33b89f