+static inline void *
+gbm_dri_bo_map_dumb(struct gbm_dri_bo *bo)
+{
+ struct drm_mode_map_dumb map_arg;
+ int ret;
+
+ if (bo->image != NULL)
+ return NULL;
+
+ if (bo->map != NULL)
+ return bo->map;
+
+ memset(&map_arg, 0, sizeof(map_arg));
+ map_arg.handle = bo->handle;
+
+ ret = drmIoctl(bo->base.gbm->fd, DRM_IOCTL_MODE_MAP_DUMB, &map_arg);
+ if (ret)
+ return NULL;
+
+ bo->map = mmap(0, bo->size, PROT_WRITE,
+ MAP_SHARED, bo->base.gbm->fd, map_arg.offset);
+ if (bo->map == MAP_FAILED) {
+ bo->map = NULL;
+ return NULL;
+ }
+
+ return bo->map;
+}
+
+static inline void
+gbm_dri_bo_unmap_dumb(struct gbm_dri_bo *bo)
+{
+ munmap(bo->map, bo->size);
+ bo->map = NULL;
+}