Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07563c71 authored by Michael Tokarev's avatar Michael Tokarev Committed by Linus Torvalds
Browse files

[PATCH] EISA bus MODALIAS attributes support



Add modalias attribute support for the almost forgotten now EISA bus and
(at least some) EISA-aware modules.

The modalias entry looks like (for an 3c509 NIC):

 eisa:sTCM5093

and the in-module alias like:

 eisa:sTCM5093*

The patch moves struct eisa_device_id declaration from include/linux/eisa.h
to include/linux/mod_devicetable.h (so that the former now #includes the
latter), adds proper MODULE_DEVICE_TABLE(eisa, ...) statements for all
drivers with EISA IDs I found (some drivers already have that DEVICE_TABLE
declared), and adds recognision of __mod_eisa_device_table to
scripts/mod/file2alias.c so that proper modules.alias will be generated.

There's no support for /lib/modules/$kver/modules.eisamap, as it's not used
by any existing tools, and because with in-kernel modalias mechanism those
maps are obsolete anyway.

The rationale for this patch is:

 a) to make EISA bus to act as other busses with modalias
    support, to unify driver loading

 b) to foget about EISA finally - with this patch, kernel
    (who still supports EISA) will be the only one who knows
    how to choose the necessary drivers for this bus ;)

[akpm@osdl.org: fix the kbuild bit]
Signed-off-by: default avatarMichael Tokarev <mjt@tls.msk.ru>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Randy Dunlap <rdunlap@xenotime.net>
Acked-the-net-bits-by: default avatarJeff Garzik <jeff@garzik.org>
Acked-the-tulip-bit-by: default avatarValerie Henson <val_henson@linux.intel.com>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent ebba5f9f
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -128,9 +128,23 @@ static int eisa_bus_match (struct device *dev, struct device_driver *drv)
	return 0;
}

static int eisa_bus_uevent(struct device *dev, char **envp, int num_envp,
			   char *buffer, int buffer_size)
{
	struct eisa_device *edev = to_eisa_device(dev);
	int i = 0;
	int length = 0;

	add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
		       "MODALIAS=" EISA_DEVICE_MODALIAS_FMT, edev->id.sig);
	envp[i] = NULL;
	return 0;
}

struct bus_type eisa_bus_type = {
	.name  = "eisa",
	.match = eisa_bus_match,
	.uevent = eisa_bus_uevent,
};

int eisa_driver_register (struct eisa_driver *edrv)
@@ -160,6 +174,14 @@ static ssize_t eisa_show_state (struct device *dev, struct device_attribute *att

static DEVICE_ATTR(enabled, S_IRUGO, eisa_show_state, NULL);

static ssize_t eisa_show_modalias (struct device *dev, struct device_attribute *attr, char *buf)
{
        struct eisa_device *edev = to_eisa_device (dev);
        return sprintf (buf, EISA_DEVICE_MODALIAS_FMT "\n", edev->id.sig);
}

static DEVICE_ATTR(modalias, S_IRUGO, eisa_show_modalias, NULL);

static int __init eisa_init_device (struct eisa_root_device *root,
				    struct eisa_device *edev,
				    int slot)
@@ -209,6 +231,7 @@ static int __init eisa_register_device (struct eisa_device *edev)

	device_create_file (&edev->dev, &dev_attr_signature);
	device_create_file (&edev->dev, &dev_attr_enabled);
	device_create_file (&edev->dev, &dev_attr_modalias);

	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -225,6 +225,7 @@ static struct eisa_device_id el3_eisa_ids[] = {
		{ "TCM5095" },
		{ "" }
};
MODULE_DEVICE_TABLE(eisa, el3_eisa_ids);

static int el3_eisa_probe (struct device *device);

+1 −0
Original line number Diff line number Diff line
@@ -851,6 +851,7 @@ static struct eisa_device_id vortex_eisa_ids[] = {
	{ "TCM5970", CH_3C597 },
	{ "" }
};
MODULE_DEVICE_TABLE(eisa, vortex_eisa_ids);

static int vortex_eisa_probe(struct device *device);
static int vortex_eisa_remove(struct device *device);
+1 −0
Original line number Diff line number Diff line
@@ -343,6 +343,7 @@ static struct eisa_device_id ne3210_ids[] = {
	{ "NVL1801" },
	{ "" },
};
MODULE_DEVICE_TABLE(eisa, ne3210_ids);

static struct eisa_driver ne3210_eisa_driver = {
	.id_table = ne3210_ids,
+1 −0
Original line number Diff line number Diff line
@@ -2114,6 +2114,7 @@ static struct eisa_device_id de4x5_eisa_ids[] = {
        { "DEC4250", 0 },	/* 0 is the board name index... */
        { "" }
};
MODULE_DEVICE_TABLE(eisa, de4x5_eisa_ids);

static struct eisa_driver de4x5_eisa_driver = {
        .id_table = de4x5_eisa_ids,
Loading