qemu/include/hw
Alexey Kardashevskiy ae4de14cd3 spapr_pci/spapr_pci_vfio: Support Dynamic DMA Windows (DDW)
This adds support for Dynamic DMA Windows (DDW) option defined by
the SPAPR specification which allows to have additional DMA window(s)

The "ddw" property is enabled by default on a PHB but for compatibility
the pseries-2.6 machine and older disable it.
This also creates a single DMA window for the older machines to
maintain backward migration.

This implements DDW for PHB with emulated and VFIO devices. The host
kernel support is required. The advertised IOMMU page sizes are 4K and
64K; 16M pages are supported but not advertised by default, in order to
enable them, the user has to specify "pgsz" property for PHB and
enable huge pages for RAM.

The existing linux guests try creating one additional huge DMA window
with 64K or 16MB pages and map the entire guest RAM to. If succeeded,
the guest switches to dma_direct_ops and never calls TCE hypercalls
(H_PUT_TCE,...) again. This enables VFIO devices to use the entire RAM
and not waste time on map/unmap later. This adds a "dma64_win_addr"
property which is a bus address for the 64bit window and by default
set to 0x800.0000.0000.0000 as this is what the modern POWER8 hardware
uses and this allows having emulated and VFIO devices on the same bus.

This adds 4 RTAS handlers:
* ibm,query-pe-dma-window
* ibm,create-pe-dma-window
* ibm,remove-pe-dma-window
* ibm,reset-pe-dma-window
These are registered from type_init() callback.

These RTAS handlers are implemented in a separate file to avoid polluting
spapr_iommu.c with PCI.

