[PATCH] openfirmware: generate device table for userspace
This converts the usage of struct of_match to struct of_device_id, similar to pci_device_id. This allows a device table to be generated, which can be parsed by depmod(8) to generate a map file for module loading. 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/ Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:

committato da
Linus Torvalds

parent
159f597a8b
commit
5e6557722e
@@ -3,6 +3,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/of_device.h>
|
||||
|
||||
@@ -15,20 +16,20 @@
|
||||
* Used by a driver to check whether an of_device present in the
|
||||
* system is in its list of supported devices.
|
||||
*/
|
||||
const struct of_match * of_match_device(const struct of_match *matches,
|
||||
const struct of_device_id * of_match_device(const struct of_device_id *matches,
|
||||
const struct of_device *dev)
|
||||
{
|
||||
if (!dev->node)
|
||||
return NULL;
|
||||
while (matches->name || matches->type || matches->compatible) {
|
||||
while (matches->name[0] || matches->type[0] || matches->compatible[0]) {
|
||||
int match = 1;
|
||||
if (matches->name && matches->name != OF_ANY_MATCH)
|
||||
if (matches->name[0])
|
||||
match &= dev->node->name
|
||||
&& !strcmp(matches->name, dev->node->name);
|
||||
if (matches->type && matches->type != OF_ANY_MATCH)
|
||||
if (matches->type[0])
|
||||
match &= dev->node->type
|
||||
&& !strcmp(matches->type, dev->node->type);
|
||||
if (matches->compatible && matches->compatible != OF_ANY_MATCH)
|
||||
if (matches->compatible[0])
|
||||
match &= device_is_compatible(dev->node,
|
||||
matches->compatible);
|
||||
if (match)
|
||||
@@ -42,7 +43,7 @@ static int of_platform_bus_match(struct device *dev, struct device_driver *drv)
|
||||
{
|
||||
struct of_device * of_dev = to_of_device(dev);
|
||||
struct of_platform_driver * of_drv = to_of_platform_driver(drv);
|
||||
const struct of_match * matches = of_drv->match_table;
|
||||
const struct of_device_id * matches = of_drv->match_table;
|
||||
|
||||
if (!matches)
|
||||
return 0;
|
||||
@@ -75,7 +76,7 @@ static int of_device_probe(struct device *dev)
|
||||
int error = -ENODEV;
|
||||
struct of_platform_driver *drv;
|
||||
struct of_device *of_dev;
|
||||
const struct of_match *match;
|
||||
const struct of_device_id *match;
|
||||
|
||||
drv = to_of_platform_driver(dev->driver);
|
||||
of_dev = to_of_device(dev);
|
||||
|
Fai riferimento in un nuovo problema
Block a user