diff options
author | Alexey Kardashevskiy <aik@ozlabs.ru> | 2015-01-29 16:04:58 +1100 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2015-03-09 14:59:52 +0100 |
commit | ee9a569ab88edd0755402aaf31ec0c69decf7756 (patch) | |
tree | e7bf5a463ae6c5401a92241a16a8d728949032ca /include/hw/ppc/spapr_vio.h | |
parent | 0048fa6c807fc8fb5c52873562ea3debfa65f085 (diff) | |
download | qemu-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.h | 4 |
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 */ |