This changes sPAPRPHBState::dma_liobn to an array to allow 2 LIOBNs
and updates all references to dma_liobn. However this does not add
64bit LIOBN to the migration stream as in fact even 32bit LIOBN is
rather pointless there (as it is a PHB property and the management
software can/should pass LIOBNs via CLI) but we keep it for the backward
migration support.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2016-07-05 14:31:08 +10:00
..
acpi pc: use new CPU hotplug interface since 2.7 machine type 2016-06-24 05:21:38 +03:00
arm ast2400: add SMC controllers (FMC and SPI) 2016-07-04 13:15:22 +01:00
audio pcspk: convert "pit" property type from ptr to link 2016-06-29 14:03:45 +02:00
block pflash: make TYPE_CFI_PFLASH0{1,2} macros public 2016-06-29 14:03:46 +02:00
char serial: remove watch on reset 2016-06-29 14:03:47 +02:00
cpu qapi: keep names in 'CpuInstanceProperties' in sync with struct CPUCore 2016-06-27 13:15:06 +10:00
cris hw/char: QOM'ify etraxfs_ser.c 2016-05-29 09:11:10 +02:00
display introduce xlnx-dp 2016-06-14 16:01:03 +01:00
dma dma: Add Xilinx Zynq devcfg device model 2016-07-04 13:15:22 +01:00
gpio i.MX: add support for lower and upper interrupt in GPIO. 2015-12-17 13:37:13 +00:00
i2c hw/i2c-ddc.c: Implement DDC I2C slave 2016-06-14 15:59:15 +01:00
i386 ich9: implement SCI_IRQ_SEL register 2016-06-29 14:03:48 +02:00
ide ide: move headers to include folder 2016-06-29 14:03:45 +02:00
input cuda: port SET_DEVICE_LIST command to new framework 2016-02-17 09:59:30 +11:00
intc hw/intc/arm_gicv3: Implement functions to identify next pending irq 2016-06-17 15:23:51 +01:00
ipack ipack: Update e-mail address 2016-05-18 15:04:27 +03:00
ipmi ipmi: rework the fwinfo to be fetched from the interface 2016-06-07 15:36:54 +03:00
isa isa: introduce wrapper isa_connect_gpio_out 2016-06-29 14:03:46 +02:00
kvm hw: move headers to include/ 2013-04-08 18:13:10 +02:00
lm32 hmp: Name HMP info handler functions hmp_info_SUBCOMMAND() 2015-02-18 11:58:50 +01:00
m68k m68k: include cpu-qom.h in files that require M68KCPU 2016-05-19 16:42:27 +02:00
mem nvdimm: support nvdimm label 2016-06-24 05:13:57 +03:00
mips mips: use MIPSCPU instead of CPUMIPSState 2016-05-19 16:42:27 +02:00
misc hw/misc: Add a model for the ASPEED System Control Unit 2016-06-27 15:37:33 +01:00
net Add ENET/Gbps Ethernet support to FEC device 2016-06-02 10:42:46 +08:00
nvram Sort the fw_cfg file list 2016-04-07 19:57:33 +03:00
pci pci: fix pci_requester_id() 2016-06-17 03:28:02 +03:00
pci-host spapr_pci/spapr_pci_vfio: Support Dynamic DMA Windows (DDW) 2016-07-05 14:31:08 +10:00
ppc spapr_pci/spapr_pci_vfio: Support Dynamic DMA Windows (DDW) 2016-07-05 14:31:08 +10:00
s390x s390x/css: introduce property type for device ids 2016-06-14 13:34:50 +02:00
scsi scsi: esp: make cmdbuf big enough for maximum CDB size 2016-06-16 18:39:05 +02:00
sd qemu-common: push cpu.h inclusion out of qemu-common.h 2016-05-19 16:42:29 +02:00
sh4 sh4: include cpu-qom.h in files that require SuperHCPU 2016-05-19 16:42:27 +02:00
smbios ipmi: Add SMBIOS table entry 2016-06-24 05:13:57 +03:00
sparc QOM infrastructure fixes and device conversions 2015-03-02 13:20:43 +00:00
ssi ast2400: add SPI flash slaves 2016-07-04 13:15:22 +01:00
timer pcspk: fix KVM 2016-06-30 19:00:02 +01:00
tricore target-tricore: Add board for systemmode 2014-09-01 14:49:20 +01:00
unicore32 hw: move headers to include/ 2013-04-08 18:13:10 +02:00
usb usb: move ehci register defines to header file 2014-06-02 16:28:59 +02:00
vfio vfio/spapr: Create DMA window dynamically (SPAPR IOMMU v2) 2016-07-05 14:31:08 +10:00
virtio virtio-blk: add num-queues device property 2016-06-28 13:08:32 +01:00
watchdog s390x/watchdog: introduce diag288 watchdog device 2015-06-11 17:45:49 +02:00
xen xen: Clean up includes 2016-06-14 15:37:43 +01:00
boards.h QMP: Add query-hotpluggable-cpus 2016-06-17 16:33:49 +10:00
bt.h bt: check struct sizes 2015-12-04 09:39:55 +03:00
compat.h s390x: add compat machine for 2.7 2016-05-17 15:50:29 +02:00
devices.h arm: fix location of some include files 2013-04-15 15:16:01 +02:00
elf_ops.h loader: Add data swap option to load-elf 2016-03-04 11:30:21 +00:00
empty_slot.h hw: move headers to include/ 2013-04-08 18:13:10 +02:00
fw-path-provider.h fw-path-provider: Change GPL version to 2+ 2014-04-07 15:36:07 +02:00
hotplug.h qdev: hotplug: Introduce HotplugHandler.pre_plug() callback 2016-06-17 16:33:48 +10:00
hw.h hw: clean up hw/hw.h includes 2016-05-19 16:42:30 +02:00
ide.h Call pci_piix3_xen_ide_unplug from unplug_disks 2014-02-20 17:28:08 +00:00
irq.h irq: Remove qemu_irq_intercept_out 2014-10-23 16:41:25 +02:00
loader.h Sort the fw_cfg file list 2016-04-07 19:57:33 +03:00
nmi.h nmi: remove x86 specific nmi handling 2016-05-23 16:53:46 +02:00
pcmcia.h hmp: Remove "info pcmcia" 2014-10-24 12:19:11 +01:00
platform-bus.h sysbus: Add new platform bus helper device 2014-11-04 23:26:14 +01:00
ptimer.h hw/ptimer: Introduce ptimer_get_limit 2016-06-06 16:59:31 +01:00
qdev-core.h qdev: Use GList for global properties 2016-06-17 10:42:21 -03:00
qdev-dma.h qdev: Remove hex8/32/64 property types 2014-02-14 21:12:04 +01:00
qdev-properties.h qdev: Clean up around properties 2016-06-07 18:19:23 +03:00
qdev.h hw: move headers to include/ 2013-04-08 18:13:10 +02:00
register.h register: Add block initialise helper 2016-07-04 13:15:22 +01:00
stream.h Trivial grammar and spelling fixes 2013-05-01 20:55:21 +04:00
sysbus.h hw: remove pio_addr_t 2016-05-19 16:42:30 +02:00
usb.h usb: Add QOM property "attached". 2016-06-22 12:53:26 +02:00