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