Skip to content

Commit

Permalink
pseries: Export find_phb() utility function for PCI code
Browse files Browse the repository at this point in the history
The pseries PCI code makes use of an internal find_dev() function which
locates a PCIDevice * given a (platform specific) bus ID and device
address.  Internally this needs to first locate the host bridge on which
the device resides based on the bus ID.  This patch exposes that host
bridge lookup as a separate function, which we will need later in the MSI
and VFIO code.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
[agraf: drop trace.h inclusion]
Signed-off-by: Alexander Graf <agraf@suse.de>
  • Loading branch information
aik authored and agraf committed Aug 15, 2012
1 parent f4b9523 commit 9894c5d
Showing 1 changed file with 21 additions and 10 deletions.
31 changes: 21 additions & 10 deletions hw/spapr_pci.c
Expand Up @@ -32,24 +32,35 @@

#include "hw/pci_internals.h"

static PCIDevice *find_dev(sPAPREnvironment *spapr,
uint64_t buid, uint32_t config_addr)
static sPAPRPHBState *find_phb(sPAPREnvironment *spapr, uint64_t buid)
{
int devfn = (config_addr >> 8) & 0xFF;
sPAPRPHBState *phb;

QLIST_FOREACH(phb, &spapr->phbs, list) {
BusChild *kid;

if (phb->buid != buid) {
continue;
}
return phb;
}

return NULL;
}

static PCIDevice *find_dev(sPAPREnvironment *spapr, uint64_t buid,
uint32_t config_addr)
{
sPAPRPHBState *phb = find_phb(spapr, buid);
BusChild *kid;
int devfn = (config_addr >> 8) & 0xFF;

if (!phb) {
return NULL;
}

QTAILQ_FOREACH(kid, &phb->host_state.bus->qbus.children, sibling) {
PCIDevice *dev = (PCIDevice *)kid->child;
if (dev->devfn == devfn) {
return dev;
}
QTAILQ_FOREACH(kid, &phb->host_state.bus->qbus.children, sibling) {
PCIDevice *dev = (PCIDevice *)kid->child;
if (dev->devfn == devfn) {
return dev;
}
}

Expand Down

0 comments on commit 9894c5d

Please sign in to comment.