1 /* exynos_drm.h 2 * 3 * Copyright (c) 2011 Samsung Electronics Co., Ltd. 4 * Authors: 5 * Inki Dae <inki.dae@samsung.com> 6 * Joonyoung Shim <jy0922.shim@samsung.com> 7 * Seung-Woo Kim <sw0312.kim@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 connection 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