mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-25 04:30:02 +00:00
s390x/pci: separate s390_pcihost_iommu_configure function
Split s390_pcihost_iommu_configure() into separate functions for configuring and deconfiguring in order to make the code more readable. Signed-off-by: Yi Min Zhao <zyimin@linux.vnet.ibm.com> Reviewed-by: Pierre Morel <pmorel@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
parent
8f5cb69313
commit
715838881f
@ -478,19 +478,22 @@ static const MemoryRegionOps s390_msi_ctrl_ops = {
|
|||||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||||
};
|
};
|
||||||
|
|
||||||
void s390_pcihost_iommu_configure(S390PCIBusDevice *pbdev, bool enable)
|
void s390_pci_iommu_enable(S390PCIBusDevice *pbdev)
|
||||||
{
|
{
|
||||||
pbdev->configured = false;
|
pbdev->configured = false;
|
||||||
|
uint64_t size = pbdev->pal - pbdev->pba + 1;
|
||||||
|
|
||||||
if (enable) {
|
memory_region_init_iommu(&pbdev->iommu_mr, OBJECT(&pbdev->mr),
|
||||||
uint64_t size = pbdev->pal - pbdev->pba + 1;
|
&s390_iommu_ops, "iommu-s390", size);
|
||||||
memory_region_init_iommu(&pbdev->iommu_mr, OBJECT(&pbdev->mr),
|
memory_region_add_subregion(&pbdev->mr, pbdev->pba, &pbdev->iommu_mr);
|
||||||
&s390_iommu_ops, "iommu-s390", size);
|
pbdev->configured = true;
|
||||||
memory_region_add_subregion(&pbdev->mr, pbdev->pba, &pbdev->iommu_mr);
|
}
|
||||||
} else {
|
|
||||||
memory_region_del_subregion(&pbdev->mr, &pbdev->iommu_mr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
void s390_pci_iommu_disable(S390PCIBusDevice *pbdev)
|
||||||
|
{
|
||||||
|
pbdev->configured = false;
|
||||||
|
memory_region_del_subregion(&pbdev->mr, &pbdev->iommu_mr);
|
||||||
|
object_unparent(OBJECT(&pbdev->iommu_mr));
|
||||||
pbdev->configured = true;
|
pbdev->configured = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +249,8 @@ int chsc_sei_nt2_get_event(void *res);
|
|||||||
int chsc_sei_nt2_have_event(void);
|
int chsc_sei_nt2_have_event(void);
|
||||||
void s390_pci_sclp_configure(SCCB *sccb);
|
void s390_pci_sclp_configure(SCCB *sccb);
|
||||||
void s390_pci_sclp_deconfigure(SCCB *sccb);
|
void s390_pci_sclp_deconfigure(SCCB *sccb);
|
||||||
void s390_pcihost_iommu_configure(S390PCIBusDevice *pbdev, bool enable);
|
void s390_pci_iommu_enable(S390PCIBusDevice *pbdev);
|
||||||
|
void s390_pci_iommu_disable(S390PCIBusDevice *pbdev);
|
||||||
S390PCIBusDevice *s390_pci_find_dev_by_idx(uint32_t idx);
|
S390PCIBusDevice *s390_pci_find_dev_by_idx(uint32_t idx);
|
||||||
S390PCIBusDevice *s390_pci_find_dev_by_fh(uint32_t fh);
|
S390PCIBusDevice *s390_pci_find_dev_by_fh(uint32_t fh);
|
||||||
S390PCIBusDevice *s390_pci_find_dev_by_fid(uint32_t fid);
|
S390PCIBusDevice *s390_pci_find_dev_by_fid(uint32_t fid);
|
||||||
|
@ -705,18 +705,17 @@ static int reg_ioat(CPUS390XState *env, S390PCIBusDevice *pbdev, ZpciFib fib)
|
|||||||
pbdev->pal = pal;
|
pbdev->pal = pal;
|
||||||
pbdev->g_iota = g_iota;
|
pbdev->g_iota = g_iota;
|
||||||
|
|
||||||
s390_pcihost_iommu_configure(pbdev, true);
|
s390_pci_iommu_enable(pbdev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dereg_ioat(S390PCIBusDevice *pbdev)
|
static void dereg_ioat(S390PCIBusDevice *pbdev)
|
||||||
{
|
{
|
||||||
|
s390_pci_iommu_disable(pbdev);
|
||||||
pbdev->pba = 0;
|
pbdev->pba = 0;
|
||||||
pbdev->pal = 0;
|
pbdev->pal = 0;
|
||||||
pbdev->g_iota = 0;
|
pbdev->g_iota = 0;
|
||||||
|
|
||||||
s390_pcihost_iommu_configure(pbdev, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int mpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar)
|
int mpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar)
|
||||||
|
Loading…
Reference in New Issue
Block a user