aboutsummaryrefslogtreecommitdiff
path: root/include/hw/ppc/spapr_vio.h
diff options
context:
space:
mode:
authorAlexey Kardashevskiy <aik@ozlabs.ru>2015-01-29 16:04:58 +1100
committerAlexander Graf <agraf@suse.de>2015-03-09 14:59:52 +0100
commitee9a569ab88edd0755402aaf31ec0c69decf7756 (patch)
treee7bf5a463ae6c5401a92241a16a8d728949032ca /include/hw/ppc/spapr_vio.h
parent0048fa6c807fc8fb5c52873562ea3debfa65f085 (diff)
downloadqemu-ee9a569ab88edd0755402aaf31ec0c69decf7756.zip
qemu-ee9a569ab88edd0755402aaf31ec0c69decf7756.tar.gz
qemu-ee9a569ab88edd0755402aaf31ec0c69decf7756.tar.bz2
spapr_vio/spapr_iommu: Move VIO bypass where it belongs
Instead of tweaking a TCE table device by adding there a bypass flag, let's add an alias to RAM and IOMMU memory region, and enable/disable those according to the selected bypass mode. This way IOMMU memory region can have size of the actual window rather than ram_size which is essential for upcoming DDW support. This moves bypass logic to VIO layer and keeps @bypass flag in TCE table for migration compatibility only. This replaces spapr_tce_set_bypass() calls with explicit assignment to avoid confusion as the function could do something more that just syncing the @bypass flag. This adds a pointer to VIO device into the sPAPRTCETable struct to provide the sPAPRTCETable device a way to update bypass mode for the VIO device. Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'include/hw/ppc/spapr_vio.h')
-rw-r--r--include/hw/ppc/spapr_vio.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/hw/ppc/spapr_vio.h b/include/hw/ppc/spapr_vio.h
index 46edc2a..222397d 100644
--- a/include/hw/ppc/spapr_vio.h
+++ b/include/hw/ppc/spapr_vio.h
@@ -64,6 +64,8 @@ struct VIOsPAPRDevice {
target_ulong signal_state;
VIOsPAPR_CRQ crq;
AddressSpace as;
+ MemoryRegion mrroot;
+ MemoryRegion mrbypass;
sPAPRTCETable *tcet;
};
@@ -139,4 +141,6 @@ extern const VMStateDescription vmstate_spapr_vio;
#define VMSTATE_SPAPR_VIO(_f, _s) \
VMSTATE_STRUCT(_f, _s, 0, vmstate_spapr_vio, VIOsPAPRDevice)
+void spapr_vio_set_bypass(VIOsPAPRDevice *dev, bool bypass);
+
#endif /* _HW_SPAPR_VIO_H */