drivers: Add generic helper to match any device
Add a generic helper to match any/all devices. Using this introduce new wrappers {bus/driver/class}_find_next_device(). Cc: Elie Morisse <syniurge@gmail.com> Cc: "James E.J. Bottomley" <jejb@linux.ibm.com> Cc: "Martin K. Petersen" <martin.petersen@oracle.com> Cc: Nehal Shah <nehal-bakulchandra.shah@amd.com> Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> Cc: Shyam Sundar S K <shyam-sundar.s-k@amd.com> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> # PCI Link: https://lore.kernel.org/r/20190723221838.12024-7-suzuki.poulose@arm.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
00500147cb
commit
6bf85ba9e5
|
@ -3379,3 +3379,9 @@ int device_match_acpi_dev(struct device *dev, const void *adev)
|
||||||
return ACPI_COMPANION(dev) == adev;
|
return ACPI_COMPANION(dev) == adev;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(device_match_acpi_dev);
|
EXPORT_SYMBOL(device_match_acpi_dev);
|
||||||
|
|
||||||
|
int device_match_any(struct device *dev, const void *unused)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(device_match_any);
|
||||||
|
|
|
@ -457,18 +457,12 @@ static struct pci_driver amd_mp2_pci_driver = {
|
||||||
};
|
};
|
||||||
module_pci_driver(amd_mp2_pci_driver);
|
module_pci_driver(amd_mp2_pci_driver);
|
||||||
|
|
||||||
static int amd_mp2_device_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct amd_mp2_dev *amd_mp2_find_device(void)
|
struct amd_mp2_dev *amd_mp2_find_device(void)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct pci_dev *pci_dev;
|
struct pci_dev *pci_dev;
|
||||||
|
|
||||||
dev = driver_find_device(&amd_mp2_pci_driver.driver, NULL, NULL,
|
dev = driver_find_next_device(&amd_mp2_pci_driver.driver, NULL);
|
||||||
amd_mp2_device_match);
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -64,11 +64,6 @@ static struct resource *get_pci_domain_busn_res(int domain_nr)
|
||||||
return &r->res;
|
return &r->res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find_anything(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some device drivers need know if PCI is initiated.
|
* Some device drivers need know if PCI is initiated.
|
||||||
* Basically, we think PCI is not initiated when there
|
* Basically, we think PCI is not initiated when there
|
||||||
|
@ -79,7 +74,7 @@ int no_pci_devices(void)
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
int no_devices;
|
int no_devices;
|
||||||
|
|
||||||
dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
|
dev = bus_find_next_device(&pci_bus_type, NULL);
|
||||||
no_devices = (dev == NULL);
|
no_devices = (dev == NULL);
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
return no_devices;
|
return no_devices;
|
||||||
|
|
|
@ -581,11 +581,6 @@ int ccwgroup_driver_register(struct ccwgroup_driver *cdriver)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ccwgroup_driver_register);
|
EXPORT_SYMBOL(ccwgroup_driver_register);
|
||||||
|
|
||||||
static int __ccwgroup_match_all(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ccwgroup_driver_unregister() - deregister a ccw group driver
|
* ccwgroup_driver_unregister() - deregister a ccw group driver
|
||||||
* @cdriver: driver to be deregistered
|
* @cdriver: driver to be deregistered
|
||||||
|
@ -597,8 +592,7 @@ void ccwgroup_driver_unregister(struct ccwgroup_driver *cdriver)
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
/* We don't want ccwgroup devices to live longer than their driver. */
|
/* We don't want ccwgroup devices to live longer than their driver. */
|
||||||
while ((dev = driver_find_device(&cdriver->driver, NULL, NULL,
|
while ((dev = driver_find_next_device(&cdriver->driver, NULL))) {
|
||||||
__ccwgroup_match_all))) {
|
|
||||||
struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
|
struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
|
||||||
|
|
||||||
ccwgroup_ungroup(gdev);
|
ccwgroup_ungroup(gdev);
|
||||||
|
|
|
@ -372,15 +372,10 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int always_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct device *next_scsi_device(struct device *start)
|
static inline struct device *next_scsi_device(struct device *start)
|
||||||
{
|
{
|
||||||
struct device *next = bus_find_device(&scsi_bus_type, start, NULL,
|
struct device *next = bus_find_next_device(&scsi_bus_type, start);
|
||||||
always_match);
|
|
||||||
put_device(start);
|
put_device(start);
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,6 +169,7 @@ int device_match_of_node(struct device *dev, const void *np);
|
||||||
int device_match_fwnode(struct device *dev, const void *fwnode);
|
int device_match_fwnode(struct device *dev, const void *fwnode);
|
||||||
int device_match_devt(struct device *dev, const void *pdevt);
|
int device_match_devt(struct device *dev, const void *pdevt);
|
||||||
int device_match_acpi_dev(struct device *dev, const void *adev);
|
int device_match_acpi_dev(struct device *dev, const void *adev);
|
||||||
|
int device_match_any(struct device *dev, const void *unused);
|
||||||
|
|
||||||
int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
|
int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
|
||||||
int (*fn)(struct device *dev, void *data));
|
int (*fn)(struct device *dev, void *data));
|
||||||
|
@ -225,6 +226,16 @@ static inline struct device *bus_find_device_by_devt(struct bus_type *bus,
|
||||||
return bus_find_device(bus, NULL, &devt, device_match_devt);
|
return bus_find_device(bus, NULL, &devt, device_match_devt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bus_find_next_device - Find the next device after a given device in a
|
||||||
|
* given bus.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
bus_find_next_device(struct bus_type *bus,struct device *cur)
|
||||||
|
{
|
||||||
|
return bus_find_device(bus, cur, NULL, device_match_any);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
struct acpi_device;
|
struct acpi_device;
|
||||||
|
|
||||||
|
@ -465,6 +476,12 @@ static inline struct device *driver_find_device_by_devt(struct device_driver *dr
|
||||||
return driver_find_device(drv, NULL, &devt, device_match_devt);
|
return driver_find_device(drv, NULL, &devt, device_match_devt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct device *driver_find_next_device(struct device_driver *drv,
|
||||||
|
struct device *start)
|
||||||
|
{
|
||||||
|
return driver_find_device(drv, start, NULL, device_match_any);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
/**
|
/**
|
||||||
* driver_find_device_by_acpi_dev : device iterator for locating a particular
|
* driver_find_device_by_acpi_dev : device iterator for locating a particular
|
||||||
|
|
Loading…
Reference in New Issue