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).
Showing the changes to include/uapi (1 of 6 files). Show all
Unified · Split
| @@ -22,6 +22,7 @@ · 21 unmodified lines | ||
| 22 | 22 | /* Extensions */ |
| 23 | 23 | |
| 24 | 24 | #define VFIO_TYPE1_IOMMU 1 |
| 25 | +#define VFIO_SPAPR_TCE_IOMMU 2 | |
| 25 | 26 | |
| 26 | 27 | /* |
| 27 | 28 | * The IOCTL interface is designed for extensibility by embedding the |
| @@ -375,4 +376,37 @@ struct vfio_iommu_type1_dma_unmap { · 347 unmodified lines | ||
| 375 | 376 | |
| 376 | 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 | 412 | #endif /* _UAPIVFIO_H */ |