Add the minimal UAPI definitions needed for debugger event support on
render nodes.

This introduces the debugger attach operation, debug-fd read and forward
ioctls, and the debug event record format used to communicate
intercepted GPU events between the driver and the debugger.

Cc: Alex Deucher <[email protected]>
Cc: Christian König <[email protected]>
Signed-off-by: Srinivasan Shanmugam <[email protected]>
---
 include/uapi/drm/amdgpu_drm.h | 52 +++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index 82c6f3bd628b..d77f724373db 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -41,6 +41,7 @@ extern "C" {
 #define DRM_AMDGPU_GEM_CREATE          0x00
 #define DRM_AMDGPU_EVENTFD             0x1A
 #define DRM_AMDGPU_WAIT_EVENT          0x1B
+#define DRM_AMDGPU_DEBUG_EVENT         0x1C
 #define DRM_AMDGPU_GEM_MMAP            0x01
 #define DRM_AMDGPU_CTX                 0x02
 #define DRM_AMDGPU_BO_LIST             0x03
@@ -85,6 +86,8 @@ extern "C" {
        DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_EVENTFD, struct 
drm_amdgpu_eventfd)
 #define DRM_IOCTL_AMDGPU_WAIT_EVENT \
        DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_EVENT, struct 
drm_amdgpu_wait_event)
+#define DRM_IOCTL_AMDGPU_DEBUG_EVENT \
+       DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_DEBUG_EVENT, union 
drm_amdgpu_debug_event)
 
 /**
  * DOC: memory domains
@@ -339,6 +342,55 @@ struct drm_amdgpu_wait_event_data {
        } u;
 };
 
+enum drm_amdgpu_debug_event_op {
+       DRM_AMDGPU_DEBUG_EVENT_OP_ATTACH = 0,
+};
+
+/* Debug-fd ioctls. */
+#define DRM_AMDGPU_DEBUG_FD_READ_EVENT _IOWR('A', 0x0, struct 
drm_amdgpu_debug_event_record)
+#define DRM_AMDGPU_DEBUG_FD_FORWARD_EVENT      _IOW('A', 0x1, struct 
drm_amdgpu_debug_event_record)
+
+/* Debug event flags. */
+#define DRM_AMDGPU_DEBUG_EVENT_NEED_FORWARD    (1 << 0)
+
+/**
+ * struct drm_amdgpu_debug_event_attach - attach debugger to render-node fd
+ * @op: must be DRM_AMDGPU_DEBUG_EVENT_OP_ATTACH
+ * @flags: must be 0
+ * @debug_fd: returned debugger fd
+ * @reserved: must be 0
+ */
+struct drm_amdgpu_debug_event_attach {
+       __u32 op;
+       __u32 flags;
+       __s32 debug_fd;
+       __u32 reserved;
+};
+
+/**
+ * struct drm_amdgpu_debug_event_record - event intercepted by debugger
+ * @len: size of this record
+ * @event_type: one of enum drm_amdgpu_event_type
+ * @flags: debug event flags
+ * @seqno: debug-event sequence number
+ * @queue_id: queue identifier, or 0 for device-scoped events
+ * @reserved: must be 0
+ * @data: original WAIT_EVENT payload
+ */
+struct drm_amdgpu_debug_event_record {
+       __u32 len;
+       __u16 event_type;
+       __u16 flags;
+       __u64 seqno;
+       __u32 queue_id;
+       __u32 reserved;
+       struct drm_amdgpu_wait_event_data data;
+};
+
+union drm_amdgpu_debug_event {
+       struct drm_amdgpu_debug_event_attach attach;
+};
+
 /**
  * struct drm_amdgpu_wait_event - wait for a render-node event
  * @event_type: kernel-defined event type
-- 
2.34.1

Reply via email to