239 lines
6.4 KiB
Diff
239 lines
6.4 KiB
Diff
Subject: [PATCH] Add Amiga Zorro bus modalias support
|
|
|
|
Add Amiga Zorro bus modalias and uevent support
|
|
|
|
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
|
---
|
|
drivers/net/a2065.c | 1 +
|
|
drivers/net/ariadne.c | 1 +
|
|
drivers/net/hydra.c | 1 +
|
|
drivers/net/zorro8390.c | 1 +
|
|
drivers/scsi/zorro7xx.c | 1 +
|
|
drivers/video/cirrusfb.c | 1 +
|
|
drivers/video/fm2fb.c | 1 +
|
|
drivers/zorro/zorro-driver.c | 24 ++++++++++++++++++++++++
|
|
drivers/zorro/zorro-sysfs.c | 11 +++++++++++
|
|
include/linux/mod_devicetable.h | 11 +++++++++++
|
|
include/linux/zorro.h | 13 +------------
|
|
scripts/mod/file2alias.c | 14 ++++++++++++++
|
|
12 files changed, 68 insertions(+), 12 deletions(-)
|
|
|
|
--- a/drivers/net/a2065.c
|
|
+++ b/drivers/net/a2065.c
|
|
@@ -700,6 +700,7 @@ static struct zorro_device_id a2065_zorr
|
|
{ ZORRO_PROD_AMERISTAR_A2065 },
|
|
{ 0 }
|
|
};
|
|
+MODULE_DEVICE_TABLE(zorro, a2065_zorro_tbl);
|
|
|
|
static struct zorro_driver a2065_driver = {
|
|
.name = "a2065",
|
|
--- a/drivers/net/ariadne.c
|
|
+++ b/drivers/net/ariadne.c
|
|
@@ -148,6 +148,7 @@ static struct zorro_device_id ariadne_zo
|
|
{ ZORRO_PROD_VILLAGE_TRONIC_ARIADNE },
|
|
{ 0 }
|
|
};
|
|
+MODULE_DEVICE_TABLE(zorro, ariadne_zorro_tbl);
|
|
|
|
static struct zorro_driver ariadne_driver = {
|
|
.name = "ariadne",
|
|
--- a/drivers/net/hydra.c
|
|
+++ b/drivers/net/hydra.c
|
|
@@ -72,6 +72,7 @@ static struct zorro_device_id hydra_zorr
|
|
{ ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET },
|
|
{ 0 }
|
|
};
|
|
+MODULE_DEVICE_TABLE(zorro, hydra_zorro_tbl);
|
|
|
|
static struct zorro_driver hydra_driver = {
|
|
.name = "hydra",
|
|
--- a/drivers/net/zorro8390.c
|
|
+++ b/drivers/net/zorro8390.c
|
|
@@ -102,6 +102,7 @@ static struct zorro_device_id zorro8390_
|
|
{ ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF, },
|
|
{ 0 }
|
|
};
|
|
+MODULE_DEVICE_TABLE(zorro, zorro8390_zorro_tbl);
|
|
|
|
static struct zorro_driver zorro8390_driver = {
|
|
.name = "zorro8390",
|
|
--- a/drivers/scsi/zorro7xx.c
|
|
+++ b/drivers/scsi/zorro7xx.c
|
|
@@ -65,6 +65,7 @@ static struct zorro_device_id zorro7xx_z
|
|
},
|
|
{ 0 }
|
|
};
|
|
+MODULE_DEVICE_TABLE(zorro, zorro7xx_zorro_tbl);
|
|
|
|
static int __devinit zorro7xx_init_one(struct zorro_dev *z,
|
|
const struct zorro_device_id *ent)
|
|
--- a/drivers/video/cirrusfb.c
|
|
+++ b/drivers/video/cirrusfb.c
|
|
@@ -298,6 +298,7 @@ static const struct zorro_device_id cirr
|
|
},
|
|
{ 0 }
|
|
};
|
|
+MODULE_DEVICE_TABLE(zorro, cirrusfb_zorro_table);
|
|
|
|
static const struct {
|
|
zorro_id id2;
|
|
--- a/drivers/video/fm2fb.c
|
|
+++ b/drivers/video/fm2fb.c
|
|
@@ -219,6 +219,7 @@ static struct zorro_device_id fm2fb_devi
|
|
{ ZORRO_PROD_HELFRICH_RAINBOW_II },
|
|
{ 0 }
|
|
};
|
|
+MODULE_DEVICE_TABLE(zorro, fm2fb_devices);
|
|
|
|
static struct zorro_driver fm2fb_driver = {
|
|
.name = "fm2fb",
|
|
--- a/drivers/zorro/zorro-driver.c
|
|
+++ b/drivers/zorro/zorro-driver.c
|
|
@@ -137,10 +137,34 @@ static int zorro_bus_match(struct device
|
|
return 0;
|
|
}
|
|
|
|
+static int zorro_uevent(struct device *dev, struct kobj_uevent_env *env)
|
|
+{
|
|
+#ifdef CONFIG_HOTPLUG
|
|
+ struct zorro_dev *z;
|
|
+
|
|
+ if (!dev)
|
|
+ return -ENODEV;
|
|
+
|
|
+ z = to_zorro_dev(dev);
|
|
+ if (!z)
|
|
+ return -ENODEV;
|
|
+
|
|
+ if (add_uevent_var(env, "ZORRO_ID=%08X", z->id) ||
|
|
+ add_uevent_var(env, "ZORRO_SLOT_NAME=%s", z->dev.bus_id) ||
|
|
+ add_uevent_var(env, "ZORRO_SLOT_ADDR=%04X", z->slotaddr) ||
|
|
+ add_uevent_var(env, "MODALIAS=" ZORRO_DEVICE_MODALIAS_FMT, z->id))
|
|
+ return -ENOMEM;
|
|
+
|
|
+ return 0;
|
|
+#else /* !CONFIG_HOTPLUG */
|
|
+ return -ENODEV;
|
|
+#endif /* !CONFIG_HOTPLUG */
|
|
+}
|
|
|
|
struct bus_type zorro_bus_type = {
|
|
.name = "zorro",
|
|
.match = zorro_bus_match,
|
|
+ .uevent = zorro_uevent,
|
|
.probe = zorro_device_probe,
|
|
.remove = zorro_device_remove,
|
|
};
|
|
--- a/drivers/zorro/zorro-sysfs.c
|
|
+++ b/drivers/zorro/zorro-sysfs.c
|
|
@@ -84,6 +84,16 @@ static struct bin_attribute zorro_config
|
|
.read = zorro_read_config,
|
|
};
|
|
|
|
+static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
|
|
+ char *buf)
|
|
+{
|
|
+ struct zorro_dev *z = to_zorro_dev(dev);
|
|
+
|
|
+ return sprintf(buf, ZORRO_DEVICE_MODALIAS_FMT "\n", z->id);
|
|
+}
|
|
+
|
|
+static DEVICE_ATTR(modalias, S_IRUGO, modalias_show, NULL);
|
|
+
|
|
void zorro_create_sysfs_dev_files(struct zorro_dev *z)
|
|
{
|
|
struct device *dev = &z->dev;
|
|
@@ -95,6 +105,7 @@ void zorro_create_sysfs_dev_files(struct
|
|
device_create_file(dev, &dev_attr_slotaddr);
|
|
device_create_file(dev, &dev_attr_slotsize);
|
|
device_create_file(dev, &dev_attr_resource);
|
|
+ device_create_file(dev, &dev_attr_modalias);
|
|
sysfs_create_bin_file(&dev->kobj, &zorro_config_attr);
|
|
}
|
|
|
|
--- a/include/linux/mod_devicetable.h
|
|
+++ b/include/linux/mod_devicetable.h
|
|
@@ -367,4 +367,15 @@ struct virtio_device_id {
|
|
};
|
|
#define VIRTIO_DEV_ANY_ID 0xffffffff
|
|
|
|
+
|
|
+struct zorro_device_id {
|
|
+ __u32 id; /* Device ID or ZORRO_WILDCARD */
|
|
+ kernel_ulong_t driver_data; /* Data private to the driver */
|
|
+};
|
|
+
|
|
+#define ZORRO_WILDCARD (0xffffffff) /* not official */
|
|
+
|
|
+#define ZORRO_DEVICE_MODALIAS_FMT "zorro:i%08X"
|
|
+
|
|
+
|
|
#endif /* LINUX_MOD_DEVICETABLE_H */
|
|
--- a/include/linux/zorro.h
|
|
+++ b/include/linux/zorro.h
|
|
@@ -38,8 +38,6 @@
|
|
typedef __u32 zorro_id;
|
|
|
|
|
|
-#define ZORRO_WILDCARD (0xffffffff) /* not official */
|
|
-
|
|
/* Include the ID list */
|
|
#include <linux/zorro_ids.h>
|
|
|
|
@@ -116,6 +114,7 @@ struct ConfigDev {
|
|
|
|
#include <linux/init.h>
|
|
#include <linux/ioport.h>
|
|
+#include <linux/mod_devicetable.h>
|
|
|
|
#include <asm/zorro.h>
|
|
|
|
@@ -155,16 +154,6 @@ extern struct bus_type zorro_bus_type;
|
|
|
|
|
|
/*
|
|
- * Zorro device IDs
|
|
- */
|
|
-
|
|
-struct zorro_device_id {
|
|
- zorro_id id; /* Device ID or ZORRO_WILDCARD */
|
|
- unsigned long driver_data; /* Data private to the driver */
|
|
-};
|
|
-
|
|
-
|
|
- /*
|
|
* Zorro device drivers
|
|
*/
|
|
|
|
--- a/scripts/mod/file2alias.c
|
|
+++ b/scripts/mod/file2alias.c
|
|
@@ -539,6 +539,16 @@ static int do_virtio_entry(const char *f
|
|
return 1;
|
|
}
|
|
|
|
+/* Looks like: zorro:iN. */
|
|
+static int do_zorro_entry(const char *filename, struct zorro_device_id *id,
|
|
+ char *alias)
|
|
+{
|
|
+ id->id = TO_NATIVE(id->id);
|
|
+ strcpy(alias, "zorro:");
|
|
+ ADD(alias, "i", id->id != ZORRO_WILDCARD, id->id);
|
|
+ return 1;
|
|
+}
|
|
+
|
|
/* Ignore any prefix, eg. v850 prepends _ */
|
|
static inline int sym_is(const char *symbol, const char *name)
|
|
{
|
|
@@ -669,6 +679,10 @@ void handle_moddevtable(struct module *m
|
|
do_table(symval, sym->st_size,
|
|
sizeof(struct virtio_device_id), "virtio",
|
|
do_virtio_entry, mod);
|
|
+ else if (sym_is(symname, "__mod_zorro_device_table"))
|
|
+ do_table(symval, sym->st_size,
|
|
+ sizeof(struct zorro_device_id), "zorro",
|
|
+ do_zorro_entry, mod);
|
|
free(zeros);
|
|
}
|
|
|