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