diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2005-08-17 02:42:59 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-08-29 23:31:56 -0400 |
commit | fb120da678c517f72d4b39932062c2191827b331 (patch) | |
tree | 0ae6b9d42e0c66293c3cc567f2f8279ca2e89cde | |
parent | 71d276d751ff5ddba28312aecefb174b20a5b970 (diff) |
[PATCH] Make MODULE_DEVICE_TABLE work for vio devices
Make MODULE_DEVICE_TABLE work for vio devices.
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | arch/ppc64/kernel/vio.c | 2 | ||||
-rw-r--r-- | drivers/block/viodasd.c | 2 | ||||
-rw-r--r-- | drivers/cdrom/viocd.c | 2 | ||||
-rw-r--r-- | drivers/char/hvc_vio.c | 2 | ||||
-rw-r--r-- | drivers/char/hvcs.c | 2 | ||||
-rw-r--r-- | drivers/char/viotape.c | 2 | ||||
-rw-r--r-- | drivers/net/ibmveth.c | 2 | ||||
-rw-r--r-- | drivers/net/iseries_veth.c | 2 | ||||
-rw-r--r-- | drivers/scsi/ibmvscsi/ibmvscsi.c | 2 | ||||
-rw-r--r-- | include/asm-ppc64/vio.h | 6 | ||||
-rw-r--r-- | include/linux/mod_devicetable.h | 7 | ||||
-rw-r--r-- | scripts/mod/file2alias.c | 19 |
12 files changed, 35 insertions, 15 deletions
diff --git a/arch/ppc64/kernel/vio.c b/arch/ppc64/kernel/vio.c index 93c437a0911b..c90e1dd875ce 100644 --- a/arch/ppc64/kernel/vio.c +++ b/arch/ppc64/kernel/vio.c | |||
@@ -111,7 +111,7 @@ EXPORT_SYMBOL(vio_unregister_driver); | |||
111 | static const struct vio_device_id *vio_match_device( | 111 | static const struct vio_device_id *vio_match_device( |
112 | const struct vio_device_id *ids, const struct vio_dev *dev) | 112 | const struct vio_device_id *ids, const struct vio_dev *dev) |
113 | { | 113 | { |
114 | while (ids->type) { | 114 | while (ids->type[0] != '\0') { |
115 | if (vio_bus_ops.match(ids, dev)) | 115 | if (vio_bus_ops.match(ids, dev)) |
116 | return ids; | 116 | return ids; |
117 | ids++; | 117 | ids++; |
diff --git a/drivers/block/viodasd.c b/drivers/block/viodasd.c index 46e56a25d2c8..e46ecd23b3ac 100644 --- a/drivers/block/viodasd.c +++ b/drivers/block/viodasd.c | |||
@@ -776,7 +776,7 @@ static int viodasd_remove(struct vio_dev *vdev) | |||
776 | */ | 776 | */ |
777 | static struct vio_device_id viodasd_device_table[] __devinitdata = { | 777 | static struct vio_device_id viodasd_device_table[] __devinitdata = { |
778 | { "viodasd", "" }, | 778 | { "viodasd", "" }, |
779 | { 0, } | 779 | { "", "" } |
780 | }; | 780 | }; |
781 | 781 | ||
782 | MODULE_DEVICE_TABLE(vio, viodasd_device_table); | 782 | MODULE_DEVICE_TABLE(vio, viodasd_device_table); |
diff --git a/drivers/cdrom/viocd.c b/drivers/cdrom/viocd.c index 38dd9ffbe8bc..0829db58462f 100644 --- a/drivers/cdrom/viocd.c +++ b/drivers/cdrom/viocd.c | |||
@@ -734,7 +734,7 @@ static int viocd_remove(struct vio_dev *vdev) | |||
734 | */ | 734 | */ |
735 | static struct vio_device_id viocd_device_table[] __devinitdata = { | 735 | static struct vio_device_id viocd_device_table[] __devinitdata = { |
736 | { "viocd", "" }, | 736 | { "viocd", "" }, |
737 | { 0, } | 737 | { "", "" } |
738 | }; | 738 | }; |
739 | 739 | ||
740 | MODULE_DEVICE_TABLE(vio, viocd_device_table); | 740 | MODULE_DEVICE_TABLE(vio, viocd_device_table); |
diff --git a/drivers/char/hvc_vio.c b/drivers/char/hvc_vio.c index 60bb9152b832..78d681dc35a8 100644 --- a/drivers/char/hvc_vio.c +++ b/drivers/char/hvc_vio.c | |||
@@ -39,7 +39,7 @@ char hvc_driver_name[] = "hvc_console"; | |||
39 | 39 | ||
40 | static struct vio_device_id hvc_driver_table[] __devinitdata = { | 40 | static struct vio_device_id hvc_driver_table[] __devinitdata = { |
41 | {"serial", "hvterm1"}, | 41 | {"serial", "hvterm1"}, |
42 | { NULL, } | 42 | { "", "" } |
43 | }; | 43 | }; |
44 | MODULE_DEVICE_TABLE(vio, hvc_driver_table); | 44 | MODULE_DEVICE_TABLE(vio, hvc_driver_table); |
45 | 45 | ||
diff --git a/drivers/char/hvcs.c b/drivers/char/hvcs.c index 3236d2404905..f47f009f9259 100644 --- a/drivers/char/hvcs.c +++ b/drivers/char/hvcs.c | |||
@@ -527,7 +527,7 @@ static int khvcsd(void *unused) | |||
527 | 527 | ||
528 | static struct vio_device_id hvcs_driver_table[] __devinitdata= { | 528 | static struct vio_device_id hvcs_driver_table[] __devinitdata= { |
529 | {"serial-server", "hvterm2"}, | 529 | {"serial-server", "hvterm2"}, |
530 | { NULL, } | 530 | { "", "" } |
531 | }; | 531 | }; |
532 | MODULE_DEVICE_TABLE(vio, hvcs_driver_table); | 532 | MODULE_DEVICE_TABLE(vio, hvcs_driver_table); |
533 | 533 | ||
diff --git a/drivers/char/viotape.c b/drivers/char/viotape.c index 4764b4f9555d..0aff45fac2e6 100644 --- a/drivers/char/viotape.c +++ b/drivers/char/viotape.c | |||
@@ -991,7 +991,7 @@ static int viotape_remove(struct vio_dev *vdev) | |||
991 | */ | 991 | */ |
992 | static struct vio_device_id viotape_device_table[] __devinitdata = { | 992 | static struct vio_device_id viotape_device_table[] __devinitdata = { |
993 | { "viotape", "" }, | 993 | { "viotape", "" }, |
994 | { 0, } | 994 | { "", "" } |
995 | }; | 995 | }; |
996 | 996 | ||
997 | MODULE_DEVICE_TABLE(vio, viotape_device_table); | 997 | MODULE_DEVICE_TABLE(vio, viotape_device_table); |
diff --git a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c index c39b0609742a..32d5fabd4b10 100644 --- a/drivers/net/ibmveth.c +++ b/drivers/net/ibmveth.c | |||
@@ -1144,7 +1144,7 @@ static void ibmveth_proc_unregister_driver(void) | |||
1144 | 1144 | ||
1145 | static struct vio_device_id ibmveth_device_table[] __devinitdata= { | 1145 | static struct vio_device_id ibmveth_device_table[] __devinitdata= { |
1146 | { "network", "IBM,l-lan"}, | 1146 | { "network", "IBM,l-lan"}, |
1147 | { 0,} | 1147 | { "", "" } |
1148 | }; | 1148 | }; |
1149 | 1149 | ||
1150 | MODULE_DEVICE_TABLE(vio, ibmveth_device_table); | 1150 | MODULE_DEVICE_TABLE(vio, ibmveth_device_table); |
diff --git a/drivers/net/iseries_veth.c b/drivers/net/iseries_veth.c index 55af32e9bf08..183ba97785b0 100644 --- a/drivers/net/iseries_veth.c +++ b/drivers/net/iseries_veth.c | |||
@@ -1370,7 +1370,7 @@ static int veth_probe(struct vio_dev *vdev, const struct vio_device_id *id) | |||
1370 | */ | 1370 | */ |
1371 | static struct vio_device_id veth_device_table[] __devinitdata = { | 1371 | static struct vio_device_id veth_device_table[] __devinitdata = { |
1372 | { "vlan", "" }, | 1372 | { "vlan", "" }, |
1373 | { NULL, NULL } | 1373 | { "", "" } |
1374 | }; | 1374 | }; |
1375 | MODULE_DEVICE_TABLE(vio, veth_device_table); | 1375 | MODULE_DEVICE_TABLE(vio, veth_device_table); |
1376 | 1376 | ||
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index fe09d145542a..2cb3c8340ca8 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
@@ -1442,7 +1442,7 @@ static int ibmvscsi_remove(struct vio_dev *vdev) | |||
1442 | */ | 1442 | */ |
1443 | static struct vio_device_id ibmvscsi_device_table[] __devinitdata = { | 1443 | static struct vio_device_id ibmvscsi_device_table[] __devinitdata = { |
1444 | {"vscsi", "IBM,v-scsi"}, | 1444 | {"vscsi", "IBM,v-scsi"}, |
1445 | {0,} | 1445 | { "", "" } |
1446 | }; | 1446 | }; |
1447 | 1447 | ||
1448 | MODULE_DEVICE_TABLE(vio, ibmvscsi_device_table); | 1448 | MODULE_DEVICE_TABLE(vio, ibmvscsi_device_table); |
diff --git a/include/asm-ppc64/vio.h b/include/asm-ppc64/vio.h index 85420bb37d58..03f1b95f433b 100644 --- a/include/asm-ppc64/vio.h +++ b/include/asm-ppc64/vio.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
20 | #include <linux/device.h> | 20 | #include <linux/device.h> |
21 | #include <linux/dma-mapping.h> | 21 | #include <linux/dma-mapping.h> |
22 | #include <linux/mod_devicetable.h> | ||
22 | 23 | ||
23 | #include <asm/hvcall.h> | 24 | #include <asm/hvcall.h> |
24 | #include <asm/scatterlist.h> | 25 | #include <asm/scatterlist.h> |
@@ -52,11 +53,6 @@ struct vio_dev { | |||
52 | struct device dev; | 53 | struct device dev; |
53 | }; | 54 | }; |
54 | 55 | ||
55 | struct vio_device_id { | ||
56 | char *type; | ||
57 | char *compat; | ||
58 | }; | ||
59 | |||
60 | struct vio_driver { | 56 | struct vio_driver { |
61 | struct list_head node; | 57 | struct list_head node; |
62 | char *name; | 58 | char *name; |
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 97bbccdbcca3..47da39ba3f03 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Device tables which are exported to userspace via | 2 | * Device tables which are exported to userspace via |
3 | * scripts/table2alias.c. You must keep that file in sync with this | 3 | * scripts/mod/file2alias.c. You must keep that file in sync with this |
4 | * header. | 4 | * header. |
5 | */ | 5 | */ |
6 | 6 | ||
@@ -190,6 +190,11 @@ struct of_device_id | |||
190 | #endif | 190 | #endif |
191 | }; | 191 | }; |
192 | 192 | ||
193 | /* VIO */ | ||
194 | struct vio_device_id { | ||
195 | char type[32]; | ||
196 | char compat[32]; | ||
197 | }; | ||
193 | 198 | ||
194 | /* PCMCIA */ | 199 | /* PCMCIA */ |
195 | 200 | ||
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 5180405c1a84..d8ee38aede26 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
@@ -341,6 +341,22 @@ static int do_of_entry (const char *filename, struct of_device_id *of, char *ali | |||
341 | return 1; | 341 | return 1; |
342 | } | 342 | } |
343 | 343 | ||
344 | static int do_vio_entry(const char *filename, struct vio_device_id *vio, | ||
345 | char *alias) | ||
346 | { | ||
347 | char *tmp; | ||
348 | |||
349 | sprintf(alias, "vio:T%sS%s", vio->type[0] ? vio->type : "*", | ||
350 | vio->compat[0] ? vio->compat : "*"); | ||
351 | |||
352 | /* Replace all whitespace with underscores */ | ||
353 | for (tmp = alias; tmp && *tmp; tmp++) | ||
354 | if (isspace (*tmp)) | ||
355 | *tmp = '_'; | ||
356 | |||
357 | return 1; | ||
358 | } | ||
359 | |||
344 | /* Ignore any prefix, eg. v850 prepends _ */ | 360 | /* Ignore any prefix, eg. v850 prepends _ */ |
345 | static inline int sym_is(const char *symbol, const char *name) | 361 | static inline int sym_is(const char *symbol, const char *name) |
346 | { | 362 | { |
@@ -422,6 +438,9 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, | |||
422 | else if (sym_is(symname, "__mod_of_device_table")) | 438 | else if (sym_is(symname, "__mod_of_device_table")) |
423 | do_table(symval, sym->st_size, sizeof(struct of_device_id), | 439 | do_table(symval, sym->st_size, sizeof(struct of_device_id), |
424 | do_of_entry, mod); | 440 | do_of_entry, mod); |
441 | else if (sym_is(symname, "__mod_vio_device_table")) | ||
442 | do_table(symval, sym->st_size, sizeof(struct vio_device_id), | ||
443 | do_vio_entry, mod); | ||
425 | 444 | ||
426 | } | 445 | } |
427 | 446 | ||