at v2.6.23-rc1 1379 lines 35 kB view raw
1/* 2 * drivers/base/core.c - core driver model code (device registration, etc) 3 * 4 * Copyright (c) 2002-3 Patrick Mochel 5 * Copyright (c) 2002-3 Open Source Development Labs 6 * Copyright (c) 2006 Greg Kroah-Hartman <gregkh@suse.de> 7 * Copyright (c) 2006 Novell, Inc. 8 * 9 * This file is released under the GPLv2 10 * 11 */ 12 13#include <linux/device.h> 14#include <linux/err.h> 15#include <linux/init.h> 16#include <linux/module.h> 17#include <linux/slab.h> 18#include <linux/string.h> 19#include <linux/kdev_t.h> 20#include <linux/notifier.h> 21 22#include <asm/semaphore.h> 23 24#include "base.h" 25#include "power/power.h" 26 27extern const char *kobject_actions[]; 28 29int (*platform_notify)(struct device * dev) = NULL; 30int (*platform_notify_remove)(struct device * dev) = NULL; 31 32/* 33 * sysfs bindings for devices. 34 */ 35 36/** 37 * dev_driver_string - Return a device's driver name, if at all possible 38 * @dev: struct device to get the name of 39 * 40 * Will return the device's driver's name if it is bound to a device. If 41 * the device is not bound to a device, it will return the name of the bus 42 * it is attached to. If it is not attached to a bus either, an empty 43 * string will be returned. 44 */ 45const char *dev_driver_string(struct device *dev) 46{ 47 return dev->driver ? dev->driver->name : 48 (dev->bus ? dev->bus->name : 49 (dev->class ? dev->class->name : "")); 50} 51EXPORT_SYMBOL(dev_driver_string); 52 53#define to_dev(obj) container_of(obj, struct device, kobj) 54#define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr) 55 56static ssize_t 57dev_attr_show(struct kobject * kobj, struct attribute * attr, char * buf) 58{ 59 struct device_attribute * dev_attr = to_dev_attr(attr); 60 struct device * dev = to_dev(kobj); 61 ssize_t ret = -EIO; 62 63 if (dev_attr->show) 64 ret = dev_attr->show(dev, dev_attr, buf); 65 return ret; 66} 67 68static ssize_t 69dev_attr_store(struct kobject * kobj, struct attribute * attr, 70 const char * buf, size_t count) 71{ 72 struct device_attribute * dev_attr = to_dev_attr(attr); 73 struct device * dev = to_dev(kobj); 74 ssize_t ret = -EIO; 75 76 if (dev_attr->store) 77 ret = dev_attr->store(dev, dev_attr, buf, count); 78 return ret; 79} 80 81static struct sysfs_ops dev_sysfs_ops = { 82 .show = dev_attr_show, 83 .store = dev_attr_store, 84}; 85 86 87/** 88 * device_release - free device structure. 89 * @kobj: device's kobject. 90 * 91 * This is called once the reference count for the object 92 * reaches 0. We forward the call to the device's release 93 * method, which should handle actually freeing the structure. 94 */ 95static void device_release(struct kobject * kobj) 96{ 97 struct device * dev = to_dev(kobj); 98 99 if (dev->release) 100 dev->release(dev); 101 else if (dev->type && dev->type->release) 102 dev->type->release(dev); 103 else if (dev->class && dev->class->dev_release) 104 dev->class->dev_release(dev); 105 else { 106 printk(KERN_ERR "Device '%s' does not have a release() function, " 107 "it is broken and must be fixed.\n", 108 dev->bus_id); 109 WARN_ON(1); 110 } 111} 112 113static struct kobj_type ktype_device = { 114 .release = device_release, 115 .sysfs_ops = &dev_sysfs_ops, 116}; 117 118 119static int dev_uevent_filter(struct kset *kset, struct kobject *kobj) 120{ 121 struct kobj_type *ktype = get_ktype(kobj); 122 123 if (ktype == &ktype_device) { 124 struct device *dev = to_dev(kobj); 125 if (dev->uevent_suppress) 126 return 0; 127 if (dev->bus) 128 return 1; 129 if (dev->class) 130 return 1; 131 } 132 return 0; 133} 134 135static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj) 136{ 137 struct device *dev = to_dev(kobj); 138 139 if (dev->bus) 140 return dev->bus->name; 141 if (dev->class) 142 return dev->class->name; 143 return NULL; 144} 145 146static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp, 147 int num_envp, char *buffer, int buffer_size) 148{ 149 struct device *dev = to_dev(kobj); 150 int i = 0; 151 int length = 0; 152 int retval = 0; 153 154 /* add the major/minor if present */ 155 if (MAJOR(dev->devt)) { 156 add_uevent_var(envp, num_envp, &i, 157 buffer, buffer_size, &length, 158 "MAJOR=%u", MAJOR(dev->devt)); 159 add_uevent_var(envp, num_envp, &i, 160 buffer, buffer_size, &length, 161 "MINOR=%u", MINOR(dev->devt)); 162 } 163 164 if (dev->type && dev->type->name) 165 add_uevent_var(envp, num_envp, &i, 166 buffer, buffer_size, &length, 167 "DEVTYPE=%s", dev->type->name); 168 169 if (dev->driver) 170 add_uevent_var(envp, num_envp, &i, 171 buffer, buffer_size, &length, 172 "DRIVER=%s", dev->driver->name); 173 174#ifdef CONFIG_SYSFS_DEPRECATED 175 if (dev->class) { 176 struct device *parent = dev->parent; 177 178 /* find first bus device in parent chain */ 179 while (parent && !parent->bus) 180 parent = parent->parent; 181 if (parent && parent->bus) { 182 const char *path; 183 184 path = kobject_get_path(&parent->kobj, GFP_KERNEL); 185 if (path) { 186 add_uevent_var(envp, num_envp, &i, 187 buffer, buffer_size, &length, 188 "PHYSDEVPATH=%s", path); 189 kfree(path); 190 } 191 192 add_uevent_var(envp, num_envp, &i, 193 buffer, buffer_size, &length, 194 "PHYSDEVBUS=%s", parent->bus->name); 195 196 if (parent->driver) 197 add_uevent_var(envp, num_envp, &i, 198 buffer, buffer_size, &length, 199 "PHYSDEVDRIVER=%s", parent->driver->name); 200 } 201 } else if (dev->bus) { 202 add_uevent_var(envp, num_envp, &i, 203 buffer, buffer_size, &length, 204 "PHYSDEVBUS=%s", dev->bus->name); 205 206 if (dev->driver) 207 add_uevent_var(envp, num_envp, &i, 208 buffer, buffer_size, &length, 209 "PHYSDEVDRIVER=%s", dev->driver->name); 210 } 211#endif 212 213 /* terminate, set to next free slot, shrink available space */ 214 envp[i] = NULL; 215 envp = &envp[i]; 216 num_envp -= i; 217 buffer = &buffer[length]; 218 buffer_size -= length; 219 220 if (dev->bus && dev->bus->uevent) { 221 /* have the bus specific function add its stuff */ 222 retval = dev->bus->uevent(dev, envp, num_envp, buffer, buffer_size); 223 if (retval) 224 pr_debug ("%s: bus uevent() returned %d\n", 225 __FUNCTION__, retval); 226 } 227 228 if (dev->class && dev->class->dev_uevent) { 229 /* have the class specific function add its stuff */ 230 retval = dev->class->dev_uevent(dev, envp, num_envp, buffer, buffer_size); 231 if (retval) 232 pr_debug("%s: class uevent() returned %d\n", 233 __FUNCTION__, retval); 234 } 235 236 if (dev->type && dev->type->uevent) { 237 /* have the device type specific fuction add its stuff */ 238 retval = dev->type->uevent(dev, envp, num_envp, buffer, buffer_size); 239 if (retval) 240 pr_debug("%s: dev_type uevent() returned %d\n", 241 __FUNCTION__, retval); 242 } 243 244 return retval; 245} 246 247static struct kset_uevent_ops device_uevent_ops = { 248 .filter = dev_uevent_filter, 249 .name = dev_uevent_name, 250 .uevent = dev_uevent, 251}; 252 253static ssize_t show_uevent(struct device *dev, struct device_attribute *attr, 254 char *buf) 255{ 256 struct kobject *top_kobj; 257 struct kset *kset; 258 char *envp[32]; 259 char *data = NULL; 260 char *pos; 261 int i; 262 size_t count = 0; 263 int retval; 264 265 /* search the kset, the device belongs to */ 266 top_kobj = &dev->kobj; 267 if (!top_kobj->kset && top_kobj->parent) { 268 do { 269 top_kobj = top_kobj->parent; 270 } while (!top_kobj->kset && top_kobj->parent); 271 } 272 if (!top_kobj->kset) 273 goto out; 274 kset = top_kobj->kset; 275 if (!kset->uevent_ops || !kset->uevent_ops->uevent) 276 goto out; 277 278 /* respect filter */ 279 if (kset->uevent_ops && kset->uevent_ops->filter) 280 if (!kset->uevent_ops->filter(kset, &dev->kobj)) 281 goto out; 282 283 data = (char *)get_zeroed_page(GFP_KERNEL); 284 if (!data) 285 return -ENOMEM; 286 287 /* let the kset specific function add its keys */ 288 pos = data; 289 retval = kset->uevent_ops->uevent(kset, &dev->kobj, 290 envp, ARRAY_SIZE(envp), 291 pos, PAGE_SIZE); 292 if (retval) 293 goto out; 294 295 /* copy keys to file */ 296 for (i = 0; envp[i]; i++) { 297 pos = &buf[count]; 298 count += sprintf(pos, "%s\n", envp[i]); 299 } 300out: 301 free_page((unsigned long)data); 302 return count; 303} 304 305static ssize_t store_uevent(struct device *dev, struct device_attribute *attr, 306 const char *buf, size_t count) 307{ 308 size_t len = count; 309 enum kobject_action action; 310 311 if (len && buf[len-1] == '\n') 312 len--; 313 314 for (action = 0; action < KOBJ_MAX; action++) { 315 if (strncmp(kobject_actions[action], buf, len) != 0) 316 continue; 317 if (kobject_actions[action][len] != '\0') 318 continue; 319 kobject_uevent(&dev->kobj, action); 320 goto out; 321 } 322 323 dev_err(dev, "uevent: unsupported action-string; this will " 324 "be ignored in a future kernel version\n"); 325 kobject_uevent(&dev->kobj, KOBJ_ADD); 326out: 327 return count; 328} 329 330static struct device_attribute uevent_attr = 331 __ATTR(uevent, S_IRUGO | S_IWUSR, show_uevent, store_uevent); 332 333static int device_add_attributes(struct device *dev, 334 struct device_attribute *attrs) 335{ 336 int error = 0; 337 int i; 338 339 if (attrs) { 340 for (i = 0; attr_name(attrs[i]); i++) { 341 error = device_create_file(dev, &attrs[i]); 342 if (error) 343 break; 344 } 345 if (error) 346 while (--i >= 0) 347 device_remove_file(dev, &attrs[i]); 348 } 349 return error; 350} 351 352static void device_remove_attributes(struct device *dev, 353 struct device_attribute *attrs) 354{ 355 int i; 356 357 if (attrs) 358 for (i = 0; attr_name(attrs[i]); i++) 359 device_remove_file(dev, &attrs[i]); 360} 361 362static int device_add_groups(struct device *dev, 363 struct attribute_group **groups) 364{ 365 int error = 0; 366 int i; 367 368 if (groups) { 369 for (i = 0; groups[i]; i++) { 370 error = sysfs_create_group(&dev->kobj, groups[i]); 371 if (error) { 372 while (--i >= 0) 373 sysfs_remove_group(&dev->kobj, groups[i]); 374 break; 375 } 376 } 377 } 378 return error; 379} 380 381static void device_remove_groups(struct device *dev, 382 struct attribute_group **groups) 383{ 384 int i; 385 386 if (groups) 387 for (i = 0; groups[i]; i++) 388 sysfs_remove_group(&dev->kobj, groups[i]); 389} 390 391static int device_add_attrs(struct device *dev) 392{ 393 struct class *class = dev->class; 394 struct device_type *type = dev->type; 395 int error; 396 397 if (class) { 398 error = device_add_attributes(dev, class->dev_attrs); 399 if (error) 400 return error; 401 } 402 403 if (type) { 404 error = device_add_groups(dev, type->groups); 405 if (error) 406 goto err_remove_class_attrs; 407 } 408 409 error = device_add_groups(dev, dev->groups); 410 if (error) 411 goto err_remove_type_groups; 412 413 return 0; 414 415 err_remove_type_groups: 416 if (type) 417 device_remove_groups(dev, type->groups); 418 err_remove_class_attrs: 419 if (class) 420 device_remove_attributes(dev, class->dev_attrs); 421 422 return error; 423} 424 425static void device_remove_attrs(struct device *dev) 426{ 427 struct class *class = dev->class; 428 struct device_type *type = dev->type; 429 430 device_remove_groups(dev, dev->groups); 431 432 if (type) 433 device_remove_groups(dev, type->groups); 434 435 if (class) 436 device_remove_attributes(dev, class->dev_attrs); 437} 438 439 440static ssize_t show_dev(struct device *dev, struct device_attribute *attr, 441 char *buf) 442{ 443 return print_dev_t(buf, dev->devt); 444} 445 446static struct device_attribute devt_attr = 447 __ATTR(dev, S_IRUGO, show_dev, NULL); 448 449/* 450 * devices_subsys - structure to be registered with kobject core. 451 */ 452 453decl_subsys(devices, &ktype_device, &device_uevent_ops); 454 455 456/** 457 * device_create_file - create sysfs attribute file for device. 458 * @dev: device. 459 * @attr: device attribute descriptor. 460 */ 461 462int device_create_file(struct device * dev, struct device_attribute * attr) 463{ 464 int error = 0; 465 if (get_device(dev)) { 466 error = sysfs_create_file(&dev->kobj, &attr->attr); 467 put_device(dev); 468 } 469 return error; 470} 471 472/** 473 * device_remove_file - remove sysfs attribute file. 474 * @dev: device. 475 * @attr: device attribute descriptor. 476 */ 477 478void device_remove_file(struct device * dev, struct device_attribute * attr) 479{ 480 if (get_device(dev)) { 481 sysfs_remove_file(&dev->kobj, &attr->attr); 482 put_device(dev); 483 } 484} 485 486/** 487 * device_create_bin_file - create sysfs binary attribute file for device. 488 * @dev: device. 489 * @attr: device binary attribute descriptor. 490 */ 491int device_create_bin_file(struct device *dev, struct bin_attribute *attr) 492{ 493 int error = -EINVAL; 494 if (dev) 495 error = sysfs_create_bin_file(&dev->kobj, attr); 496 return error; 497} 498EXPORT_SYMBOL_GPL(device_create_bin_file); 499 500/** 501 * device_remove_bin_file - remove sysfs binary attribute file 502 * @dev: device. 503 * @attr: device binary attribute descriptor. 504 */ 505void device_remove_bin_file(struct device *dev, struct bin_attribute *attr) 506{ 507 if (dev) 508 sysfs_remove_bin_file(&dev->kobj, attr); 509} 510EXPORT_SYMBOL_GPL(device_remove_bin_file); 511 512/** 513 * device_schedule_callback_owner - helper to schedule a callback for a device 514 * @dev: device. 515 * @func: callback function to invoke later. 516 * @owner: module owning the callback routine 517 * 518 * Attribute methods must not unregister themselves or their parent device 519 * (which would amount to the same thing). Attempts to do so will deadlock, 520 * since unregistration is mutually exclusive with driver callbacks. 521 * 522 * Instead methods can call this routine, which will attempt to allocate 523 * and schedule a workqueue request to call back @func with @dev as its 524 * argument in the workqueue's process context. @dev will be pinned until 525 * @func returns. 526 * 527 * This routine is usually called via the inline device_schedule_callback(), 528 * which automatically sets @owner to THIS_MODULE. 529 * 530 * Returns 0 if the request was submitted, -ENOMEM if storage could not 531 * be allocated, -ENODEV if a reference to @owner isn't available. 532 * 533 * NOTE: This routine won't work if CONFIG_SYSFS isn't set! It uses an 534 * underlying sysfs routine (since it is intended for use by attribute 535 * methods), and if sysfs isn't available you'll get nothing but -ENOSYS. 536 */ 537int device_schedule_callback_owner(struct device *dev, 538 void (*func)(struct device *), struct module *owner) 539{ 540 return sysfs_schedule_callback(&dev->kobj, 541 (void (*)(void *)) func, dev, owner); 542} 543EXPORT_SYMBOL_GPL(device_schedule_callback_owner); 544 545static void klist_children_get(struct klist_node *n) 546{ 547 struct device *dev = container_of(n, struct device, knode_parent); 548 549 get_device(dev); 550} 551 552static void klist_children_put(struct klist_node *n) 553{ 554 struct device *dev = container_of(n, struct device, knode_parent); 555 556 put_device(dev); 557} 558 559 560/** 561 * device_initialize - init device structure. 562 * @dev: device. 563 * 564 * This prepares the device for use by other layers, 565 * including adding it to the device hierarchy. 566 * It is the first half of device_register(), if called by 567 * that, though it can also be called separately, so one 568 * may use @dev's fields (e.g. the refcount). 569 */ 570 571void device_initialize(struct device *dev) 572{ 573 kobj_set_kset_s(dev, devices_subsys); 574 kobject_init(&dev->kobj); 575 klist_init(&dev->klist_children, klist_children_get, 576 klist_children_put); 577 INIT_LIST_HEAD(&dev->dma_pools); 578 INIT_LIST_HEAD(&dev->node); 579 init_MUTEX(&dev->sem); 580 spin_lock_init(&dev->devres_lock); 581 INIT_LIST_HEAD(&dev->devres_head); 582 device_init_wakeup(dev, 0); 583 set_dev_node(dev, -1); 584} 585 586#ifdef CONFIG_SYSFS_DEPRECATED 587static struct kobject * get_device_parent(struct device *dev, 588 struct device *parent) 589{ 590 /* Set the parent to the class, not the parent device */ 591 /* this keeps sysfs from having a symlink to make old udevs happy */ 592 if (dev->class) 593 return &dev->class->subsys.kobj; 594 else if (parent) 595 return &parent->kobj; 596 597 return NULL; 598} 599#else 600static struct kobject *virtual_device_parent(struct device *dev) 601{ 602 static struct kobject *virtual_dir = NULL; 603 604 if (!virtual_dir) 605 virtual_dir = kobject_add_dir(&devices_subsys.kobj, "virtual"); 606 607 return virtual_dir; 608} 609 610static struct kobject * get_device_parent(struct device *dev, 611 struct device *parent) 612{ 613 if (dev->class) { 614 struct kobject *kobj = NULL; 615 struct kobject *parent_kobj; 616 struct kobject *k; 617 618 /* 619 * If we have no parent, we live in "virtual". 620 * Class-devices with a bus-device as parent, live 621 * in a class-directory to prevent namespace collisions. 622 */ 623 if (parent == NULL) 624 parent_kobj = virtual_device_parent(dev); 625 else if (parent->class) 626 return &parent->kobj; 627 else 628 parent_kobj = &parent->kobj; 629 630 /* find our class-directory at the parent and reference it */ 631 spin_lock(&dev->class->class_dirs.list_lock); 632 list_for_each_entry(k, &dev->class->class_dirs.list, entry) 633 if (k->parent == parent_kobj) { 634 kobj = kobject_get(k); 635 break; 636 } 637 spin_unlock(&dev->class->class_dirs.list_lock); 638 if (kobj) 639 return kobj; 640 641 /* or create a new class-directory at the parent device */ 642 return kobject_kset_add_dir(&dev->class->class_dirs, 643 parent_kobj, dev->class->name); 644 } 645 646 if (parent) 647 return &parent->kobj; 648 return NULL; 649} 650#endif 651 652static int setup_parent(struct device *dev, struct device *parent) 653{ 654 struct kobject *kobj; 655 kobj = get_device_parent(dev, parent); 656 if (IS_ERR(kobj)) 657 return PTR_ERR(kobj); 658 if (kobj) 659 dev->kobj.parent = kobj; 660 return 0; 661} 662 663static int device_add_class_symlinks(struct device *dev) 664{ 665 int error; 666 667 if (!dev->class) 668 return 0; 669 error = sysfs_create_link(&dev->kobj, &dev->class->subsys.kobj, 670 "subsystem"); 671 if (error) 672 goto out; 673 /* 674 * If this is not a "fake" compatible device, then create the 675 * symlink from the class to the device. 676 */ 677 if (dev->kobj.parent != &dev->class->subsys.kobj) { 678 error = sysfs_create_link(&dev->class->subsys.kobj, &dev->kobj, 679 dev->bus_id); 680 if (error) 681 goto out_subsys; 682 } 683 /* only bus-device parents get a "device"-link */ 684 if (dev->parent && dev->parent->bus) { 685 error = sysfs_create_link(&dev->kobj, &dev->parent->kobj, 686 "device"); 687 if (error) 688 goto out_busid; 689#ifdef CONFIG_SYSFS_DEPRECATED 690 { 691 char * class_name = make_class_name(dev->class->name, 692 &dev->kobj); 693 if (class_name) 694 error = sysfs_create_link(&dev->parent->kobj, 695 &dev->kobj, class_name); 696 kfree(class_name); 697 if (error) 698 goto out_device; 699 } 700#endif 701 } 702 return 0; 703 704#ifdef CONFIG_SYSFS_DEPRECATED 705out_device: 706 if (dev->parent) 707 sysfs_remove_link(&dev->kobj, "device"); 708#endif 709out_busid: 710 if (dev->kobj.parent != &dev->class->subsys.kobj) 711 sysfs_remove_link(&dev->class->subsys.kobj, dev->bus_id); 712out_subsys: 713 sysfs_remove_link(&dev->kobj, "subsystem"); 714out: 715 return error; 716} 717 718static void device_remove_class_symlinks(struct device *dev) 719{ 720 if (!dev->class) 721 return; 722 if (dev->parent) { 723#ifdef CONFIG_SYSFS_DEPRECATED 724 char *class_name; 725 726 class_name = make_class_name(dev->class->name, &dev->kobj); 727 if (class_name) { 728 sysfs_remove_link(&dev->parent->kobj, class_name); 729 kfree(class_name); 730 } 731#endif 732 sysfs_remove_link(&dev->kobj, "device"); 733 } 734 if (dev->kobj.parent != &dev->class->subsys.kobj) 735 sysfs_remove_link(&dev->class->subsys.kobj, dev->bus_id); 736 sysfs_remove_link(&dev->kobj, "subsystem"); 737} 738 739/** 740 * device_add - add device to device hierarchy. 741 * @dev: device. 742 * 743 * This is part 2 of device_register(), though may be called 744 * separately _iff_ device_initialize() has been called separately. 745 * 746 * This adds it to the kobject hierarchy via kobject_add(), adds it 747 * to the global and sibling lists for the device, then 748 * adds it to the other relevant subsystems of the driver model. 749 */ 750int device_add(struct device *dev) 751{ 752 struct device *parent = NULL; 753 struct class_interface *class_intf; 754 int error = -EINVAL; 755 756 dev = get_device(dev); 757 if (!dev || !strlen(dev->bus_id)) 758 goto Error; 759 760 pr_debug("DEV: registering device: ID = '%s'\n", dev->bus_id); 761 762 parent = get_device(dev->parent); 763 error = setup_parent(dev, parent); 764 if (error) 765 goto Error; 766 767 /* first, register with generic layer. */ 768 kobject_set_name(&dev->kobj, "%s", dev->bus_id); 769 error = kobject_add(&dev->kobj); 770 if (error) 771 goto Error; 772 773 /* notify platform of device entry */ 774 if (platform_notify) 775 platform_notify(dev); 776 777 /* notify clients of device entry (new way) */ 778 if (dev->bus) 779 blocking_notifier_call_chain(&dev->bus->bus_notifier, 780 BUS_NOTIFY_ADD_DEVICE, dev); 781 782 error = device_create_file(dev, &uevent_attr); 783 if (error) 784 goto attrError; 785 786 if (MAJOR(dev->devt)) { 787 error = device_create_file(dev, &devt_attr); 788 if (error) 789 goto ueventattrError; 790 } 791 792 error = device_add_class_symlinks(dev); 793 if (error) 794 goto SymlinkError; 795 error = device_add_attrs(dev); 796 if (error) 797 goto AttrsError; 798 error = device_pm_add(dev); 799 if (error) 800 goto PMError; 801 error = bus_add_device(dev); 802 if (error) 803 goto BusError; 804 kobject_uevent(&dev->kobj, KOBJ_ADD); 805 bus_attach_device(dev); 806 if (parent) 807 klist_add_tail(&dev->knode_parent, &parent->klist_children); 808 809 if (dev->class) { 810 down(&dev->class->sem); 811 /* tie the class to the device */ 812 list_add_tail(&dev->node, &dev->class->devices); 813 814 /* notify any interfaces that the device is here */ 815 list_for_each_entry(class_intf, &dev->class->interfaces, node) 816 if (class_intf->add_dev) 817 class_intf->add_dev(dev, class_intf); 818 up(&dev->class->sem); 819 } 820 Done: 821 put_device(dev); 822 return error; 823 BusError: 824 device_pm_remove(dev); 825 PMError: 826 if (dev->bus) 827 blocking_notifier_call_chain(&dev->bus->bus_notifier, 828 BUS_NOTIFY_DEL_DEVICE, dev); 829 device_remove_attrs(dev); 830 AttrsError: 831 device_remove_class_symlinks(dev); 832 SymlinkError: 833 if (MAJOR(dev->devt)) 834 device_remove_file(dev, &devt_attr); 835 836 if (dev->class) { 837 sysfs_remove_link(&dev->kobj, "subsystem"); 838 /* If this is not a "fake" compatible device, remove the 839 * symlink from the class to the device. */ 840 if (dev->kobj.parent != &dev->class->subsys.kobj) 841 sysfs_remove_link(&dev->class->subsys.kobj, 842 dev->bus_id); 843 if (parent) { 844#ifdef CONFIG_SYSFS_DEPRECATED 845 char *class_name = make_class_name(dev->class->name, 846 &dev->kobj); 847 if (class_name) 848 sysfs_remove_link(&dev->parent->kobj, 849 class_name); 850 kfree(class_name); 851#endif 852 sysfs_remove_link(&dev->kobj, "device"); 853 } 854 } 855 ueventattrError: 856 device_remove_file(dev, &uevent_attr); 857 attrError: 858 kobject_uevent(&dev->kobj, KOBJ_REMOVE); 859 kobject_del(&dev->kobj); 860 Error: 861 if (parent) 862 put_device(parent); 863 goto Done; 864} 865 866 867/** 868 * device_register - register a device with the system. 869 * @dev: pointer to the device structure 870 * 871 * This happens in two clean steps - initialize the device 872 * and add it to the system. The two steps can be called 873 * separately, but this is the easiest and most common. 874 * I.e. you should only call the two helpers separately if 875 * have a clearly defined need to use and refcount the device 876 * before it is added to the hierarchy. 877 */ 878 879int device_register(struct device *dev) 880{ 881 device_initialize(dev); 882 return device_add(dev); 883} 884 885 886/** 887 * get_device - increment reference count for device. 888 * @dev: device. 889 * 890 * This simply forwards the call to kobject_get(), though 891 * we do take care to provide for the case that we get a NULL 892 * pointer passed in. 893 */ 894 895struct device * get_device(struct device * dev) 896{ 897 return dev ? to_dev(kobject_get(&dev->kobj)) : NULL; 898} 899 900 901/** 902 * put_device - decrement reference count. 903 * @dev: device in question. 904 */ 905void put_device(struct device * dev) 906{ 907 if (dev) 908 kobject_put(&dev->kobj); 909} 910 911 912/** 913 * device_del - delete device from system. 914 * @dev: device. 915 * 916 * This is the first part of the device unregistration 917 * sequence. This removes the device from the lists we control 918 * from here, has it removed from the other driver model 919 * subsystems it was added to in device_add(), and removes it 920 * from the kobject hierarchy. 921 * 922 * NOTE: this should be called manually _iff_ device_add() was 923 * also called manually. 924 */ 925 926void device_del(struct device * dev) 927{ 928 struct device * parent = dev->parent; 929 struct class_interface *class_intf; 930 931 if (parent) 932 klist_del(&dev->knode_parent); 933 if (MAJOR(dev->devt)) 934 device_remove_file(dev, &devt_attr); 935 if (dev->class) { 936 sysfs_remove_link(&dev->kobj, "subsystem"); 937 /* If this is not a "fake" compatible device, remove the 938 * symlink from the class to the device. */ 939 if (dev->kobj.parent != &dev->class->subsys.kobj) 940 sysfs_remove_link(&dev->class->subsys.kobj, 941 dev->bus_id); 942 if (parent) { 943#ifdef CONFIG_SYSFS_DEPRECATED 944 char *class_name = make_class_name(dev->class->name, 945 &dev->kobj); 946 if (class_name) 947 sysfs_remove_link(&dev->parent->kobj, 948 class_name); 949 kfree(class_name); 950#endif 951 sysfs_remove_link(&dev->kobj, "device"); 952 } 953 954 down(&dev->class->sem); 955 /* notify any interfaces that the device is now gone */ 956 list_for_each_entry(class_intf, &dev->class->interfaces, node) 957 if (class_intf->remove_dev) 958 class_intf->remove_dev(dev, class_intf); 959 /* remove the device from the class list */ 960 list_del_init(&dev->node); 961 up(&dev->class->sem); 962 963 /* If we live in a parent class-directory, unreference it */ 964 if (dev->kobj.parent->kset == &dev->class->class_dirs) { 965 struct device *d; 966 int other = 0; 967 968 /* 969 * if we are the last child of our class, delete 970 * our class-directory at this parent 971 */ 972 down(&dev->class->sem); 973 list_for_each_entry(d, &dev->class->devices, node) { 974 if (d == dev) 975 continue; 976 if (d->kobj.parent == dev->kobj.parent) { 977 other = 1; 978 break; 979 } 980 } 981 if (!other) 982 kobject_del(dev->kobj.parent); 983 984 kobject_put(dev->kobj.parent); 985 up(&dev->class->sem); 986 } 987 } 988 device_remove_file(dev, &uevent_attr); 989 device_remove_attrs(dev); 990 bus_remove_device(dev); 991 992 /* 993 * Some platform devices are driven without driver attached 994 * and managed resources may have been acquired. Make sure 995 * all resources are released. 996 */ 997 devres_release_all(dev); 998 999 /* Notify the platform of the removal, in case they 1000 * need to do anything... 1001 */ 1002 if (platform_notify_remove) 1003 platform_notify_remove(dev); 1004 if (dev->bus) 1005 blocking_notifier_call_chain(&dev->bus->bus_notifier, 1006 BUS_NOTIFY_DEL_DEVICE, dev); 1007 device_pm_remove(dev); 1008 kobject_uevent(&dev->kobj, KOBJ_REMOVE); 1009 kobject_del(&dev->kobj); 1010 if (parent) 1011 put_device(parent); 1012} 1013 1014/** 1015 * device_unregister - unregister device from system. 1016 * @dev: device going away. 1017 * 1018 * We do this in two parts, like we do device_register(). First, 1019 * we remove it from all the subsystems with device_del(), then 1020 * we decrement the reference count via put_device(). If that 1021 * is the final reference count, the device will be cleaned up 1022 * via device_release() above. Otherwise, the structure will 1023 * stick around until the final reference to the device is dropped. 1024 */ 1025void device_unregister(struct device * dev) 1026{ 1027 pr_debug("DEV: Unregistering device. ID = '%s'\n", dev->bus_id); 1028 device_del(dev); 1029 put_device(dev); 1030} 1031 1032 1033static struct device * next_device(struct klist_iter * i) 1034{ 1035 struct klist_node * n = klist_next(i); 1036 return n ? container_of(n, struct device, knode_parent) : NULL; 1037} 1038 1039/** 1040 * device_for_each_child - device child iterator. 1041 * @parent: parent struct device. 1042 * @data: data for the callback. 1043 * @fn: function to be called for each device. 1044 * 1045 * Iterate over @parent's child devices, and call @fn for each, 1046 * passing it @data. 1047 * 1048 * We check the return of @fn each time. If it returns anything 1049 * other than 0, we break out and return that value. 1050 */ 1051int device_for_each_child(struct device * parent, void * data, 1052 int (*fn)(struct device *, void *)) 1053{ 1054 struct klist_iter i; 1055 struct device * child; 1056 int error = 0; 1057 1058 klist_iter_init(&parent->klist_children, &i); 1059 while ((child = next_device(&i)) && !error) 1060 error = fn(child, data); 1061 klist_iter_exit(&i); 1062 return error; 1063} 1064 1065/** 1066 * device_find_child - device iterator for locating a particular device. 1067 * @parent: parent struct device 1068 * @data: Data to pass to match function 1069 * @match: Callback function to check device 1070 * 1071 * This is similar to the device_for_each_child() function above, but it 1072 * returns a reference to a device that is 'found' for later use, as 1073 * determined by the @match callback. 1074 * 1075 * The callback should return 0 if the device doesn't match and non-zero 1076 * if it does. If the callback returns non-zero and a reference to the 1077 * current device can be obtained, this function will return to the caller 1078 * and not iterate over any more devices. 1079 */ 1080struct device * device_find_child(struct device *parent, void *data, 1081 int (*match)(struct device *, void *)) 1082{ 1083 struct klist_iter i; 1084 struct device *child; 1085 1086 if (!parent) 1087 return NULL; 1088 1089 klist_iter_init(&parent->klist_children, &i); 1090 while ((child = next_device(&i))) 1091 if (match(child, data) && get_device(child)) 1092 break; 1093 klist_iter_exit(&i); 1094 return child; 1095} 1096 1097int __init devices_init(void) 1098{ 1099 return subsystem_register(&devices_subsys); 1100} 1101 1102EXPORT_SYMBOL_GPL(device_for_each_child); 1103EXPORT_SYMBOL_GPL(device_find_child); 1104 1105EXPORT_SYMBOL_GPL(device_initialize); 1106EXPORT_SYMBOL_GPL(device_add); 1107EXPORT_SYMBOL_GPL(device_register); 1108 1109EXPORT_SYMBOL_GPL(device_del); 1110EXPORT_SYMBOL_GPL(device_unregister); 1111EXPORT_SYMBOL_GPL(get_device); 1112EXPORT_SYMBOL_GPL(put_device); 1113 1114EXPORT_SYMBOL_GPL(device_create_file); 1115EXPORT_SYMBOL_GPL(device_remove_file); 1116 1117 1118static void device_create_release(struct device *dev) 1119{ 1120 pr_debug("%s called for %s\n", __FUNCTION__, dev->bus_id); 1121 kfree(dev); 1122} 1123 1124/** 1125 * device_create - creates a device and registers it with sysfs 1126 * @class: pointer to the struct class that this device should be registered to 1127 * @parent: pointer to the parent struct device of this new device, if any 1128 * @devt: the dev_t for the char device to be added 1129 * @fmt: string for the device's name 1130 * 1131 * This function can be used by char device classes. A struct device 1132 * will be created in sysfs, registered to the specified class. 1133 * 1134 * A "dev" file will be created, showing the dev_t for the device, if 1135 * the dev_t is not 0,0. 1136 * If a pointer to a parent struct device is passed in, the newly created 1137 * struct device will be a child of that device in sysfs. 1138 * The pointer to the struct device will be returned from the call. 1139 * Any further sysfs files that might be required can be created using this 1140 * pointer. 1141 * 1142 * Note: the struct class passed to this function must have previously 1143 * been created with a call to class_create(). 1144 */ 1145struct device *device_create(struct class *class, struct device *parent, 1146 dev_t devt, const char *fmt, ...) 1147{ 1148 va_list args; 1149 struct device *dev = NULL; 1150 int retval = -ENODEV; 1151 1152 if (class == NULL || IS_ERR(class)) 1153 goto error; 1154 1155 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 1156 if (!dev) { 1157 retval = -ENOMEM; 1158 goto error; 1159 } 1160 1161 dev->devt = devt; 1162 dev->class = class; 1163 dev->parent = parent; 1164 dev->release = device_create_release; 1165 1166 va_start(args, fmt); 1167 vsnprintf(dev->bus_id, BUS_ID_SIZE, fmt, args); 1168 va_end(args); 1169 retval = device_register(dev); 1170 if (retval) 1171 goto error; 1172 1173 return dev; 1174 1175error: 1176 kfree(dev); 1177 return ERR_PTR(retval); 1178} 1179EXPORT_SYMBOL_GPL(device_create); 1180 1181/** 1182 * device_destroy - removes a device that was created with device_create() 1183 * @class: pointer to the struct class that this device was registered with 1184 * @devt: the dev_t of the device that was previously registered 1185 * 1186 * This call unregisters and cleans up a device that was created with a 1187 * call to device_create(). 1188 */ 1189void device_destroy(struct class *class, dev_t devt) 1190{ 1191 struct device *dev = NULL; 1192 struct device *dev_tmp; 1193 1194 down(&class->sem); 1195 list_for_each_entry(dev_tmp, &class->devices, node) { 1196 if (dev_tmp->devt == devt) { 1197 dev = dev_tmp; 1198 break; 1199 } 1200 } 1201 up(&class->sem); 1202 1203 if (dev) 1204 device_unregister(dev); 1205} 1206EXPORT_SYMBOL_GPL(device_destroy); 1207 1208/** 1209 * device_rename - renames a device 1210 * @dev: the pointer to the struct device to be renamed 1211 * @new_name: the new name of the device 1212 */ 1213int device_rename(struct device *dev, char *new_name) 1214{ 1215 char *old_class_name = NULL; 1216 char *new_class_name = NULL; 1217 char *old_device_name = NULL; 1218 int error; 1219 1220 dev = get_device(dev); 1221 if (!dev) 1222 return -EINVAL; 1223 1224 pr_debug("DEVICE: renaming '%s' to '%s'\n", dev->bus_id, new_name); 1225 1226#ifdef CONFIG_SYSFS_DEPRECATED 1227 if ((dev->class) && (dev->parent)) 1228 old_class_name = make_class_name(dev->class->name, &dev->kobj); 1229#endif 1230 1231 old_device_name = kmalloc(BUS_ID_SIZE, GFP_KERNEL); 1232 if (!old_device_name) { 1233 error = -ENOMEM; 1234 goto out; 1235 } 1236 strlcpy(old_device_name, dev->bus_id, BUS_ID_SIZE); 1237 strlcpy(dev->bus_id, new_name, BUS_ID_SIZE); 1238 1239 error = kobject_rename(&dev->kobj, new_name); 1240 if (error) { 1241 strlcpy(dev->bus_id, old_device_name, BUS_ID_SIZE); 1242 goto out; 1243 } 1244 1245#ifdef CONFIG_SYSFS_DEPRECATED 1246 if (old_class_name) { 1247 new_class_name = make_class_name(dev->class->name, &dev->kobj); 1248 if (new_class_name) { 1249 error = sysfs_create_link(&dev->parent->kobj, 1250 &dev->kobj, new_class_name); 1251 if (error) 1252 goto out; 1253 sysfs_remove_link(&dev->parent->kobj, old_class_name); 1254 } 1255 } 1256#endif 1257 1258 if (dev->class) { 1259 sysfs_remove_link(&dev->class->subsys.kobj, old_device_name); 1260 error = sysfs_create_link(&dev->class->subsys.kobj, &dev->kobj, 1261 dev->bus_id); 1262 if (error) { 1263 /* Uh... how to unravel this if restoring can fail? */ 1264 dev_err(dev, "%s: sysfs_create_symlink failed (%d)\n", 1265 __FUNCTION__, error); 1266 } 1267 } 1268out: 1269 put_device(dev); 1270 1271 kfree(new_class_name); 1272 kfree(old_class_name); 1273 kfree(old_device_name); 1274 1275 return error; 1276} 1277EXPORT_SYMBOL_GPL(device_rename); 1278 1279static int device_move_class_links(struct device *dev, 1280 struct device *old_parent, 1281 struct device *new_parent) 1282{ 1283 int error = 0; 1284#ifdef CONFIG_SYSFS_DEPRECATED 1285 char *class_name; 1286 1287 class_name = make_class_name(dev->class->name, &dev->kobj); 1288 if (!class_name) { 1289 error = -ENOMEM; 1290 goto out; 1291 } 1292 if (old_parent) { 1293 sysfs_remove_link(&dev->kobj, "device"); 1294 sysfs_remove_link(&old_parent->kobj, class_name); 1295 } 1296 if (new_parent) { 1297 error = sysfs_create_link(&dev->kobj, &new_parent->kobj, 1298 "device"); 1299 if (error) 1300 goto out; 1301 error = sysfs_create_link(&new_parent->kobj, &dev->kobj, 1302 class_name); 1303 if (error) 1304 sysfs_remove_link(&dev->kobj, "device"); 1305 } 1306 else 1307 error = 0; 1308out: 1309 kfree(class_name); 1310 return error; 1311#else 1312 if (old_parent) 1313 sysfs_remove_link(&dev->kobj, "device"); 1314 if (new_parent) 1315 error = sysfs_create_link(&dev->kobj, &new_parent->kobj, 1316 "device"); 1317 return error; 1318#endif 1319} 1320 1321/** 1322 * device_move - moves a device to a new parent 1323 * @dev: the pointer to the struct device to be moved 1324 * @new_parent: the new parent of the device (can by NULL) 1325 */ 1326int device_move(struct device *dev, struct device *new_parent) 1327{ 1328 int error; 1329 struct device *old_parent; 1330 struct kobject *new_parent_kobj; 1331 1332 dev = get_device(dev); 1333 if (!dev) 1334 return -EINVAL; 1335 1336 new_parent = get_device(new_parent); 1337 new_parent_kobj = get_device_parent (dev, new_parent); 1338 if (IS_ERR(new_parent_kobj)) { 1339 error = PTR_ERR(new_parent_kobj); 1340 put_device(new_parent); 1341 goto out; 1342 } 1343 pr_debug("DEVICE: moving '%s' to '%s'\n", dev->bus_id, 1344 new_parent ? new_parent->bus_id : "<NULL>"); 1345 error = kobject_move(&dev->kobj, new_parent_kobj); 1346 if (error) { 1347 put_device(new_parent); 1348 goto out; 1349 } 1350 old_parent = dev->parent; 1351 dev->parent = new_parent; 1352 if (old_parent) 1353 klist_remove(&dev->knode_parent); 1354 if (new_parent) 1355 klist_add_tail(&dev->knode_parent, &new_parent->klist_children); 1356 if (!dev->class) 1357 goto out_put; 1358 error = device_move_class_links(dev, old_parent, new_parent); 1359 if (error) { 1360 /* We ignore errors on cleanup since we're hosed anyway... */ 1361 device_move_class_links(dev, new_parent, old_parent); 1362 if (!kobject_move(&dev->kobj, &old_parent->kobj)) { 1363 if (new_parent) 1364 klist_remove(&dev->knode_parent); 1365 if (old_parent) 1366 klist_add_tail(&dev->knode_parent, 1367 &old_parent->klist_children); 1368 } 1369 put_device(new_parent); 1370 goto out; 1371 } 1372out_put: 1373 put_device(old_parent); 1374out: 1375 put_device(dev); 1376 return error; 1377} 1378 1379EXPORT_SYMBOL_GPL(device_move);