The iommu fault data is currently defined in uapi/linux/iommu.h, but is only used inside the iommu subsystem. Move it to linux/iommu.h, where it will be more accessible to kernel drivers. With this done, uapi/linux/iommu.h becomes empty and can be removed from the tree.
Showing the changes to include/uapi (1 of 3 files). Show all
Unified · Split
| @@ -1,161 +0,0 @@ | ||
| 1 | −/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | |
| 2 | −/* | |
| 3 | − * IOMMU user API definitions | |
| 4 | − */ | |
| 5 | − | |
| 6 | −#ifndef _UAPI_IOMMU_H | |
| 7 | −#define _UAPI_IOMMU_H | |
| 8 | − | |
| 9 | −#include <linux/types.h> | |
| 10 | − | |
| 11 | −#define IOMMU_FAULT_PERM_READ (1 << 0) /* read */ | |
| 12 | −#define IOMMU_FAULT_PERM_WRITE (1 << 1) /* write */ | |
| 13 | −#define IOMMU_FAULT_PERM_EXEC (1 << 2) /* exec */ | |
| 14 | −#define IOMMU_FAULT_PERM_PRIV (1 << 3) /* privileged */ | |
| 15 | − | |
| 16 | −/* Generic fault types, can be expanded IRQ remapping fault */ | |
| 17 | −enum iommu_fault_type { | |
| 18 | − IOMMU_FAULT_DMA_UNRECOV = 1, /* unrecoverable fault */ | |
| 19 | − IOMMU_FAULT_PAGE_REQ, /* page request fault */ | |
| 20 | −}; | |
| 21 | − | |
| 22 | −enum iommu_fault_reason { | |
| 23 | − IOMMU_FAULT_REASON_UNKNOWN = 0, | |
| 24 | − | |
| 25 | − /* Could not access the PASID table (fetch caused external abort) */ | |
| 26 | − IOMMU_FAULT_REASON_PASID_FETCH, | |
| 27 | − | |
| 28 | − /* PASID entry is invalid or has configuration errors */ | |
| 29 | − IOMMU_FAULT_REASON_BAD_PASID_ENTRY, | |
| 30 | − | |
| 31 | − /* | |
| 32 | − * PASID is out of range (e.g. exceeds the maximum PASID | |
| 33 | − * supported by the IOMMU) or disabled. | |
| 34 | − */ | |
| 35 | − IOMMU_FAULT_REASON_PASID_INVALID, | |
| 36 | − | |
| 37 | − /* | |
| 38 | − * An external abort occurred fetching (or updating) a translation | |
| 39 | − * table descriptor | |
| 40 | − */ | |
| 41 | − IOMMU_FAULT_REASON_WALK_EABT, | |
| 42 | − | |
| 43 | − /* | |
| 44 | − * Could not access the page table entry (Bad address), | |
| 45 | − * actual translation fault | |
| 46 | − */ | |
| 47 | − IOMMU_FAULT_REASON_PTE_FETCH, | |
| 48 | − | |
| 49 | − /* Protection flag check failed */ | |
| 50 | − IOMMU_FAULT_REASON_PERMISSION, | |
| 51 | − | |
| 52 | − /* access flag check failed */ | |
| 53 | − IOMMU_FAULT_REASON_ACCESS, | |
| 54 | − | |
| 55 | − /* Output address of a translation stage caused Address Size fault */ | |
| 56 | − IOMMU_FAULT_REASON_OOR_ADDRESS, | |
| 57 | −}; | |
| 58 | − | |
| 59 | −/** | |
| 60 | − * struct iommu_fault_unrecoverable - Unrecoverable fault data | |
| 61 | − * @reason: reason of the fault, from &enum iommu_fault_reason | |
| 62 | − * @flags: parameters of this fault (IOMMU_FAULT_UNRECOV_* values) | |
| 63 | − * @pasid: Process Address Space ID | |
| 64 | − * @perm: requested permission access using by the incoming transaction | |
| 65 | − * (IOMMU_FAULT_PERM_* values) | |
| 66 | − * @addr: offending page address | |
| 67 | − * @fetch_addr: address that caused a fetch abort, if any | |
| 68 | − */ | |
| 69 | −struct iommu_fault_unrecoverable { | |
| 70 | − __u32 reason; | |
| 71 | −#define IOMMU_FAULT_UNRECOV_PASID_VALID (1 << 0) | |
| 72 | −#define IOMMU_FAULT_UNRECOV_ADDR_VALID (1 << 1) | |
| 73 | −#define IOMMU_FAULT_UNRECOV_FETCH_ADDR_VALID (1 << 2) | |
| 74 | − __u32 flags; | |
| 75 | − __u32 pasid; | |
| 76 | − __u32 perm; | |
| 77 | − __u64 addr; | |
| 78 | − __u64 fetch_addr; | |
| 79 | −}; | |
| 80 | − | |
| 81 | −/** | |
| 82 | − * struct iommu_fault_page_request - Page Request data | |
| 83 | − * @flags: encodes whether the corresponding fields are valid and whether this | |
| 84 | − * is the last page in group (IOMMU_FAULT_PAGE_REQUEST_* values). | |
| 85 | − * When IOMMU_FAULT_PAGE_RESPONSE_NEEDS_PASID is set, the page response | |
| 86 | − * must have the same PASID value as the page request. When it is clear, | |
| 87 | − * the page response should not have a PASID. | |
| 88 | − * @pasid: Process Address Space ID | |
| 89 | − * @grpid: Page Request Group Index | |
| 90 | − * @perm: requested page permissions (IOMMU_FAULT_PERM_* values) | |
| 91 | − * @addr: page address | |
| 92 | − * @private_data: device-specific private information | |
| 93 | − */ | |
| 94 | −struct iommu_fault_page_request { | |
| 95 | −#define IOMMU_FAULT_PAGE_REQUEST_PASID_VALID (1 << 0) | |
| 96 | −#define IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE (1 << 1) | |
| 97 | −#define IOMMU_FAULT_PAGE_REQUEST_PRIV_DATA (1 << 2) | |
| 98 | −#define IOMMU_FAULT_PAGE_RESPONSE_NEEDS_PASID (1 << 3) | |
| 99 | − __u32 flags; | |
| 100 | − __u32 pasid; | |
| 101 | − __u32 grpid; | |
| 102 | − __u32 perm; | |
| 103 | − __u64 addr; | |
| 104 | − __u64 private_data[2]; | |
| 105 | −}; | |
| 106 | − | |
| 107 | −/** | |
| 108 | − * struct iommu_fault - Generic fault data | |
| 109 | − * @type: fault type from &enum iommu_fault_type | |
| 110 | − * @padding: reserved for future use (should be zero) | |
| 111 | − * @event: fault event, when @type is %IOMMU_FAULT_DMA_UNRECOV | |
| 112 | − * @prm: Page Request message, when @type is %IOMMU_FAULT_PAGE_REQ | |
| 113 | − * @padding2: sets the fault size to allow for future extensions | |
| 114 | − */ | |
| 115 | −struct iommu_fault { | |
| 116 | − __u32 type; | |
| 117 | − __u32 padding; | |
| 118 | − union { | |
| 119 | − struct iommu_fault_unrecoverable event; | |
| 120 | − struct iommu_fault_page_request prm; | |
| 121 | − __u8 padding2[56]; | |
| 122 | − }; | |
| 123 | −}; | |
| 124 | − | |
| 125 | −/** | |
| 126 | − * enum iommu_page_response_code - Return status of fault handlers | |
| 127 | − * @IOMMU_PAGE_RESP_SUCCESS: Fault has been handled and the page tables | |
| 128 | − * populated, retry the access. This is "Success" in PCI PRI. | |
| 129 | − * @IOMMU_PAGE_RESP_FAILURE: General error. Drop all subsequent faults from | |
| 130 | − * this device if possible. This is "Response Failure" in PCI PRI. | |
| 131 | − * @IOMMU_PAGE_RESP_INVALID: Could not handle this fault, don't retry the | |
| 132 | − * access. This is "Invalid Request" in PCI PRI. | |
| 133 | − */ | |
| 134 | −enum iommu_page_response_code { | |
| 135 | − IOMMU_PAGE_RESP_SUCCESS = 0, | |
| 136 | − IOMMU_PAGE_RESP_INVALID, | |
| 137 | − IOMMU_PAGE_RESP_FAILURE, | |
| 138 | −}; | |
| 139 | − | |
| 140 | −/** | |
| 141 | − * struct iommu_page_response - Generic page response information | |
| 142 | − * @argsz: User filled size of this data | |
| 143 | − * @version: API version of this structure | |
| 144 | − * @flags: encodes whether the corresponding fields are valid | |
| 145 | − * (IOMMU_FAULT_PAGE_RESPONSE_* values) | |
| 146 | − * @pasid: Process Address Space ID | |
| 147 | − * @grpid: Page Request Group Index | |
| 148 | − * @code: response code from &enum iommu_page_response_code | |
| 149 | − */ | |
| 150 | −struct iommu_page_response { | |
| 151 | − __u32 argsz; | |
| 152 | −#define IOMMU_PAGE_RESP_VERSION_1 1 | |
| 153 | − __u32 version; | |
| 154 | −#define IOMMU_PAGE_RESP_PASID_VALID (1 << 0) | |
| 155 | − __u32 flags; | |
| 156 | − __u32 pasid; | |
| 157 | − __u32 grpid; | |
| 158 | − __u32 code; | |
| 159 | −}; | |
| 160 | − | |
| 161 | −#endif /* _UAPI_IOMMU_H */ | |