Subversion Repositories Kolibri OS

Rev

Rev 6082 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3763 Serge 1
/*
2
 * kobject.h - generic kernel object infrastructure.
3
 *
4
 * Copyright (c) 2002-2003 Patrick Mochel
5
 * Copyright (c) 2002-2003 Open Source Development Labs
6
 * Copyright (c) 2006-2008 Greg Kroah-Hartman 
7
 * Copyright (c) 2006-2008 Novell Inc.
8
 *
9
 * This file is released under the GPLv2.
10
 *
11
 * Please read Documentation/kobject.txt before using the kobject
12
 * interface, ESPECIALLY the parts about reference counts and object
13
 * destructors.
14
 */
15
 
16
#ifndef _KOBJECT_H_
17
#define _KOBJECT_H_
18
 
19
#include 
20
#include 
6102 serge 21
#include 
3763 Serge 22
#include 
23
#include 
24
#include 
25
//#include 
26
#include 
27
#include 
5270 serge 28
#include 
29
#include 
3763 Serge 30
 
31
#define UEVENT_HELPER_PATH_LEN		256
32
#define UEVENT_NUM_ENVP			32	/* number of env pointers */
33
#define UEVENT_BUFFER_SIZE		2048	/* buffer for the variables */
34
 
5056 serge 35
#ifdef CONFIG_UEVENT_HELPER
3763 Serge 36
/* path to the userspace helper executed on an event */
37
extern char uevent_helper[];
5056 serge 38
#endif
3763 Serge 39
 
40
/* counter to tag the uevent, read only except for the kobject core */
41
extern u64 uevent_seqnum;
42
 
43
/*
44
 * The actions here must match the index to the string array
45
 * in lib/kobject_uevent.c
46
 *
47
 * Do not add new actions here without checking with the driver-core
48
 * maintainers. Action strings are not meant to express subsystem
49
 * or device specific properties. In most cases you want to send a
50
 * kobject_uevent_env(kobj, KOBJ_CHANGE, env) with additional event
51
 * specific variables added to the event environment.
52
 */
53
enum kobject_action {
54
	KOBJ_ADD,
55
	KOBJ_REMOVE,
56
	KOBJ_CHANGE,
57
	KOBJ_MOVE,
58
	KOBJ_ONLINE,
59
	KOBJ_OFFLINE,
60
	KOBJ_MAX
61
};
62
 
63
struct kobject {
6082 serge 64
	const char		*name;
3763 Serge 65
	struct list_head	entry;
66
	struct kobject		*parent;
67
//    struct kset         *kset;
68
	struct kobj_type	*ktype;
69
//   struct sysfs_dirent *sd;
70
	struct kref		kref;
5056 serge 71
#ifdef CONFIG_DEBUG_KOBJECT_RELEASE
72
	struct delayed_work	release;
73
#endif
3763 Serge 74
	unsigned int state_initialized:1;
75
	unsigned int state_in_sysfs:1;
76
	unsigned int state_add_uevent_sent:1;
77
	unsigned int state_remove_uevent_sent:1;
78
	unsigned int uevent_suppress:1;
79
};
80
 
81
extern __printf(2, 3)
82
int kobject_set_name(struct kobject *kobj, const char *name, ...);
6082 serge 83
extern __printf(2, 0)
84
int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
85
			   va_list vargs);
3763 Serge 86
 
87
static inline const char *kobject_name(const struct kobject *kobj)
88
{
89
	return kobj->name;
90
}
91
 
92
extern void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
93
extern __printf(3, 4) __must_check
94
int kobject_add(struct kobject *kobj, struct kobject *parent,
95
		const char *fmt, ...);
96
extern __printf(4, 5) __must_check
97
int kobject_init_and_add(struct kobject *kobj,
98
			 struct kobj_type *ktype, struct kobject *parent,
99
			 const char *fmt, ...);
100
 
101
extern void kobject_del(struct kobject *kobj);
102
 
103
extern struct kobject * __must_check kobject_create(void);
104
extern struct kobject * __must_check kobject_create_and_add(const char *name,
105
						struct kobject *parent);
106
 
107
extern int __must_check kobject_rename(struct kobject *, const char *new_name);
108
extern int __must_check kobject_move(struct kobject *, struct kobject *);
109
 
110
extern struct kobject *kobject_get(struct kobject *kobj);
111
extern void kobject_put(struct kobject *kobj);
112
 
