Message ID | 20190513095305.14110-4-david1.zhou@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [libdrm,1/7] addr cs chunk for syncobj timeline | expand |
On 13/05/2019 10:53, Chunming Zhou wrote: > v2: use one transfer ioctl > > Signed-off-by: Chunming Zhou <david1.zhou@amd.com> > --- > xf86drm.c | 33 +++++++++++++++++++++++++++++++++ > xf86drm.h | 6 ++++++ > 2 files changed, 39 insertions(+) > > diff --git a/xf86drm.c b/xf86drm.c > index 17e3d880..acd16fab 100644 > --- a/xf86drm.c > +++ b/xf86drm.c > @@ -4257,6 +4257,21 @@ drm_public int drmSyncobjSignal(int fd, const uint32_t *handles, > return ret; > } > > +drm_public int drmSyncobjTimelineSignal(int fd, const uint32_t *handles, > + uint64_t *points, uint32_t handle_count) > +{ > + struct drm_syncobj_timeline_array args; > + int ret; > + > + memclear(args); > + args.handles = (uintptr_t)handles; > + args.points = (uint64_t)(uintptr_t)points; I think you can drop the uint64_t cast. > + args.count_handles = handle_count; > + > + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL, &args); > + return ret; > +} > + > drm_public int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points, > unsigned num_handles, > int64_t timeout_nsec, unsigned flags, > @@ -4299,4 +4314,22 @@ drm_public int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points, > return 0; > } > > +drm_public int drmSyncobjTransfer(int fd, > + uint32_t dst_handle, uint64_t dst_point, > + uint32_t src_handle, uint64_t src_point, > + uint32_t flags) > +{ > + struct drm_syncobj_transfer args; > + int ret; > + > + memclear(args); > + args.src_handle = src_handle; > + args.dst_handle = dst_handle; > + args.src_point = src_point; > + args.dst_point = dst_point; > + args.flags = flags; > + > + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_TRANSFER, &args); > > + return ret; > +} > diff --git a/xf86drm.h b/xf86drm.h > index 60c7a84f..3fb1d1ca 100644 > --- a/xf86drm.h > +++ b/xf86drm.h > @@ -876,12 +876,18 @@ extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles, > uint32_t *first_signaled); > extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count); > extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count); > +extern int drmSyncobjTimelineSignal(int fd, const uint32_t *handles, > + uint64_t *points, uint32_t handle_count); > extern int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points, > unsigned num_handles, > int64_t timeout_nsec, unsigned flags, > uint32_t *first_signaled); > extern int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points, > uint32_t handle_count); > +extern int drmSyncobjTransfer(int fd, > + uint32_t dst_handle, uint64_t dst_point, > + uint32_t src_handle, uint64_t src_point, > + uint32_t flags); > > #if defined(__cplusplus) > }
diff --git a/xf86drm.c b/xf86drm.c index 17e3d880..acd16fab 100644 --- a/xf86drm.c +++ b/xf86drm.c @@ -4257,6 +4257,21 @@ drm_public int drmSyncobjSignal(int fd, const uint32_t *handles, return ret; } +drm_public int drmSyncobjTimelineSignal(int fd, const uint32_t *handles, + uint64_t *points, uint32_t handle_count) +{ + struct drm_syncobj_timeline_array args; + int ret; + + memclear(args); + args.handles = (uintptr_t)handles; + args.points = (uint64_t)(uintptr_t)points; + args.count_handles = handle_count; + + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL, &args); + return ret; +} + drm_public int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points, unsigned num_handles, int64_t timeout_nsec, unsigned flags, @@ -4299,4 +4314,22 @@ drm_public int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points, return 0; } +drm_public int drmSyncobjTransfer(int fd, + uint32_t dst_handle, uint64_t dst_point, + uint32_t src_handle, uint64_t src_point, + uint32_t flags) +{ + struct drm_syncobj_transfer args; + int ret; + + memclear(args); + args.src_handle = src_handle; + args.dst_handle = dst_handle; + args.src_point = src_point; + args.dst_point = dst_point; + args.flags = flags; + + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_TRANSFER, &args); + return ret; +} diff --git a/xf86drm.h b/xf86drm.h index 60c7a84f..3fb1d1ca 100644 --- a/xf86drm.h +++ b/xf86drm.h @@ -876,12 +876,18 @@ extern int drmSyncobjWait(int fd, uint32_t *handles, unsigned num_handles, uint32_t *first_signaled); extern int drmSyncobjReset(int fd, const uint32_t *handles, uint32_t handle_count); extern int drmSyncobjSignal(int fd, const uint32_t *handles, uint32_t handle_count); +extern int drmSyncobjTimelineSignal(int fd, const uint32_t *handles, + uint64_t *points, uint32_t handle_count); extern int drmSyncobjTimelineWait(int fd, uint32_t *handles, uint64_t *points, unsigned num_handles, int64_t timeout_nsec, unsigned flags, uint32_t *first_signaled); extern int drmSyncobjQuery(int fd, uint32_t *handles, uint64_t *points, uint32_t handle_count); +extern int drmSyncobjTransfer(int fd, + uint32_t dst_handle, uint64_t dst_point, + uint32_t src_handle, uint64_t src_point, + uint32_t flags); #if defined(__cplusplus) }
v2: use one transfer ioctl Signed-off-by: Chunming Zhou <david1.zhou@amd.com> --- xf86drm.c | 33 +++++++++++++++++++++++++++++++++ xf86drm.h | 6 ++++++ 2 files changed, 39 insertions(+)