- AMDKFD_IOC_CREATE_EVENT: Creates a new event of a specified type - AMDKFD_IOC_DESTROY_EVENT: Destroys an existing event - AMDKFD_IOC_SET_EVENT: Signal an existing event - AMDKFD_IOC_RESET_EVENT: Reset an existing event - AMDKFD_IOC_WAIT_EVENTS: Wait on event(s) until they are signaled v2: - Move the limit of the signal events to kfd_ioctl.h so it can be used by userspace v3: - Change all bool fields in struct kfd_memory_exception_failure to uint32_t
Showing the changes to include/uapi (1 of 2 files). Show all
Unified · Split
| @@ -27,7 +27,7 @@ · 26 unmodified lines | ||
| 27 | 27 | #include <linux/ioctl.h> |
| 28 | 28 | |
| 29 | 29 | #define KFD_IOCTL_MAJOR_VERSION 1 |
| 30 | −#define KFD_IOCTL_MINOR_VERSION 0 | |
| 30 | +#define KFD_IOCTL_MINOR_VERSION 1 | |
| 31 | 31 | |
| 32 | 32 | struct kfd_ioctl_get_version_args { |
| 33 | 33 | uint32_t major_version; /* from KFD */ |
| @@ -128,6 +128,83 @@ struct kfd_ioctl_get_process_apertures_args { · 94 unmodified lines | ||
| 128 | 128 | uint32_t pad; |
| 129 | 129 | }; |
| 130 | 130 | |
| 131 | +/* Matching HSA_EVENTTYPE */ | |
| 132 | +#define KFD_IOC_EVENT_SIGNAL 0 | |
| 133 | +#define KFD_IOC_EVENT_NODECHANGE 1 | |
| 134 | +#define KFD_IOC_EVENT_DEVICESTATECHANGE 2 | |
| 135 | +#define KFD_IOC_EVENT_HW_EXCEPTION 3 | |
| 136 | +#define KFD_IOC_EVENT_SYSTEM_EVENT 4 | |
| 137 | +#define KFD_IOC_EVENT_DEBUG_EVENT 5 | |
| 138 | +#define KFD_IOC_EVENT_PROFILE_EVENT 6 | |
| 139 | +#define KFD_IOC_EVENT_QUEUE_EVENT 7 | |
| 140 | +#define KFD_IOC_EVENT_MEMORY 8 | |
| 141 | + | |
| 142 | +#define KFD_IOC_WAIT_RESULT_COMPLETE 0 | |
| 143 | +#define KFD_IOC_WAIT_RESULT_TIMEOUT 1 | |
| 144 | +#define KFD_IOC_WAIT_RESULT_FAIL 2 | |
| 145 | + | |
| 146 | +#define KFD_SIGNAL_EVENT_LIMIT 256 | |
| 147 | + | |
| 148 | +struct kfd_ioctl_create_event_args { | |
| 149 | + uint64_t event_page_offset; /* from KFD */ | |
| 150 | + uint32_t event_trigger_data; /* from KFD - signal events only */ | |
| 151 | + uint32_t event_type; /* to KFD */ | |
| 152 | + uint32_t auto_reset; /* to KFD */ | |
| 153 | + uint32_t node_id; /* to KFD - only valid for certain | |
| 154 | + event types */ | |
| 155 | + uint32_t event_id; /* from KFD */ | |
| 156 | + uint32_t event_slot_index; /* from KFD */ | |
| 157 | +}; | |
| 158 | + | |
| 159 | +struct kfd_ioctl_destroy_event_args { | |
| 160 | + uint32_t event_id; /* to KFD */ | |
| 161 | + uint32_t pad; | |
| 162 | +}; | |
| 163 | + | |
| 164 | +struct kfd_ioctl_set_event_args { | |
| 165 | + uint32_t event_id; /* to KFD */ | |
| 166 | + uint32_t pad; | |
| 167 | +}; | |
| 168 | + | |
| 169 | +struct kfd_ioctl_reset_event_args { | |
| 170 | + uint32_t event_id; /* to KFD */ | |
| 171 | + uint32_t pad; | |
| 172 | +}; | |
| 173 | + | |
| 174 | +struct kfd_memory_exception_failure { | |
| 175 | + uint32_t NotPresent; /* Page not present or supervisor privilege */ | |
| 176 | + uint32_t ReadOnly; /* Write access to a read-only page */ | |
| 177 | + uint32_t NoExecute; /* Execute access to a page marked NX */ | |
| 178 | + uint32_t pad; | |
| 179 | +}; | |
| 180 | + | |
| 181 | +/* memory exception data*/ | |
| 182 | +struct kfd_hsa_memory_exception_data { | |
| 183 | + struct kfd_memory_exception_failure failure; | |
| 184 | + uint64_t va; | |
| 185 | + uint32_t gpu_id; | |
| 186 | + uint32_t pad; | |
| 187 | +}; | |
| 188 | + | |
| 189 | +/* Event data*/ | |
| 190 | +struct kfd_event_data { | |
| 191 | + union { | |
| 192 | + struct kfd_hsa_memory_exception_data memory_exception_data; | |
| 193 | + }; /* From KFD */ | |
| 194 | + uint64_t kfd_event_data_ext; /* pointer to an extension structure | |
| 195 | + for future exception types */ | |
| 196 | + uint32_t event_id; /* to KFD */ | |
| 197 | + uint32_t pad; | |
| 198 | +}; | |
| 199 | + | |
| 200 | +struct kfd_ioctl_wait_events_args { | |
| 201 | + uint64_t events_ptr; /* to KFD */ | |
| 202 | + uint32_t num_events; /* to KFD */ | |
| 203 | + uint32_t wait_for_all; /* to KFD */ | |
| 204 | + uint32_t timeout; /* to KFD */ | |
| 205 | + uint32_t wait_result; /* from KFD */ | |
| 206 | +}; | |
| 207 | + | |
| 131 | 208 | #define AMDKFD_IOCTL_BASE 'K' |
| 132 | 209 | #define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr) |
| 133 | 210 | #define AMDKFD_IOR(nr, type) _IOR(AMDKFD_IOCTL_BASE, nr, type) |
| @@ -155,7 +232,22 @@ struct kfd_ioctl_get_process_apertures_args { · 21 unmodified lines | ||
| 155 | 232 | #define AMDKFD_IOC_UPDATE_QUEUE \ |
| 156 | 233 | AMDKFD_IOW(0x07, struct kfd_ioctl_update_queue_args) |
| 157 | 234 | |
| 235 | +#define AMDKFD_IOC_CREATE_EVENT \ | |
| 236 | + AMDKFD_IOWR(0x08, struct kfd_ioctl_create_event_args) | |
| 237 | + | |
| 238 | +#define AMDKFD_IOC_DESTROY_EVENT \ | |
| 239 | + AMDKFD_IOW(0x09, struct kfd_ioctl_destroy_event_args) | |
| 240 | + | |
| 241 | +#define AMDKFD_IOC_SET_EVENT \ | |
| 242 | + AMDKFD_IOW(0x0A, struct kfd_ioctl_set_event_args) | |
| 243 | + | |
| 244 | +#define AMDKFD_IOC_RESET_EVENT \ | |
| 245 | + AMDKFD_IOW(0x0B, struct kfd_ioctl_reset_event_args) | |
| 246 | + | |
| 247 | +#define AMDKFD_IOC_WAIT_EVENTS \ | |
| 248 | + AMDKFD_IOWR(0x0C, struct kfd_ioctl_wait_events_args) | |
| 249 | + | |
| 158 | 250 | #define AMDKFD_COMMAND_START 0x01 |
| 159 | −#define AMDKFD_COMMAND_END 0x08 | |
| 251 | +#define AMDKFD_COMMAND_END 0x0D | |
| 160 | 252 | |
| 161 | 253 | #endif |