xref: /openbsd/sys/dev/pci/drm/include/linux/kobject.h (revision e5dd7070)
1 /* Public domain. */
2 
3 #ifndef _LINUX_KOBJECT_H
4 #define _LINUX_KOBJECT_H
5 
6 #include <linux/kref.h>
7 #include <linux/kernel.h>
8 #include <linux/sysfs.h>
9 
10 struct kobject {
11 	struct kref kref;
12 	struct kobj_type *type;
13 };
14 
15 struct kobj_type {
16 	void (*release)(struct kobject *);
17 };
18 
19 static inline void
20 kobject_init(struct kobject *obj, struct kobj_type *type)
21 {
22 	kref_init(&obj->kref);
23 	obj->type = type;
24 }
25 
26 static inline int
27 kobject_init_and_add(struct kobject *obj, struct kobj_type *type,
28     struct kobject *parent, const char *fmt, ...)
29 {
30 	kobject_init(obj, type);
31 	return (0);
32 }
33 
34 static inline struct kobject *
35 kobject_get(struct kobject *obj)
36 {
37 	if (obj != NULL)
38 		kref_get(&obj->kref);
39 	return (obj);
40 }
41 
42 static inline void
43 kobject_release(struct kref *ref)
44 {
45 	struct kobject *obj = container_of(ref, struct kobject, kref);
46 	if (obj->type && obj->type->release)
47 		obj->type->release(obj);
48 }
49 
50 static inline void
51 kobject_put(struct kobject *obj)
52 {
53 	if (obj != NULL)
54 		kref_put(&obj->kref, kobject_release);
55 }
56 
57 static inline void
58 kobject_del(struct kobject *obj)
59 {
60 }
61 
62 #define kobject_uevent_env(obj, act, envp)
63 
64 #endif
65