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