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