summaryrefslogtreecommitdiffstats
path: root/include/linux/kobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/kobject.h')
-rw-r--r--include/linux/kobject.h54
1 files changed, 34 insertions, 20 deletions
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index 7f7403aa4a4..2a8d8da7096 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -23,14 +23,27 @@
#include <linux/spinlock.h>
#include <linux/rwsem.h>
#include <linux/kref.h>
-#include <linux/kobject_uevent.h>
#include <linux/kernel.h>
#include <asm/atomic.h>
-#define KOBJ_NAME_LEN 20
+#define KOBJ_NAME_LEN 20
+#define UEVENT_HELPER_PATH_LEN 256
-/* counter to tag the hotplug event, read only except for the kobject core */
-extern u64 hotplug_seqnum;
+/* path to the userspace helper executed on an event */
+extern char uevent_helper[];
+
+/* counter to tag the uevent, read only except for the kobject core */
+extern u64 uevent_seqnum;
+
+/* the actions here must match the proper string in lib/kobject_uevent.c */
+typedef int __bitwise kobject_action_t;
+enum kobject_action {
+ KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */
+ KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */
+ KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */
+ KOBJ_OFFLINE = (__force kobject_action_t) 0x04, /* device offline */
+ KOBJ_ONLINE = (__force kobject_action_t) 0x05, /* device online */
+};
struct kobject {
const char * k_name;
@@ -87,15 +100,14 @@ struct kobj_type {
* of object; multiple ksets can belong to one subsystem. All
* ksets of a subsystem share the subsystem's lock.
*
- * Each kset can support hotplugging; if it does, it will be given
- * the opportunity to filter out specific kobjects from being
- * reported, as well as to add its own "data" elements to the
- * environment being passed to the hotplug helper.
+ * Each kset can support specific event variables; it can
+ * supress the event generation or add subsystem specific
+ * variables carried with the event.
*/
-struct kset_hotplug_ops {
+struct kset_uevent_ops {
int (*filter)(struct kset *kset, struct kobject *kobj);
const char *(*name)(struct kset *kset, struct kobject *kobj);
- int (*hotplug)(struct kset *kset, struct kobject *kobj, char **envp,
+ int (*uevent)(struct kset *kset, struct kobject *kobj, char **envp,
int num_envp, char *buffer, int buffer_size);
};
@@ -105,7 +117,7 @@ struct kset {
struct list_head list;
spinlock_t list_lock;
struct kobject kobj;
- struct kset_hotplug_ops * hotplug_ops;
+ struct kset_uevent_ops * uevent_ops;
};
@@ -153,20 +165,20 @@ struct subsystem {
struct rw_semaphore rwsem;
};
-#define decl_subsys(_name,_type,_hotplug_ops) \
+#define decl_subsys(_name,_type,_uevent_ops) \
struct subsystem _name##_subsys = { \
.kset = { \
.kobj = { .name = __stringify(_name) }, \
.ktype = _type, \
- .hotplug_ops =_hotplug_ops, \
+ .uevent_ops =_uevent_ops, \
} \
}
-#define decl_subsys_name(_varname,_name,_type,_hotplug_ops) \
+#define decl_subsys_name(_varname,_name,_type,_uevent_ops) \
struct subsystem _varname##_subsys = { \
.kset = { \
.kobj = { .name = __stringify(_name) }, \
.ktype = _type, \
- .hotplug_ops =_hotplug_ops, \
+ .uevent_ops =_uevent_ops, \
} \
}
@@ -241,15 +253,17 @@ struct subsys_attribute {
extern int subsys_create_file(struct subsystem * , struct subsys_attribute *);
extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *);
-#ifdef CONFIG_HOTPLUG
-void kobject_hotplug(struct kobject *kobj, enum kobject_action action);
-int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
+#if defined(CONFIG_HOTPLUG) & defined(CONFIG_NET)
+void kobject_uevent(struct kobject *kobj, enum kobject_action action);
+
+int add_uevent_var(char **envp, int num_envp, int *cur_index,
char *buffer, int buffer_size, int *cur_len,
const char *format, ...)
__attribute__((format (printf, 7, 8)));
#else
-static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { }
-static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
+static inline void kobject_uevent(struct kobject *kobj, enum kobject_action action) { }
+
+static inline int add_uevent_var(char **envp, int num_envp, int *cur_index,
char *buffer, int buffer_size, int *cur_len,
const char *format, ...)
{ return 0; }