1 /* 2 * bus.c - bus driver management 3 * 4 * Copyright (c) 2002-3 Patrick Mochel 5 * Copyright (c) 2002-3 Open Source Development Labs 6 * 7 * This file is released under the GPLv2 8 * 9 */ 10 11 #include <linux/device.h> 12 #include <linux/module.h> 13 #include <linux/errno.h> 14 #include <linux/init.h> 15 #include <linux/string.h> 16 #include "base.h" 17 #include "power/power.h" 18 19 #define to_bus_attr(_attr) container_of(_attr, struct bus_attribute, attr) 20 #define to_bus(obj) container_of(obj, struct bus_type, subsys.kobj) 21 22 /* 23 * sysfs bindings for drivers 24 */ 25 26 #define to_drv_attr(_attr) container_of(_attr, struct driver_attribute, attr) 27 #define to_driver(obj) container_of(obj, struct device_driver, kobj) 28 29 30 static int __must_check bus_rescan_devices_helper(struct device *dev, 31 void *data); 32 33 static struct bus_type *bus_get(struct bus_type *bus) 34 { 35 return bus ? container_of(kset_get(&bus->subsys), 36 struct bus_type, subsys) : NULL; 37 } 38 39 static void bus_put(struct bus_type *bus) 40 { 41 kset_put(&bus->subsys); 42 } 43 44 static ssize_t 45 drv_attr_show(struct kobject * kobj, struct attribute * attr, char * buf) 46 { 47 struct driver_attribute * drv_attr = to_drv_attr(attr); 48 struct device_driver * drv = to_driver(kobj); 49 ssize_t ret = -EIO; 50 51 if (drv_attr->show) 52 ret = drv_attr->show(drv, buf); 53 return ret; 54 } 55 56 static ssize_t 57 drv_attr_store(struct kobject * kobj, struct attribute * attr, 58 const char * buf, size_t count) 59 { 60 struct driver_attribute * drv_attr = to_drv_attr(attr); 61 struct device_driver * drv = to_driver(kobj); 62 ssize_t ret = -EIO; 63 64 if (drv_attr->store) 65 ret = drv_attr->store(drv, buf, count); 66 return ret; 67 } 68 69 static struct sysfs_ops driver_sysfs_ops = { 70 .show = drv_attr_show, 71 .store = drv_attr_store, 72 }; 73 74 75 static void driver_release(struct kobject * kobj) 76 { 77 /* 78 * Yes this is an empty release function, it is this way because struct 79 * device is always a static object, not a dynamic one. Yes, this is 80 * not nice and bad, but remember, drivers are code, reference counted 81 * by the module count, not a device, which is really data. And yes, 82 * in the future I do want to have all drivers be created dynamically, 83 * and am working toward that goal, but it will take a bit longer... 84 * 85 * But do not let this example give _anyone_ the idea that they can 86 * create a release function without any code in it at all, to do that 87 * is almost always wrong. If you have any questions about this, 88 * please send an email to <greg@kroah.com> 89 */ 90 } 91 92 static struct kobj_type driver_ktype = { 93 .sysfs_ops = &driver_sysfs_ops, 94 .release = driver_release, 95 }; 96 97 98 /* 99 * sysfs bindings for buses 100 */ 101 102 103 static ssize_t 104 bus_attr_show(struct kobject * kobj, struct attribute * attr, char * buf) 105 { 106 struct bus_attribute * bus_attr = to_bus_attr(attr); 107 struct bus_type * bus = to_bus(kobj); 108 ssize_t ret = 0; 109 110 if (bus_attr->show) 111 ret = bus_attr->show(bus, buf); 112 return ret; 113 } 114 115 static ssize_t 116 bus_attr_store(struct kobject * kobj, struct attribute * attr, 117 const char * buf, size_t count) 118 { 119 struct bus_attribute * bus_attr = to_bus_attr(attr); 120 struct bus_type * bus = to_bus(kobj); 121 ssize_t ret = 0; 122 123 if (bus_attr->store) 124 ret = bus_attr->store(bus, buf, count); 125 return ret; 126 } 127 128 static struct sysfs_ops bus_sysfs_ops = { 129 .show = bus_attr_show, 130 .store = bus_attr_store, 131 }; 132 133 int bus_create_file(struct bus_type * bus, struct bus_attribute * attr) 134 { 135 int error; 136 if (bus_get(bus)) { 137 error = sysfs_create_file(&bus->subsys.kobj, &attr->attr); 138 bus_put(bus); 139 } else 140 error = -EINVAL; 141 return error; 142 } 143 144 void bus_remove_file(struct bus_type * bus, struct bus_attribute * attr) 145 { 146 if (bus_get(bus)) { 147 sysfs_remove_file(&bus->subsys.kobj, &attr->attr); 148 bus_put(bus); 149 } 150 } 151 152 static struct kobj_type bus_ktype = { 153 .sysfs_ops = &bus_sysfs_ops, 154 }; 155 156 static int bus_uevent_filter(struct kset *kset, struct kobject *kobj) 157 { 158 struct kobj_type *ktype = get_ktype(kobj); 159 160 if (ktype == &bus_ktype) 161 return 1; 162 return 0; 163 } 164 165 static struct kset_uevent_ops bus_uevent_ops = { 166 .filter = bus_uevent_filter, 167 }; 168 169 static decl_subsys(bus, &bus_ktype, &bus_uevent_ops); 170 171 172 #ifdef CONFIG_HOTPLUG 173 /* Manually detach a device from its associated driver. */ 174 static int driver_helper(struct device *dev, void *data) 175 { 176 const char *name = data; 177 178 if (strcmp(name, dev->bus_id) == 0) 179 return 1; 180 return 0; 181 } 182 183 static ssize_t driver_unbind(struct device_driver *drv, 184 const char *buf, size_t count) 185 { 186 struct bus_type *bus = bus_get(drv->bus); 187 struct device *dev; 188 int err = -ENODEV; 189 190 dev = bus_find_device(bus, NULL, (void *)buf, driver_helper); 191 if (dev && dev->driver == drv) { 192 if (dev->parent) /* Needed for USB */ 193 down(&dev->parent->sem); 194 device_release_driver(dev); 195 if (dev->parent) 196 up(&dev->parent->sem); 197 err = count; 198 } 199 put_device(dev); 200 bus_put(bus); 201 return err; 202 } 203 static DRIVER_ATTR(unbind, S_IWUSR, NULL, driver_unbind); 204 205 /* 206 * Manually attach a device to a driver. 207 * Note: the driver must want to bind to the device, 208 * it is not possible to override the driver's id table. 209 */ 210 static ssize_t driver_bind(struct device_driver *drv, 211 const char *buf, size_t count) 212 { 213 struct bus_type *bus = bus_get(drv->bus); 214 struct device *dev; 215 int err = -ENODEV; 216 217 dev = bus_find_device(bus, NULL, (void *)buf, driver_helper); 218 if (dev && dev->driver == NULL) { 219 if (dev->parent) /* Needed for USB */ 220 down(&dev->parent->sem); 221 down(&dev->sem); 222 err = driver_probe_device(drv, dev); 223 up(&dev->sem); 224 if (dev->parent) 225 up(&dev->parent->sem); 226 227 if (err > 0) /* success */ 228 err = count; 229 else if (err == 0) /* driver didn't accept device */ 230 err = -ENODEV; 231 } 232 put_device(dev); 233 bus_put(bus); 234 return err; 235 } 236 static DRIVER_ATTR(bind, S_IWUSR, NULL, driver_bind); 237 238 static ssize_t show_drivers_autoprobe(struct bus_type *bus, char *buf) 239 { 240 return sprintf(buf, "%d\n", bus->drivers_autoprobe); 241 } 242 243 static ssize_t store_drivers_autoprobe(struct bus_type *bus, 244 const char *buf, size_t count) 245 { 246 if (buf[0] == '0') 247 bus->drivers_autoprobe = 0; 248 else 249 bus->drivers_autoprobe = 1; 250 return count; 251 } 252 253 static ssize_t store_drivers_probe(struct bus_type *bus, 254 const char *buf, size_t count) 255 { 256 struct device *dev; 257 258 dev = bus_find_device(bus, NULL, (void *)buf, driver_helper); 259 if (!dev) 260 return -ENODEV; 261 if (bus_rescan_devices_helper(dev, NULL) != 0) 262 return -EINVAL; 263 return count; 264 } 265 #endif 266 267 static struct device * next_device(struct klist_iter * i) 268 { 269 struct klist_node * n = klist_next(i); 270 return n ? container_of(n, struct device, knode_bus) : NULL; 271 } 272 273 /** 274 * bus_for_each_dev - device iterator. 275 * @bus: bus type. 276 * @start: device to start iterating from. 277 * @data: data for the callback. 278 * @fn: function to be called for each device. 279 * 280 * Iterate over @bus's list of devices, and call @fn for each, 281 * passing it @data. If @start is not NULL, we use that device to 282 * begin iterating from. 283 * 284 * We check the return of @fn each time. If it returns anything 285 * other than 0, we break out and return that value. 286 * 287 * NOTE: The device that returns a non-zero value is not retained 288 * in any way, nor is its refcount incremented. If the caller needs 289 * to retain this data, it should do, and increment the reference 290 * count in the supplied callback. 291 */ 292 293 int bus_for_each_dev(struct bus_type * bus, struct device * start, 294 void * data, int (*fn)(struct device *, void *)) 295 { 296 struct klist_iter i; 297 struct device * dev; 298 int error = 0; 299 300 if (!bus) 301 return -EINVAL; 302 303 klist_iter_init_node(&bus->klist_devices, &i, 304 (start ? &start->knode_bus : NULL)); 305 while ((dev = next_device(&i)) && !error) 306 error = fn(dev, data); 307 klist_iter_exit(&i); 308 return error; 309 } 310 311 /** 312 * bus_find_device - device iterator for locating a particular device. 313 * @bus: bus type 314 * @start: Device to begin with 315 * @data: Data to pass to match function 316 * @match: Callback function to check device 317 * 318 * This is similar to the bus_for_each_dev() function above, but it 319 * returns a reference to a device that is 'found' for later use, as 320 * determined by the @match callback. 321 * 322 * The callback should return 0 if the device doesn't match and non-zero 323 * if it does. If the callback returns non-zero, this function will 324 * return to the caller and not iterate over any more devices. 325 */ 326 struct device * bus_find_device(struct bus_type *bus, 327 struct device *start, void *data, 328 int (*match)(struct device *, void *)) 329 { 330 struct klist_iter i; 331 struct device *dev; 332 333 if (!bus) 334 return NULL; 335 336 klist_iter_init_node(&bus->klist_devices, &i, 337 (start ? &start->knode_bus : NULL)); 338 while ((dev = next_device(&i))) 339 if (match(dev, data) && get_device(dev)) 340 break; 341 klist_iter_exit(&i); 342 return dev; 343 } 344 345 346 static struct device_driver * next_driver(struct klist_iter * i) 347 { 348 struct klist_node * n = klist_next(i); 349 return n ? container_of(n, struct device_driver, knode_bus) : NULL; 350 } 351 352 /** 353 * bus_for_each_drv - driver iterator 354 * @bus: bus we're dealing with. 355 * @start: driver to start iterating on. 356 * @data: data to pass to the callback. 357 * @fn: function to call for each driver. 358 * 359 * This is nearly identical to the device iterator above. 360 * We iterate over each driver that belongs to @bus, and call 361 * @fn for each. If @fn returns anything but 0, we break out 362 * and return it. If @start is not NULL, we use it as the head 363 * of the list. 364 * 365 * NOTE: we don't return the driver that returns a non-zero 366 * value, nor do we leave the reference count incremented for that 367 * driver. If the caller needs to know that info, it must set it 368 * in the callback. It must also be sure to increment the refcount 369 * so it doesn't disappear before returning to the caller. 370 */ 371 372 int bus_for_each_drv(struct bus_type * bus, struct device_driver * start, 373 void * data, int (*fn)(struct device_driver *, void *)) 374 { 375 struct klist_iter i; 376 struct device_driver * drv; 377 int error = 0; 378 379 if (!bus) 380 return -EINVAL; 381 382 klist_iter_init_node(&bus->klist_drivers, &i, 383 start ? &start->knode_bus : NULL); 384 while ((drv = next_driver(&i)) && !error) 385 error = fn(drv, data); 386 klist_iter_exit(&i); 387 return error; 388 } 389 390 static int device_add_attrs(struct bus_type *bus, struct device *dev) 391 { 392 int error = 0; 393 int i; 394 395 if (!bus->dev_attrs) 396 return 0; 397 398 for (i = 0; attr_name(bus->dev_attrs[i]); i++) { 399 error = device_create_file(dev,&bus->dev_attrs[i]); 400 if (error) { 401 while (--i >= 0) 402 device_remove_file(dev, &bus->dev_attrs[i]); 403 break; 404 } 405 } 406 return error; 407 } 408 409 static void device_remove_attrs(struct bus_type * bus, struct device * dev) 410 { 411 int i; 412 413 if (bus->dev_attrs) { 414 for (i = 0; attr_name(bus->dev_attrs[i]); i++) 415 device_remove_file(dev,&bus->dev_attrs[i]); 416 } 417 } 418 419 #ifdef CONFIG_SYSFS_DEPRECATED 420 static int make_deprecated_bus_links(struct device *dev) 421 { 422 return sysfs_create_link(&dev->kobj, 423 &dev->bus->subsys.kobj, "bus"); 424 } 425 426 static void remove_deprecated_bus_links(struct device *dev) 427 { 428 sysfs_remove_link(&dev->kobj, "bus"); 429 } 430 #else 431 static inline int make_deprecated_bus_links(struct device *dev) { return 0; } 432 static inline void remove_deprecated_bus_links(struct device *dev) { } 433 #endif 434 435 /** 436 * bus_add_device - add device to bus 437 * @dev: device being added 438 * 439 * - Add the device to its bus's list of devices. 440 * - Create link to device's bus. 441 */ 442 int bus_add_device(struct device * dev) 443 { 444 struct bus_type * bus = bus_get(dev->bus); 445 int error = 0; 446 447 if (bus) { 448 pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id); 449 error = device_add_attrs(bus, dev); 450 if (error) 451 goto out_put; 452 error = sysfs_create_link(&bus->devices.kobj, 453 &dev->kobj, dev->bus_id); 454 if (error) 455 goto out_id; 456 error = sysfs_create_link(&dev->kobj, 457 &dev->bus->subsys.kobj, "subsystem"); 458 if (error) 459 goto out_subsys; 460 error = make_deprecated_bus_links(dev); 461 if (error) 462 goto out_deprecated; 463 } 464 return 0; 465 466 out_deprecated: 467 sysfs_remove_link(&dev->kobj, "subsystem"); 468 out_subsys: 469 sysfs_remove_link(&bus->devices.kobj, dev->bus_id); 470 out_id: 471 device_remove_attrs(bus, dev); 472 out_put: 473 bus_put(dev->bus); 474 return error; 475 } 476 477 /** 478 * bus_attach_device - add device to bus 479 * @dev: device tried to attach to a driver 480 * 481 * - Add device to bus's list of devices. 482 * - Try to attach to driver. 483 */ 484 void bus_attach_device(struct device * dev) 485 { 486 struct bus_type *bus = dev->bus; 487 int ret = 0; 488 489 if (bus) { 490 dev->is_registered = 1; 491 if (bus->drivers_autoprobe) 492 ret = device_attach(dev); 493 WARN_ON(ret < 0); 494 if (ret >= 0) 495 klist_add_tail(&dev->knode_bus, &bus->klist_devices); 496 else 497 dev->is_registered = 0; 498 } 499 } 500 501 /** 502 * bus_remove_device - remove device from bus 503 * @dev: device to be removed 504 * 505 * - Remove symlink from bus's directory. 506 * - Delete device from bus's list. 507 * - Detach from its driver. 508 * - Drop reference taken in bus_add_device(). 509 */ 510 void bus_remove_device(struct device * dev) 511 { 512 if (dev->bus) { 513 sysfs_remove_link(&dev->kobj, "subsystem"); 514 remove_deprecated_bus_links(dev); 515 sysfs_remove_link(&dev->bus->devices.kobj, dev->bus_id); 516 device_remove_attrs(dev->bus, dev); 517 if (dev->is_registered) { 518 dev->is_registered = 0; 519 klist_del(&dev->knode_bus); 520 } 521 pr_debug("bus %s: remove device %s\n", dev->bus->name, dev->bus_id); 522 device_release_driver(dev); 523 bus_put(dev->bus); 524 } 525 } 526 527 static int driver_add_attrs(struct bus_type * bus, struct device_driver * drv) 528 { 529 int error = 0; 530 int i; 531 532 if (bus->drv_attrs) { 533 for (i = 0; attr_name(bus->drv_attrs[i]); i++) { 534 error = driver_create_file(drv, &bus->drv_attrs[i]); 535 if (error) 536 goto Err; 537 } 538 } 539 Done: 540 return error; 541 Err: 542 while (--i >= 0) 543 driver_remove_file(drv, &bus->drv_attrs[i]); 544 goto Done; 545 } 546 547 548 static void driver_remove_attrs(struct bus_type * bus, struct device_driver * drv) 549 { 550 int i; 551 552 if (bus->drv_attrs) { 553 for (i = 0; attr_name(bus->drv_attrs[i]); i++) 554 driver_remove_file(drv, &bus->drv_attrs[i]); 555 } 556 } 557 558 #ifdef CONFIG_HOTPLUG 559 /* 560 * Thanks to drivers making their tables __devinit, we can't allow manual 561 * bind and unbind from userspace unless CONFIG_HOTPLUG is enabled. 562 */ 563 static int __must_check add_bind_files(struct device_driver *drv) 564 { 565 int ret; 566 567 ret = driver_create_file(drv, &driver_attr_unbind); 568 if (ret == 0) { 569 ret = driver_create_file(drv, &driver_attr_bind); 570 if (ret) 571 driver_remove_file(drv, &driver_attr_unbind); 572 } 573 return ret; 574 } 575 576 static void remove_bind_files(struct device_driver *drv) 577 { 578 driver_remove_file(drv, &driver_attr_bind); 579 driver_remove_file(drv, &driver_attr_unbind); 580 } 581 582 static BUS_ATTR(drivers_probe, S_IWUSR, NULL, store_drivers_probe); 583 static BUS_ATTR(drivers_autoprobe, S_IWUSR | S_IRUGO, 584 show_drivers_autoprobe, store_drivers_autoprobe); 585 586 static int add_probe_files(struct bus_type *bus) 587 { 588 int retval; 589 590 retval = bus_create_file(bus, &bus_attr_drivers_probe); 591 if (retval) 592 goto out; 593 594 retval = bus_create_file(bus, &bus_attr_drivers_autoprobe); 595 if (retval) 596 bus_remove_file(bus, &bus_attr_drivers_probe); 597 out: 598 return retval; 599 } 600 601 static void remove_probe_files(struct bus_type *bus) 602 { 603 bus_remove_file(bus, &bus_attr_drivers_autoprobe); 604 bus_remove_file(bus, &bus_attr_drivers_probe); 605 } 606 #else 607 static inline int add_bind_files(struct device_driver *drv) { return 0; } 608 static inline void remove_bind_files(struct device_driver *drv) {} 609 static inline int add_probe_files(struct bus_type *bus) { return 0; } 610 static inline void remove_probe_files(struct bus_type *bus) {} 611 #endif 612 613 static ssize_t driver_uevent_store(struct device_driver *drv, 614 const char *buf, size_t count) 615 { 616 enum kobject_action action; 617 618 if (kobject_action_type(buf, count, &action) == 0) 619 kobject_uevent(&drv->kobj, action); 620 return count; 621 } 622 static DRIVER_ATTR(uevent, S_IWUSR, NULL, driver_uevent_store); 623 624 /** 625 * bus_add_driver - Add a driver to the bus. 626 * @drv: driver. 627 * 628 */ 629 int bus_add_driver(struct device_driver *drv) 630 { 631 struct bus_type * bus = bus_get(drv->bus); 632 int error = 0; 633 634 if (!bus) 635 return -EINVAL; 636 637 pr_debug("bus %s: add driver %s\n", bus->name, drv->name); 638 error = kobject_set_name(&drv->kobj, "%s", drv->name); 639 if (error) 640 goto out_put_bus; 641 drv->kobj.kset = &bus->drivers; 642 error = kobject_register(&drv->kobj); 643 if (error) 644 goto out_put_bus; 645 646 if (drv->bus->drivers_autoprobe) { 647 error = driver_attach(drv); 648 if (error) 649 goto out_unregister; 650 } 651 klist_add_tail(&drv->knode_bus, &bus->klist_drivers); 652 module_add_driver(drv->owner, drv); 653 654 error = driver_create_file(drv, &driver_attr_uevent); 655 if (error) { 656 printk(KERN_ERR "%s: uevent attr (%s) failed\n", 657 __FUNCTION__, drv->name); 658 } 659 error = driver_add_attrs(bus, drv); 660 if (error) { 661 /* How the hell do we get out of this pickle? Give up */ 662 printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n", 663 __FUNCTION__, drv->name); 664 } 665 error = add_bind_files(drv); 666 if (error) { 667 /* Ditto */ 668 printk(KERN_ERR "%s: add_bind_files(%s) failed\n", 669 __FUNCTION__, drv->name); 670 } 671 672 return error; 673 out_unregister: 674 kobject_unregister(&drv->kobj); 675 out_put_bus: 676 bus_put(bus); 677 return error; 678 } 679 680 /** 681 * bus_remove_driver - delete driver from bus's knowledge. 682 * @drv: driver. 683 * 684 * Detach the driver from the devices it controls, and remove 685 * it from its bus's list of drivers. Finally, we drop the reference 686 * to the bus we took in bus_add_driver(). 687 */ 688 689 void bus_remove_driver(struct device_driver * drv) 690 { 691 if (!drv->bus) 692 return; 693 694 remove_bind_files(drv); 695 driver_remove_attrs(drv->bus, drv); 696 driver_remove_file(drv, &driver_attr_uevent); 697 klist_remove(&drv->knode_bus); 698 pr_debug("bus %s: remove driver %s\n", drv->bus->name, drv->name); 699 driver_detach(drv); 700 module_remove_driver(drv); 701 kobject_unregister(&drv->kobj); 702 bus_put(drv->bus); 703 } 704 705 706 /* Helper for bus_rescan_devices's iter */ 707 static int __must_check bus_rescan_devices_helper(struct device *dev, 708 void *data) 709 { 710 int ret = 0; 711 712 if (!dev->driver) { 713 if (dev->parent) /* Needed for USB */ 714 down(&dev->parent->sem); 715 ret = device_attach(dev); 716 if (dev->parent) 717 up(&dev->parent->sem); 718 } 719 return ret < 0 ? ret : 0; 720 } 721 722 /** 723 * bus_rescan_devices - rescan devices on the bus for possible drivers 724 * @bus: the bus to scan. 725 * 726 * This function will look for devices on the bus with no driver 727 * attached and rescan it against existing drivers to see if it matches 728 * any by calling device_attach() for the unbound devices. 729 */ 730 int bus_rescan_devices(struct bus_type * bus) 731 { 732 return bus_for_each_dev(bus, NULL, NULL, bus_rescan_devices_helper); 733 } 734 735 /** 736 * device_reprobe - remove driver for a device and probe for a new driver 737 * @dev: the device to reprobe 738 * 739 * This function detaches the attached driver (if any) for the given 740 * device and restarts the driver probing process. It is intended 741 * to use if probing criteria changed during a devices lifetime and 742 * driver attachment should change accordingly. 743 */ 744 int device_reprobe(struct device *dev) 745 { 746 if (dev->driver) { 747 if (dev->parent) /* Needed for USB */ 748 down(&dev->parent->sem); 749 device_release_driver(dev); 750 if (dev->parent) 751 up(&dev->parent->sem); 752 } 753 return bus_rescan_devices_helper(dev, NULL); 754 } 755 EXPORT_SYMBOL_GPL(device_reprobe); 756 757 /** 758 * find_bus - locate bus by name. 759 * @name: name of bus. 760 * 761 * Call kset_find_obj() to iterate over list of buses to 762 * find a bus by name. Return bus if found. 763 * 764 * Note that kset_find_obj increments bus' reference count. 765 */ 766 #if 0 767 struct bus_type * find_bus(char * name) 768 { 769 struct kobject * k = kset_find_obj(&bus_subsys.kset, name); 770 return k ? to_bus(k) : NULL; 771 } 772 #endif /* 0 */ 773 774 775 /** 776 * bus_add_attrs - Add default attributes for this bus. 777 * @bus: Bus that has just been registered. 778 */ 779 780 static int bus_add_attrs(struct bus_type * bus) 781 { 782 int error = 0; 783 int i; 784 785 if (bus->bus_attrs) { 786 for (i = 0; attr_name(bus->bus_attrs[i]); i++) { 787 error = bus_create_file(bus,&bus->bus_attrs[i]); 788 if (error) 789 goto Err; 790 } 791 } 792 Done: 793 return error; 794 Err: 795 while (--i >= 0) 796 bus_remove_file(bus,&bus->bus_attrs[i]); 797 goto Done; 798 } 799 800 static void bus_remove_attrs(struct bus_type * bus) 801 { 802 int i; 803 804 if (bus->bus_attrs) { 805 for (i = 0; attr_name(bus->bus_attrs[i]); i++) 806 bus_remove_file(bus,&bus->bus_attrs[i]); 807 } 808 } 809 810 static void klist_devices_get(struct klist_node *n) 811 { 812 struct device *dev = container_of(n, struct device, knode_bus); 813 814 get_device(dev); 815 } 816 817 static void klist_devices_put(struct klist_node *n) 818 { 819 struct device *dev = container_of(n, struct device, knode_bus); 820 821 put_device(dev); 822 } 823 824 static ssize_t bus_uevent_store(struct bus_type *bus, 825 const char *buf, size_t count) 826 { 827 enum kobject_action action; 828 829 if (kobject_action_type(buf, count, &action) == 0) 830 kobject_uevent(&bus->subsys.kobj, action); 831 return count; 832 } 833 static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store); 834 835 /** 836 * bus_register - register a bus with the system. 837 * @bus: bus. 838 * 839 * Once we have that, we registered the bus with the kobject 840 * infrastructure, then register the children subsystems it has: 841 * the devices and drivers that belong to the bus. 842 */ 843 int bus_register(struct bus_type * bus) 844 { 845 int retval; 846 847 BLOCKING_INIT_NOTIFIER_HEAD(&bus->bus_notifier); 848 849 retval = kobject_set_name(&bus->subsys.kobj, "%s", bus->name); 850 if (retval) 851 goto out; 852 853 bus->subsys.kobj.kset = &bus_subsys; 854 855 retval = subsystem_register(&bus->subsys); 856 if (retval) 857 goto out; 858 859 retval = bus_create_file(bus, &bus_attr_uevent); 860 if (retval) 861 goto bus_uevent_fail; 862 863 kobject_set_name(&bus->devices.kobj, "devices"); 864 bus->devices.kobj.parent = &bus->subsys.kobj; 865 retval = kset_register(&bus->devices); 866 if (retval) 867 goto bus_devices_fail; 868 869 kobject_set_name(&bus->drivers.kobj, "drivers"); 870 bus->drivers.kobj.parent = &bus->subsys.kobj; 871 bus->drivers.ktype = &driver_ktype; 872 retval = kset_register(&bus->drivers); 873 if (retval) 874 goto bus_drivers_fail; 875 876 klist_init(&bus->klist_devices, klist_devices_get, klist_devices_put); 877 klist_init(&bus->klist_drivers, NULL, NULL); 878 879 bus->drivers_autoprobe = 1; 880 retval = add_probe_files(bus); 881 if (retval) 882 goto bus_probe_files_fail; 883 884 retval = bus_add_attrs(bus); 885 if (retval) 886 goto bus_attrs_fail; 887 888 pr_debug("bus type '%s' registered\n", bus->name); 889 return 0; 890 891 bus_attrs_fail: 892 remove_probe_files(bus); 893 bus_probe_files_fail: 894 kset_unregister(&bus->drivers); 895 bus_drivers_fail: 896 kset_unregister(&bus->devices); 897 bus_devices_fail: 898 bus_remove_file(bus, &bus_attr_uevent); 899 bus_uevent_fail: 900 subsystem_unregister(&bus->subsys); 901 out: 902 return retval; 903 } 904 905 /** 906 * bus_unregister - remove a bus from the system 907 * @bus: bus. 908 * 909 * Unregister the child subsystems and the bus itself. 910 * Finally, we call bus_put() to release the refcount 911 */ 912 void bus_unregister(struct bus_type * bus) 913 { 914 pr_debug("bus %s: unregistering\n", bus->name); 915 bus_remove_attrs(bus); 916 remove_probe_files(bus); 917 kset_unregister(&bus->drivers); 918 kset_unregister(&bus->devices); 919 bus_remove_file(bus, &bus_attr_uevent); 920 subsystem_unregister(&bus->subsys); 921 } 922 923 int bus_register_notifier(struct bus_type *bus, struct notifier_block *nb) 924 { 925 return blocking_notifier_chain_register(&bus->bus_notifier, nb); 926 } 927 EXPORT_SYMBOL_GPL(bus_register_notifier); 928 929 int bus_unregister_notifier(struct bus_type *bus, struct notifier_block *nb) 930 { 931 return blocking_notifier_chain_unregister(&bus->bus_notifier, nb); 932 } 933 EXPORT_SYMBOL_GPL(bus_unregister_notifier); 934 935 int __init buses_init(void) 936 { 937 return subsystem_register(&bus_subsys); 938 } 939 940 941 EXPORT_SYMBOL_GPL(bus_for_each_dev); 942 EXPORT_SYMBOL_GPL(bus_find_device); 943 EXPORT_SYMBOL_GPL(bus_for_each_drv); 944 945 EXPORT_SYMBOL_GPL(bus_register); 946 EXPORT_SYMBOL_GPL(bus_unregister); 947 EXPORT_SYMBOL_GPL(bus_rescan_devices); 948 949 EXPORT_SYMBOL_GPL(bus_create_file); 950 EXPORT_SYMBOL_GPL(bus_remove_file); 951