lkml.org 
[lkml]   [2005]   [Mar]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH] class core: export MAJOR/MINOR to the hotplug env
    Date
    From
    ChangeSet 1.2039, 2005/03/09 09:32:38-08:00, kay.sievers@vrfy.org

    [PATCH] class core: export MAJOR/MINOR to the hotplug env

    Move the creation of the sysfs "dev" file of a class device into the
    driver core. The struct class_device contains a dev_t value now. If set,
    the driver core will create the "dev" file containing the major/minor
    numbers automatically.

    Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
    Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>


    drivers/base/class.c | 39 +++++++++++++++++++++++++++++----------
    include/linux/device.h | 1 +
    2 files changed, 30 insertions(+), 10 deletions(-)

    diff -Nru a/drivers/base/class.c b/drivers/base/class.c
    --- a/drivers/base/class.c 2005-03-09 16:29:55 -08:00
    +++ b/drivers/base/class.c 2005-03-09 16:29:55 -08:00
    @@ -15,6 +15,7 @@
    #include <linux/module.h>
    #include <linux/init.h>
    #include <linux/string.h>
    +#include <linux/kdev_t.h>
    #include "base.h"

    #define to_class_attr(_attr) container_of(_attr, struct class_attribute, attr)
    @@ -298,9 +299,9 @@
    int num_envp, char *buffer, int buffer_size)
    {
    struct class_device *class_dev = to_class_dev(kobj);
    - int retval = 0;
    int i = 0;
    int length = 0;
    + int retval = 0;

    pr_debug("%s - name = %s\n", __FUNCTION__, class_dev->class_id);

    @@ -313,26 +314,34 @@
    &length, "PHYSDEVPATH=%s", path);
    kfree(path);

    - /* add bus name of physical device */
    if (dev->bus)
    add_hotplug_env_var(envp, num_envp, &i,
    buffer, buffer_size, &length,
    "PHYSDEVBUS=%s", dev->bus->name);

    - /* add driver name of physical device */
    if (dev->driver)
    add_hotplug_env_var(envp, num_envp, &i,
    buffer, buffer_size, &length,
    "PHYSDEVDRIVER=%s", dev->driver->name);
    -
    - /* terminate, set to next free slot, shrink available space */
    - envp[i] = NULL;
    - envp = &envp[i];
    - num_envp -= i;
    - buffer = &buffer[length];
    - buffer_size -= length;
    }

    + if (MAJOR(class_dev->devt)) {
    + add_hotplug_env_var(envp, num_envp, &i,
    + buffer, buffer_size, &length,
    + "MAJOR=%u", MAJOR(class_dev->devt));
    +
    + add_hotplug_env_var(envp, num_envp, &i,
    + buffer, buffer_size, &length,
    + "MINOR=%u", MINOR(class_dev->devt));
    + }
    +
    + /* terminate, set to next free slot, shrink available space */
    + envp[i] = NULL;
    + envp = &envp[i];
    + num_envp -= i;
    + buffer = &buffer[length];
    + buffer_size -= length;
    +
    if (class_dev->class->hotplug) {
    /* have the bus specific function add its stuff */
    retval = class_dev->class->hotplug (class_dev, envp, num_envp,
    @@ -388,6 +397,12 @@
    }
    }

    +static ssize_t show_dev(struct class_device *class_dev, char *buf)
    +{
    + return print_dev_t(buf, class_dev->devt);
    +}
    +static CLASS_DEVICE_ATTR(dev, S_IRUGO, show_dev, NULL);
    +
    void class_device_initialize(struct class_device *class_dev)
    {
    kobj_set_kset_s(class_dev, class_obj_subsys);
    @@ -432,6 +447,10 @@
    class_intf->add(class_dev);
    up_write(&parent->subsys.rwsem);
    }
    +
    + if (MAJOR(class_dev->devt))
    + class_device_create_file(class_dev, &class_device_attr_dev);
    +
    class_device_add_attrs(class_dev);
    class_device_dev_link(class_dev);
    class_device_driver_link(class_dev);
    diff -Nru a/include/linux/device.h b/include/linux/device.h
    --- a/include/linux/device.h 2005-03-09 16:29:55 -08:00
    +++ b/include/linux/device.h 2005-03-09 16:29:55 -08:00
    @@ -184,6 +184,7 @@

    struct kobject kobj;
    struct class * class; /* required */
    + dev_t devt; /* dev_t, creates the sysfs "dev" */
    struct device * dev; /* not necessary, but nice to have */
    void * class_data; /* class-specific data */

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:11    [W:0.224 / U:0.812 seconds]
    ©2003-2011 Jasper Spaans. Advertise on this site