From 240e9dc5dc502bab84870ce30d8af1ac99d71921 Mon Sep 17 00:00:00 2001 From: Asahi Lina Date: Wed, 1 Mar 2023 18:04:12 +0900 Subject: [PATCH] asahi: Add APIs for DMA-BUF sync file import/export These are generic ioctls, so it is safe to add them now. Signed-off-by: Asahi Lina Part-of: --- src/asahi/lib/agx_device.c | 36 ++++++++++++++++++++++++++++++++++++ src/asahi/lib/agx_device.h | 3 +++ 2 files changed, 39 insertions(+) diff --git a/src/asahi/lib/agx_device.c b/src/asahi/lib/agx_device.c index bffdcb4..13cec9b 100644 --- a/src/asahi/lib/agx_device.c +++ b/src/asahi/lib/agx_device.c @@ -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; +} diff --git a/src/asahi/lib/agx_device.h b/src/asahi/lib/agx_device.h index 1722a07..0ed041f 100644 --- a/src/asahi/lib/agx_device.h +++ b/src/asahi/lib/agx_device.h @@ -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 -- 2.7.4