asahi: Add APIs for DMA-BUF sync file import/export
authorAsahi Lina <lina@asahilina.net>
Wed, 1 Mar 2023 09:04:12 +0000 (18:04 +0900)
committerMarge Bot <emma+marge@anholt.net>
Fri, 3 Mar 2023 00:28:48 +0000 (00:28 +0000)
These are generic ioctls, so it is safe to add them now.

Signed-off-by: Asahi Lina <lina@asahilina.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21662>

src/asahi/lib/agx_device.c
src/asahi/lib/agx_device.h

index bffdcb4..13cec9b 100644 (file)
@@ -338,3 +338,39 @@ agx_submit_single(struct agx_device *dev, enum drm_asahi_cmd_type cmd_type,
 {
    unreachable("Linux UAPI not yet upstream");
 }
+
+int
+agx_import_sync_file(struct agx_device *dev, struct agx_bo *bo, int fd)
+{
+   struct dma_buf_import_sync_file import_sync_file_ioctl = {
+      .flags = DMA_BUF_SYNC_WRITE,
+      .fd = fd,
+   };
+
+   assert(fd >= 0);
+   assert(bo->prime_fd != -1);
+
+   int ret = drmIoctl(bo->prime_fd, DMA_BUF_IOCTL_IMPORT_SYNC_FILE,
+                      &import_sync_file_ioctl);
+   assert(ret >= 0);
+
+   return ret;
+}
+
+int
+agx_export_sync_file(struct agx_device *dev, struct agx_bo *bo)
+{
+   struct dma_buf_export_sync_file export_sync_file_ioctl = {
+      .flags = DMA_BUF_SYNC_RW,
+      .fd = -1,
+   };
+
+   assert(bo->prime_fd != -1);
+
+   int ret = drmIoctl(bo->prime_fd, DMA_BUF_IOCTL_EXPORT_SYNC_FILE,
+                      &export_sync_file_ioctl);
+   assert(ret >= 0);
+   assert(export_sync_file_ioctl.fd >= 0);
+
+   return ret >= 0 ? export_sync_file_ioctl.fd : ret;
+}
index 1722a07..0ed041f 100644 (file)
@@ -140,4 +140,7 @@ int agx_submit_single(struct agx_device *dev, enum drm_asahi_cmd_type cmd_type,
                       uint32_t result_handle, uint32_t result_off,
                       uint32_t result_size);
 
+int agx_import_sync_file(struct agx_device *dev, struct agx_bo *bo, int fd);
+int agx_export_sync_file(struct agx_device *dev, struct agx_bo *bo);
+
 #endif