diff options
| author | Alexey Kardashevskiy <aik@ozlabs.ru> | 2013-05-20 23:33:10 -0400 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-06-20 02:55:14 -0400 |
| commit | 5ffd229c02731a91d08ca21e76b503c5bbb5c095 (patch) | |
| tree | ed5f684cb6a5b683846d6b3d97fa2c0999835c24 /include/uapi/linux | |
| parent | 4e13c1ac6baa1d6c2b650d66ca89e1e12727ec19 (diff) | |
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).
Cc: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Acked-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'include/uapi/linux')
| -rw-r--r-- | include/uapi/linux/vfio.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h index 284ff2436829..87ee4f4cff25 100644 --- a/include/uapi/linux/vfio.h +++ b/include/uapi/linux/vfio.h | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | /* Extensions */ | 22 | /* Extensions */ |
| 23 | 23 | ||
| 24 | #define VFIO_TYPE1_IOMMU 1 | 24 | #define VFIO_TYPE1_IOMMU 1 |
| 25 | #define VFIO_SPAPR_TCE_IOMMU 2 | ||
| 25 | 26 | ||
| 26 | /* | 27 | /* |
| 27 | * The IOCTL interface is designed for extensibility by embedding the | 28 | * The IOCTL interface is designed for extensibility by embedding the |
| @@ -375,4 +376,37 @@ struct vfio_iommu_type1_dma_unmap { | |||
| 375 | 376 | ||
| 376 | #define VFIO_IOMMU_UNMAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 14) | 377 | #define VFIO_IOMMU_UNMAP_DMA _IO(VFIO_TYPE, VFIO_BASE + 14) |
| 377 | 378 | ||
| 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 | |||
| 378 | #endif /* _UAPIVFIO_H */ | 412 | #endif /* _UAPIVFIO_H */ |
