diff options
author | marxu01 <marico.xu@arm.com> | 2016-08-25 15:38:59 +0800 |
---|---|---|
committer | marxu01 <marico.xu@arm.com> | 2016-08-25 15:39:14 +0800 |
commit | 0531edefc34d06d3b8c773ed27f1ecc5edae6cac (patch) | |
tree | 2ad426a6e2bd646a4980d1c86d8cf450f3e5c0b8 | |
parent | 36709c64a70a2891f7aa027c689740125ae7dc54 (diff) | |
parent | 2d2e996ac9f995263144b0efe24689b55082a265 (diff) |
Merge remote-tracking branch 'mpd-gerrit/master'
Change-Id: I3458180d5069a899be4ba09a88f00a47869450b9
-rw-r--r-- | README | 1 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/Makefile.am | 3 | ||||
-rw-r--r-- | src/armsoc_driver.c | 1 | ||||
-rw-r--r-- | src/drmmode_driver.h | 1 | ||||
-rw-r--r-- | src/drmmode_sti/drmmode_sti.c | 99 |
6 files changed, 105 insertions, 2 deletions
@@ -12,6 +12,7 @@ The currently supported DRM drivers are: - pl111 - exynos - kirin +- sti For other drivers, you will need to implement this support yourself. A template implementation is provided in src/drmmode_template. diff --git a/configure.ac b/configure.ac index b5f70d5..a508664 100644 --- a/configure.ac +++ b/configure.ac @@ -32,7 +32,7 @@ AC_CONFIG_HEADERS([config.h]) AC_CONFIG_AUX_DIR(.) AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE([dist-bzip2]) +AM_INIT_AUTOMAKE([dist-bzip2 foreign]) AM_MAINTAINER_MODE diff --git a/src/Makefile.am b/src/Makefile.am index 07cd626..3b26019 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -42,7 +42,8 @@ armsoc_drv_la_LIBADD = @XORG_LIBS@ armsoc_drv_ladir = @moduledir@/drivers DRMMODE_SRCS = drmmode_exynos/drmmode_exynos.c \ drmmode_pl111/drmmode_pl111.c \ - drmmode_kirin/drmmode_kirin.c + drmmode_kirin/drmmode_kirin.c \ + drmmode_sti/drmmode_sti.c armsoc_drv_la_SOURCES = \ diff --git a/src/armsoc_driver.c b/src/armsoc_driver.c index 0bf2b21..83e74a7 100644 --- a/src/armsoc_driver.c +++ b/src/armsoc_driver.c @@ -736,6 +736,7 @@ static struct drmmode_interface *get_drmmode_implementation(int drm_fd) &exynos_interface, &pl111_interface, &kirin_interface, + &sti_interface, }; int i; diff --git a/src/drmmode_driver.h b/src/drmmode_driver.h index edc87c7..879fc60 100644 --- a/src/drmmode_driver.h +++ b/src/drmmode_driver.h @@ -105,6 +105,7 @@ struct drmmode_interface { extern struct drmmode_interface exynos_interface; extern struct drmmode_interface pl111_interface; extern struct drmmode_interface kirin_interface; +extern struct drmmode_interface sti_interface; #endif diff --git a/src/drmmode_sti/drmmode_sti.c b/src/drmmode_sti/drmmode_sti.c new file mode 100644 index 0000000..5cc7c01 --- /dev/null +++ b/src/drmmode_sti/drmmode_sti.c @@ -0,0 +1,99 @@ +/* + * Copyright © 2013 ARM Limited. + * + * 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 + * 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 + * SOFTWARE. + * + */ + +#include "../drmmode_driver.h" +#include <stddef.h> +#include <xf86drmMode.h> +#include <xf86drm.h> +#include <sys/ioctl.h> + +/* Cursor dimensions + * Technically we probably don't have any size limit.. since we + * are just using an overlay... but xserver will always create + * cursor images in the max size, so don't use width/height values + * that are too big + */ +#define CURSORW (64) +#define CURSORH (64) + +/* + * Padding added down each side of cursor image. This is a workaround +for a bug + * causing corruption when the cursor reaches the screen edges. + */ +#define CURSORPAD (16) + +/* Optional function */ +static int init_plane_for_cursor(int drm_fd, uint32_t plane_id) { + return 0; +} + +static int create_custom_gem(int fd, struct armsoc_create_gem +*create_gem) { + struct drm_mode_create_dumb create_arg; + int ret; + + memset (&create_arg, 0, sizeof (create_arg)); + create_arg.bpp = create_gem->bpp; + create_arg.width = create_gem->width; + create_arg.height = create_gem->height; + + ret = ioctl (fd, DRM_IOCTL_MODE_CREATE_DUMB, &create_arg); + if (ret) + return ret; + + /* Convert custom create_exynos to generic create_gem */ + create_gem->handle = create_arg.handle; + create_gem->pitch = create_arg.pitch; + create_gem->size = create_gem->height * create_arg.pitch; + + return 0; +} + +struct drmmode_interface sti_interface = { + "sti" /* name of drm driver */, + 1 /* use_page_flip_events */, + 1 /* use_early_display */, + CURSORW /* cursor width */, + CURSORH /* cursor_height */, + CURSORPAD /* cursor padding */, + HWCURSOR_API_STANDARD /* cursor_api */, + init_plane_for_cursor /* init_plane_for_cursor */, + 0 /* vblank_query_supported */, + create_custom_gem /* create_custom_gem */, +}; + |