OSDN Git Service

minigbm: amdgpu: Add mmap implementation for amdgpu
authorPratik Vishwakarma <Pratik.Vishwakarma@amd.com>
Mon, 12 Dec 2016 08:52:10 +0000 (14:22 +0530)
committerchrome-bot <chrome-bot@chromium.org>
Wed, 11 Jan 2017 12:07:16 +0000 (04:07 -0800)
BUG=chrome-os-partner:61504
TEST=graphics_Gbm

Change-Id: I4ad23fa5b55a249e75ec44fe499c499052f687e0
Reviewed-on: https://chromium-review.googlesource.com/418425
Commit-Ready: Pratik Vishwakarma <Pratik.Vishwakarma@amd.com>
Tested-by: Pratik Vishwakarma <Pratik.Vishwakarma@amd.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
amdgpu.c

index 5338713..b796670 100644 (file)
--- a/amdgpu.c
+++ b/amdgpu.c
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/mman.h>
 #include <xf86drm.h>
 #include <amdgpu_drm.h>
 #include <amdgpu.h>
@@ -352,12 +353,32 @@ static int amdgpu_bo_create(struct bo *bo, uint32_t width, uint32_t height,
        return ret;
 }
 
+static void *amdgpu_bo_map(struct bo *bo, struct map_info *data, size_t plane)
+{
+       int ret;
+       union drm_amdgpu_gem_mmap gem_map;
+
+       memset(&gem_map, 0, sizeof(gem_map));
+       gem_map.in.handle = bo->handles[0].u32;
+
+       ret = drmIoctl(bo->drv->fd, DRM_IOCTL_AMDGPU_GEM_MMAP, &gem_map);
+       if (ret) {
+               fprintf(stderr, "drv: DRM_IOCTL_AMDGPU_GEM_MMAP failed\n");
+               return MAP_FAILED;
+       }
+       data->length = bo->sizes[0];
+
+       return mmap(0, bo->sizes[0], PROT_READ | PROT_WRITE, MAP_SHARED,
+                   bo->drv->fd, gem_map.out.addr_ptr);
+}
+
 struct backend backend_amdgpu = {
        .name = "amdgpu",
        .init = amdgpu_init,
        .close = amdgpu_close,
        .bo_create = amdgpu_bo_create,
        .bo_destroy = drv_gem_bo_destroy,
+       .bo_map = amdgpu_bo_map,
 };
 
 #endif