What's the difference between HandleToFD and ExportSyncFile?
Thanks, Marek
On Sat, Jun 17, 2017 at 3:06 AM, Dave Airlie airlied@gmail.com wrote:
From: Dave Airlie airlied@redhat.com
These ioctls are now in drm next so add the first set of libdrm APIs.
Signed-off-by: Dave Airlie airlied@redhat.com
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@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel