0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef _UAPI_EXYNOS_DRM_H_
0017 #define _UAPI_EXYNOS_DRM_H_
0018
0019 #include "drm.h"
0020
0021 #if defined(__cplusplus)
0022 extern "C" {
0023 #endif
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 struct drm_exynos_gem_create {
0035 __u64 size;
0036 __u32 flags;
0037 __u32 handle;
0038 };
0039
0040
0041
0042
0043
0044
0045
0046
0047 struct drm_exynos_gem_map {
0048 __u32 handle;
0049 __u32 reserved;
0050 __u64 offset;
0051 };
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062 struct drm_exynos_gem_info {
0063 __u32 handle;
0064 __u32 flags;
0065 __u64 size;
0066 };
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076 struct drm_exynos_vidi_connection {
0077 __u32 connection;
0078 __u32 extensions;
0079 __u64 edid;
0080 };
0081
0082
0083 enum e_drm_exynos_gem_mem_type {
0084
0085 EXYNOS_BO_CONTIG = 0 << 0,
0086
0087 EXYNOS_BO_NONCONTIG = 1 << 0,
0088
0089 EXYNOS_BO_NONCACHABLE = 0 << 1,
0090
0091 EXYNOS_BO_CACHABLE = 1 << 1,
0092
0093 EXYNOS_BO_WC = 1 << 2,
0094 EXYNOS_BO_MASK = EXYNOS_BO_NONCONTIG | EXYNOS_BO_CACHABLE |
0095 EXYNOS_BO_WC
0096 };
0097
0098 struct drm_exynos_g2d_get_ver {
0099 __u32 major;
0100 __u32 minor;
0101 };
0102
0103 struct drm_exynos_g2d_cmd {
0104 __u32 offset;
0105 __u32 data;
0106 };
0107
0108 enum drm_exynos_g2d_buf_type {
0109 G2D_BUF_USERPTR = 1 << 31,
0110 };
0111
0112 enum drm_exynos_g2d_event_type {
0113 G2D_EVENT_NOT,
0114 G2D_EVENT_NONSTOP,
0115 G2D_EVENT_STOP,
0116 };
0117
0118 struct drm_exynos_g2d_userptr {
0119 unsigned long userptr;
0120 unsigned long size;
0121 };
0122
0123 struct drm_exynos_g2d_set_cmdlist {
0124 __u64 cmd;
0125 __u64 cmd_buf;
0126 __u32 cmd_nr;
0127 __u32 cmd_buf_nr;
0128
0129
0130 __u64 event_type;
0131 __u64 user_data;
0132 };
0133
0134 struct drm_exynos_g2d_exec {
0135 __u64 async;
0136 };
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147 struct drm_exynos_ioctl_ipp_get_res {
0148 __u32 count_ipps;
0149 __u32 reserved;
0150 __u64 ipp_id_ptr;
0151 };
0152
0153 enum drm_exynos_ipp_format_type {
0154 DRM_EXYNOS_IPP_FORMAT_SOURCE = 0x01,
0155 DRM_EXYNOS_IPP_FORMAT_DESTINATION = 0x02,
0156 };
0157
0158 struct drm_exynos_ipp_format {
0159 __u32 fourcc;
0160 __u32 type;
0161 __u64 modifier;
0162 };
0163
0164 enum drm_exynos_ipp_capability {
0165 DRM_EXYNOS_IPP_CAP_CROP = 0x01,
0166 DRM_EXYNOS_IPP_CAP_ROTATE = 0x02,
0167 DRM_EXYNOS_IPP_CAP_SCALE = 0x04,
0168 DRM_EXYNOS_IPP_CAP_CONVERT = 0x08,
0169 };
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181 struct drm_exynos_ioctl_ipp_get_caps {
0182 __u32 ipp_id;
0183 __u32 capabilities;
0184 __u32 reserved;
0185 __u32 formats_count;
0186 __u64 formats_ptr;
0187 };
0188
0189 enum drm_exynos_ipp_limit_type {
0190
0191 DRM_EXYNOS_IPP_LIMIT_TYPE_SIZE = 0x0001,
0192
0193 DRM_EXYNOS_IPP_LIMIT_TYPE_SCALE = 0x0002,
0194
0195
0196 DRM_EXYNOS_IPP_LIMIT_SIZE_BUFFER = 0x0001 << 16,
0197
0198 DRM_EXYNOS_IPP_LIMIT_SIZE_AREA = 0x0002 << 16,
0199
0200 DRM_EXYNOS_IPP_LIMIT_SIZE_ROTATED = 0x0003 << 16,
0201
0202 DRM_EXYNOS_IPP_LIMIT_TYPE_MASK = 0x000f,
0203 DRM_EXYNOS_IPP_LIMIT_SIZE_MASK = 0x000f << 16,
0204 };
0205
0206 struct drm_exynos_ipp_limit_val {
0207 __u32 min;
0208 __u32 max;
0209 __u32 align;
0210 __u32 reserved;
0211 };
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221 struct drm_exynos_ipp_limit {
0222 __u32 type;
0223 __u32 reserved;
0224 struct drm_exynos_ipp_limit_val h;
0225 struct drm_exynos_ipp_limit_val v;
0226 };
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239 struct drm_exynos_ioctl_ipp_get_limits {
0240 __u32 ipp_id;
0241 __u32 fourcc;
0242 __u64 modifier;
0243 __u32 type;
0244 __u32 limits_count;
0245 __u64 limits_ptr;
0246 };
0247
0248 enum drm_exynos_ipp_task_id {
0249
0250 DRM_EXYNOS_IPP_TASK_BUFFER = 0x0001,
0251
0252 DRM_EXYNOS_IPP_TASK_RECTANGLE = 0x0002,
0253
0254 DRM_EXYNOS_IPP_TASK_TRANSFORM = 0x0003,
0255
0256 DRM_EXYNOS_IPP_TASK_ALPHA = 0x0004,
0257
0258
0259 DRM_EXYNOS_IPP_TASK_TYPE_SOURCE = 0x0001 << 16,
0260
0261 DRM_EXYNOS_IPP_TASK_TYPE_DESTINATION = 0x0002 << 16,
0262 };
0263
0264
0265
0266
0267
0268
0269
0270 struct drm_exynos_ipp_task_buffer {
0271 __u32 id;
0272 __u32 fourcc;
0273 __u32 width, height;
0274 __u32 gem_id[4];
0275 __u32 offset[4];
0276 __u32 pitch[4];
0277 __u64 modifier;
0278 };
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288 struct drm_exynos_ipp_task_rect {
0289 __u32 id;
0290 __u32 reserved;
0291 __u32 x;
0292 __u32 y;
0293 __u32 w;
0294 __u32 h;
0295 };
0296
0297
0298
0299
0300
0301
0302
0303 struct drm_exynos_ipp_task_transform {
0304 __u32 id;
0305 __u32 rotation;
0306 };
0307
0308
0309
0310
0311
0312
0313
0314 struct drm_exynos_ipp_task_alpha {
0315 __u32 id;
0316 __u32 value;
0317 };
0318
0319 enum drm_exynos_ipp_flag {
0320
0321 DRM_EXYNOS_IPP_FLAG_EVENT = 0x01,
0322
0323 DRM_EXYNOS_IPP_FLAG_TEST_ONLY = 0x02,
0324
0325 DRM_EXYNOS_IPP_FLAG_NONBLOCK = 0x04,
0326 };
0327
0328 #define DRM_EXYNOS_IPP_FLAGS (DRM_EXYNOS_IPP_FLAG_EVENT |\
0329 DRM_EXYNOS_IPP_FLAG_TEST_ONLY | DRM_EXYNOS_IPP_FLAG_NONBLOCK)
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342 struct drm_exynos_ioctl_ipp_commit {
0343 __u32 ipp_id;
0344 __u32 flags;
0345 __u32 reserved;
0346 __u32 params_size;
0347 __u64 params_ptr;
0348 __u64 user_data;
0349 };
0350
0351 #define DRM_EXYNOS_GEM_CREATE 0x00
0352 #define DRM_EXYNOS_GEM_MAP 0x01
0353
0354 #define DRM_EXYNOS_GEM_GET 0x04
0355 #define DRM_EXYNOS_VIDI_CONNECTION 0x07
0356
0357
0358 #define DRM_EXYNOS_G2D_GET_VER 0x20
0359 #define DRM_EXYNOS_G2D_SET_CMDLIST 0x21
0360 #define DRM_EXYNOS_G2D_EXEC 0x22
0361
0362
0363
0364 #define DRM_EXYNOS_IPP_GET_RESOURCES 0x40
0365 #define DRM_EXYNOS_IPP_GET_CAPS 0x41
0366 #define DRM_EXYNOS_IPP_GET_LIMITS 0x42
0367 #define DRM_EXYNOS_IPP_COMMIT 0x43
0368
0369 #define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \
0370 DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
0371 #define DRM_IOCTL_EXYNOS_GEM_MAP DRM_IOWR(DRM_COMMAND_BASE + \
0372 DRM_EXYNOS_GEM_MAP, struct drm_exynos_gem_map)
0373 #define DRM_IOCTL_EXYNOS_GEM_GET DRM_IOWR(DRM_COMMAND_BASE + \
0374 DRM_EXYNOS_GEM_GET, struct drm_exynos_gem_info)
0375
0376 #define DRM_IOCTL_EXYNOS_VIDI_CONNECTION DRM_IOWR(DRM_COMMAND_BASE + \
0377 DRM_EXYNOS_VIDI_CONNECTION, struct drm_exynos_vidi_connection)
0378
0379 #define DRM_IOCTL_EXYNOS_G2D_GET_VER DRM_IOWR(DRM_COMMAND_BASE + \
0380 DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
0381 #define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST DRM_IOWR(DRM_COMMAND_BASE + \
0382 DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
0383 #define DRM_IOCTL_EXYNOS_G2D_EXEC DRM_IOWR(DRM_COMMAND_BASE + \
0384 DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
0385
0386 #define DRM_IOCTL_EXYNOS_IPP_GET_RESOURCES DRM_IOWR(DRM_COMMAND_BASE + \
0387 DRM_EXYNOS_IPP_GET_RESOURCES, \
0388 struct drm_exynos_ioctl_ipp_get_res)
0389 #define DRM_IOCTL_EXYNOS_IPP_GET_CAPS DRM_IOWR(DRM_COMMAND_BASE + \
0390 DRM_EXYNOS_IPP_GET_CAPS, struct drm_exynos_ioctl_ipp_get_caps)
0391 #define DRM_IOCTL_EXYNOS_IPP_GET_LIMITS DRM_IOWR(DRM_COMMAND_BASE + \
0392 DRM_EXYNOS_IPP_GET_LIMITS, \
0393 struct drm_exynos_ioctl_ipp_get_limits)
0394 #define DRM_IOCTL_EXYNOS_IPP_COMMIT DRM_IOWR(DRM_COMMAND_BASE + \
0395 DRM_EXYNOS_IPP_COMMIT, struct drm_exynos_ioctl_ipp_commit)
0396
0397
0398 #define DRM_EXYNOS_G2D_EVENT 0x80000000
0399 #define DRM_EXYNOS_IPP_EVENT 0x80000002
0400
0401 struct drm_exynos_g2d_event {
0402 struct drm_event base;
0403 __u64 user_data;
0404 __u32 tv_sec;
0405 __u32 tv_usec;
0406 __u32 cmdlist_no;
0407 __u32 reserved;
0408 };
0409
0410 struct drm_exynos_ipp_event {
0411 struct drm_event base;
0412 __u64 user_data;
0413 __u32 tv_sec;
0414 __u32 tv_usec;
0415 __u32 ipp_id;
0416 __u32 sequence;
0417 __u64 reserved;
0418 };
0419
0420 #if defined(__cplusplus)
0421 }
0422 #endif
0423
0424 #endif