[PATCH 2/3 (updated)] openfirmware: add sysfs nodes for open firmware devices

From: Jeff Mahoney
Date: Wed Jul 06 2005 - 16:54:31 EST


This patch adds sysfs nodes that the hotplug userspace can use to load the
appropriate modules.

In order for hotplug to work with macio devices, patches to module-init-tools
and hotplug must be applied. Those patches are available at:

ftp://ftp.suse.com/pub/people/jeffm/linux/macio-hotplug/

Changes: The previous versions were built on 2.6.12. 2.6.13-rcX introduced
a device_attribute parameter to the show functions. Since that
parameter was treated as the output buffer, memory corruption would
result, causing Oopsen very quickly.

Signed-off-by: Jeff Mahoney <jeffm@xxxxxxxx>

diff -ruNpX dontdiff linux-2.6.13-rc2.orig/drivers/macintosh/macio_asic.c linux-2.6.13-rc2/drivers/macintosh/macio_asic.c
--- linux-2.6.13-rc2.orig/drivers/macintosh/macio_asic.c 2005-07-06 11:47:46.000000000 -0400
+++ linux-2.6.13-rc2/drivers/macintosh/macio_asic.c 2005-07-06 11:46:03.000000000 -0400
@@ -126,11 +126,14 @@ static int macio_device_resume(struct de
return 0;
}

+extern struct device_attribute macio_dev_attrs[];
+
struct bus_type macio_bus_type = {
.name = "macio",
.match = macio_bus_match,
.suspend = macio_device_suspend,
.resume = macio_device_resume,
+ .dev_attrs = macio_dev_attrs,
};

static int __init macio_bus_driver_init(void)
diff -ruNpX dontdiff linux-2.6.13-rc2.orig/drivers/macintosh/macio_sysfs.c linux-2.6.13-rc2/drivers/macintosh/macio_sysfs.c
--- linux-2.6.13-rc2.orig/drivers/macintosh/macio_sysfs.c 1969-12-31 19:00:00.000000000 -0500
+++ linux-2.6.13-rc2/drivers/macintosh/macio_sysfs.c 2005-07-06 11:46:36.000000000 -0400
@@ -0,0 +1,50 @@
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/stat.h>
+#include <asm/macio.h>
+
+
+#define macio_config_of_attr(field, format_string) \
+static ssize_t \
+field##_show (struct device *dev, struct device_attribute *attr, \
+ char *buf) \
+{ \
+ struct macio_dev *mdev = to_macio_device (dev); \
+ return sprintf (buf, format_string, mdev->ofdev.node->field); \
+}
+
+static ssize_t
+compatible_show (struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct of_device *of;
+ char *compat;
+ int cplen;
+ int length = 0;
+
+ of = &to_macio_device (dev)->ofdev;
+ compat = (char *) get_property(of->node, "compatible", &cplen);
+ if (!compat) {
+ *buf = '\0';
+ return 0;
+ }
+ while (cplen > 0) {
+ int l;
+ length += sprintf (buf, "%s\n", compat);
+ buf += length;
+ l = strlen (compat) + 1;
+ compat += l;
+ cplen -= l;
+ }
+
+ return length;
+}
+
+macio_config_of_attr (name, "%s\n");
+macio_config_of_attr (type, "%s\n");
+
+struct device_attribute macio_dev_attrs[] = {
+ __ATTR_RO(name),
+ __ATTR_RO(type),
+ __ATTR_RO(compatible),
+ __ATTR_NULL
+};
diff -ruNpX dontdiff linux-2.6.13-rc2.orig/drivers/macintosh/Makefile linux-2.6.13-rc2/drivers/macintosh/Makefile
--- linux-2.6.13-rc2.orig/drivers/macintosh/Makefile 2005-07-06 11:47:46.000000000 -0400
+++ linux-2.6.13-rc2/drivers/macintosh/Makefile 2005-07-06 11:41:51.000000000 -0400
@@ -4,7 +4,7 @@

# Each configuration option enables a list of files.

-obj-$(CONFIG_PPC_PMAC) += macio_asic.o
+obj-$(CONFIG_PPC_PMAC) += macio_asic.o macio_sysfs.o

obj-$(CONFIG_PMAC_MEDIABAY) += mediabay.o
obj-$(CONFIG_MAC_EMUMOUSEBTN) += mac_hid.o
--
Jeff Mahoney
SuSE Labs
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/