| Christopher Ferris | 8b7fdc9 | 2023-02-21 13:36:32 -0800 | [diff] [blame] | 1 | /**************************************************************************** | 
 | 2 |  **************************************************************************** | 
 | 3 |  *** | 
 | 4 |  ***   This header was automatically generated from a Linux kernel header | 
 | 5 |  ***   of the same name, to make information necessary for userspace to | 
 | 6 |  ***   call into the kernel available to libc.  It contains only constants, | 
 | 7 |  ***   structures, and macros generated from the original header, and thus, | 
 | 8 |  ***   contains no copyrightable information. | 
 | 9 |  *** | 
 | 10 |  ***   To edit the content of this header, modify the corresponding | 
 | 11 |  ***   source file (e.g. under external/kernel-headers/original/) then | 
 | 12 |  ***   run bionic/libc/kernel/tools/update_all.py | 
 | 13 |  *** | 
 | 14 |  ***   Any manual change here will be lost the next time this script will | 
 | 15 |  ***   be run. You've been warned! | 
 | 16 |  *** | 
 | 17 |  **************************************************************************** | 
 | 18 |  ****************************************************************************/ | 
 | 19 | #ifndef _UAPI_IOMMUFD_H | 
 | 20 | #define _UAPI_IOMMUFD_H | 
 | 21 | #include <linux/types.h> | 
 | 22 | #include <linux/ioctl.h> | 
 | 23 | #define IOMMUFD_TYPE (';') | 
 | 24 | enum { | 
 | 25 |   IOMMUFD_CMD_BASE = 0x80, | 
 | 26 |   IOMMUFD_CMD_DESTROY = IOMMUFD_CMD_BASE, | 
 | 27 |   IOMMUFD_CMD_IOAS_ALLOC, | 
 | 28 |   IOMMUFD_CMD_IOAS_ALLOW_IOVAS, | 
 | 29 |   IOMMUFD_CMD_IOAS_COPY, | 
 | 30 |   IOMMUFD_CMD_IOAS_IOVA_RANGES, | 
 | 31 |   IOMMUFD_CMD_IOAS_MAP, | 
 | 32 |   IOMMUFD_CMD_IOAS_UNMAP, | 
 | 33 |   IOMMUFD_CMD_OPTION, | 
 | 34 |   IOMMUFD_CMD_VFIO_IOAS, | 
 | 35 | }; | 
 | 36 | struct iommu_destroy { | 
 | 37 |   __u32 size; | 
 | 38 |   __u32 id; | 
 | 39 | }; | 
 | 40 | #define IOMMU_DESTROY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_DESTROY) | 
 | 41 | struct iommu_ioas_alloc { | 
 | 42 |   __u32 size; | 
 | 43 |   __u32 flags; | 
 | 44 |   __u32 out_ioas_id; | 
 | 45 | }; | 
 | 46 | #define IOMMU_IOAS_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOC) | 
 | 47 | struct iommu_iova_range { | 
 | 48 |   __aligned_u64 start; | 
 | 49 |   __aligned_u64 last; | 
 | 50 | }; | 
 | 51 | struct iommu_ioas_iova_ranges { | 
 | 52 |   __u32 size; | 
 | 53 |   __u32 ioas_id; | 
 | 54 |   __u32 num_iovas; | 
 | 55 |   __u32 __reserved; | 
 | 56 |   __aligned_u64 allowed_iovas; | 
 | 57 |   __aligned_u64 out_iova_alignment; | 
 | 58 | }; | 
 | 59 | #define IOMMU_IOAS_IOVA_RANGES _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_IOVA_RANGES) | 
 | 60 | struct iommu_ioas_allow_iovas { | 
 | 61 |   __u32 size; | 
 | 62 |   __u32 ioas_id; | 
 | 63 |   __u32 num_iovas; | 
 | 64 |   __u32 __reserved; | 
 | 65 |   __aligned_u64 allowed_iovas; | 
 | 66 | }; | 
 | 67 | #define IOMMU_IOAS_ALLOW_IOVAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOW_IOVAS) | 
 | 68 | enum iommufd_ioas_map_flags { | 
 | 69 |   IOMMU_IOAS_MAP_FIXED_IOVA = 1 << 0, | 
 | 70 |   IOMMU_IOAS_MAP_WRITEABLE = 1 << 1, | 
 | 71 |   IOMMU_IOAS_MAP_READABLE = 1 << 2, | 
 | 72 | }; | 
 | 73 | struct iommu_ioas_map { | 
 | 74 |   __u32 size; | 
 | 75 |   __u32 flags; | 
 | 76 |   __u32 ioas_id; | 
 | 77 |   __u32 __reserved; | 
 | 78 |   __aligned_u64 user_va; | 
 | 79 |   __aligned_u64 length; | 
 | 80 |   __aligned_u64 iova; | 
 | 81 | }; | 
 | 82 | #define IOMMU_IOAS_MAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_MAP) | 
 | 83 | struct iommu_ioas_copy { | 
 | 84 |   __u32 size; | 
 | 85 |   __u32 flags; | 
 | 86 |   __u32 dst_ioas_id; | 
 | 87 |   __u32 src_ioas_id; | 
 | 88 |   __aligned_u64 length; | 
 | 89 |   __aligned_u64 dst_iova; | 
 | 90 |   __aligned_u64 src_iova; | 
 | 91 | }; | 
 | 92 | #define IOMMU_IOAS_COPY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_COPY) | 
 | 93 | struct iommu_ioas_unmap { | 
 | 94 |   __u32 size; | 
 | 95 |   __u32 ioas_id; | 
 | 96 |   __aligned_u64 iova; | 
 | 97 |   __aligned_u64 length; | 
 | 98 | }; | 
 | 99 | #define IOMMU_IOAS_UNMAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_UNMAP) | 
 | 100 | enum iommufd_option { | 
 | 101 |   IOMMU_OPTION_RLIMIT_MODE = 0, | 
 | 102 |   IOMMU_OPTION_HUGE_PAGES = 1, | 
 | 103 | }; | 
 | 104 | enum iommufd_option_ops { | 
 | 105 |   IOMMU_OPTION_OP_SET = 0, | 
 | 106 |   IOMMU_OPTION_OP_GET = 1, | 
 | 107 | }; | 
 | 108 | struct iommu_option { | 
 | 109 |   __u32 size; | 
 | 110 |   __u32 option_id; | 
 | 111 |   __u16 op; | 
 | 112 |   __u16 __reserved; | 
 | 113 |   __u32 object_id; | 
 | 114 |   __aligned_u64 val64; | 
 | 115 | }; | 
 | 116 | #define IOMMU_OPTION _IO(IOMMUFD_TYPE, IOMMUFD_CMD_OPTION) | 
 | 117 | enum iommufd_vfio_ioas_op { | 
 | 118 |   IOMMU_VFIO_IOAS_GET = 0, | 
 | 119 |   IOMMU_VFIO_IOAS_SET = 1, | 
 | 120 |   IOMMU_VFIO_IOAS_CLEAR = 2, | 
 | 121 | }; | 
 | 122 | struct iommu_vfio_ioas { | 
 | 123 |   __u32 size; | 
 | 124 |   __u32 ioas_id; | 
 | 125 |   __u16 op; | 
 | 126 |   __u16 __reserved; | 
 | 127 | }; | 
 | 128 | #define IOMMU_VFIO_IOAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VFIO_IOAS) | 
 | 129 | #endif |