From 8f70b58d5ff984b505958c19eeefb7a0b5b9b50f Mon Sep 17 00:00:00 2001 From: Maxime Ripard Date: Mon, 7 Dec 2015 09:47:34 +0100 Subject: [PATCH 009/153] drv:gpu:drm:sun4i: Add GEM allocator Signed-off-by: Maxime Ripard Signed-off-by: The-going <48602507+The-going@users.noreply.github.com> --- drivers/gpu/drm/sun4i/sun4i_drv.c | 27 +++++++++++++++++++++++++++ include/uapi/drm/sun4i_drm.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 include/uapi/drm/sun4i_drm.h diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c index cc94efbbf..af861d2db 100644 --- a/drivers/gpu/drm/sun4i/sun4i_drv.c +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c @@ -24,6 +24,8 @@ #include #include +#include + #include "sun4i_drv.h" #include "sun4i_frontend.h" #include "sun4i_framebuffer.h" @@ -42,6 +44,27 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *file_priv, DEFINE_DRM_GEM_DMA_FOPS(sun4i_drv_fops); +static int sun4i_gem_create_ioctl(struct drm_device *drm, void *data, + struct drm_file *file_priv) +{ + struct drm_sun4i_gem_create *args = data; + struct drm_gem_dma_object *dma_obj; + size_t size; + + /* The Mali requires a 64 bytes alignment */ + size = ALIGN(args->size, 64); + + dma_obj = drm_gem_dma_create_with_handle(file_priv, drm, size, + &args->handle); + + return PTR_ERR_OR_ZERO(dma_obj); +} + +static const struct drm_ioctl_desc sun4i_drv_ioctls[] = { + DRM_IOCTL_DEF_DRV(SUN4I_GEM_CREATE, sun4i_gem_create_ioctl, + DRM_UNLOCKED | DRM_AUTH), +}; + static const struct drm_driver sun4i_drv_driver = { .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC, @@ -53,6 +76,10 @@ static const struct drm_driver sun4i_drv_driver = { .major = 1, .minor = 0, + /* Custom ioctls */ + .ioctls = sun4i_drv_ioctls, + .num_ioctls = ARRAY_SIZE(sun4i_drv_ioctls), + /* GEM Operations */ DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE(drm_sun4i_gem_dumb_create), }; diff --git a/include/uapi/drm/sun4i_drm.h b/include/uapi/drm/sun4i_drm.h new file mode 100644 index 000000000..67b9dd4ee --- /dev/null +++ b/include/uapi/drm/sun4i_drm.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2015 Free Electrons + * Copyright (C) 2015 NextThing Co + * + * Maxime Ripard + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + */ + +#ifndef _UAPI_SUN4I_DRM_H_ +#define _UAPI_SUN4I_DRM_H_ + +#include + +struct drm_sun4i_gem_create { + __u64 size; + __u32 flags; + __u32 handle; +}; + +#define DRM_SUN4I_GEM_CREATE 0x00 + +#define DRM_IOCTL_SUN4I_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_SUN4I_GEM_CREATE, \ + struct drm_sun4i_gem_create) + +#endif -- 2.35.3