[openchrome-devel] drm-openchrome: Branch 'drm-next-5.9' - 4 commits - drivers/gpu/drm include/uapi/drm

Kevin Brace kevinbrace at kemper.freedesktop.org
Tue Aug 11 02:16:57 UTC 2020


 drivers/gpu/drm/openchrome/Makefile           |    2 
 drivers/gpu/drm/openchrome/openchrome_drv.c   |    6 
 drivers/gpu/drm/openchrome/openchrome_drv.h   |   10 -
 drivers/gpu/drm/openchrome/openchrome_ioc32.c |  226 --------------------------
 drivers/gpu/drm/openchrome/openchrome_ioctl.c |  111 ++++++++++++
 include/uapi/drm/openchrome_drm.h             |   69 +++++++
 include/uapi/drm/via_drm.h                    |  116 ++-----------
 7 files changed, 209 insertions(+), 331 deletions(-)

New commits:
commit 33ce41f27b78bdfa3ffe53f8507aabc95c4262a2
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Aug 10 19:14:56 2020 -0700

    drm/openchrome: Version bumped to 3.2.0
    
    Starting with OpenChrome DRM Version 3.2.0, OpenChrome graphics stack
    components will need to use OpenChrome DRM uAPI.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h
index 2e95e9c65e63..d16d392a5dca 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -60,8 +60,8 @@
 
 
 #define DRIVER_MAJOR		3
-#define DRIVER_MINOR		1
-#define DRIVER_PATCHLEVEL	30
+#define DRIVER_MINOR		2
+#define DRIVER_PATCHLEVEL	0
 #define DRIVER_NAME		"openchrome"
 #define DRIVER_DESC		"OpenChrome DRM for VIA Technologies Chrome IGP"
 #define DRIVER_DATE		"20200810"
commit 856fcebf7018aa37ae4ff805d3454964a6245962
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Aug 10 19:11:34 2020 -0700

    drm/openchrome: Restore the original VIA DRM uAPI header file
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/include/uapi/drm/via_drm.h b/include/uapi/drm/via_drm.h
index b85b2ffa71d4..a1e125d42208 100644
--- a/include/uapi/drm/via_drm.h
+++ b/include/uapi/drm/via_drm.h
@@ -16,7 +16,7 @@
  * 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 NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHOR(S) OR COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS 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.
@@ -26,6 +26,10 @@
 
 #include "drm.h"
 
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
 /* WARNING: These defines must be the same as what the Xserver uses.
  * if you change them, you must change the defines in the Xserver.
  */
@@ -33,10 +37,11 @@
 #ifndef _VIA_DEFINES_
 #define _VIA_DEFINES_
 
+
 #define VIA_NR_SAREA_CLIPRECTS		8
