[PATCH] Add sysfs support for the IPMI device interface

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Linus,

Could you please add this patch to the main tree? I can't send it to Andrew because he has a rework of this in his tree that has not made it into yours yet, and I'd like to have this in before 2.6.12 is released.

-Corey


Add support for sysfs to the IPMI device interface.

Signed-off-by: Corey Minyard <[email protected]>

Index: linux-2.6.11-mm1/drivers/char/ipmi/ipmi_devintf.c
===================================================================
--- linux-2.6.11-mm1.orig/drivers/char/ipmi/ipmi_devintf.c
+++ linux-2.6.11-mm1/drivers/char/ipmi/ipmi_devintf.c
@@ -44,6 +44,7 @@
#include <linux/ipmi.h>
#include <asm/semaphore.h>
#include <linux/init.h>
+#include <linux/device.h>

#define IPMI_DEVINTF_VERSION "v33"

@@ -519,15 +520,24 @@
         " interface.  Other values will set the major device number"
         " to that value.");

+static struct class_simple *ipmi_class;
+
static void ipmi_new_smi(int if_num)
{
+    char                  name[10];
+    dev_t                 dev = MKDEV(ipmi_major, if_num);
+
    devfs_mk_cdev(MKDEV(ipmi_major, if_num),
              S_IFCHR | S_IRUSR | S_IWUSR,
              "ipmidev/%d", if_num);
+
+    snprintf(name, sizeof(name), "ipmi%d", if_num);
+    class_simple_device_add(ipmi_class, dev, NULL, name);
}

static void ipmi_smi_gone(int if_num)
{
+    class_simple_device_remove(MKDEV(ipmi_major, if_num));
    devfs_remove("ipmidev/%d", if_num);
}

@@ -548,8 +558,15 @@
    printk(KERN_INFO "ipmi device interface version "
           IPMI_DEVINTF_VERSION "\n");

+    ipmi_class = class_simple_create(THIS_MODULE, "ipmi");
+    if (IS_ERR(ipmi_class)) {
+        printk(KERN_ERR "ipmi: can't register device class\n");
+        return PTR_ERR(ipmi_class);
+    }
+
    rv = register_chrdev(ipmi_major, DEVICE_NAME, &ipmi_fops);
    if (rv < 0) {
+        class_simple_destroy(ipmi_class);
        printk(KERN_ERR "ipmi: can't get major %d\n", ipmi_major);
        return rv;
    }
@@ -563,6 +580,7 @@
    rv = ipmi_smi_watcher_register(&smi_watcher);
    if (rv) {
        unregister_chrdev(ipmi_major, DEVICE_NAME);
+        class_simple_destroy(ipmi_class);
        printk(KERN_WARNING "ipmi: can't register smi watcher\n");
        return rv;
    }
@@ -573,6 +591,7 @@

static __exit void cleanup_ipmi(void)
{
+    class_simple_destroy(ipmi_class);
    ipmi_smi_watcher_unregister(&smi_watcher);
    devfs_remove(DEVICE_NAME);
    unregister_chrdev(ipmi_major, DEVICE_NAME);

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

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux