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