-#define VIA_NR_XVMC_PORTS		10
-#define VIA_NR_XVMC_LOCKS		5
-#define VIA_MAX_CACHELINE_SIZE		64
+#define VIA_NR_XVMC_PORTS               10
+#define VIA_NR_XVMC_LOCKS               5
+#define VIA_MAX_CACHELINE_SIZE          64
 #define XVMCLOCKPTR(saPriv,lockNo)					\
 	((volatile struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
 				      (VIA_MAX_CACHELINE_SIZE - 1)) &	\
@@ -60,28 +65,21 @@
 
 /* VIA specific ioctls */
 #define DRM_VIA_ALLOCMEM	0x00
-#define DRM_VIA_FREEMEM		0x01
+#define DRM_VIA_FREEMEM	        0x01
 #define DRM_VIA_AGP_INIT	0x02
-#define DRM_VIA_FB_INIT		0x03
+#define DRM_VIA_FB_INIT	        0x03
 #define DRM_VIA_MAP_INIT	0x04
-#define DRM_VIA_DEC_FUTEX	0x05
-#define DRM_VIA_OLD_GEM_CREATE	0x06
+#define DRM_VIA_DEC_FUTEX       0x05
+#define NOT_USED
 #define DRM_VIA_DMA_INIT	0x07
 #define DRM_VIA_CMDBUFFER	0x08
-#define DRM_VIA_FLUSH		0x09
-#define DRM_VIA_PCICMD		0x0a
+#define DRM_VIA_FLUSH	        0x09
+#define DRM_VIA_PCICMD	        0x0a
 #define DRM_VIA_CMDBUF_SIZE	0x0b
 #define NOT_USED
-#define DRM_VIA_WAIT_IRQ	0x0d
-#define DRM_VIA_DMA_BLIT	0x0e
-#define DRM_VIA_BLIT_SYNC	0x0f
-
-/* KMS ioctls */
-#define DRM_VIA_GETPARAM	0x10
-#define DRM_VIA_SETPARAM	0x11
-#define DRM_VIA_GEM_CREATE	0x12
-#define DRM_VIA_GEM_WAIT	0x13
-#define DRM_VIA_GEM_STATE	0x14
+#define DRM_VIA_WAIT_IRQ        0x0d
+#define DRM_VIA_DMA_BLIT        0x0e
+#define DRM_VIA_BLIT_SYNC       0x0f
 
 #define DRM_IOCTL_VIA_ALLOCMEM	  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_ALLOCMEM, drm_via_mem_t)
 #define DRM_IOCTL_VIA_FREEMEM	  DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_FREEMEM, drm_via_mem_t)
@@ -89,7 +87,6 @@
 #define DRM_IOCTL_VIA_FB_INIT	  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_FB_INIT, drm_via_fb_t)
 #define DRM_IOCTL_VIA_MAP_INIT	  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_MAP_INIT, drm_via_init_t)
 #define DRM_IOCTL_VIA_DEC_FUTEX   DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_DEC_FUTEX, drm_via_futex_t)
-#define DRM_IOCTL_VIA_OLD_GEM_CREATE  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_OLD_GEM_CREATE, struct drm_via_gem_object)
 #define DRM_IOCTL_VIA_DMA_INIT	  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_DMA_INIT, drm_via_dma_init_t)
 #define DRM_IOCTL_VIA_CMDBUFFER	  DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_CMDBUFFER, drm_via_cmdbuffer_t)
 #define DRM_IOCTL_VIA_FLUSH	  DRM_IO(  DRM_COMMAND_BASE + DRM_VIA_FLUSH)
@@ -100,13 +97,6 @@
 #define DRM_IOCTL_VIA_DMA_BLIT    DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_DMA_BLIT, drm_via_dmablit_t)
 #define DRM_IOCTL_VIA_BLIT_SYNC   DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_BLIT_SYNC, drm_via_blitsync_t)
 
-/* KMS ioctls */
-#define DRM_IOCTL_VIA_GETPARAM    DRM_IOR(DRM_COMMAND_BASE + DRM_VIA_GETPARAM, struct drm_via_param)
-#define DRM_IOCTL_VIA_SETPARAM    DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_SETPARAM, struct drm_via_param)
-#define DRM_IOCTL_VIA_GEM_CREATE  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_GEM_CREATE, struct drm_via_gem_object)
-#define DRM_IOCTL_VIA_GEM_WAIT    DRM_IOW(DRM_COMMAND_BASE + DRM_VIA_GEM_WAIT, struct drm_via_gem_wait)
-#define DRM_IOCTL_VIA_GEM_STATE   DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_GEM_STATE, struct drm_via_gem_object)
-
 /* Indices into buf.Setup where various bits of state are mirrored per
  * context and per buffer.  These can be fired at the card as a unit,
  * or in a piecewise fashion as required.
@@ -120,7 +110,6 @@
 #define VIA_BACK    0x2
 #define VIA_DEPTH   0x4
 #define VIA_STENCIL 0x8
-
 #define VIA_MEM_VIDEO   0	/* matches drm constant */
 #define VIA_MEM_AGP     1	/* matches drm constant */
 #define VIA_MEM_SYSTEM  2
@@ -286,71 +275,8 @@ typedef struct drm_via_dmablit {
 	drm_via_blitsync_t sync;
 } drm_via_dmablit_t;
 
-/* Ioctl to query kernel params:
- */
-#define VIA_PARAM_CHIPSET_ID		0
-#define VIA_PARAM_REVISION_ID		1
-
-struct drm_via_param {
-	uint64_t param;
-	uint64_t value;
-};
-
-struct drm_via_gem_object {
-	/**
-	 * Requested size for the object.
-	 *
-	 * The (page-aligned) allocated size for the object will be returned.
-	 */
-	uint64_t size;
-
-	/*
-	 * Place the memory at the proper byte alignment.
-	 */
-	uint32_t alignment;
-
-	/**
-	 * Format of data i.e tile pitch, for linear it is zero
-	 */
-	uint32_t pitch;
-
-	/**
-	 * Give hints where to allocate this object.
-	 */
-	uint32_t domains;
-
-	/**
-	 * chmod values applied to a buffer.
-	 */
-	uint32_t mode_t;
-
-	/**
-	 * Offset to start of memory region.
-	 */
-	uint64_t offset;
-
-	/**
-	 * Returned handle need to mmap the buffer.
-	 */
-	uint64_t map_handle;
-
-	/**
-	 * Returned handle for the object.
-	 *
-	 * Object handles are nonzero.
-	 */
-	uint32_t handle;
-
-	/**
-	 * Version to tell how to handle this data.
-	 */
-	uint32_t version;
-};
-
-struct drm_via_gem_wait {
-	/* the buffer object handle */
-	uint32_t handle;
-	uint32_t no_wait;
-};
+#if defined(__cplusplus)
+}
+#endif
 
 #endif				/* _VIA_DRM_H_ */
