Home | History | Annotate | Download | only in drm
      1 /*
      2  * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
      3  *
      4  * This program is free software; you can redistribute it and/or modify it
      5  * under the terms and conditions of the GNU General Public License,
      6  * version 2, as published by the Free Software Foundation.
      7  *
      8  * This program is distributed in the hope it will be useful, but WITHOUT
      9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
     11  * more details.
     12  *
     13  * You should have received a copy of the GNU General Public License
     14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  */
     16 
     17 #ifndef _UAPI_TEGRA_DRM_H_
     18 #define _UAPI_TEGRA_DRM_H_
     19 
     20 #include <drm/drm.h>
     21 
     22 #define DRM_TEGRA_GEM_CREATE_TILED     (1 << 0)
     23 #define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1)
     24 
     25 struct drm_tegra_gem_create {
     26 	__u64 size;
     27 	__u32 flags;
     28 	__u32 handle;
     29 };
     30 
     31 struct drm_tegra_gem_mmap {
     32 	__u32 handle;
     33 	__u32 pad;
     34 	__u64 offset;
     35 };
     36 
     37 struct drm_tegra_syncpt_read {
     38 	__u32 id;
     39 	__u32 value;
     40 };
     41 
     42 struct drm_tegra_syncpt_incr {
     43 	__u32 id;
     44 	__u32 pad;
     45 };
     46 
     47 struct drm_tegra_syncpt_wait {
     48 	__u32 id;
     49 	__u32 thresh;
     50 	__u32 timeout;
     51 	__u32 value;
     52 };
     53 
     54 #define DRM_TEGRA_NO_TIMEOUT	(0xffffffff)
     55 
     56 struct drm_tegra_open_channel {
     57 	__u32 client;
     58 	__u32 pad;
     59 	__u64 context;
     60 };
     61 
     62 struct drm_tegra_close_channel {
     63 	__u64 context;
     64 };
     65 
     66 struct drm_tegra_get_syncpt {
     67 	__u64 context;
     68 	__u32 index;
     69 	__u32 id;
     70 };
     71 
     72 struct drm_tegra_get_syncpt_base {
     73 	__u64 context;
     74 	__u32 syncpt;
     75 	__u32 id;
     76 };
     77 
     78 struct drm_tegra_syncpt {
     79 	__u32 id;
     80 	__u32 incrs;
     81 };
     82 
     83 struct drm_tegra_cmdbuf {
     84 	__u32 handle;
     85 	__u32 offset;
     86 	__u32 words;
     87 	__u32 pad;
     88 };
     89 
     90 struct drm_tegra_reloc {
     91 	struct {
     92 		__u32 handle;
     93 		__u32 offset;
     94 	} cmdbuf;
     95 	struct {
     96 		__u32 handle;
     97 		__u32 offset;
     98 	} target;
     99 	__u32 shift;
    100 	__u32 pad;
    101 };
    102 
    103 struct drm_tegra_waitchk {
    104 	__u32 handle;
    105 	__u32 offset;
    106 	__u32 syncpt;
    107 	__u32 thresh;
    108 };
    109 
    110 struct drm_tegra_submit {
    111 	__u64 context;
    112 	__u32 num_syncpts;
    113 	__u32 num_cmdbufs;
    114 	__u32 num_relocs;
    115 	__u32 num_waitchks;
    116 	__u32 waitchk_mask;
    117 	__u32 timeout;
    118 	__u32 pad;
    119 	__u64 syncpts;
    120 	__u64 cmdbufs;
    121 	__u64 relocs;
    122 	__u64 waitchks;
    123 	__u32 fence;		/* Return value */
    124 
    125 	__u32 reserved[5];	/* future expansion */
    126 };
    127 
    128 #define DRM_TEGRA_GEM_TILING_MODE_PITCH 0
    129 #define DRM_TEGRA_GEM_TILING_MODE_TILED 1
    130 #define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2
    131 
    132 struct drm_tegra_gem_set_tiling {
    133 	/* input */
    134 	__u32 handle;
    135 	__u32 mode;
    136 	__u32 value;
    137 	__u32 pad;
    138 };
    139 
    140 struct drm_tegra_gem_get_tiling {
    141 	/* input */
    142 	__u32 handle;
    143 	/* output */
    144 	__u32 mode;
    145 	__u32 value;
    146 	__u32 pad;
    147 };
    148 
    149 #define DRM_TEGRA_GEM_BOTTOM_UP		(1 << 0)
    150 #define DRM_TEGRA_GEM_FLAGS		(DRM_TEGRA_GEM_BOTTOM_UP)
    151 
    152 struct drm_tegra_gem_set_flags {
    153 	/* input */
    154 	__u32 handle;
    155 	/* output */
    156 	__u32 flags;
    157 };
    158 
    159 struct drm_tegra_gem_get_flags {
    160 	/* input */
    161 	__u32 handle;
    162 	/* output */
    163 	__u32 flags;
    164 };
    165 
    166 enum request_type {
    167 	DRM_TEGRA_REQ_TYPE_CLK_KHZ = 0,
    168 	DRM_TEGRA_REQ_TYPE_BW_KBPS,
    169 };
    170 
    171 struct drm_tegra_get_clk_rate {
    172 	/* class ID*/
    173 	__u32 id;
    174 	/* request type: KBps or KHz */
    175 	__u32 type;
    176 	/* numeric value for type */
    177 	__u64 data;
    178 };
    179 
    180 struct drm_tegra_set_clk_rate {
    181 	/* class ID*/
    182 	__u32 id;
    183 	/* request type: KBps or KHz */
    184 	__u32 type;
    185 	/* numeric value for type */
    186 	__u64 data;
    187 };
    188 
    189 struct drm_tegra_keepon {
    190 	/* channel context (from opening a channel) */
    191 	__u64 context;
    192 };
    193 
    194 #define DRM_TEGRA_GEM_CREATE		0x00
    195 #define DRM_TEGRA_GEM_MMAP		0x01
    196 #define DRM_TEGRA_SYNCPT_READ		0x02
    197 #define DRM_TEGRA_SYNCPT_INCR		0x03
    198 #define DRM_TEGRA_SYNCPT_WAIT		0x04
    199 #define DRM_TEGRA_OPEN_CHANNEL		0x05
    200 #define DRM_TEGRA_CLOSE_CHANNEL		0x06
    201 #define DRM_TEGRA_GET_SYNCPT		0x07
    202 #define DRM_TEGRA_SUBMIT		0x08
    203 #define DRM_TEGRA_GET_SYNCPT_BASE	0x09
    204 #define DRM_TEGRA_GEM_SET_TILING	0x0a
    205 #define DRM_TEGRA_GEM_GET_TILING	0x0b
    206 #define DRM_TEGRA_GEM_SET_FLAGS		0x0c
    207 #define DRM_TEGRA_GEM_GET_FLAGS		0x0d
    208 #define DRM_TEGRA_GET_CLK_RATE		0x0e
    209 #define DRM_TEGRA_SET_CLK_RATE		0x0f
    210 #define DRM_TEGRA_START_KEEPON		0x10
    211 #define DRM_TEGRA_STOP_KEEPON		0x11
    212 
    213 #define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create)
    214 #define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap)
    215 #define DRM_IOCTL_TEGRA_SYNCPT_READ DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_READ, struct drm_tegra_syncpt_read)
    216 #define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr)
    217 #define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait)
    218 #define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel)
    219 #define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_open_channel)
    220 #define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt)
    221 #define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit)
    222 #define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base)
    223 #define DRM_IOCTL_TEGRA_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_TILING, struct drm_tegra_gem_set_tiling)
    224 #define DRM_IOCTL_TEGRA_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_TILING, struct drm_tegra_gem_get_tiling)
    225 #define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags)
    226 #define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags)
    227 #define DRM_IOCTL_TEGRA_GET_CLK_RATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_CLK_RATE, struct drm_tegra_get_clk_rate)
    228 #define DRM_IOCTL_TEGRA_SET_CLK_RATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SET_CLK_RATE, struct drm_tegra_set_clk_rate)
    229 #define DRM_IOCTL_TEGRA_START_KEEPON DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_START_KEEPON, struct drm_tegra_keepon)
    230 #define DRM_IOCTL_TEGRA_STOP_KEEPON DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_STOP_KEEPON, struct drm_tegra_keepon)
    231 
    232 #endif
    233