spapr_pci: Make find_phb()/find_dev() public
This makes find_phb()/find_dev() public and changed its names to spapr_pci_find_phb()/spapr_pci_find_dev() as they are going to be used from other parts of QEMU such as VFIO DDW (dynamic DMA window) or VFIO PCI error injection or VFIO EEH handling - in all these cases there are RTAS calls which are addressed to BUID+config_addr in IEEE1275 format. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
		
							parent
							
								
									d9d96a3cc7
								
							
						
					
					
						commit
						46c5874e9c
					
				| 
						 | 
				
			
			@ -47,7 +47,7 @@
 | 
			
		|||
#define RTAS_TYPE_MSI           1
 | 
			
		||||
#define RTAS_TYPE_MSIX          2
 | 
			
		||||
 | 
			
		||||
static sPAPRPHBState *find_phb(sPAPREnvironment *spapr, uint64_t buid)
 | 
			
		||||
sPAPRPHBState *spapr_pci_find_phb(sPAPREnvironment *spapr, uint64_t buid)
 | 
			
		||||
{
 | 
			
		||||
    sPAPRPHBState *sphb;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,10 +61,10 @@ static sPAPRPHBState *find_phb(sPAPREnvironment *spapr, uint64_t buid)
 | 
			
		|||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static PCIDevice *find_dev(sPAPREnvironment *spapr, uint64_t buid,
 | 
			
		||||
                           uint32_t config_addr)
 | 
			
		||||
PCIDevice *spapr_pci_find_dev(sPAPREnvironment *spapr, uint64_t buid,
 | 
			
		||||
                              uint32_t config_addr)
 | 
			
		||||
{
 | 
			
		||||
    sPAPRPHBState *sphb = find_phb(spapr, buid);
 | 
			
		||||
    sPAPRPHBState *sphb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    PCIHostState *phb = PCI_HOST_BRIDGE(sphb);
 | 
			
		||||
    int bus_num = (config_addr >> 16) & 0xFF;
 | 
			
		||||
    int devfn = (config_addr >> 8) & 0xFF;
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ static void finish_read_pci_config(sPAPREnvironment *spapr, uint64_t buid,
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pci_dev = find_dev(spapr, buid, addr);
 | 
			
		||||
    pci_dev = spapr_pci_find_dev(spapr, buid, addr);
 | 
			
		||||
    addr = rtas_pci_cfgaddr(addr);
 | 
			
		||||
 | 
			
		||||
    if (!pci_dev || (addr % size) || (addr >= pci_config_size(pci_dev))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +162,7 @@ static void finish_write_pci_config(sPAPREnvironment *spapr, uint64_t buid,
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pci_dev = find_dev(spapr, buid, addr);
 | 
			
		||||
    pci_dev = spapr_pci_find_dev(spapr, buid, addr);
 | 
			
		||||
    addr = rtas_pci_cfgaddr(addr);
 | 
			
		||||
 | 
			
		||||
    if (!pci_dev || (addr % size) || (addr >= pci_config_size(pci_dev))) {
 | 
			
		||||
| 
						 | 
				
			
			@ -280,9 +280,9 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPREnvironment *spapr,
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /* Fins sPAPRPHBState */
 | 
			
		||||
    phb = find_phb(spapr, buid);
 | 
			
		||||
    phb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    if (phb) {
 | 
			
		||||
        pdev = find_dev(spapr, buid, config_addr);
 | 
			
		||||
        pdev = spapr_pci_find_dev(spapr, buid, config_addr);
 | 
			
		||||
    }
 | 
			
		||||
    if (!phb || !pdev) {
 | 
			
		||||
        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
 | 
			
		||||
| 
						 | 
				
			
			@ -381,9 +381,9 @@ static void rtas_ibm_query_interrupt_source_number(PowerPCCPU *cpu,
 | 
			
		|||
    spapr_pci_msi *msi;
 | 
			
		||||
 | 
			
		||||
    /* Find sPAPRPHBState */
 | 
			
		||||
    phb = find_phb(spapr, buid);
 | 
			
		||||
    phb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    if (phb) {
 | 
			
		||||
        pdev = find_dev(spapr, buid, config_addr);
 | 
			
		||||
        pdev = spapr_pci_find_dev(spapr, buid, config_addr);
 | 
			
		||||
    }
 | 
			
		||||
    if (!phb || !pdev) {
 | 
			
		||||
        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
 | 
			
		||||
| 
						 | 
				
			
			@ -426,7 +426,7 @@ static void rtas_ibm_set_eeh_option(PowerPCCPU *cpu,
 | 
			
		|||
    addr = rtas_ld(args, 0);
 | 
			
		||||
    option = rtas_ld(args, 3);
 | 
			
		||||
 | 
			
		||||
    sphb = find_phb(spapr, buid);
 | 
			
		||||
    sphb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    if (!sphb) {
 | 
			
		||||
        goto param_error_exit;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -461,7 +461,7 @@ static void rtas_ibm_get_config_addr_info2(PowerPCCPU *cpu,
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
 | 
			
		||||
    sphb = find_phb(spapr, buid);
 | 
			
		||||
    sphb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    if (!sphb) {
 | 
			
		||||
        goto param_error_exit;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -479,7 +479,7 @@ static void rtas_ibm_get_config_addr_info2(PowerPCCPU *cpu,
 | 
			
		|||
    switch (option) {
 | 
			
		||||
    case RTAS_GET_PE_ADDR:
 | 
			
		||||
        addr = rtas_ld(args, 0);
 | 
			
		||||
        pdev = find_dev(spapr, buid, addr);
 | 
			
		||||
        pdev = spapr_pci_find_dev(spapr, buid, addr);
 | 
			
		||||
        if (!pdev) {
 | 
			
		||||
            goto param_error_exit;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -516,7 +516,7 @@ static void rtas_ibm_read_slot_reset_state2(PowerPCCPU *cpu,
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
 | 
			
		||||
    sphb = find_phb(spapr, buid);
 | 
			
		||||
    sphb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    if (!sphb) {
 | 
			
		||||
        goto param_error_exit;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -562,7 +562,7 @@ static void rtas_ibm_set_slot_reset(PowerPCCPU *cpu,
 | 
			
		|||
 | 
			
		||||
    buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
 | 
			
		||||
    option = rtas_ld(args, 3);
 | 
			
		||||
    sphb = find_phb(spapr, buid);
 | 
			
		||||
    sphb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    if (!sphb) {
 | 
			
		||||
        goto param_error_exit;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -596,7 +596,7 @@ static void rtas_ibm_configure_pe(PowerPCCPU *cpu,
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
 | 
			
		||||
    sphb = find_phb(spapr, buid);
 | 
			
		||||
    sphb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    if (!sphb) {
 | 
			
		||||
        goto param_error_exit;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -631,7 +631,7 @@ static void rtas_ibm_slot_error_detail(PowerPCCPU *cpu,
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
 | 
			
		||||
    sphb = find_phb(spapr, buid);
 | 
			
		||||
    sphb = spapr_pci_find_phb(spapr, buid);
 | 
			
		||||
    if (!sphb) {
 | 
			
		||||
        goto param_error_exit;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -788,7 +788,7 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
 | 
			
		|||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (find_phb(spapr, sphb->buid)) {
 | 
			
		||||
    if (spapr_pci_find_phb(spapr, sphb->buid)) {
 | 
			
		||||
        error_setg(errp, "PCI host bridges must have unique BUIDs");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -131,4 +131,8 @@ void spapr_pci_msi_init(sPAPREnvironment *spapr, hwaddr addr);
 | 
			
		|||
 | 
			
		||||
void spapr_pci_rtas_init(void);
 | 
			
		||||
 | 
			
		||||
sPAPRPHBState *spapr_pci_find_phb(sPAPREnvironment *spapr, uint64_t buid);
 | 
			
		||||
PCIDevice *spapr_pci_find_dev(sPAPREnvironment *spapr, uint64_t buid,
 | 
			
		||||
                              uint32_t config_addr);
 | 
			
		||||
 | 
			
		||||
#endif /* __HW_SPAPR_PCI_H__ */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue