Commit 9894c5d4 authored by Alexey Kardashevskiy's avatar Alexey Kardashevskiy Committed by Alexander Graf
Browse files

pseries: Export find_phb() utility function for PCI code



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: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
[agraf: drop trace.h inclusion]
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent f4b9523b
Loading
Loading
Loading
Loading
+21 −10
Original line number Diff line number Diff line
@@ -32,18 +32,30 @@

#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;
@@ -51,7 +63,6 @@ static PCIDevice *find_dev(sPAPREnvironment *spapr,
            return dev;
        }
    }
    }

    return NULL;
}