5056 serge 113
extern const void *kobject_namespace(struct kobject *kobj);
3763 Serge 114
extern char *kobject_get_path(struct kobject *kobj, gfp_t flag);
115
 
116
struct kobj_type {
117
	void (*release)(struct kobject *kobj);
118
//   const struct sysfs_ops *sysfs_ops;
119
//   struct attribute **default_attrs;
120
//   const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
121
//   const void *(*namespace)(struct kobject *kobj);
122
};
123
 
124
struct kobj_uevent_env {
6082 serge 125
	char *argv[3];
3763 Serge 126
	char *envp[UEVENT_NUM_ENVP];
127
	int envp_idx;
128
	char buf[UEVENT_BUFFER_SIZE];
129
	int buflen;
130
};
131
 
132
//struct kset_uevent_ops {
133
//   int (* const filter)(struct kset *kset, struct kobject *kobj);
134
//   const char *(* const name)(struct kset *kset, struct kobject *kobj);
135
//   int (* const uevent)(struct kset *kset, struct kobject *kobj,
136
//             struct kobj_uevent_env *env);
137
//};
138
 
139
struct kobj_attribute {
140
//   struct attribute attr;
141
	ssize_t (*show)(struct kobject *kobj, struct kobj_attribute *attr,
142
			char *buf);
143
	ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr,
144
			 const char *buf, size_t count);
145
};
146
 
147
extern const struct sysfs_ops kobj_sysfs_ops;
148
 
149
struct sock;
150
 
151
/**
152
 * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem.
153
 *
154
 * A kset defines a group of kobjects.  They can be individually
155
 * different "types" but overall these kobjects all want to be grouped
156
 * together and operated on in the same manner.  ksets are used to
157
 * define the attribute callbacks and other common events that happen to
158
 * a kobject.
159
 *
160
 * @list: the list of all kobjects for this kset
161
 * @list_lock: a lock for iterating over the kobjects
162
 * @kobj: the embedded kobject for this kset (recursion, isn't it fun...)
163
 * @uevent_ops: the set of uevent operations for this kset.  These are
164
 * called whenever a kobject has something happen to it so that the kset
165
 * can add new environment variables, or filter out the uevents if so
166
 * desired.
167
 */
168
struct kset {
169
	struct list_head list;
170
	spinlock_t list_lock;
171
	struct kobject kobj;
172
//   const struct kset_uevent_ops *uevent_ops;
173
};
174
 
175
//extern void kset_init(struct kset *kset);
176
//extern int __must_check kset_register(struct kset *kset);
177
//extern void kset_unregister(struct kset *kset);
178
//extern struct kset * __must_check kset_create_and_add(const char *name,
179
//                       const struct kset_uevent_ops *u,
180
//                       struct kobject *parent_kobj);
181
 
182
//static inline struct kset *to_kset(struct kobject *kobj)
183
//{
184
//   return kobj ? container_of(kobj, struct kset, kobj) : NULL;
185
//}
186
 
187
//static inline struct kset *kset_get(struct kset *k)
188
//{
189
//   return k ? to_kset(kobject_get(&k->kobj)) : NULL;
190
//}
191
 
192
//static inline void kset_put(struct kset *k)
193
//{
194
//   kobject_put(&k->kobj);
195
//}
196
 
197
static inline struct kobj_type *get_ktype(struct kobject *kobj)
198
{
199
	return kobj->ktype;
200
}
201
 
202
//extern struct kobject *kset_find_obj(struct kset *, const char *);
203
 
204
/* The global /sys/kernel/ kobject for people to chain off of */
205
extern struct kobject *kernel_kobj;
206
/* The global /sys/kernel/mm/ kobject for people to chain off of */
207
extern struct kobject *mm_kobj;
208
/* The global /sys/hypervisor/ kobject for people to chain off of */
209
extern struct kobject *hypervisor_kobj;
210
/* The global /sys/power/ kobject for people to chain off of */
211
extern struct kobject *power_kobj;
212
/* The global /sys/firmware/ kobject for people to chain off of */
213
extern struct kobject *firmware_kobj;
214
 
215
int kobject_uevent(struct kobject *kobj, enum kobject_action action);
216
int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
217
			char *envp[]);
218
 
219
__printf(2, 3)
220
int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...);
221
 
222
int kobject_action_type(const char *buf, size_t count,
223
			enum kobject_action *type);
224
 
225
#endif /* _KOBJECT_H_ */