|
@@ -413,6 +413,24 @@ exit:
|
|
|
return dev;
|
|
|
}
|
|
|
|
|
|
+const struct pci_device_id *pci_find_present(const struct pci_device_id *ids)
|
|
|
+{
|
|
|
+ struct pci_dev *dev;
|
|
|
+ struct pci_device_id * found = NULL;
|
|
|
+
|
|
|
+ WARN_ON(in_interrupt());
|
|
|
+ down_read(&pci_bus_sem);
|
|
|
+ while (ids->vendor || ids->subvendor || ids->class_mask) {
|
|
|
+ list_for_each_entry(dev, &pci_devices, global_list) {
|
|
|
+ if ((found = pci_match_one_device(ids, dev)) != NULL)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ ids++;
|
|
|
+ }
|
|
|
+ up_read(&pci_bus_sem);
|
|
|
+ return found;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* pci_dev_present - Returns 1 if device matching the device list is present, 0 if not.
|
|
|
* @ids: A pointer to a null terminated list of struct pci_device_id structures
|
|
@@ -424,27 +442,14 @@ exit:
|
|
|
* find devices that are usually built into a system, or for a general hint as
|
|
|
* to if another device happens to be present at this specific moment in time.
|
|
|
*/
|
|
|
+
|
|
|
int pci_dev_present(const struct pci_device_id *ids)
|
|
|
{
|
|
|
- struct pci_dev *dev;
|
|
|
- int found = 0;
|
|
|
-
|
|
|
- WARN_ON(in_interrupt());
|
|
|
- down_read(&pci_bus_sem);
|
|
|
- while (ids->vendor || ids->subvendor || ids->class_mask) {
|
|
|
- list_for_each_entry(dev, &pci_devices, global_list) {
|
|
|
- if (pci_match_one_device(ids, dev)) {
|
|
|
- found = 1;
|
|
|
- goto exit;
|
|
|
- }
|
|
|
- }
|
|
|
- ids++;
|
|
|
- }
|
|
|
-exit:
|
|
|
- up_read(&pci_bus_sem);
|
|
|
- return found;
|
|
|
+ return pci_find_present(ids) == NULL ? 0 : 1;
|
|
|
}
|
|
|
+
|
|
|
EXPORT_SYMBOL(pci_dev_present);
|
|
|
+EXPORT_SYMBOL(pci_find_present);
|
|
|
|
|
|
EXPORT_SYMBOL(pci_find_device);
|
|
|
EXPORT_SYMBOL(pci_find_device_reverse);
|