[PATCH] PCI Hotplug: remove pci_visit_dev
If my CPCI hotplug update patch is applied, then there are no longer any in tree users of the pci_visit_dev API, and it and its related code can be removed. Signed-off-by: Scott Murray <scottm@somanetworks.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
@@ -56,112 +56,3 @@ int pci_hotplug (struct device *dev, char **envp, int num_envp,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pci_visit_bus (struct pci_visit * fn, struct pci_bus_wrapped *wrapped_bus, struct pci_dev_wrapped *wrapped_parent)
|
|
||||||
{
|
|
||||||
struct list_head *ln;
|
|
||||||
struct pci_dev *dev;
|
|
||||||
struct pci_dev_wrapped wrapped_dev;
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
pr_debug("PCI: Scanning bus %04x:%02x\n", pci_domain_nr(wrapped_bus->bus),
|
|
||||||
wrapped_bus->bus->number);
|
|
||||||
|
|
||||||
if (fn->pre_visit_pci_bus) {
|
|
||||||
result = fn->pre_visit_pci_bus(wrapped_bus, wrapped_parent);
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
ln = wrapped_bus->bus->devices.next;
|
|
||||||
while (ln != &wrapped_bus->bus->devices) {
|
|
||||||
dev = pci_dev_b(ln);
|
|
||||||
ln = ln->next;
|
|
||||||
|
|
||||||
memset(&wrapped_dev, 0, sizeof(struct pci_dev_wrapped));
|
|
||||||
wrapped_dev.dev = dev;
|
|
||||||
|
|
||||||
result = pci_visit_dev(fn, &wrapped_dev, wrapped_bus);
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fn->post_visit_pci_bus)
|
|
||||||
result = fn->post_visit_pci_bus(wrapped_bus, wrapped_parent);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int pci_visit_bridge (struct pci_visit * fn,
|
|
||||||
struct pci_dev_wrapped *wrapped_dev,
|
|
||||||
struct pci_bus_wrapped *wrapped_parent)
|
|
||||||
{
|
|
||||||
struct pci_bus *bus;
|
|
||||||
struct pci_bus_wrapped wrapped_bus;
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
pr_debug("PCI: Scanning bridge %s\n", pci_name(wrapped_dev->dev));
|
|
||||||
|
|
||||||
if (fn->visit_pci_dev) {
|
|
||||||
result = fn->visit_pci_dev(wrapped_dev, wrapped_parent);
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bus = wrapped_dev->dev->subordinate;
|
|
||||||
if (bus) {
|
|
||||||
memset(&wrapped_bus, 0, sizeof(struct pci_bus_wrapped));
|
|
||||||
wrapped_bus.bus = bus;
|
|
||||||
|
|
||||||
result = pci_visit_bus(fn, &wrapped_bus, wrapped_dev);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* pci_visit_dev - scans the pci buses.
|
|
||||||
* @fn: callback functions that are called while visiting
|
|
||||||
* @wrapped_dev: the device to scan
|
|
||||||
* @wrapped_parent: the bus where @wrapped_dev is connected to
|
|
||||||
*
|
|
||||||
* Every bus and every function is presented to a custom
|
|
||||||
* function that can act upon it.
|
|
||||||
*/
|
|
||||||
int pci_visit_dev(struct pci_visit *fn, struct pci_dev_wrapped *wrapped_dev,
|
|
||||||
struct pci_bus_wrapped *wrapped_parent)
|
|
||||||
{
|
|
||||||
struct pci_dev* dev = wrapped_dev ? wrapped_dev->dev : NULL;
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (fn->pre_visit_pci_dev) {
|
|
||||||
result = fn->pre_visit_pci_dev(wrapped_dev, wrapped_parent);
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (dev->class >> 8) {
|
|
||||||
case PCI_CLASS_BRIDGE_PCI:
|
|
||||||
result = pci_visit_bridge(fn, wrapped_dev,
|
|
||||||
wrapped_parent);
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
pr_debug("PCI: Scanning device %s\n", pci_name(dev));
|
|
||||||
if (fn->visit_pci_dev) {
|
|
||||||
result = fn->visit_pci_dev (wrapped_dev,
|
|
||||||
wrapped_parent);
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fn->post_visit_pci_dev)
|
|
||||||
result = fn->post_visit_pci_dev(wrapped_dev, wrapped_parent);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(pci_visit_dev);
|
|
||||||
|
@@ -32,33 +32,6 @@ extern unsigned char pci_max_busnr(void);
|
|||||||
extern unsigned char pci_bus_max_busnr(struct pci_bus *bus);
|
extern unsigned char pci_bus_max_busnr(struct pci_bus *bus);
|
||||||
extern int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int cap);
|
extern int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int cap);
|
||||||
|
|
||||||
struct pci_dev_wrapped {
|
|
||||||
struct pci_dev *dev;
|
|
||||||
void *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct pci_bus_wrapped {
|
|
||||||
struct pci_bus *bus;
|
|
||||||
void *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct pci_visit {
|
|
||||||
int (* pre_visit_pci_bus) (struct pci_bus_wrapped *,
|
|
||||||
struct pci_dev_wrapped *);
|
|
||||||
int (* post_visit_pci_bus) (struct pci_bus_wrapped *,
|
|
||||||
struct pci_dev_wrapped *);
|
|
||||||
|
|
||||||
int (* pre_visit_pci_dev) (struct pci_dev_wrapped *,
|
|
||||||
struct pci_bus_wrapped *);
|
|
||||||
int (* visit_pci_dev) (struct pci_dev_wrapped *,
|
|
||||||
struct pci_bus_wrapped *);
|
|
||||||
int (* post_visit_pci_dev) (struct pci_dev_wrapped *,
|
|
||||||
struct pci_bus_wrapped *);
|
|
||||||
};
|
|
||||||
|
|
||||||
extern int pci_visit_dev(struct pci_visit *fn,
|
|
||||||
struct pci_dev_wrapped *wrapped_dev,
|
|
||||||
struct pci_bus_wrapped *wrapped_parent);
|
|
||||||
extern void pci_remove_legacy_files(struct pci_bus *bus);
|
extern void pci_remove_legacy_files(struct pci_bus *bus);
|
||||||
|
|
||||||
/* Lock for read/write access to pci device and bus lists */
|
/* Lock for read/write access to pci device and bus lists */
|
||||||
|
Reference in New Issue
Block a user