OSDN Git Service

expose timeline signal/export/import interfaces v2
authorChunming Zhou <david1.zhou@amd.com>
Thu, 16 May 2019 08:07:12 +0000 (16:07 +0800)
committerChristian König <christian.koenig@amd.com>
Thu, 16 May 2019 10:07:18 +0000 (12:07 +0200)
v2: adapt to new one transfer ioctl

Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Acked-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
amdgpu/amdgpu-symbol-check
amdgpu/amdgpu.h
amdgpu/amdgpu_cs.c

index d3c5bb8..274b4c6 100755 (executable)
@@ -52,10 +52,13 @@ amdgpu_cs_submit
 amdgpu_cs_submit_raw
 amdgpu_cs_submit_raw2
 amdgpu_cs_syncobj_export_sync_file
+amdgpu_cs_syncobj_export_sync_file2
 amdgpu_cs_syncobj_import_sync_file
+amdgpu_cs_syncobj_import_sync_file2
 amdgpu_cs_syncobj_query
 amdgpu_cs_syncobj_reset
 amdgpu_cs_syncobj_signal
+amdgpu_cs_syncobj_timeline_signal
 amdgpu_cs_syncobj_timeline_wait
 amdgpu_cs_syncobj_wait
 amdgpu_cs_wait_fences
index 5ebfe1e..d2480db 100644 (file)
@@ -1517,6 +1517,23 @@ int amdgpu_cs_syncobj_signal(amdgpu_device_handle dev,
                             const uint32_t *syncobjs, uint32_t syncobj_count);
 
 /**
+ * Signal kernel timeline sync objects.
+ *
+ * \param dev           - \c [in] device handle
+ * \param syncobjs      - \c [in] array of sync object handles
+ * \param points       - \c [in] array of timeline points
+ * \param syncobj_count - \c [in] number of handles in syncobjs
+ *
+ * \return   0 on success\n
+ *          <0 - Negative POSIX Error code
+ *
+*/
+int amdgpu_cs_syncobj_timeline_signal(amdgpu_device_handle dev,
+                                     const uint32_t *syncobjs,
+                                     uint64_t *points,
+                                     uint32_t syncobj_count);
+
+/**
  *  Wait for one or all sync objects to signal.
  *
  * \param   dev            - \c [in] self-explanatory
@@ -1633,8 +1650,42 @@ int amdgpu_cs_syncobj_export_sync_file(amdgpu_device_handle dev,
 int amdgpu_cs_syncobj_import_sync_file(amdgpu_device_handle dev,
                                       uint32_t syncobj,
                                       int sync_file_fd);
+/**
+ *  Export kernel timeline sync object to a sync_file.
+ *
+ * \param   dev                - \c [in] device handle
+ * \param   syncobj    - \c [in] sync object handle
+ * \param   point      - \c [in] timeline point
+ * \param   flags      - \c [in] flags
+ * \param   sync_file_fd - \c [out] sync_file file descriptor.
+ *
+ * \return   0 on success\n
+ *          <0 - Negative POSIX Error code
+ *
+ */
+int amdgpu_cs_syncobj_export_sync_file2(amdgpu_device_handle dev,
+                                       uint32_t syncobj,
+                                       uint64_t point,
+                                       uint32_t flags,
+                                       int *sync_file_fd);
 
 /**
+ *  Import kernel timeline sync object from a sync_file.
+ *
+ * \param   dev                - \c [in] device handle
+ * \param   syncobj    - \c [in] sync object handle
+ * \param   point      - \c [in] timeline point
+ * \param   sync_file_fd - \c [in] sync_file file descriptor.
+ *
+ * \return   0 on success\n
+ *          <0 - Negative POSIX Error code
+ *
+ */
+int amdgpu_cs_syncobj_import_sync_file2(amdgpu_device_handle dev,
+                                       uint32_t syncobj,
+                                       uint64_t point,
+                                       int sync_file_fd);
+/**
  * Export an amdgpu fence as a handle (syncobj or fd).
  *
  * \param what         AMDGPU_FENCE_TO_HANDLE_GET_{SYNCOBJ, FD}
index 9fcaf2c..daca442 100644 (file)
@@ -674,6 +674,18 @@ drm_public int amdgpu_cs_syncobj_signal(amdgpu_device_handle dev,
        return drmSyncobjSignal(dev->fd, syncobjs, syncobj_count);
 }
 
+drm_public int amdgpu_cs_syncobj_timeline_signal(amdgpu_device_handle dev,
+                                                const uint32_t *syncobjs,
+                                                uint64_t *points,
+                                                uint32_t syncobj_count)
+{
+       if (NULL == dev)
+               return -EINVAL;
+
+       return drmSyncobjTimelineSignal(dev->fd, syncobjs,
+                                       points, syncobj_count);
+}
+
 drm_public int amdgpu_cs_syncobj_wait(amdgpu_device_handle dev,
                                      uint32_t *handles, unsigned num_handles,
                                      int64_t timeout_nsec, unsigned flags,
@@ -749,6 +761,62 @@ drm_public int amdgpu_cs_syncobj_import_sync_file(amdgpu_device_handle dev,
        return drmSyncobjImportSyncFile(dev->fd, syncobj, sync_file_fd);
 }
 
+drm_public int amdgpu_cs_syncobj_export_sync_file2(amdgpu_device_handle dev,
+                                                  uint32_t syncobj,
+                                                  uint64_t point,
+                                                  uint32_t flags,
+                                                  int *sync_file_fd)
+{
+       uint32_t binary_handle;
+       int ret;
+
+       if (NULL == dev)
+               return -EINVAL;
+
+       if (!point)
+               return drmSyncobjExportSyncFile(dev->fd, syncobj, sync_file_fd);
+
+       ret = drmSyncobjCreate(dev->fd, 0, &binary_handle);
+       if (ret)
+               return ret;
+
+       ret = drmSyncobjTransfer(dev->fd, binary_handle, 0,
+                                syncobj, point, flags);
+       if (ret)
+               goto out;
+       ret = drmSyncobjExportSyncFile(dev->fd, binary_handle, sync_file_fd);
+out:
+       drmSyncobjDestroy(dev->fd, binary_handle);
+       return ret;
+}
+
+drm_public int amdgpu_cs_syncobj_import_sync_file2(amdgpu_device_handle dev,
+                                                  uint32_t syncobj,
+                                                  uint64_t point,
+                                                  int sync_file_fd)
+{
+       uint32_t binary_handle;
+       int ret;
+
+       if (NULL == dev)
+               return -EINVAL;
+
+       if (!point)
+               return drmSyncobjImportSyncFile(dev->fd, syncobj, sync_file_fd);
+
+       ret = drmSyncobjCreate(dev->fd, 0, &binary_handle);
+       if (ret)
+               return ret;
+       ret = drmSyncobjImportSyncFile(dev->fd, binary_handle, sync_file_fd);
+       if (ret)
+               goto out;
+       ret = drmSyncobjTransfer(dev->fd, syncobj, point,
+                                binary_handle, 0, 0);
+out:
+       drmSyncobjDestroy(dev->fd, binary_handle);
+       return ret;
+}
+
 drm_public int amdgpu_cs_submit_raw(amdgpu_device_handle dev,
                                    amdgpu_context_handle context,
                                    amdgpu_bo_list_handle bo_list_handle,