[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>
This commit is contained in:
Родитель
71d276d751
Коммит
fb120da678
|
@ -111,7 +111,7 @@ EXPORT_SYMBOL(vio_unregister_driver);
|
||||||
static const struct vio_device_id *vio_match_device(
|
static const struct vio_device_id *vio_match_device(
|
||||||
const struct vio_device_id *ids, const struct vio_dev *dev)
|
const struct vio_device_id *ids, const struct vio_dev *dev)
|
||||||
{
|
{
|
||||||
while (ids->type) {
|
while (ids->type[0] != '\0') {
|
||||||
if (vio_bus_ops.match(ids, dev))
|
if (vio_bus_ops.match(ids, dev))
|
||||||
return ids;
|
return ids;
|
||||||
ids++;
|
ids++;
|
||||||
|
|
|
@ -776,7 +776,7 @@ static int viodasd_remove(struct vio_dev *vdev)
|
||||||
*/
|
*/
|
||||||
static struct vio_device_id viodasd_device_table[] __devinitdata = {
|
static struct vio_device_id viodasd_device_table[] __devinitdata = {
|
||||||
{ "viodasd", "" },
|
{ "viodasd", "" },
|
||||||
{ 0, }
|
{ "", "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(vio, viodasd_device_table);
|
MODULE_DEVICE_TABLE(vio, viodasd_device_table);
|
||||||
|
|
|
@ -734,7 +734,7 @@ static int viocd_remove(struct vio_dev *vdev)
|
||||||
*/
|
*/
|
||||||
static struct vio_device_id viocd_device_table[] __devinitdata = {
|
static struct vio_device_id viocd_device_table[] __devinitdata = {
|
||||||
{ "viocd", "" },
|
{ "viocd", "" },
|
||||||
{ 0, }
|
{ "", "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(vio, viocd_device_table);
|
MODULE_DEVICE_TABLE(vio, viocd_device_table);
|
||||||
|
|
|
@ -39,7 +39,7 @@ char hvc_driver_name[] = "hvc_console";
|
||||||
|
|
||||||
static struct vio_device_id hvc_driver_table[] __devinitdata = {
|
static struct vio_device_id hvc_driver_table[] __devinitdata = {
|
||||||
{"serial", "hvterm1"},
|
{"serial", "hvterm1"},
|
||||||
{ NULL, }
|
{ "", "" }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(vio, hvc_driver_table);
|
MODULE_DEVICE_TABLE(vio, hvc_driver_table);
|
||||||
|
|
||||||
|
|
|
@ -527,7 +527,7 @@ static int khvcsd(void *unused)
|
||||||
|
|
||||||
static struct vio_device_id hvcs_driver_table[] __devinitdata= {
|
static struct vio_device_id hvcs_driver_table[] __devinitdata= {
|
||||||
{"serial-server", "hvterm2"},
|
{"serial-server", "hvterm2"},
|
||||||
{ NULL, }
|
{ "", "" }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(vio, hvcs_driver_table);
|
MODULE_DEVICE_TABLE(vio, hvcs_driver_table);
|
||||||
|
|
||||||
|
|
|
@ -991,7 +991,7 @@ static int viotape_remove(struct vio_dev *vdev)
|
||||||
*/
|
*/
|
||||||
static struct vio_device_id viotape_device_table[] __devinitdata = {
|
static struct vio_device_id viotape_device_table[] __devinitdata = {
|
||||||
{ "viotape", "" },
|
{ "viotape", "" },
|
||||||
{ 0, }
|
{ "", "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(vio, viotape_device_table);
|
MODULE_DEVICE_TABLE(vio, viotape_device_table);
|
||||||
|
|
|
@ -1144,7 +1144,7 @@ static void ibmveth_proc_unregister_driver(void)
|
||||||
|
|
||||||
static struct vio_device_id ibmveth_device_table[] __devinitdata= {
|
static struct vio_device_id ibmveth_device_table[] __devinitdata= {
|
||||||
{ "network", "IBM,l-lan"},
|
{ "network", "IBM,l-lan"},
|
||||||
{ 0,}
|
{ "", "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(vio, ibmveth_device_table);
|
MODULE_DEVICE_TABLE(vio, ibmveth_device_table);
|
||||||
|
|
|
@ -1370,7 +1370,7 @@ static int veth_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
||||||
*/
|
*/
|
||||||
static struct vio_device_id veth_device_table[] __devinitdata = {
|
static struct vio_device_id veth_device_table[] __devinitdata = {
|
||||||
{ "vlan", "" },
|
{ "vlan", "" },
|
||||||
{ NULL, NULL }
|
{ "", "" }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(vio, veth_device_table);
|
MODULE_DEVICE_TABLE(vio, veth_device_table);
|
||||||
|
|
||||||
|
|
|
@ -1442,7 +1442,7 @@ static int ibmvscsi_remove(struct vio_dev *vdev)
|
||||||
*/
|
*/
|
||||||
static struct vio_device_id ibmvscsi_device_table[] __devinitdata = {
|
static struct vio_device_id ibmvscsi_device_table[] __devinitdata = {
|
||||||
{"vscsi", "IBM,v-scsi"},
|
{"vscsi", "IBM,v-scsi"},
|
||||||
{0,}
|
{ "", "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(vio, ibmvscsi_device_table);
|
MODULE_DEVICE_TABLE(vio, ibmvscsi_device_table);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/mod_devicetable.h>
|
||||||
|
|
||||||
#include <asm/hvcall.h>
|
#include <asm/hvcall.h>
|
||||||
#include <asm/scatterlist.h>
|
#include <asm/scatterlist.h>
|
||||||
|
@ -52,11 +53,6 @@ struct vio_dev {
|
||||||
struct device dev;
|
struct device dev;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct vio_device_id {
|
|
||||||
char *type;
|
|
||||||
char *compat;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct vio_driver {
|
struct vio_driver {
|
||||||
struct list_head node;
|
struct list_head node;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Device tables which are exported to userspace via
|
* Device tables which are exported to userspace via
|
||||||
* scripts/table2alias.c. You must keep that file in sync with this
|
* scripts/mod/file2alias.c. You must keep that file in sync with this
|
||||||
* header.
|
* header.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -190,6 +190,11 @@ struct of_device_id
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* VIO */
|
||||||
|
struct vio_device_id {
|
||||||
|
char type[32];
|
||||||
|
char compat[32];
|
||||||
|
};
|
||||||
|
|
||||||
/* PCMCIA */
|
/* PCMCIA */
|
||||||
|
|
||||||
|
|
|
@ -341,6 +341,22 @@ static int do_of_entry (const char *filename, struct of_device_id *of, char *ali
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_vio_entry(const char *filename, struct vio_device_id *vio,
|
||||||
|
char *alias)
|
||||||
|
{
|
||||||
|
char *tmp;
|
||||||
|
|
||||||
|
sprintf(alias, "vio:T%sS%s", vio->type[0] ? vio->type : "*",
|
||||||
|
vio->compat[0] ? vio->compat : "*");
|
||||||
|
|
||||||
|
/* Replace all whitespace with underscores */
|
||||||
|
for (tmp = alias; tmp && *tmp; tmp++)
|
||||||
|
if (isspace (*tmp))
|
||||||
|
*tmp = '_';
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Ignore any prefix, eg. v850 prepends _ */
|
/* Ignore any prefix, eg. v850 prepends _ */
|
||||||
static inline int sym_is(const char *symbol, const char *name)
|
static inline int sym_is(const char *symbol, const char *name)
|
||||||
{
|
{
|
||||||
|
@ -422,6 +438,9 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
|
||||||
else if (sym_is(symname, "__mod_of_device_table"))
|
else if (sym_is(symname, "__mod_of_device_table"))
|
||||||
do_table(symval, sym->st_size, sizeof(struct of_device_id),
|
do_table(symval, sym->st_size, sizeof(struct of_device_id),
|
||||||
do_of_entry, mod);
|
do_of_entry, mod);
|
||||||
|
else if (sym_is(symname, "__mod_vio_device_table"))
|
||||||
|
do_table(symval, sym->st_size, sizeof(struct vio_device_id),
|
||||||
|
do_vio_entry, mod);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче