aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2015-05-19 19:20:48 -0400
committerDave Airlie <airlied@redhat.com>2015-05-19 19:20:48 -0400
commit91d9f9856f91c82ac6289a0fff65dd12cfa07e34 (patch)
tree319d029d1aa7501147f384ab6a4cfb331f1d8fb6 /include/uapi/linux
parent9c37bf2db0a707be4a3025240b009cf63691e0d7 (diff)
parent7591cd2cd59d77c52141d9c2c759c14f981c1a13 (diff)
Merge tag 'drm-amdkfd-next-2015-05-19' of git://people.freedesktop.org/~gabbayo/linux into drm-next
- Add the interrupts & events modules, including new IOCTLs to create and wait on events. The HSA RT open source stack is mainly using events to know when a dispatched work has been completed. In addition, this module is a pre-requisite for the next module I'm going to upstream - debugger support This module also handles H/W exceptions, such as memory exception received through the IOMMUv2 H/W and Bad Opcode exception receieved from the GPU. - Adding a new kernel module parameter to let the user decide whether he wants to receive a SIGTERM when a memory exception occurs inside the GPU kernel and the HSA application doesn't wait on an appropriate event, or if he just want to receive notification about this event in dmesg. The default is the latter. - Additional improvements for SDMA code - Update my email address in Maintainers file. * tag 'drm-amdkfd-next-2015-05-19' of git://people.freedesktop.org/~gabbayo/linux: drm/amdkfd: change driver version to 0.7.2 drm/amdkfd: Implement events IOCTLs drm/amdkfd: Add module parameter of send_sigterm drm/amdkfd: Add bad opcode exception handling drm/amdkfd: Add memory exception handling drm/amdkfd: Add the events module drm/amdkfd: add events IOCTL set definitions drm/amdkfd: Add interrupt handling module drm/radeon: Add init interrupt kfd->kgd interface MAINTAINERS: update amdkfd Oded's email address drm/amdkfd: make the sdma vm init to be asic specific drm/amdkfd: Use new struct for asic specific ops drm/amdkfd: reformat some debug prints drm/amdkfd: Remove unessary void pointer cast
Diffstat (limited to 'include/uapi/linux')
-rw-r--r--include/uapi/linux/kfd_ioctl.h96
1 files changed, 94 insertions, 2 deletions
diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h
index af94f31e33ac..4ca35a8f9891 100644
--- a/include/uapi/linux/kfd_ioctl.h
+++ b/include/uapi/linux/kfd_ioctl.h
@@ -27,7 +27,7 @@
27#include <linux/ioctl.h> 27#include <linux/ioctl.h>
28 28
29#define KFD_IOCTL_MAJOR_VERSION 1 29#define KFD_IOCTL_MAJOR_VERSION 1
30#define KFD_IOCTL_MINOR_VERSION 0 30#define KFD_IOCTL_MINOR_VERSION 1
31 31
32struct kfd_ioctl_get_version_args { 32struct kfd_ioctl_get_version_args {
33 uint32_t major_version; /* from KFD */ 33 uint32_t major_version; /* from KFD */
@@ -128,6 +128,83 @@ struct kfd_ioctl_get_process_apertures_args {
128 uint32_t pad; 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
148struct 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
159struct kfd_ioctl_destroy_event_args {
160 uint32_t event_id; /* to KFD */
161 uint32_t pad;
162};
163
164struct kfd_ioctl_set_event_args {
165 uint32_t event_id; /* to KFD */
166 uint32_t pad;
167};
168
169struct kfd_ioctl_reset_event_args {
170 uint32_t event_id; /* to KFD */
171 uint32_t pad;
172};
173
174struct 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*/
182struct 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*/
190struct 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
200struct 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#define AMDKFD_IOCTL_BASE 'K' 208#define AMDKFD_IOCTL_BASE 'K'
132#define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr) 209#define AMDKFD_IO(nr) _IO(AMDKFD_IOCTL_BASE, nr)
133#define AMDKFD_IOR(nr, type) _IOR(AMDKFD_IOCTL_BASE, nr, type) 210#define AMDKFD_IOR(nr, type) _IOR(AMDKFD_IOCTL_BASE, nr, type)
@@ -155,7 +232,22 @@ struct kfd_ioctl_get_process_apertures_args {
155#define AMDKFD_IOC_UPDATE_QUEUE \ 232#define AMDKFD_IOC_UPDATE_QUEUE \
156 AMDKFD_IOW(0x07, struct kfd_ioctl_update_queue_args) 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#define AMDKFD_COMMAND_START 0x01 250#define AMDKFD_COMMAND_START 0x01
159#define AMDKFD_COMMAND_END 0x08 251#define AMDKFD_COMMAND_END 0x0D
160 252
161#endif 253#endif