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