1 /* 2 * class.c - basic device class management 3 * 4 * Copyright (c) 2002-3 Patrick Mochel 5 * Copyright (c) 2002-3 Open Source Development Labs 6 * Copyright (c) 2003-2004 Greg Kroah-Hartman 7 * Copyright (c) 2003-2004 IBM Corp. 8 * 9 * This file is released under the GPLv2 10 * 11 */ 12 13 #include <linux/device.h> 14 #include <linux/module.h> 15 #include <linux/init.h> 16 #include <linux/string.h> 17 #include <linux/kdev_t.h> 18 #include <linux/err.h> 19 #include <linux/slab.h> 20 #include <linux/genhd.h> 21 #include <linux/mutex.h> 22 #include "base.h" 23 24 #define to_class_attr(_attr) container_of(_attr, struct class_attribute, attr) 25 26 static ssize_t class_attr_show(struct kobject *kobj, struct attribute *attr, 27 char *buf) 28 { 29 struct class_attribute *class_attr = to_class_attr(attr); 30 struct subsys_private *cp = to_subsys_private(kobj); 31 ssize_t ret = -EIO; 32 33 if (class_attr->show) 34 ret = class_attr->show(cp->class, class_attr, buf); 35 return ret; 36 } 37 38 static ssize_t class_attr_store(struct kobject *kobj, struct attribute *attr, 39 const char *buf, size_t count) 40 { 41 struct class_attribute *class_attr = to_class_attr(attr); 42 struct subsys_private *cp = to_subsys_private(kobj); 43 ssize_t ret = -EIO; 44 45 if (class_attr->store) 46 ret = class_attr->store(cp->class, class_attr, buf, count); 47 return ret; 48 } 49 50 static void class_release(struct kobject *kobj) 51 { 52 struct subsys_private *cp = to_subsys_private(kobj); 53 struct class *class = cp->class; 54 55 pr_debug("class '%s': release.\n", class->name); 56 57 if (class->class_release) 58 class->class_release(class); 59 else 60 pr_debug("class '%s' does not have a release() function, " 61 "be careful\n", class->name); 62 63 kfree(cp); 64 } 65 66 static const struct kobj_ns_type_operations *class_child_ns_type(struct kobject *kobj) 67 { 68 struct subsys_private *cp = to_subsys_private(kobj); 69 struct class *class = cp->class; 70 71 return class->ns_type; 72 } 73 74 static const struct sysfs_ops class_sysfs_ops = { 75 .show = class_attr_show, 76 .store = class_attr_store, 77 }; 78 79 static struct kobj_type class_ktype = { 80 .sysfs_ops = &class_sysfs_ops, 81 .release = class_release, 82 .child_ns_type = class_child_ns_type, 83 }; 84 85 /* Hotplug events for classes go to the class subsys */ 86 static struct kset *class_kset; 87 88 89 int class_create_file_ns(struct class *cls, const struct class_attribute *attr, 90 const void *ns) 91 { 92 int error; 93 94 if (cls) 95 error = sysfs_create_file_ns(&cls->p->subsys.kobj, 96 &attr->attr, ns); 97 else 98 error = -EINVAL; 99 return error; 100 } 101 102 void class_remove_file_ns(struct class *cls, const struct class_attribute *attr, 103 const void *ns) 104 { 105 if (cls) 106 sysfs_remove_file_ns(&cls->p->subsys.kobj, &attr->attr, ns); 107 } 108 109 static struct class *class_get(struct class *cls) 110 { 111 if (cls) 112 kset_get(&cls->p->subsys); 113 return cls; 114 } 115 116 static void class_put(struct class *cls) 117 { 118 if (cls) 119 kset_put(&cls->p->subsys); 120 } 121 122 static void klist_class_dev_get(struct klist_node *n) 123 { 124 struct device *dev = container_of(n, struct device, knode_class); 125 126 get_device(dev); 127 } 128 129 static void klist_class_dev_put(struct klist_node *n) 130 { 131 struct device *dev = container_of(n, struct device, knode_class); 132 133 put_device(dev); 134 } 135 136 static int class_add_groups(struct class *cls, 137 const struct attribute_group **groups) 138 { 139 return sysfs_create_groups(&cls->p->subsys.kobj, groups); 140 } 141 142 static void class_remove_groups(struct class *cls, 143 const struct attribute_group **groups) 144 { 145 return sysfs_remove_groups(&cls->p->subsys.kobj, groups); 146 } 147 148 int __class_register(struct class *cls, struct lock_class_key *key) 149 { 150 struct subsys_private *cp; 151 int error; 152 153 pr_debug("device class '%s': registering\n", cls->name); 154 155 cp = kzalloc(sizeof(*cp), GFP_KERNEL); 156 if (!cp) 157 return -ENOMEM; 158 klist_init(&cp->klist_devices, klist_class_dev_get, klist_class_dev_put); 159 INIT_LIST_HEAD(&cp->interfaces); 160 kset_init(&cp->glue_dirs); 161 __mutex_init(&cp->mutex, "subsys mutex", key); 162 error = kobject_set_name(&cp->subsys.kobj, "%s", cls->name); 163 if (error) { 164 kfree(cp); 165 return error; 166 } 167 168 /* set the default /sys/dev directory for devices of this class */ 169 if (!cls->dev_kobj) 170 cls->dev_kobj = sysfs_dev_char_kobj; 171 172 #if defined(CONFIG_BLOCK) 173 /* let the block class directory show up in the root of sysfs */ 174 if (!sysfs_deprecated || cls != &block_class) 175 cp->subsys.kobj.kset = class_kset; 176 #else 177 cp->subsys.kobj.kset = class_kset; 178 #endif 179 cp->subsys.kobj.ktype = &class_ktype; 180 cp->class = cls; 181 cls->p = cp; 182 183 error = kset_register(&cp->subsys); 184 if (error) { 185 kfree(cp); 186 return error; 187 } 188 error = class_add_groups(class_get(cls), cls->class_groups); 189 class_put(cls); 190 return error; 191 } 192 EXPORT_SYMBOL_GPL(__class_register); 193 194 void class_unregister(struct class *cls) 195 { 196 pr_debug("device class '%s': unregistering\n", cls->name); 197 class_remove_groups(cls, cls->class_groups); 198 kset_unregister(&cls->p->subsys); 199 } 200 201 static void class_create_release(struct class *cls) 202 { 203 pr_debug("%s called for %s\n", __func__, cls->name); 204 kfree(cls); 205 } 206 207 /** 208 * class_create - create a struct class structure 209 * @owner: pointer to the module that is to "own" this struct class 210 * @name: pointer to a string for the name of this class. 211 * @key: the lock_class_key for this class; used by mutex lock debugging 212 * 213 * This is used to create a struct class pointer that can then be used 214 * in calls to device_create(). 215 * 216 * Returns &struct class pointer on success, or ERR_PTR() on error. 217 * 218 * Note, the pointer created here is to be destroyed when finished by 219 * making a call to class_destroy(). 220 */ 221 struct class *__class_create(struct module *owner, const char *name, 222 struct lock_class_key *key) 223 { 224 struct class *cls; 225 int retval; 226 227 cls = kzalloc(sizeof(*cls), GFP_KERNEL); 228 if (!cls) { 229 retval = -ENOMEM; 230 goto error; 231 } 232 233 cls->name = name; 234 cls->owner = owner; 235 cls->class_release = class_create_release; 236 237 retval = __class_register(cls, key); 238 if (retval) 239 goto error; 240 241 return cls; 242 243 error: 244 kfree(cls); 245 return ERR_PTR(retval); 246 } 247 EXPORT_SYMBOL_GPL(__class_create); 248 249 /** 250 * class_destroy - destroys a struct class structure 251 * @cls: pointer to the struct class that is to be destroyed 252 * 253 * Note, the pointer to be destroyed must have been created with a call 254 * to class_create(). 255 */ 256 void class_destroy(struct class *cls) 257 { 258 if ((cls == NULL) || (IS_ERR(cls))) 259 return; 260 261 class_unregister(cls); 262 } 263 264 /** 265 * class_dev_iter_init - initialize class device iterator 266 * @iter: class iterator to initialize 267 * @class: the class we wanna iterate over 268 * @start: the device to start iterating from, if any 269 * @type: device_type of the devices to iterate over, NULL for all 270 * 271 * Initialize class iterator @iter such that it iterates over devices 272 * of @class. If @start is set, the list iteration will start there, 273 * otherwise if it is NULL, the iteration starts at the beginning of 274 * the list. 275 */ 276 void class_dev_iter_init(struct class_dev_iter *iter, struct class *class, 277 struct device *start, const struct device_type *type) 278 { 279 struct klist_node *start_knode = NULL; 280 281 if (start) 282 start_knode = &start->knode_class; 283 klist_iter_init_node(&class->p->klist_devices, &iter->ki, start_knode); 284 iter->type = type; 285 } 286 EXPORT_SYMBOL_GPL(class_dev_iter_init); 287 288 /** 289 * class_dev_iter_next - iterate to the next device 290 * @iter: class iterator to proceed 291 * 292 * Proceed @iter to the next device and return it. Returns NULL if 293 * iteration is complete. 294 * 295 * The returned device is referenced and won't be released till 296 * iterator is proceed to the next device or exited. The caller is 297 * free to do whatever it wants to do with the device including 298 * calling back into class code. 299 */ 300 struct device *class_dev_iter_next(struct class_dev_iter *iter) 301 { 302 struct klist_node *knode; 303 struct device *dev; 304 305 while (1) { 306 knode = klist_next(&iter->ki); 307 if (!knode) 308 return NULL; 309 dev = container_of(knode, struct device, knode_class); 310 if (!iter->type || iter->type == dev->type) 311 return dev; 312 } 313 } 314 EXPORT_SYMBOL_GPL(class_dev_iter_next); 315 316 /** 317 * class_dev_iter_exit - finish iteration 318 * @iter: class iterator to finish 319 * 320 * Finish an iteration. Always call this function after iteration is 321 * complete whether the iteration ran till the end or not. 322 */ 323 void class_dev_iter_exit(struct class_dev_iter *iter) 324 { 325 klist_iter_exit(&iter->ki); 326 } 327 EXPORT_SYMBOL_GPL(class_dev_iter_exit); 328 329 /** 330 * class_for_each_device - device iterator 331 * @class: the class we're iterating 332 * @start: the device to start with in the list, if any. 333 * @data: data for the callback 334 * @fn: function to be called for each device 335 * 336 * Iterate over @class's list of devices, and call @fn for each, 337 * passing it @data. If @start is set, the list iteration will start 338 * there, otherwise if it is NULL, the iteration starts at the 339 * beginning of the list. 340 * 341 * We check the return of @fn each time. If it returns anything 342 * other than 0, we break out and return that value. 343 * 344 * @fn is allowed to do anything including calling back into class 345 * code. There's no locking restriction. 346 */ 347 int class_for_each_device(struct class *class, struct device *start, 348 void *data, int (*fn)(struct device *, void *)) 349 { 350 struct class_dev_iter iter; 351 struct device *dev; 352 int error = 0; 353 354 if (!class) 355 return -EINVAL; 356 if (!class->p) { 357 WARN(1, "%s called for class '%s' before it was initialized", 358 __func__, class->name); 359 return -EINVAL; 360 } 361 362 class_dev_iter_init(&iter, class, start, NULL); 363 while ((dev = class_dev_iter_next(&iter))) { 364 error = fn(dev, data); 365 if (error) 366 break; 367 } 368 class_dev_iter_exit(&iter); 369 370 return error; 371 } 372 EXPORT_SYMBOL_GPL(class_for_each_device); 373 374 /** 375 * class_find_device - device iterator for locating a particular device 376 * @class: the class we're iterating 377 * @start: Device to begin with 378 * @data: data for the match function 379 * @match: function to check device 380 * 381 * This is similar to the class_for_each_dev() function above, but it 382 * returns a reference to a device that is 'found' for later use, as 383 * determined by the @match callback. 384 * 385 * The callback should return 0 if the device doesn't match and non-zero 386 * if it does. If the callback returns non-zero, this function will 387 * return to the caller and not iterate over any more devices. 388 * 389 * Note, you will need to drop the reference with put_device() after use. 390 * 391 * @match is allowed to do anything including calling back into class 392 * code. There's no locking restriction. 393 */ 394 struct device *class_find_device(struct class *class, struct device *start, 395 const void *data, 396 int (*match)(struct device *, const void *)) 397 { 398 struct class_dev_iter iter; 399 struct device *dev; 400 401 if (!class) 402 return NULL; 403 if (!class->p) { 404 WARN(1, "%s called for class '%s' before it was initialized", 405 __func__, class->name); 406 return NULL; 407 } 408 409 class_dev_iter_init(&iter, class, start, NULL); 410 while ((dev = class_dev_iter_next(&iter))) { 411 if (match(dev, data)) { 412 get_device(dev); 413 break; 414 } 415 } 416 class_dev_iter_exit(&iter); 417 418 return dev; 419 } 420 EXPORT_SYMBOL_GPL(class_find_device); 421 422 int class_interface_register(struct class_interface *class_intf) 423 { 424 struct class *parent; 425 struct class_dev_iter iter; 426 struct device *dev; 427 428 if (!class_intf || !class_intf->class) 429 return -ENODEV; 430 431 parent = class_get(class_intf->class); 432 if (!parent) 433 return -EINVAL; 434 435 mutex_lock(&parent->p->mutex); 436 list_add_tail(&class_intf->node, &parent->p->interfaces); 437 if (class_intf->add_dev) { 438 class_dev_iter_init(&iter, parent, NULL, NULL); 439 while ((dev = class_dev_iter_next(&iter))) 440 class_intf->add_dev(dev, class_intf); 441 class_dev_iter_exit(&iter); 442 } 443 mutex_unlock(&parent->p->mutex); 444 445 return 0; 446 } 447 448 void class_interface_unregister(struct class_interface *class_intf) 449 { 450 struct class *parent = class_intf->class; 451 struct class_dev_iter iter; 452 struct device *dev; 453 454 if (!parent) 455 return; 456 457 mutex_lock(&parent->p->mutex); 458 list_del_init(&class_intf->node); 459 if (class_intf->remove_dev) { 460 class_dev_iter_init(&iter, parent, NULL, NULL); 461 while ((dev = class_dev_iter_next(&iter))) 462 class_intf->remove_dev(dev, class_intf); 463 class_dev_iter_exit(&iter); 464 } 465 mutex_unlock(&parent->p->mutex); 466 467 class_put(parent); 468 } 469 470 ssize_t show_class_attr_string(struct class *class, 471 struct class_attribute *attr, char *buf) 472 { 473 struct class_attribute_string *cs; 474 475 cs = container_of(attr, struct class_attribute_string, attr); 476 return snprintf(buf, PAGE_SIZE, "%s\n", cs->str); 477 } 478 479 EXPORT_SYMBOL_GPL(show_class_attr_string); 480 481 struct class_compat { 482 struct kobject *kobj; 483 }; 484 485 /** 486 * class_compat_register - register a compatibility class 487 * @name: the name of the class 488 * 489 * Compatibility class are meant as a temporary user-space compatibility 490 * workaround when converting a family of class devices to a bus devices. 491 */ 492 struct class_compat *class_compat_register(const char *name) 493 { 494 struct class_compat *cls; 495 496 cls = kmalloc(sizeof(struct class_compat), GFP_KERNEL); 497 if (!cls) 498 return NULL; 499 cls->kobj = kobject_create_and_add(name, &class_kset->kobj); 500 if (!cls->kobj) { 501 kfree(cls); 502 return NULL; 503 } 504 return cls; 505 } 506 EXPORT_SYMBOL_GPL(class_compat_register); 507 508 /** 509 * class_compat_unregister - unregister a compatibility class 510 * @cls: the class to unregister 511 */ 512 void class_compat_unregister(struct class_compat *cls) 513 { 514 kobject_put(cls->kobj); 515 kfree(cls); 516 } 517 EXPORT_SYMBOL_GPL(class_compat_unregister); 518 519 /** 520 * class_compat_create_link - create a compatibility class device link to 521 * a bus device 522 * @cls: the compatibility class 523 * @dev: the target bus device 524 * @device_link: an optional device to which a "device" link should be created 525 */ 526 int class_compat_create_link(struct class_compat *cls, struct device *dev, 527 struct device *device_link) 528 { 529 int error; 530 531 error = sysfs_create_link(cls->kobj, &dev->kobj, dev_name(dev)); 532 if (error) 533 return error; 534 535 /* 536 * Optionally add a "device" link (typically to the parent), as a 537 * class device would have one and we want to provide as much 538 * backwards compatibility as possible. 539 */ 540 if (device_link) { 541 error = sysfs_create_link(&dev->kobj, &device_link->kobj, 542 "device"); 543 if (error) 544 sysfs_remove_link(cls->kobj, dev_name(dev)); 545 } 546 547 return error; 548 } 549 EXPORT_SYMBOL_GPL(class_compat_create_link); 550 551 /** 552 * class_compat_remove_link - remove a compatibility class device link to 553 * a bus device 554 * @cls: the compatibility class 555 * @dev: the target bus device 556 * @device_link: an optional device to which a "device" link was previously 557 * created 558 */ 559 void class_compat_remove_link(struct class_compat *cls, struct device *dev, 560 struct device *device_link) 561 { 562 if (device_link) 563 sysfs_remove_link(&dev->kobj, "device"); 564 sysfs_remove_link(cls->kobj, dev_name(dev)); 565 } 566 EXPORT_SYMBOL_GPL(class_compat_remove_link); 567 568 int __init classes_init(void) 569 { 570 class_kset = kset_create_and_add("class", NULL, NULL); 571 if (!class_kset) 572 return -ENOMEM; 573 return 0; 574 } 575 576 EXPORT_SYMBOL_GPL(class_create_file_ns); 577 EXPORT_SYMBOL_GPL(class_remove_file_ns); 578 EXPORT_SYMBOL_GPL(class_unregister); 579 EXPORT_SYMBOL_GPL(class_destroy); 580 581 EXPORT_SYMBOL_GPL(class_interface_register); 582 EXPORT_SYMBOL_GPL(class_interface_unregister); 583