From d2621ef81d9b4f833e75ff9aee8901eec07ce7f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Tue, 14 Feb 2023 09:16:31 -0800 Subject: [PATCH] iris: Implement gem_mmap() in Xe kmd backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: José Roberto de Souza Reviewed-by: Lionel Landwerlin Part-of: --- src/gallium/drivers/iris/xe/iris_kmd_backend.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/gallium/drivers/iris/xe/iris_kmd_backend.c b/src/gallium/drivers/iris/xe/iris_kmd_backend.c index 67e67ca78e1..06ef0b0ee8b 100644 --- a/src/gallium/drivers/iris/xe/iris_kmd_backend.c +++ b/src/gallium/drivers/iris/xe/iris_kmd_backend.c @@ -22,6 +22,8 @@ */ #include "iris_kmd_backend.h" +#include + #include "common/intel_gem.h" #include "iris/iris_bufmgr.h" @@ -51,10 +53,25 @@ xe_gem_create(struct iris_bufmgr *bufmgr, return gem_create.handle; } +static void * +xe_gem_mmap(struct iris_bufmgr *bufmgr, struct iris_bo *bo) +{ + struct drm_xe_gem_mmap_offset args = { + .handle = bo->gem_handle, + }; + if (intel_ioctl(iris_bufmgr_get_fd(bufmgr), DRM_IOCTL_XE_GEM_MMAP_OFFSET, &args)) + return NULL; + + void *map = mmap(NULL, bo->size, PROT_READ | PROT_WRITE, MAP_SHARED, + iris_bufmgr_get_fd(bufmgr), args.offset); + return map != MAP_FAILED ? map : NULL; +} + const struct iris_kmd_backend *xe_get_backend(void) { static const struct iris_kmd_backend xe_backend = { .gem_create = xe_gem_create, + .gem_mmap = xe_gem_mmap, }; return &xe_backend; }