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