17f4dd379Sjsg /* Public domain. */
27f4dd379Sjsg
37f4dd379Sjsg #ifndef _LINUX_KOBJECT_H
47f4dd379Sjsg #define _LINUX_KOBJECT_H
57f4dd379Sjsg
67f4dd379Sjsg #include <linux/kref.h>
77f4dd379Sjsg #include <linux/sysfs.h>
8*1bb76ff1Sjsg #include <linux/container_of.h>
97f4dd379Sjsg
107f4dd379Sjsg struct kobject {
117f4dd379Sjsg struct kref kref;
127f4dd379Sjsg struct kobj_type *type;
137f4dd379Sjsg };
147f4dd379Sjsg
157f4dd379Sjsg struct kobj_type {
167f4dd379Sjsg void (*release)(struct kobject *);
177f4dd379Sjsg };
187f4dd379Sjsg
19efb48a61Sjsg struct kobj_attribute {
20efb48a61Sjsg };
21efb48a61Sjsg
227f4dd379Sjsg static inline void
kobject_init(struct kobject * obj,struct kobj_type * type)237f4dd379Sjsg kobject_init(struct kobject *obj, struct kobj_type *type)
247f4dd379Sjsg {
257f4dd379Sjsg kref_init(&obj->kref);
267f4dd379Sjsg obj->type = type;
277f4dd379Sjsg }
287f4dd379Sjsg
297f4dd379Sjsg static inline int
kobject_init_and_add(struct kobject * obj,struct kobj_type * type,struct kobject * parent,const char * fmt,...)307f4dd379Sjsg kobject_init_and_add(struct kobject *obj, struct kobj_type *type,
317f4dd379Sjsg struct kobject *parent, const char *fmt, ...)
327f4dd379Sjsg {
337f4dd379Sjsg kobject_init(obj, type);
347f4dd379Sjsg return (0);
357f4dd379Sjsg }
367f4dd379Sjsg
377f4dd379Sjsg static inline struct kobject *
kobject_get(struct kobject * obj)387f4dd379Sjsg kobject_get(struct kobject *obj)
397f4dd379Sjsg {
407f4dd379Sjsg if (obj != NULL)
417f4dd379Sjsg kref_get(&obj->kref);
427f4dd379Sjsg return (obj);
437f4dd379Sjsg }
447f4dd379Sjsg
457f4dd379Sjsg static inline void
kobject_release(struct kref * ref)467f4dd379Sjsg kobject_release(struct kref *ref)
477f4dd379Sjsg {
487f4dd379Sjsg struct kobject *obj = container_of(ref, struct kobject, kref);
497f4dd379Sjsg if (obj->type && obj->type->release)
507f4dd379Sjsg obj->type->release(obj);
517f4dd379Sjsg }
527f4dd379Sjsg
537f4dd379Sjsg static inline void
kobject_put(struct kobject * obj)547f4dd379Sjsg kobject_put(struct kobject *obj)
557f4dd379Sjsg {
567f4dd379Sjsg if (obj != NULL)
577f4dd379Sjsg kref_put(&obj->kref, kobject_release);
587f4dd379Sjsg }
597f4dd379Sjsg
607f4dd379Sjsg static inline void
kobject_del(struct kobject * obj)617f4dd379Sjsg kobject_del(struct kobject *obj)
627f4dd379Sjsg {
637f4dd379Sjsg }
647f4dd379Sjsg
657f4dd379Sjsg #define kobject_uevent_env(obj, act, envp)
667f4dd379Sjsg
677f4dd379Sjsg #endif
68