+CC Rob clark
I sent these patches about a month ago, but could not get any response. Can you review these patches? You can find the whole patch set from
https://patchwork.kernel.org/patch/5478981/ https://patchwork.kernel.org/patch/5478991/
On Fri, 12 Dec 2014 14:44:39 +0900 Hyungwon Hwang human.hwang@samsung.com wrote:
The ioctl DRM_EXYNOS_GEM_MAP_OFFSET and DRM_EXYNOS_GEM_MMAP are removed from the linux kernel. This patch modifies libdrm and libkms to use drm generic ioctls instead of the removed ioctls.
Signed-off-by: Hyungwon Hwang human.hwang@samsung.com Signed-off-by: Inki Dae inki.dae@samsung.com
exynos/exynos_drm.c | 24 +++++++++++++----------- libkms/exynos.c | 7 ++++--- 2 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/exynos/exynos_drm.c b/exynos/exynos_drm.c index 4c7dd13..4cb6a6d 100644 --- a/exynos/exynos_drm.c +++ b/exynos/exynos_drm.c @@ -283,20 +283,22 @@ drm_public void *exynos_bo_map(struct exynos_bo *bo) { if (!bo->vaddr) { struct exynos_device *dev = bo->dev;
struct drm_exynos_gem_mmap req = {
.handle = bo->handle,
.size = bo->size,
};
struct drm_mode_map_dumb arg;
int ret;void *map = NULL;
ret = drmIoctl(dev->fd, DRM_IOCTL_EXYNOS_GEM_MMAP,
&req);
if (ret) {
fprintf(stderr, "failed to mmap[%s].\n",
strerror(errno));
return NULL;
}
memset(&arg, 0, sizeof(arg));
arg.handle = bo->handle;
ret = drmIoctl(dev->fd, DRM_IOCTL_MODE_MAP_DUMB,
&arg);
if (ret)
return ret;
bo->vaddr = (void *)(uintptr_t)req.mapped;
map = drm_mmap(0, bo->size, PROT_READ | PROT_WRITE,
MAP_SHARED,
dev->fd, arg.offset);
if (map == MAP_FAILED)
return NULL;
}
return bo->vaddr;
diff --git a/libkms/exynos.c b/libkms/exynos.c index 92e329c..1123482 100644 --- a/libkms/exynos.c +++ b/libkms/exynos.c @@ -25,6 +25,7 @@ #include <sys/ioctl.h> #include "xf86drm.h"
+#include "libdrm.h" #include "exynos_drm.h"
struct exynos_bo @@ -124,7 +125,7 @@ static int exynos_bo_map(struct kms_bo *_bo, void **out) { struct exynos_bo *bo = (struct exynos_bo *)_bo;
- struct drm_exynos_gem_map_off arg;
- struct drm_mode_map_dumb arg; void *map = NULL; int ret;
@@ -137,11 +138,11 @@ exynos_bo_map(struct kms_bo *_bo, void **out) memset(&arg, 0, sizeof(arg)); arg.handle = bo->base.handle;
- ret = drmCommandWriteRead(bo->base.kms->fd,
DRM_EXYNOS_GEM_MAP_OFFSET, &arg, sizeof(arg));
- ret = drmIoctl(bo->base.kms->fd, DRM_IOCTL_MODE_MAP_DUMB,
&arg); if (ret) return ret;
- map = mmap(0, bo->base.size, PROT_READ | PROT_WRITE,
MAP_SHARED, bo->base.kms->fd, arg.offset);
- map = drm_mmap(0, bo->base.size, PROT_READ | PROT_WRITE,
MAP_SHARED, bo->base.kms->fd, arg.offset); if (map == MAP_FAILED) return -errno;
Best regards, Hyungwon Hwang