From: Greg KH <greg@kroah.com>
To: linux-kernel@vger.kernel.org
Cc: kay.sievers@vrfy.org
Subject: [PATCH] class core: export MAJOR/MINOR to the hotplug env
Date: Wed, 9 Mar 2005 16:34:40 -0800 [thread overview]
Message-ID: <1110414880513@kroah.com> (raw)
In-Reply-To: <11104148792069@kroah.com>
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 */
next prev parent reply other threads:[~2005-03-10 2:40 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-10 0:34 [BK PATCH] Driver core and kobject updates for 2.6.11 Greg KH
2005-03-10 0:34 ` [PATCH] Kobject: remove some unneeded exports Greg KH
2005-03-10 0:34 ` [PATCH] Add 2.4.x cpufreq /proc and sysctl interface removal feature-removal-schedule Greg KH
2005-03-10 0:34 ` [PATCH] cpufreq 2.4 interface removal schedule Greg KH
2005-03-10 0:34 ` [PATCH] driver core: Separate platform device name from platform device number Greg KH
2005-03-10 0:34 ` Greg KH [this message]
2005-03-10 0:34 ` [PATCH] block core: export MAJOR/MINOR to the hotplug env Greg KH
2005-03-10 0:34 ` [PATCH] class_simple: pass dev_t to the class core Greg KH
2005-03-10 0:34 ` [PATCH] usb: class driver " Greg KH
2005-03-10 0:34 ` [PATCH] i2c: " Greg KH
2005-03-10 0:34 ` [PATCH] videodev: " Greg KH
2005-03-10 0:34 ` [PATCH] driver core: clean driver unload Greg KH
2005-03-10 0:34 ` [PATCH] Driver core: add "bus" symlink to class/block devices Greg KH
2005-03-10 0:34 ` [PATCH] floppy.c: pass physical device to device registration Greg KH
2005-03-10 0:34 ` [PATCH] kset: make ksets have a spinlock, and use that to lock their lists Greg KH
2005-03-10 0:34 ` [PATCH] sysdev: make system_subsys static as no one else needs access to it Greg KH
2005-03-10 0:34 ` [PATCH] kref: make kref_put return if this was the last put call Greg KH
2005-03-10 0:34 ` [PATCH] USB: move usb core to use class_simple instead of it's own class functions Greg KH
2005-03-10 0:34 ` [PATCH] kmap: remove usage of rwsem from kobj_map Greg KH
2005-03-10 0:34 ` [PATCH] sysdev: fix the name of the list of drivers to be a sane name Greg KH
2005-03-10 0:34 ` [PATCH] sysdev: remove the rwsem usage from this subsystem Greg KH
2005-03-10 0:34 ` [PATCH] class: add a semaphore to struct class, and use that instead of the subsystem rwsem Greg KH
2005-03-25 18:01 ` [PATCH] driver core: Separate platform device name from platform device number Paul Mundt
2005-03-25 18:10 ` Greg KH
2005-03-25 18:35 ` Paul Mundt
2005-03-25 19:38 ` Kyle Moffett
2005-03-25 19:58 ` Paul Mundt
2005-03-25 20:17 ` Kyle Moffett
2005-03-25 20:25 ` Russell King
2005-03-25 20:56 ` Paul Mundt
2005-03-25 21:03 ` Russell King
2005-03-25 22:15 ` Paul Mundt
2005-03-10 2:23 ` [PATCH] Add 2.4.x cpufreq /proc and sysctl interface removal feature-removal-schedule Dave Jones
2005-03-10 4:56 ` Dominik Brodowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1110414880513@kroah.com \
--to=greg@kroah.com \
--cc=kay.sievers@vrfy.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox