All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/3 (updated)] openfirmware: add sysfs nodes for open firmware devices
@ 2005-07-06 19:26 Jeff Mahoney
  2005-07-06 19:41 ` Linus Torvalds
  0 siblings, 1 reply; 6+ messages in thread
From: Jeff Mahoney @ 2005-07-06 19:26 UTC (permalink / raw)
  To: Andrew Morton, Linus Torvalds, Linux Kernel Mailing List, benh

 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@suse.com>

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2005-07-06 21:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-06 19:26 [PATCH 2/3 (updated)] openfirmware: add sysfs nodes for open firmware devices Jeff Mahoney
2005-07-06 19:41 ` Linus Torvalds
2005-07-06 20:21   ` Linus Torvalds
2005-07-06 20:39     ` Jeff Mahoney
2005-07-06 20:48       ` Linus Torvalds
2005-07-06 21:39         ` Linus Torvalds

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.