aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/dev_dri.txt
diff options
context:
space:
mode:
authorStephen Boyd <swboyd@chromium.org>2021-04-26 08:12:51 -0700
committerGitHub <noreply@github.com>2021-04-26 08:12:51 -0700
commit8ee2dea687224e1e5759783abf5046d298bbe167 (patch)
tree1f11e6308fecfe0b55045354e99075030a66e9cb /sys/linux/dev_dri.txt
parente60b7df17cbe2ad01e7f75b3e515bf0e26c56edb (diff)
sys/linux: support syncobjs in dev_msm (#2552)
* sys/linux: support syncobjs in dev_msm * sys/linux: describe syncpoints and dma fences for dev_dri
Diffstat (limited to 'sys/linux/dev_dri.txt')
-rw-r--r--sys/linux/dev_dri.txt105
1 files changed, 81 insertions, 24 deletions
diff --git a/sys/linux/dev_dri.txt b/sys/linux/dev_dri.txt
index 6e30f9e97..823f720aa 100644
--- a/sys/linux/dev_dri.txt
+++ b/sys/linux/dev_dri.txt
@@ -359,30 +359,82 @@ drm_mode_atomic {
drm_mode_atomic_flags = DRM_MODE_PAGE_FLIP_EVENT, DRM_MODE_ATOMIC_TEST_ONLY, DRM_MODE_ATOMIC_NONBLOCK, DRM_MODE_ATOMIC_ALLOW_MODESET
-# TODO: describe SYNCOBJ ioctls (but we don't have any DRIVER_SYNCOBJ hardware).
-#resource drm_syncobj[int32]
-
-#ioctl$DRM_IOCTL_SYNCOBJ_CREATE(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_CREATE], arg ptr[in, drm_syncobj_create])
-#ioctl$DRM_IOCTL_SYNCOBJ_DESTROY(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_DESTROY], arg ptr[in, drm_syncobj_destroy])
-#ioctl$DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD], arg ptr[in, XXXXX])
-#ioctl$DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE], arg ptr[in, XXXXX])
-#ioctl$DRM_IOCTL_SYNCOBJ_TRANSFER(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TRANSFER], arg ptr[in, XXXXX])
-#ioctl$DRM_IOCTL_SYNCOBJ_WAIT(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_WAIT], arg ptr[in, XXXXX])
-#ioctl$DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT], arg ptr[in, XXXXX])
-#ioctl$DRM_IOCTL_SYNCOBJ_RESET(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_RESET], arg ptr[in, XXXXX])
-#ioctl$DRM_IOCTL_SYNCOBJ_SIGNAL(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_SIGNAL], arg ptr[in, XXXXX])
-#ioctl$DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL], arg ptr[in, XXXXX])
-#ioctl$DRM_IOCTL_SYNCOBJ_QUERY(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_QUERY], arg ptr[in, XXXXX])
-
-#drm_syncobj_create {
-# handle drm_syncobj[opt]
-# flags bool32
-#}
-
-#drm_syncobj_destroy {
-# handle drm_syncobj
-# pad const[0, int32]
-#}
+resource drm_syncobj_fd[fd]
+resource drm_syncobj[int32]
+resource drm_syncpoint[int64]
+
+# See https://www.kernel.org/doc/html/latest/gpu/drm-mm.html#drm-sync-objects
+# for more details
+ioctl$DRM_IOCTL_SYNCOBJ_CREATE(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_CREATE], arg ptr[inout, drm_syncobj_create])
+ioctl$DRM_IOCTL_SYNCOBJ_DESTROY(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_DESTROY], arg ptr[inout, drm_syncobj_destroy])
+ioctl$DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD], arg ptr[inout, drm_syncobj_handle])
+ioctl$DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE], arg ptr[inout, drm_syncobj_handle])
+ioctl$DRM_IOCTL_SYNCOBJ_TRANSFER(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TRANSFER], arg ptr[inout, drm_syncobj_transfer])
+ioctl$DRM_IOCTL_SYNCOBJ_WAIT(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_WAIT], arg ptr[inout, drm_syncobj_wait])
+ioctl$DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT], arg ptr[inout, drm_syncobj_timeline_wait])
+ioctl$DRM_IOCTL_SYNCOBJ_RESET(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_RESET], arg ptr[in, drm_syncobj_array])
+ioctl$DRM_IOCTL_SYNCOBJ_SIGNAL(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_SIGNAL], arg ptr[in, drm_syncobj_array])
+ioctl$DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL], arg ptr[in, drm_syncobj_timeline_array])
+ioctl$DRM_IOCTL_SYNCOBJ_QUERY(fd fd_dri, cmd const[DRM_IOCTL_SYNCOBJ_QUERY], arg ptr[inout, drm_syncobj_timeline_array])
+
+drm_syncobj_create {
+ handle drm_syncobj[opt]
+ flags flags[drm_syncobj_create_flags, int32]
+}
+
+drm_syncobj_destroy {
+ handle drm_syncobj
+ pad const[0, int32]
+}
+
+drm_syncobj_handle {
+ handle drm_syncobj[opt]
+ flags flags[drm_syncobj_handle_flags, int32]
+
+ fd drm_syncobj_fd[opt]
+ pad const[0, int32]
+}
+
+drm_syncobj_transfer {
+ src_handle drm_syncobj (in)
+ dst_handle drm_syncobj (in)
+ src_point drm_syncpoint[opt]
+ dst_point drm_syncpoint[opt]
+ flags flags[drm_syncobj_wait_flags, int32] (in)
+ pad const[0, int32]
+}
+
+drm_syncobj_wait {
+ handles ptr64[in, array[drm_syncobj]]
+ timeout_nsec int64 (in)
+ count_handles len[handles, int32]
+ flags flags[drm_syncobj_wait_flags, int32] (in)
+ first_signaled drm_syncpoint (out)
+ pad const[0, int32]
+}
+
+drm_syncobj_timeline_wait {
+ handles ptr64[in, array[drm_syncobj]]
+ points ptr64[in, array[drm_syncpoint]]
+ timeout_nsec int64
+ count_handles len[handles, int32]
+ flags flags[drm_syncobj_wait_flags, int32] (in)
+ first_signaled drm_syncpoint (out)
+ pad const[0, int32]
+}
+
+drm_syncobj_array {
+ handles ptr64[in, array[drm_syncobj]]
+ count_handles len[handles, int32]
+ pad const[0, int32]
+}
+
+drm_syncobj_timeline_array {
+ handles ptr64[in, array[drm_syncobj]]
+ points ptr64[inout, array[drm_syncpoint]]
+ count_handles len[handles, int32]
+ flags flags[drm_syncobj_query_flags, int32] (in)
+}
# TODO: describe SEQUENCE ioctls (but we don't have DRIVER_MODESET hardware).
#ioctl$DRM_IOCTL_CRTC_GET_SEQUENCE(fd fd_dri, cmd const[DRM_IOCTL_CRTC_GET_SEQUENCE], arg ptr[in, XXXXX])
@@ -686,3 +738,8 @@ drm_buf_flags = _DRM_PAGE_ALIGN, _DRM_AGP_BUFFER, _DRM_SG_BUFFER, _DRM_FB_BUFFER
drm_dma_flags = _DRM_DMA_BLOCK, _DRM_DMA_WHILE_LOCKED, _DRM_DMA_PRIORITY, _DRM_DMA_WAIT, _DRM_DMA_SMALLER_OK, _DRM_DMA_LARGER_OK
drm_control_type = DRM_ADD_COMMAND, DRM_RM_COMMAND, DRM_INST_HANDLER, DRM_UNINST_HANDLER
drm_vblank_seq_type = _DRM_VBLANK_ABSOLUTE, _DRM_VBLANK_RELATIVE, _DRM_VBLANK_HIGH_CRTC_MASK, _DRM_VBLANK_EVENT, _DRM_VBLANK_FLIP, _DRM_VBLANK_NEXTONMISS, _DRM_VBLANK_SECONDARY, _DRM_VBLANK_SIGNAL
+drm_syncobj_create_flags = DRM_SYNCOBJ_CREATE_SIGNALED
+# DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE is the same so we just use one
+drm_syncobj_handle_flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE
+drm_syncobj_wait_flags = DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL, DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT, DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE
+drm_syncobj_query_flags = DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED