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 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 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 * 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 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 54 kobject_put(struct kobject *obj) 55 { 56 if (obj != NULL) 57 kref_put(&obj->kref, kobject_release); 58 } 59 60 static inline void 61 kobject_del(struct kobject *obj) 62 { 63 } 64 65 #define kobject_uevent_env(obj, act, envp) 66 67 #endif 68