diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/device.h | 97 | ||||
| -rw-r--r-- | include/linux/io.h | 4 | ||||
| -rw-r--r-- | include/linux/klist.h | 40 | ||||
| -rw-r--r-- | include/linux/sysfs.h | 6 |
4 files changed, 33 insertions, 114 deletions
diff --git a/include/linux/device.h b/include/linux/device.h index 1a060265acea..832fb0eb2933 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -35,7 +35,6 @@ struct device; | |||
| 35 | struct device_driver; | 35 | struct device_driver; |
| 36 | struct driver_private; | 36 | struct driver_private; |
| 37 | struct class; | 37 | struct class; |
| 38 | struct class_device; | ||
| 39 | struct bus_type; | 38 | struct bus_type; |
| 40 | struct bus_type_private; | 39 | struct bus_type_private; |
| 41 | 40 | ||
| @@ -190,13 +189,10 @@ struct class { | |||
| 190 | struct kset class_dirs; | 189 | struct kset class_dirs; |
| 191 | struct semaphore sem; /* locks children, devices, interfaces */ | 190 | struct semaphore sem; /* locks children, devices, interfaces */ |
| 192 | struct class_attribute *class_attrs; | 191 | struct class_attribute *class_attrs; |
| 193 | struct class_device_attribute *class_dev_attrs; | ||
| 194 | struct device_attribute *dev_attrs; | 192 | struct device_attribute *dev_attrs; |
| 195 | 193 | ||
| 196 | int (*uevent)(struct class_device *dev, struct kobj_uevent_env *env); | ||
| 197 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); | 194 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); |
| 198 | 195 | ||
| 199 | void (*release)(struct class_device *dev); | ||
| 200 | void (*class_release)(struct class *class); | 196 | void (*class_release)(struct class *class); |
| 201 | void (*dev_release)(struct device *dev); | 197 | void (*dev_release)(struct device *dev); |
| 202 | 198 | ||
| @@ -210,9 +206,6 @@ extern int class_for_each_device(struct class *class, void *data, | |||
| 210 | int (*fn)(struct device *dev, void *data)); | 206 | int (*fn)(struct device *dev, void *data)); |
| 211 | extern struct device *class_find_device(struct class *class, void *data, | 207 | extern struct device *class_find_device(struct class *class, void *data, |
| 212 | int (*match)(struct device *, void *)); | 208 | int (*match)(struct device *, void *)); |
| 213 | extern struct class_device *class_find_child(struct class *class, void *data, | ||
| 214 | int (*match)(struct class_device *, void *)); | ||
| 215 | |||
| 216 | 209 | ||
| 217 | struct class_attribute { | 210 | struct class_attribute { |
| 218 | struct attribute attr; | 211 | struct attribute attr; |
| @@ -228,92 +221,10 @@ extern int __must_check class_create_file(struct class *class, | |||
| 228 | extern void class_remove_file(struct class *class, | 221 | extern void class_remove_file(struct class *class, |
| 229 | const struct class_attribute *attr); | 222 | const struct class_attribute *attr); |
| 230 | 223 | ||
| 231 | struct class_device_attribute { | ||
| 232 | struct attribute attr; | ||
| 233 | ssize_t (*show)(struct class_device *, char *buf); | ||
| 234 | ssize_t (*store)(struct class_device *, const char *buf, size_t count); | ||
| 235 | }; | ||
| 236 | |||
| 237 | #define CLASS_DEVICE_ATTR(_name, _mode, _show, _store) \ | ||
| 238 | struct class_device_attribute class_device_attr_##_name = \ | ||
| 239 | __ATTR(_name, _mode, _show, _store) | ||
| 240 | |||
| 241 | extern int __must_check class_device_create_file(struct class_device *, | ||
| 242 | const struct class_device_attribute *); | ||
| 243 | |||
| 244 | /** | ||
| 245 | * struct class_device - class devices | ||
| 246 | * @class: pointer to the parent class for this class device. This is required. | ||
| 247 | * @devt: for internal use by the driver core only. | ||
| 248 | * @node: for internal use by the driver core only. | ||
| 249 | * @kobj: for internal use by the driver core only. | ||
| 250 | * @groups: optional additional groups to be created | ||
| 251 | * @dev: if set, a symlink to the struct device is created in the sysfs | ||
| 252 | * directory for this struct class device. | ||
| 253 | * @class_data: pointer to whatever you want to store here for this struct | ||
| 254 | * class_device. Use class_get_devdata() and class_set_devdata() to get and | ||
| 255 | * set this pointer. | ||
| 256 | * @parent: pointer to a struct class_device that is the parent of this struct | ||
| 257 | * class_device. If NULL, this class_device will show up at the root of the | ||
| 258 | * struct class in sysfs (which is probably what you want to have happen.) | ||
| 259 | * @release: pointer to a release function for this struct class_device. If | ||
| 260 | * set, this will be called instead of the class specific release function. | ||
| 261 | * Only use this if you want to override the default release function, like | ||
| 262 | * when you are nesting class_device structures. | ||
| 263 | * @uevent: pointer to a uevent function for this struct class_device. If | ||
| 264 | * set, this will be called instead of the class specific uevent function. | ||
| 265 | * Only use this if you want to override the default uevent function, like | ||
| 266 | * when you are nesting class_device structures. | ||
| 267 | */ | ||
| 268 | struct class_device { | ||
| 269 | struct list_head node; | ||
| 270 | |||
| 271 | struct kobject kobj; | ||
| 272 | struct class *class; | ||
| 273 | dev_t devt; | ||
| 274 | struct device *dev; | ||
| 275 | void *class_data; | ||
| 276 | struct class_device *parent; | ||
| 277 | struct attribute_group **groups; | ||
| 278 | |||
| 279 | void (*release)(struct class_device *dev); | ||
| 280 | int (*uevent)(struct class_device *dev, struct kobj_uevent_env *env); | ||
| 281 | char class_id[BUS_ID_SIZE]; | ||
| 282 | }; | ||
| 283 | |||
| 284 | static inline void *class_get_devdata(struct class_device *dev) | ||
| 285 | { | ||
| 286 | return dev->class_data; | ||
| 287 | } | ||
| 288 | |||
| 289 | static inline void class_set_devdata(struct class_device *dev, void *data) | ||
| 290 | { | ||
| 291 | dev->class_data = data; | ||
| 292 | } | ||
| 293 | |||
| 294 | |||
| 295 | extern int __must_check class_device_register(struct class_device *); | ||
| 296 | extern void class_device_unregister(struct class_device *); | ||
| 297 | extern void class_device_initialize(struct class_device *); | ||
| 298 | extern int __must_check class_device_add(struct class_device *); | ||
| 299 | extern void class_device_del(struct class_device *); | ||
| 300 | |||
| 301 | extern struct class_device *class_device_get(struct class_device *); | ||
| 302 | extern void class_device_put(struct class_device *); | ||
| 303 | |||
| 304 | extern void class_device_remove_file(struct class_device *, | ||
| 305 | const struct class_device_attribute *); | ||
| 306 | extern int __must_check class_device_create_bin_file(struct class_device *, | ||
| 307 | struct bin_attribute *); | ||
| 308 | extern void class_device_remove_bin_file(struct class_device *, | ||
| 309 | struct bin_attribute *); | ||
| 310 | |||
| 311 | struct class_interface { | 224 | struct class_interface { |
| 312 | struct list_head node; | 225 | struct list_head node; |
| 313 | struct class *class; | 226 | struct class *class; |
| 314 | 227 | ||
| 315 | int (*add) (struct class_device *, struct class_interface *); | ||
| 316 | void (*remove) (struct class_device *, struct class_interface *); | ||
| 317 | int (*add_dev) (struct device *, struct class_interface *); | 228 | int (*add_dev) (struct device *, struct class_interface *); |
| 318 | void (*remove_dev) (struct device *, struct class_interface *); | 229 | void (*remove_dev) (struct device *, struct class_interface *); |
| 319 | }; | 230 | }; |
| @@ -323,13 +234,6 @@ extern void class_interface_unregister(struct class_interface *); | |||
| 323 | 234 | ||
| 324 | extern struct class *class_create(struct module *owner, const char *name); | 235 | extern struct class *class_create(struct module *owner, const char *name); |
| 325 | extern void class_destroy(struct class *cls); | 236 | extern void class_destroy(struct class *cls); |
| 326 | extern struct class_device *class_device_create(struct class *cls, | ||
| 327 | struct class_device *parent, | ||
| 328 | dev_t devt, | ||
| 329 | struct device *device, | ||
| 330 | const char *fmt, ...) | ||
| 331 | __attribute__((format(printf, 5, 6))); | ||
| 332 | extern void class_device_destroy(struct class *cls, dev_t devt); | ||
| 333 | 237 | ||
| 334 | /* | 238 | /* |
| 335 | * The type of device, "struct device" is embedded in. A class | 239 | * The type of device, "struct device" is embedded in. A class |
| @@ -465,7 +369,6 @@ struct device { | |||
| 465 | spinlock_t devres_lock; | 369 | spinlock_t devres_lock; |
| 466 | struct list_head devres_head; | 370 | struct list_head devres_head; |
| 467 | 371 | ||
| 468 | /* class_device migration path */ | ||
| 469 | struct list_head node; | 372 | struct list_head node; |
| 470 | struct class *class; | 373 | struct class *class; |
| 471 | dev_t devt; /* dev_t, creates the sysfs "dev" */ | 374 | dev_t devt; /* dev_t, creates the sysfs "dev" */ |
diff --git a/include/linux/io.h b/include/linux/io.h index e3b2dda6c8eb..3a03a3604cce 100644 --- a/include/linux/io.h +++ b/include/linux/io.h | |||
| @@ -58,9 +58,9 @@ static inline void devm_ioport_unmap(struct device *dev, void __iomem *addr) | |||
| 58 | } | 58 | } |
| 59 | #endif | 59 | #endif |
| 60 | 60 | ||
| 61 | void __iomem * devm_ioremap(struct device *dev, unsigned long offset, | 61 | void __iomem *devm_ioremap(struct device *dev, resource_size_t offset, |
| 62 | unsigned long size); | 62 | unsigned long size); |
| 63 | void __iomem * devm_ioremap_nocache(struct device *dev, unsigned long offset, | 63 | void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset, |
| 64 | unsigned long size); | 64 | unsigned long size); |
| 65 | void devm_iounmap(struct device *dev, void __iomem *addr); | 65 | void devm_iounmap(struct device *dev, void __iomem *addr); |
| 66 | int check_signature(const volatile void __iomem *io_addr, | 66 | int check_signature(const volatile void __iomem *io_addr, |
diff --git a/include/linux/klist.h b/include/linux/klist.h index 74071254c9d3..06c338ef7f1b 100644 --- a/include/linux/klist.h +++ b/include/linux/klist.h | |||
| @@ -25,37 +25,47 @@ struct klist { | |||
| 25 | void (*put)(struct klist_node *); | 25 | void (*put)(struct klist_node *); |
| 26 | }; | 26 | }; |
| 27 | 27 | ||
| 28 | #define KLIST_INIT(_name, _get, _put) \ | ||
| 29 | { .k_lock = __SPIN_LOCK_UNLOCKED(_name.k_lock), \ | ||
| 30 | .k_list = LIST_HEAD_INIT(_name.k_list), \ | ||
| 31 | .get = _get, \ | ||
| 32 | .put = _put, } | ||
| 28 | 33 | ||
| 29 | extern void klist_init(struct klist * k, void (*get)(struct klist_node *), | 34 | #define DEFINE_KLIST(_name, _get, _put) \ |
| 35 | struct klist _name = KLIST_INIT(_name, _get, _put) | ||
| 36 | |||
| 37 | extern void klist_init(struct klist *k, void (*get)(struct klist_node *), | ||
| 30 | void (*put)(struct klist_node *)); | 38 | void (*put)(struct klist_node *)); |
| 31 | 39 | ||
| 32 | struct klist_node { | 40 | struct klist_node { |
| 33 | struct klist * n_klist; | 41 | struct klist *n_klist; |
| 34 | struct list_head n_node; | 42 | struct list_head n_node; |
| 35 | struct kref n_ref; | 43 | struct kref n_ref; |
| 36 | struct completion n_removed; | 44 | struct completion n_removed; |
| 37 | }; | 45 | }; |
| 38 | 46 | ||
| 39 | extern void klist_add_tail(struct klist_node * n, struct klist * k); | 47 | extern void klist_add_tail(struct klist_node *n, struct klist *k); |
| 40 | extern void klist_add_head(struct klist_node * n, struct klist * k); | 48 | extern void klist_add_head(struct klist_node *n, struct klist *k); |
| 49 | extern void klist_add_after(struct klist_node *n, struct klist_node *pos); | ||
| 50 | extern void klist_add_before(struct klist_node *n, struct klist_node *pos); | ||
| 41 | 51 | ||
| 42 | extern void klist_del(struct klist_node * n); | 52 | extern void klist_del(struct klist_node *n); |
| 43 | extern void klist_remove(struct klist_node * n); | 53 | extern void klist_remove(struct klist_node *n); |
| 44 | 54 | ||
| 45 | extern int klist_node_attached(struct klist_node * n); | 55 | extern int klist_node_attached(struct klist_node *n); |
| 46 | 56 | ||
| 47 | 57 | ||
| 48 | struct klist_iter { | 58 | struct klist_iter { |
| 49 | struct klist * i_klist; | 59 | struct klist *i_klist; |
| 50 | struct list_head * i_head; | 60 | struct list_head *i_head; |
| 51 | struct klist_node * i_cur; | 61 | struct klist_node *i_cur; |
| 52 | }; | 62 | }; |
| 53 | 63 | ||
| 54 | 64 | ||
| 55 | extern void klist_iter_init(struct klist * k, struct klist_iter * i); | 65 | extern void klist_iter_init(struct klist *k, struct klist_iter *i); |
| 56 | extern void klist_iter_init_node(struct klist * k, struct klist_iter * i, | 66 | extern void klist_iter_init_node(struct klist *k, struct klist_iter *i, |
| 57 | struct klist_node * n); | 67 | struct klist_node *n); |
| 58 | extern void klist_iter_exit(struct klist_iter * i); | 68 | extern void klist_iter_exit(struct klist_iter *i); |
| 59 | extern struct klist_node * klist_next(struct klist_iter * i); | 69 | extern struct klist_node *klist_next(struct klist_iter *i); |
| 60 | 70 | ||
| 61 | #endif | 71 | #endif |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index add3c5a40827..7858eac40aa7 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
| @@ -190,6 +190,12 @@ static inline int sysfs_create_group(struct kobject *kobj, | |||
| 190 | return 0; | 190 | return 0; |
| 191 | } | 191 | } |
| 192 | 192 | ||
| 193 | static inline int sysfs_update_group(struct kobject *kobj, | ||
| 194 | const struct attribute_group *grp) | ||
| 195 | { | ||
| 196 | return 0; | ||
| 197 | } | ||
| 198 | |||
| 193 | static inline void sysfs_remove_group(struct kobject *kobj, | 199 | static inline void sysfs_remove_group(struct kobject *kobj, |
| 194 | const struct attribute_group *grp) | 200 | const struct attribute_group *grp) |
| 195 | { | 201 | { |
