Home | History | Annotate | Download | only in exynos
      1 /* exynos_drm.h
      2  *
      3  * Copyright (c) 2011 Samsung Electronics Co., Ltd.
      4  * Authors:
      5  *	Inki Dae <inki.dae (at) samsung.com>
      6  *	Joonyoung Shim <jy0922.shim (at) samsung.com>
      7  *	Seung-Woo Kim <sw0312.kim (at) samsung.com>
      8  *
      9  * Permission is hereby granted, free of charge, to any person obtaining a
     10  * copy of this software and associated documentation files (the "Software"),
     11  * to deal in the Software without restriction, including without limitation
     12  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     13  * and/or sell copies of the Software, and to permit persons to whom the
     14  * Software is furnished to do so, subject to the following conditions:
     15  *
     16  * The above copyright notice and this permission notice (including the next
     17  * paragraph) shall be included in all copies or substantial portions of the
     18  * Software.
     19  *
     20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     21  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     23  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     24  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     25  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     26  * OTHER DEALINGS IN THE SOFTWARE.
     27  */
     28 
     29 #ifndef _EXYNOS_DRM_H_
     30 #define _EXYNOS_DRM_H_
     31 
     32 #include "drm.h"
     33 
     34 /**
     35  * User-desired buffer creation information structure.
     36  *
     37  * @size: user-desired memory allocation size.
     38  *	- this size value would be page-aligned internally.
     39  * @flags: user request for setting memory type or cache attributes.
     40  * @handle: returned a handle to created gem object.
     41  *	- this handle will be set by gem module of kernel side.
     42  */
     43 struct drm_exynos_gem_create {
     44 	uint64_t size;
     45 	unsigned int flags;
     46 	unsigned int handle;
     47 };
     48 
     49 /**
     50  * A structure to gem information.
     51  *
     52  * @handle: a handle to gem object created.
     53  * @flags: flag value including memory type and cache attribute and
     54  *	this value would be set by driver.
     55  * @size: size to memory region allocated by gem and this size would
     56  *	be set by driver.
     57  */
     58 struct drm_exynos_gem_info {
     59 	unsigned int handle;
     60 	unsigned int flags;
     61 	uint64_t size;
     62 };
     63 
     64 /**
     65  * A structure for user connection request of virtual display.
     66  *
     67  * @connection: indicate whether doing connetion or not by user.
     68  * @extensions: if this value is 1 then the vidi driver would need additional
     69  *	128bytes edid data.
     70  * @edid: the edid data pointer from user side.
     71  */
     72 struct drm_exynos_vidi_connection {
     73 	unsigned int connection;
     74 	unsigned int extensions;
     75 	uint64_t edid;
     76 };
     77 
     78 /* memory type definitions. */
     79 enum e_drm_exynos_gem_mem_type {
     80 	/* Physically Continuous memory and used as default. */
     81 	EXYNOS_BO_CONTIG	= 0 << 0,
     82 	/* Physically Non-Continuous memory. */
     83 	EXYNOS_BO_NONCONTIG	= 1 << 0,
     84 	/* non-cachable mapping and used as default. */
     85 	EXYNOS_BO_NONCACHABLE	= 0 << 1,
     86 	/* cachable mapping. */
     87 	EXYNOS_BO_CACHABLE	= 1 << 1,
     88 	/* write-combine mapping. */
     89 	EXYNOS_BO_WC		= 1 << 2,
     90 	EXYNOS_BO_MASK		= EXYNOS_BO_NONCONTIG | EXYNOS_BO_CACHABLE |
     91 					EXYNOS_BO_WC
     92 };
     93 
     94 struct drm_exynos_g2d_get_ver {
     95 	__u32	major;
     96 	__u32	minor;
     97 };
     98 
     99 struct drm_exynos_g2d_cmd {
    100 	__u32	offset;
    101 	__u32	data;
    102 };
    103 
    104 enum drm_exynos_g2d_buf_type {
    105 	G2D_BUF_USERPTR = 1 << 31,
    106 };
    107 
    108 enum drm_exynos_g2d_event_type {
    109 	G2D_EVENT_NOT,
    110 	G2D_EVENT_NONSTOP,
    111 	G2D_EVENT_STOP,		/* not yet */
    112 };
    113 
    114 struct drm_exynos_g2d_userptr {
    115 	unsigned long userptr;
    116 	unsigned long size;
    117 };
    118 
    119 struct drm_exynos_g2d_set_cmdlist {
    120 	__u64					cmd;
    121 	__u64					cmd_buf;
    122 	__u32					cmd_nr;
    123 	__u32					cmd_buf_nr;
    124 
    125 	/* for g2d event */
    126 	__u64					event_type;
    127 	__u64					user_data;
    128 };
    129 
    130 struct drm_exynos_g2d_exec {
    131 	__u64					async;
    132 };
    133 
    134 #define DRM_EXYNOS_GEM_CREATE		0x00
    135 /* Reserved 0x04 ~ 0x05 for exynos specific gem ioctl */
    136 #define DRM_EXYNOS_GEM_GET		0x04
    137 #define DRM_EXYNOS_VIDI_CONNECTION	0x07
    138 
    139 /* G2D */
    140 #define DRM_EXYNOS_G2D_GET_VER		0x20
    141 #define DRM_EXYNOS_G2D_SET_CMDLIST	0x21
    142 #define DRM_EXYNOS_G2D_EXEC		0x22
    143 
    144 #define DRM_IOCTL_EXYNOS_GEM_CREATE		DRM_IOWR(DRM_COMMAND_BASE + \
    145 		DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
    146 
    147 #define DRM_IOCTL_EXYNOS_GEM_GET	DRM_IOWR(DRM_COMMAND_BASE + \
    148 		DRM_EXYNOS_GEM_GET,	struct drm_exynos_gem_info)
    149 
    150 #define DRM_IOCTL_EXYNOS_VIDI_CONNECTION	DRM_IOWR(DRM_COMMAND_BASE + \
    151 		DRM_EXYNOS_VIDI_CONNECTION, struct drm_exynos_vidi_connection)
    152 
    153 #define DRM_IOCTL_EXYNOS_G2D_GET_VER		DRM_IOWR(DRM_COMMAND_BASE + \
    154 		DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
    155 #define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST	DRM_IOWR(DRM_COMMAND_BASE + \
    156 		DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
    157 #define DRM_IOCTL_EXYNOS_G2D_EXEC		DRM_IOWR(DRM_COMMAND_BASE + \
    158 		DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
    159 
    160 /* EXYNOS specific events */
    161 #define DRM_EXYNOS_G2D_EVENT		0x80000000
    162 
    163 struct drm_exynos_g2d_event {
    164 	struct drm_event	base;
    165 	__u64				user_data;
    166 	__u32				tv_sec;
    167 	__u32				tv_usec;
    168 	__u32				cmdlist_no;
    169 	__u32				reserved;
    170 };
    171 
    172 #endif
    173