提交 46c5874e 编写于 作者: A Alexey Kardashevskiy 提交者: Alexander Graf

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: NAlexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
Signed-off-by: NAlexander Graf <agraf@suse.de>
上级 d9d96a3c
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
#define RTAS_TYPE_MSI 1 #define RTAS_TYPE_MSI 1
#define RTAS_TYPE_MSIX 2 #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; sPAPRPHBState *sphb;
...@@ -61,10 +61,10 @@ static sPAPRPHBState *find_phb(sPAPREnvironment *spapr, uint64_t buid) ...@@ -61,10 +61,10 @@ static sPAPRPHBState *find_phb(sPAPREnvironment *spapr, uint64_t buid)
return NULL; return NULL;
} }
static PCIDevice *find_dev(sPAPREnvironment *spapr, uint64_t buid, PCIDevice *spapr_pci_find_dev(sPAPREnvironment *spapr, uint64_t buid,
uint32_t config_addr) uint32_t config_addr)
{ {
sPAPRPHBState *sphb = find_phb(spapr, buid); sPAPRPHBState *sphb = spapr_pci_find_phb(spapr, buid);
PCIHostState *phb = PCI_HOST_BRIDGE(sphb); PCIHostState *phb = PCI_HOST_BRIDGE(sphb);
int bus_num = (config_addr >> 16) & 0xFF; int bus_num = (config_addr >> 16) & 0xFF;
int devfn = (config_addr >> 8) & 0xFF; int devfn = (config_addr >> 8) & 0xFF;
...@@ -95,7 +95,7 @@ static void finish_read_pci_config(sPAPREnvironment *spapr, uint64_t buid, ...@@ -95,7 +95,7 @@ static void finish_read_pci_config(sPAPREnvironment *spapr, uint64_t buid,
return; return;
} }
pci_dev = find_dev(spapr, buid, addr); pci_dev = spapr_pci_find_dev(spapr, buid, addr);
addr = rtas_pci_cfgaddr(addr); addr = rtas_pci_cfgaddr(addr);
if (!pci_dev || (addr % size) || (addr >= pci_config_size(pci_dev))) { 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, ...@@ -162,7 +162,7 @@ static void finish_write_pci_config(sPAPREnvironment *spapr, uint64_t buid,
return; return;
} }
pci_dev = find_dev(spapr, buid, addr); pci_dev = spapr_pci_find_dev(spapr, buid, addr);
addr = rtas_pci_cfgaddr(addr); addr = rtas_pci_cfgaddr(addr);
if (!pci_dev || (addr % size) || (addr >= pci_config_size(pci_dev))) { 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, ...@@ -280,9 +280,9 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPREnvironment *spapr,
} }
/* Fins sPAPRPHBState */ /* Fins sPAPRPHBState */
phb = find_phb(spapr, buid); phb = spapr_pci_find_phb(spapr, buid);
if (phb) { if (phb) {
pdev = find_dev(spapr, buid, config_addr); pdev = spapr_pci_find_dev(spapr, buid, config_addr);
} }
if (!phb || !pdev) { if (!phb || !pdev) {
rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR); rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
...@@ -381,9 +381,9 @@ static void rtas_ibm_query_interrupt_source_number(PowerPCCPU *cpu, ...@@ -381,9 +381,9 @@ static void rtas_ibm_query_interrupt_source_number(PowerPCCPU *cpu,
spapr_pci_msi *msi; spapr_pci_msi *msi;
/* Find sPAPRPHBState */ /* Find sPAPRPHBState */
phb = find_phb(spapr, buid); phb = spapr_pci_find_phb(spapr, buid);
if (phb) { if (phb) {
pdev = find_dev(spapr, buid, config_addr); pdev = spapr_pci_find_dev(spapr, buid, config_addr);
} }
if (!phb || !pdev) { if (!phb || !pdev) {
rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR); rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
...@@ -426,7 +426,7 @@ static void rtas_ibm_set_eeh_option(PowerPCCPU *cpu, ...@@ -426,7 +426,7 @@ static void rtas_ibm_set_eeh_option(PowerPCCPU *cpu,
addr = rtas_ld(args, 0); addr = rtas_ld(args, 0);
option = rtas_ld(args, 3); option = rtas_ld(args, 3);
sphb = find_phb(spapr, buid); sphb = spapr_pci_find_phb(spapr, buid);
if (!sphb) { if (!sphb) {
goto param_error_exit; goto param_error_exit;
} }
...@@ -461,7 +461,7 @@ static void rtas_ibm_get_config_addr_info2(PowerPCCPU *cpu, ...@@ -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); 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) { if (!sphb) {
goto param_error_exit; goto param_error_exit;
} }
...@@ -479,7 +479,7 @@ static void rtas_ibm_get_config_addr_info2(PowerPCCPU *cpu, ...@@ -479,7 +479,7 @@ static void rtas_ibm_get_config_addr_info2(PowerPCCPU *cpu,
switch (option) { switch (option) {
case RTAS_GET_PE_ADDR: case RTAS_GET_PE_ADDR:
addr = rtas_ld(args, 0); addr = rtas_ld(args, 0);
pdev = find_dev(spapr, buid, addr); pdev = spapr_pci_find_dev(spapr, buid, addr);
if (!pdev) { if (!pdev) {
goto param_error_exit; goto param_error_exit;
} }
...@@ -516,7 +516,7 @@ static void rtas_ibm_read_slot_reset_state2(PowerPCCPU *cpu, ...@@ -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); 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) { if (!sphb) {
goto param_error_exit; goto param_error_exit;
} }
...@@ -562,7 +562,7 @@ static void rtas_ibm_set_slot_reset(PowerPCCPU *cpu, ...@@ -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); buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2);
option = rtas_ld(args, 3); option = rtas_ld(args, 3);
sphb = find_phb(spapr, buid); sphb = spapr_pci_find_phb(spapr, buid);
if (!sphb) { if (!sphb) {
goto param_error_exit; goto param_error_exit;
} }
...@@ -596,7 +596,7 @@ static void rtas_ibm_configure_pe(PowerPCCPU *cpu, ...@@ -596,7 +596,7 @@ static void rtas_ibm_configure_pe(PowerPCCPU *cpu,
} }
buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); 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) { if (!sphb) {
goto param_error_exit; goto param_error_exit;
} }
...@@ -631,7 +631,7 @@ static void rtas_ibm_slot_error_detail(PowerPCCPU *cpu, ...@@ -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); 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) { if (!sphb) {
goto param_error_exit; goto param_error_exit;
} }
...@@ -788,7 +788,7 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp) ...@@ -788,7 +788,7 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
return; 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"); error_setg(errp, "PCI host bridges must have unique BUIDs");
return; return;
} }
......
...@@ -131,4 +131,8 @@ void spapr_pci_msi_init(sPAPREnvironment *spapr, hwaddr addr); ...@@ -131,4 +131,8 @@ void spapr_pci_msi_init(sPAPREnvironment *spapr, hwaddr addr);
void spapr_pci_rtas_init(void); 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__ */ #endif /* __HW_SPAPR_PCI_H__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册