commit b117384e9df30a52aefdd8ab769891bd1586958c
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Aug 10 19:07:52 2020 -0700

    drm/openchrome: Switch to OpenChrome DRM uAPI
    
    Remove the stillborn KMS supporting VIA DRM uAPI, and replace it with
    OpenChrome DRM uAPI.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/Makefile b/drivers/gpu/drm/openchrome/Makefile
index b7fc2ff9dc8d..e26022adb6fc 100644
--- a/drivers/gpu/drm/openchrome/Makefile
+++ b/drivers/gpu/drm/openchrome/Makefile
@@ -17,7 +17,7 @@ openchrome-y := openchrome_analog.o \
 		openchrome_hdmi.o \
 		openchrome_i2c.o \
 		openchrome_init.o \
-		openchrome_ioc32.o \
+		openchrome_ioctl.o \
 		openchrome_object.o \
 		openchrome_pm.o \
 		openchrome_sii164.o \
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.c b/drivers/gpu/drm/openchrome/openchrome_drv.c
index 0485e3d1e229..bec5563ca74a 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.c
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.c
@@ -267,7 +267,7 @@ static struct drm_driver via_driver = {
 	.dumb_create = openchrome_drm_driver_dumb_create,
 	.dumb_map_offset =
 				openchrome_drm_driver_dumb_map_offset,
-	.ioctls = via_ioctls,
+	.ioctls = openchrome_ioctls,
 	.fops = &via_driver_fops,
 	.name = DRIVER_NAME,
 	.desc = DRIVER_DESC,
@@ -340,7 +340,7 @@ static int __init openchrome_init(void)
 
 	DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
-	via_driver.num_ioctls = via_max_ioctl;
+	via_driver.num_ioctls = openchrome_max_ioctl;
 
 	ret = pci_register_driver(&via_pci_driver);
 
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h
index 54645c458d3e..2e95e9c65e63 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -53,7 +53,7 @@
 #include <drm/ttm/ttm_bo_driver.h>
 #include <drm/ttm/ttm_placement.h>
 
-#include <drm/via_drm.h>
+#include <drm/openchrome_drm.h>
 
 #include "openchrome_crtc_hw.h"
 #include "openchrome_regs.h"
@@ -375,8 +375,8 @@ disable_second_display_channel(void __iomem *regs)
 }
 
 
-extern const struct drm_ioctl_desc via_ioctls[];
-extern int via_max_ioctl;
+extern const struct drm_ioctl_desc openchrome_ioctls[];
+extern int openchrome_max_ioctl;
 
 extern int via_hdmi_audio;
 
