ping? Dave. On 17 June 2017 at 11:06, Dave Airlie <airlied@xxxxxxxxx> wrote: > From: Dave Airlie <airlied@xxxxxxxxxx> > > These ioctls are now in drm next so add the first set of libdrm APIs. > > Signed-off-by: Dave Airlie <airlied@xxxxxxxxxx> > --- > include/drm/drm.h | 26 ++++++++++++++++++ > xf86drm.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > xf86drm.h | 8 ++++++ > 3 files changed, 115 insertions(+) > > diff --git a/include/drm/drm.h b/include/drm/drm.h > index 1e7a4bc..bf3674a 100644 > --- a/include/drm/drm.h > +++ b/include/drm/drm.h > @@ -642,6 +642,7 @@ struct drm_gem_open { > #define DRM_CAP_ADDFB2_MODIFIERS 0x10 > #define DRM_CAP_PAGE_FLIP_TARGET 0x11 > #define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12 > +#define DRM_CAP_SYNCOBJ 0x13 > > /** DRM_IOCTL_GET_CAP ioctl argument type */ > struct drm_get_cap { > @@ -691,6 +692,26 @@ struct drm_prime_handle { > __s32 fd; > }; > > +struct drm_syncobj_create { > + __u32 handle; > + __u32 flags; > +}; > + > +struct drm_syncobj_destroy { > + __u32 handle; > + __u32 pad; > +}; > + > +#define DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE (1 << 0) > +#define DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE (1 << 0) > +struct drm_syncobj_handle { > + __u32 handle; > + __u32 flags; > + > + __s32 fd; > + __u32 pad; > +}; > + > #if defined(__cplusplus) > } > #endif > @@ -809,6 +830,11 @@ extern "C" { > #define DRM_IOCTL_MODE_CREATEPROPBLOB DRM_IOWR(0xBD, struct drm_mode_create_blob) > #define DRM_IOCTL_MODE_DESTROYPROPBLOB DRM_IOWR(0xBE, struct drm_mode_destroy_blob) > > +#define DRM_IOCTL_SYNCOBJ_CREATE DRM_IOWR(0xBF, struct drm_syncobj_create) > +#define DRM_IOCTL_SYNCOBJ_DESTROY DRM_IOWR(0xC0, struct drm_syncobj_destroy) > +#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD DRM_IOWR(0xC1, struct drm_syncobj_handle) > +#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE DRM_IOWR(0xC2, struct drm_syncobj_handle) > + > /** > * Device specific ioctls should only be in their respective headers > * The device specific ioctl range is from 0x40 to 0x9f. > diff --git a/xf86drm.c b/xf86drm.c > index 728ac78..2ac3f26 100644 > --- a/xf86drm.c > +++ b/xf86drm.c > @@ -4146,3 +4146,84 @@ char *drmGetDeviceNameFromFd2(int fd) > return strdup(node); > #endif > } > + > +int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle) > +{ > + struct drm_syncobj_create args; > + int ret; > + > + memclear(args); > + args.flags = flags; > + args.handle = 0; > + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &args); > + if (ret) > + return ret; > + *handle = args.handle; > + return 0; > +} > + > +int drmSyncobjDestroy(int fd, uint32_t handle) > +{ > + struct drm_syncobj_destroy args; > + > + memclear(args); > + args.handle = handle; > + return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_DESTROY, &args); > +} > + > +int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd) > +{ > + struct drm_syncobj_handle args; > + int ret; > + > + memclear(args); > + args.fd = -1; > + args.handle = handle; > + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); > + if (ret) > + return ret; > + *obj_fd = args.fd; > + return 0; > +} > + > +int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle) > +{ > + struct drm_syncobj_handle args; > + int ret; > + > + memclear(args); > + args.fd = obj_fd; > + args.handle = 0; > + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); > + if (ret) > + return ret; > + *handle = args.handle; > + return 0; > +} > + > +int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd) > +{ > + struct drm_syncobj_handle args; > + > + memclear(args); > + args.fd = sync_file_fd; > + args.handle = handle; > + args.flags = DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE; > + return drmIoctl(fd, DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, &args); > +} > + > +int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd) > +{ > + struct drm_syncobj_handle args; > + int ret; > + > + memclear(args); > + args.fd = -1; > + args.handle = handle; > + args.flags = DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE; > + ret = drmIoctl(fd, DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, &args); > + if (ret) > + return ret; > + *sync_file_fd = args.fd; > + return 0; > +} > diff --git a/xf86drm.h b/xf86drm.h > index 74f54f1..2855a3e 100644 > --- a/xf86drm.h > +++ b/xf86drm.h > @@ -853,6 +853,14 @@ extern int drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_device > > extern int drmDevicesEqual(drmDevicePtr a, drmDevicePtr b); > > +extern int drmSyncobjCreate(int fd, uint32_t flags, uint32_t *handle); > +extern int drmSyncobjDestroy(int fd, uint32_t handle); > +extern int drmSyncobjHandleToFD(int fd, uint32_t handle, int *obj_fd); > +extern int drmSyncobjFDToHandle(int fd, int obj_fd, uint32_t *handle); > + > +extern int drmSyncobjImportSyncFile(int fd, uint32_t handle, int sync_file_fd); > +extern int drmSyncobjExportSyncFile(int fd, uint32_t handle, int *sync_file_fd); > + > #if defined(__cplusplus) > } > #endif > -- > 2.9.4 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel