History

powerpc/vfio: Implement IOMMU driver for VFIO

VFIO implements platform independent stuff such as a PCI driver, BAR access (via read/write on a file descriptor or direct mapping when possible) and IRQ signaling. The platform dependent part includes IOMMU initialization and handling. This implements an IOMMU driver for VFIO which does mapping/unmapping pages for the guest IO and provides information about DMA window (required by a POWER guest).

Alexey Kardashevskiy committed 13 years ago

Commit 5ffd2291 parent 4e13c1a6 files · +482 −0Browse files

Showing the changes to include/uapi (1 of 6 files). Show all

Unified · Split

include/uapi/linux/vfio.h+34−0
@@ -22,6 +22,7 @@ · 21 unmodified lines
2222 /* Extensions */
2323
2424 #define VFIO_TYPE1_IOMMU 1
25+#define VFIO_SPAPR_TCE_IOMMU 2
2526
2627 /*
2728 * The IOCTL interface is designed for extensibility by embedding the
@@ -375,4 +376,37 @@ struct vfio_iommu_type1_dma_unmap { · 347 unmodified lines
375376
376377 #define VFIO_IOMMU_UNMAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 14)
377378
379+/*
380+ * IOCTLs to enable/disable IOMMU container usage.
381+ * No parameters are supported.
382+ */
383+#define VFIO_IOMMU_ENABLE _IO(VFIO_TYPE, VFIO_BASE + 15)
384+#define VFIO_IOMMU_DISABLE _IO(VFIO_TYPE, VFIO_BASE + 16)
385+
386+/* -------- Additional API for SPAPR TCE (Server POWERPC) IOMMU -------- */
387+
388+/*
389+ * The SPAPR TCE info struct provides the information about the PCI bus
390+ * address ranges available for DMA, these values are programmed into
391+ * the hardware so the guest has to know that information.
392+ *
393+ * The DMA 32 bit window start is an absolute PCI bus address.
394+ * The IOVA address passed via map/unmap ioctls are absolute PCI bus
395+ * addresses too so the window works as a filter rather than an offset
396+ * for IOVA addresses.
397+ *
398+ * A flag will need to be added if other page sizes are supported,
399+ * so as defined here, it is always 4k.
400+ */
401+struct vfio_iommu_spapr_tce_info {
402+ __u32 argsz;
403+ __u32 flags; /* reserved for future use */
404+ __u32 dma32_window_start; /* 32 bit window start (bytes) */
405+ __u32 dma32_window_size; /* 32 bit window size (bytes) */
406+};
407+
408+#define VFIO_IOMMU_SPAPR_TCE_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
409+
410+/* ***************************************************************** */
411+
378412 #endif /* _UAPIVFIO_H */