diff --git a/drivers/gpu/drm/openchrome/openchrome_ioc32.c b/drivers/gpu/drm/openchrome/openchrome_ioc32.c
deleted file mode 100644
index b10c72d37c21..000000000000
--- a/drivers/gpu/drm/openchrome/openchrome_ioc32.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright 2006 Tungsten Graphics Inc., Bismarck, ND., USA.
- * All rights reserved.
- *
- * 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, sub license,
- * 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 NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS 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.
- */
-/*
- * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com>
- */
-
-#include <drm/drm_ioctl.h>
-
-#include "openchrome_drv.h"
-
-
-static int
-via_getparam(struct drm_device *dev, void *data,
-		struct drm_file *filp)
-{
-	struct openchrome_drm_private *dev_private = dev->dev_private;
-	struct drm_via_param *args = data;
-	int ret = 0;
-
-	switch (args->param) {
-	case VIA_PARAM_CHIPSET_ID:
-		args->value = dev->pdev->device;
-		break;
-	case VIA_PARAM_REVISION_ID:
-		args->value = dev_private->revision;
-		break;
-	default:
-		ret = -EINVAL;
-		break;
-	}
-	return ret;
-}
-
-/* Not yet supported */
-static int
-via_setparam(struct drm_device *dev, void *data,
-		struct drm_file *filp)
-{
-	return -EINVAL;
-}
-
-static int
-via_gem_alloc(struct drm_device *dev, void *data,
-		struct drm_file *filp)
-{
-	struct drm_via_gem_object *args = data;
-	struct openchrome_drm_private *dev_private = dev->dev_private;
-	struct openchrome_bo *bo;
-	uint32_t handle;
-	int ret;
-
-	DRM_DEBUG_KMS("Entered %s.\n", __func__);
-
-	ret = openchrome_bo_create(dev,
-					&dev_private->bdev,
-					args->size,
-					ttm_bo_type_device,
-					args->domains,
-					false,
-					&bo);
-
-	if (ret) {
-		goto exit;
-	}
-
-	ret = drm_gem_handle_create(filp, &bo->gem,
-					&handle);
-
-	/* Drop reference from allocate; handle holds it now. */
-	drm_gem_object_put(&bo->gem);
-
-	if (ret) {
-		openchrome_bo_destroy(bo, false);
-		goto exit;
-	}
-
-	args->size		= bo->ttm_bo.mem.size;
-	args->domains		= bo->ttm_bo.mem.placement &
-						TTM_PL_MASK_MEM;
-	args->offset		= bo->ttm_bo.mem.start << PAGE_SHIFT;
-	args->map_handle	= drm_vma_node_offset_addr(
-						&bo->ttm_bo.base.vma_node);
-	args->handle		= handle;
-	args->version		= 1;
-
-exit:
-	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
-	return ret;
-}
-
-static int
-via_gem_state(struct drm_device *dev, void *data, struct drm_file *file_priv)
-{
-	struct ttm_operation_ctx ctx = {.interruptible = false,
-					.no_wait_gpu = false};
-	struct drm_gem_object *gem;
-	struct drm_via_gem_object *args = data;
-	struct openchrome_bo *bo;
-	int ret = -EINVAL;
-
-	DRM_DEBUG_KMS("Entered %s.\n", __func__);
-
-	gem = drm_gem_object_lookup(file_priv, args->handle);
-	if (!gem) {
-		goto exit;
-	}
-
-	bo = container_of(gem, struct openchrome_bo, gem);
-
-	/* Don't bother to migrate to same domain */
-	args->domains &= ~(bo->ttm_bo.mem.placement & TTM_PL_MASK_MEM);
-	if (args->domains) {
-		ret = ttm_bo_reserve(&bo->ttm_bo, true, false, NULL);
-		if (ret) {
-			goto exit;
-		}
-
-		openchrome_ttm_domain_to_placement(bo, args->domains);
-		ret = ttm_bo_validate(&bo->ttm_bo, &bo->placement,
-					&ctx);
-		ttm_bo_unreserve(&bo->ttm_bo);
-
-		if (!ret) {
-			args->size = bo->ttm_bo.mem.size;
-			args->domains = bo->ttm_bo.mem.placement &
-						TTM_PL_MASK_MEM;
-			args->offset = bo->ttm_bo.mem.start <<
-							PAGE_SHIFT;
-			args->map_handle = drm_vma_node_offset_addr(
-						&bo->ttm_bo.base.vma_node);
-		}
-	}
-
-	mutex_lock(&dev->struct_mutex);
-	drm_gem_object_put(gem);
-	mutex_unlock(&dev->struct_mutex);
-exit:
-	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
-	return ret;
-}
-
-static int
-via_gem_wait(struct drm_device *dev, void *data, struct drm_file *file_priv)
-{
-	struct drm_gem_object *gem;
-	struct drm_via_gem_wait *args = data;
-	struct openchrome_bo *bo;
-	int ret = -EINVAL;
-	bool no_wait;
-
-	DRM_DEBUG_KMS("Entered %s.\n", __func__);
-
-	gem = drm_gem_object_lookup(file_priv, args->handle);
-	if (!gem) {
-		goto exit;
-	}
-
-	bo = container_of(gem, struct openchrome_bo, gem);
-
-	no_wait = (args->no_wait != 0);
-	ret = ttm_bo_reserve(&bo->ttm_bo, true, no_wait, NULL);
-	if (ret) {
-		goto exit;
-	}
-
-	ret = ttm_bo_wait(&bo->ttm_bo, true, no_wait);
-	ttm_bo_unreserve(&bo->ttm_bo);
-
-	mutex_lock(&dev->struct_mutex);
-	drm_gem_object_put(gem);
-	mutex_unlock(&dev->struct_mutex);
-exit:
-	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
-	return ret;
-}
-
-#define KMS_INVALID_IOCTL(name)						\
-int name(struct drm_device *dev, void *data, struct drm_file *file_priv)\
-{									\
-	DRM_ERROR("invalid ioctl with kms %s\n", __func__);		\
-	return -EINVAL;							\
-}
-
-KMS_INVALID_IOCTL(via_mem_alloc)
-KMS_INVALID_IOCTL(via_mem_free)
-KMS_INVALID_IOCTL(via_agp_init)
-KMS_INVALID_IOCTL(via_fb_init)
-KMS_INVALID_IOCTL(via_map_init)
-KMS_INVALID_IOCTL(via_decoder_futex)
-
-const struct drm_ioctl_desc via_ioctls[] = {
-	DRM_IOCTL_DEF_DRV(VIA_ALLOCMEM, via_mem_alloc, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(VIA_FREEMEM, via_mem_free, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(VIA_FB_INIT, via_fb_init, DRM_AUTH | DRM_MASTER),
-	DRM_IOCTL_DEF_DRV(VIA_MAP_INIT, via_map_init, DRM_AUTH | DRM_MASTER),
-	DRM_IOCTL_DEF_DRV(VIA_DEC_FUTEX, via_decoder_futex, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(VIA_OLD_GEM_CREATE, via_gem_alloc, DRM_AUTH | DRM_UNLOCKED),
-	DRM_IOCTL_DEF_DRV(VIA_GETPARAM, via_getparam, DRM_AUTH | DRM_UNLOCKED),
-	DRM_IOCTL_DEF_DRV(VIA_SETPARAM, via_setparam, DRM_AUTH | DRM_MASTER | DRM_ROOT_ONLY),
-	DRM_IOCTL_DEF_DRV(VIA_GEM_CREATE, via_gem_alloc, DRM_AUTH | DRM_UNLOCKED),
-	DRM_IOCTL_DEF_DRV(VIA_GEM_WAIT, via_gem_wait, DRM_AUTH),
-	DRM_IOCTL_DEF_DRV(VIA_GEM_STATE, via_gem_state, DRM_AUTH),
-};
-
-int via_max_ioctl = ARRAY_SIZE(via_ioctls);
diff --git a/drivers/gpu/drm/openchrome/openchrome_ioctl.c b/drivers/gpu/drm/openchrome/openchrome_ioctl.c
new file mode 100644
index 000000000000..17fb2ae5ee32
--- /dev/null
+++ b/drivers/gpu/drm/openchrome/openchrome_ioctl.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright © 2020 Kevin Brace
+ *
+ * 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.
+ */
+/*
+ * Author(s):
+ *
+ * Kevin Brace <kevinbrace at gmx.com>
+ */
+
+#include <drm/drm_ioctl.h>
+
+#include "openchrome_drv.h"
+
+
+static int openchrome_gem_create(struct drm_device *dev,
+					void *data,
+					struct drm_file *file_priv)
+{
+	struct drm_openchrome_gem_create *args = data;
+	struct openchrome_drm_private *dev_private = dev->dev_private;
+	struct openchrome_bo *bo;
+	uint32_t handle;
+	int ret;
+
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+	ret = openchrome_bo_create(dev,
+					&dev_private->bdev,
+					args->size,
+					ttm_bo_type_device,
+					args->domain,
+					false,
+					&bo);
+
+	if (ret) {
+		goto exit;
+	}
+
+	ret = drm_gem_handle_create(file_priv, &bo->gem,
+					&handle);
+	drm_gem_object_put(&bo->gem);
+	if (ret) {
+		openchrome_bo_destroy(bo, false);
+		goto exit;
+	}
+
+	args->size		= bo->ttm_bo.mem.size;
+	args->domain		= bo->ttm_bo.mem.placement &
+						TTM_PL_MASK_MEM;
+	args->handle		= handle;
+	args->offset		= bo->ttm_bo.mem.start << PAGE_SHIFT;
+exit:
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+	return ret;
+}
+
+static int openchrome_gem_map(struct drm_device *dev,
+					void *data,
+					struct drm_file *file_priv)
+{
+	struct drm_openchrome_gem_map *args = data;
+	struct drm_gem_object *gem;
+	struct openchrome_bo *bo;
+	int ret = 0;
+
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+	gem = drm_gem_object_lookup(file_priv, args->handle);
+	if (!gem) {
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	bo = container_of(gem, struct openchrome_bo, gem);
+
+	args->map_offset = drm_vma_node_offset_addr(
+					&bo->ttm_bo.base.vma_node);
+exit:
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+	return ret;
+}
+
+
+const struct drm_ioctl_desc openchrome_ioctls[] = {
+	DRM_IOCTL_DEF_DRV(OPENCHROME_GEM_CREATE, openchrome_gem_create, DRM_AUTH | DRM_UNLOCKED),
+	DRM_IOCTL_DEF_DRV(OPENCHROME_GEM_MAP, openchrome_gem_map, DRM_AUTH | DRM_UNLOCKED),
+};
+
+
+int openchrome_max_ioctl = ARRAY_SIZE(openchrome_ioctls);
diff --git a/include/uapi/drm/openchrome_drm.h b/include/uapi/drm/openchrome_drm.h
new file mode 100644
index 000000000000..06f7f2ababda
--- /dev/null
+++ b/include/uapi/drm/openchrome_drm.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright © 2020 Kevin Brace
+ *
+ * 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.
+ */
+/*
+ * Author(s):
+ *
+ * Kevin Brace <kevinbrace at gmx.com>
+ */
+
+#ifndef __OPENCHROME_DRM_H__
+#define __OPENCHROME_DRM_H__
+
+
+#include <drm/drm.h>
+
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+#define DRM_OPENCHROME_GEM_CREATE	0x00
+#define DRM_OPENCHROME_GEM_MAP		0x01
+
+
+#define DRM_IOCTL_OPENCHROME_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_OPENCHROME_GEM_CREATE, struct drm_openchrome_gem_create)
+#define DRM_IOCTL_OPENCHROME_GEM_MAP    DRM_IOWR(DRM_COMMAND_BASE + DRM_OPENCHROME_GEM_MAP, struct drm_openchrome_gem_map)
+
+
+struct drm_openchrome_gem_create {
+	uint64_t size;
+	uint32_t alignment;
+	uint32_t domain;
+	uint32_t handle;
+	uint64_t offset;
+};
+
+struct drm_openchrome_gem_map {
+	uint32_t handle;
+	uint64_t map_offset;
+};
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __OPENCHROME_DRM_H__ */
commit e2558360e7cbcd11394bb401928b28e963a180a5
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Aug 10 18:30:34 2020 -0700

    drm/openchrome: Stop including drm/via_drm.h inside openchrome_drv.c
    
    openchrome_drv.h takes care of including drm/via_drm.h.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.c b/drivers/gpu/drm/openchrome/openchrome_drv.c
index cbab0f32793e..0485e3d1e229 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.c
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.c
@@ -33,8 +33,6 @@
 #include <drm/drm_file.h>
 #include <drm/drm_pciids.h>
 
-#include <drm/via_drm.h>
-
 #include "openchrome_drv.h"
 
 


More information about the openchrome-devel mailing list