xref: /openbsd-src/sys/dev/pci/drm/include/linux/kobject.h (revision 1bb76ff151c0aba8e3312a604e4cd2e5195cf4b7)
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