Subversion Repositories Kolibri OS

Rev

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