From 9fc01df9bf5596f4bd2d4223b7549e28729d01d1 Mon Sep 17 00:00:00 2001 From: Neil Armstrong Date: Tue, 14 Feb 2017 11:05:38 +0000 Subject: [PATCH 3/3] Use DRM dumb ioctl Upstream-Status: Backport Signed-off-by: Armin Kuster --- src/drmmode_meson/drmmode_meson.c | 109 +++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 54 deletions(-) diff --git a/src/drmmode_meson/drmmode_meson.c b/src/drmmode_meson/drmmode_meson.c index 9fcc8ad..a286cfe 100644 --- a/src/drmmode_meson/drmmode_meson.c +++ b/src/drmmode_meson/drmmode_meson.c @@ -1,51 +1,45 @@ /* - * Copyright © 2013 ARM Limited. + * Copyright © 2013 ARM Limited. + * Copyright © 2016 Linaro Limited. + * Copyright © 2017 BayLibre SAS. * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the + * Permission is hereby granted, free of charge, to any person +obtaining a + * copy of this software and associated documentation files (the +"Software"), + * to deal in the Software without restriction, including without +limitation + * the rights to use, copy, modify, merge, publish, distribute, +sublicense, + * and/or sell copies of the Software, and to permit persons to whom +the * Software is furnished to do so, subject to the following conditions: * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the + * The above copyright notice and this permission notice (including the +next + * paragraph) shall be included in all copies or substantial portions +of the * Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE * SOFTWARE. * */ #include - #include "../drmmode_driver.h" -#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) - -#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask)) -#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) -#define ALIGN(x, a) __ALIGN_KERNEL((x), (a)) - -/* This should be included from uapi headers once the driver is - * mainlined - */ -struct drm_meson_gem_create { - uint64_t size; - uint32_t flags; - uint32_t handle; -}; - -#define DRM_MESON_GEM_CREATE 0x00 - -#define DRM_IOCTL_MESON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_MESON_GEM_CREATE, \ - struct drm_meson_gem_create) - /* Cursor dimensions * Technically we probably don't have any size limit.. since we * are just using an overlay... but xserver will always create @@ -59,11 +53,14 @@ struct drm_meson_gem_create { /* Padding added down each side of cursor image */ #define CURSORPAD (0) +#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) +#define ALIGN(val, align) (((val) + (align) - 1) & ~((align) - 1)) + static int create_custom_gem(int fd, struct armsoc_create_gem *create_gem) { - struct drm_meson_gem_create create_meson; - int ret; + struct drm_mode_create_dumb arg; unsigned int pitch; + int ret; assert((create_gem->buf_type == ARMSOC_BO_SCANOUT) || (create_gem->buf_type == ARMSOC_BO_NON_SCANOUT)); @@ -72,30 +69,34 @@ static int create_custom_gem(int fd, struct armsoc_create_gem *create_gem) pitch = DIV_ROUND_UP(create_gem->width * create_gem->bpp, 8); pitch = ALIGN(pitch, 64); - memset(&create_meson, 0, sizeof(create_meson)); - create_meson.size = create_gem->height * pitch; + memset(&arg, 0, sizeof(arg)); + arg.width = create_gem->width; + arg.height = create_gem->height; + arg.bpp = create_gem->bpp; + arg.pitch = pitch; + arg.size = pitch * create_gem->height; - ret = drmIoctl(fd, DRM_IOCTL_MESON_GEM_CREATE, &create_meson); + ret = drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &arg); if (ret) return ret; - /* Convert custom create_meson to generic create_gem */ - create_gem->handle = create_meson.handle; - create_gem->pitch = pitch; - create_gem->size = create_meson.size; + create_gem->handle = arg.handle; + create_gem->pitch = arg.pitch; + create_gem->size = arg.size; return 0; } struct drmmode_interface meson_interface = { - "meson" /* name of drm driver*/, - 1 /* use_page_flip_events */, - 1 /* use_early_display */, - CURSORW /* cursor width */, - CURSORH /* cursor_height */, - CURSORPAD /* cursor padding */, - HWCURSOR_API_PLANE /* cursor_api */, - NULL /* init_plane_for_cursor */, - 0 /* vblank_query_supported */, - create_custom_gem /* create_custom_gem */, + "meson" /* name of drm driver */, + 1 /* use_page_flip_events */, + 1 /* use_early_display */, + CURSORW /* cursor width */, + CURSORH /* cursor_height */, + CURSORPAD /* cursor padding */, + HWCURSOR_API_NONE /* software cursor */, + NULL /* no plane for cursor */, + 0 /* vblank_query_supported */, + create_custom_gem /* create_custom_gem */, }; + -- 2.7.4