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
10struct kobject {
11	struct kref kref;
12	struct kobj_type *type;
13};
14
15struct kobj_type {
16	void (*release)(struct kobject *);
17};
18
19struct kobj_attribute {
20};
21
22static inline void
23kobject_init(struct kobject *obj, struct kobj_type *type)
24{
25	kref_init(&obj->kref);
26	obj->type = type;
27}
28
29static inline int
30kobject_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
37static inline struct kobject *
38kobject_get(struct kobject *obj)
39{
40	if (obj != NULL)
41		kref_get(&obj->kref);
42	return (obj);
43}
44
45static inline void
46kobject_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
53static inline void
54kobject_put(struct kobject *obj)
55{
56	if (obj != NULL)
57		kref_put(&obj->kref, kobject_release);
58}
59
60static inline void
61kobject_del(struct kobject *obj)
62{
63}
64
65#define kobject_uevent_env(obj, act, envp)
66
67#endif
68