mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
PCI: add pci_get_domain_bus_and_slot function
Added the pci_get_domain_and_slot_function which is analogous to pci_get_bus_and_slot. It returns a pci_dev given a domain (segment) number, bus number, and devnr. Like pci_get_bus_and_slot, pci_get_domain_bus_and_slot holds a reference to the returned pci_dev. Converted pci_get_bus_and_slot to a wrapper that calls pci_get_domain_bus_and_slot with the domain hard-coded to 0. This routine was patterned off code suggested by Bjorn Helgaas. Acked-by: Huang Ying <ying.huang@intel.com> Signed-off-by: Andrew Patterson <andrew.patterson@hp.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
bc577d2bb9
commit
3c299dc226
2 changed files with 24 additions and 18 deletions
|
@ -149,32 +149,33 @@ struct pci_dev * pci_get_slot(struct pci_bus *bus, unsigned int devfn)
|
|||
}
|
||||
|
||||
/**
|
||||
* pci_get_bus_and_slot - locate PCI device from a given PCI bus & slot
|
||||
* @bus: number of PCI bus on which desired PCI device resides
|
||||
* @devfn: encodes number of PCI slot in which the desired PCI
|
||||
* device resides and the logical device number within that slot
|
||||
* in case of multi-function devices.
|
||||
* pci_get_domain_bus_and_slot - locate PCI device for a given PCI domain (segment), bus, and slot
|
||||
* @domain: PCI domain/segment on which the PCI device resides.
|
||||
* @bus: PCI bus on which desired PCI device resides
|
||||
* @devfn: encodes number of PCI slot in which the desired PCI device
|
||||
* resides and the logical device number within that slot in case of
|
||||
* multi-function devices.
|
||||
*
|
||||
* Note: the bus/slot search is limited to PCI domain (segment) 0.
|
||||
*
|
||||
* Given a PCI bus and slot/function number, the desired PCI device
|
||||
* is located in system global list of PCI devices. If the device
|
||||
* is found, a pointer to its data structure is returned. If no
|
||||
* device is found, %NULL is returned. The returned device has its
|
||||
* reference count bumped by one.
|
||||
* Given a PCI domain, bus, and slot/function number, the desired PCI
|
||||
* device is located in the list of PCI devices. If the device is
|
||||
* found, its reference count is increased and this function returns a
|
||||
* pointer to its data structure. The caller must decrement the
|
||||
* reference count by calling pci_dev_put(). If no device is found,
|
||||
* %NULL is returned.
|
||||
*/
|
||||
|
||||
struct pci_dev * pci_get_bus_and_slot(unsigned int bus, unsigned int devfn)
|
||||
struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus,
|
||||
unsigned int devfn)
|
||||
{
|
||||
struct pci_dev *dev = NULL;
|
||||
|
||||
while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
|
||||
if (pci_domain_nr(dev->bus) == 0 &&
|
||||
(dev->bus->number == bus && dev->devfn == devfn))
|
||||
if (pci_domain_nr(dev->bus) == domain &&
|
||||
(dev->bus->number == bus && dev->devfn == devfn))
|
||||
return dev;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(pci_get_domain_bus_and_slot);
|
||||
|
||||
static int match_pci_dev_by_id(struct device *dev, void *data)
|
||||
{
|
||||
|
@ -354,5 +355,4 @@ EXPORT_SYMBOL(pci_find_next_bus);
|
|||
EXPORT_SYMBOL(pci_get_device);
|
||||
EXPORT_SYMBOL(pci_get_subsys);
|
||||
EXPORT_SYMBOL(pci_get_slot);
|
||||
EXPORT_SYMBOL(pci_get_bus_and_slot);
|
||||
EXPORT_SYMBOL(pci_get_class);
|
||||
|
|
|
@ -636,7 +636,13 @@ struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
|
|||
unsigned int ss_vendor, unsigned int ss_device,
|
||||
struct pci_dev *from);
|
||||
struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
|
||||
struct pci_dev *pci_get_bus_and_slot(unsigned int bus, unsigned int devfn);
|
||||
struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus,
|
||||
unsigned int devfn);
|
||||
static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
|
||||
unsigned int devfn)
|
||||
{
|
||||
return pci_get_domain_bus_and_slot(0, bus, devfn);
|
||||
}
|
||||
struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
|
||||
int pci_dev_present(const struct pci_device_id *ids);
|
||||
|
||||
|
|
Loading…
Reference in a new issue