130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* exynos_drm.h
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (c) 2011 Samsung Electronics Co., Ltd.
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Authors:
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	Inki Dae <inki.dae@samsung.com>
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	Joonyoung Shim <jy0922.shim@samsung.com>
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	Seung-Woo Kim <sw0312.kim@samsung.com>
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute  it and/or modify it
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * under  the terms of  the GNU General  Public License as published by the
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Free Software Foundation;  either version 2 of the  License, or (at your
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * option) any later version.
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPI_EXYNOS_DRM_H_
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPI_EXYNOS_DRM_H_
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <drm/drm.h>
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * User-desired buffer creation information structure.
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @size: user-desired memory allocation size.
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	- this size value would be page-aligned internally.
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @flags: user request for setting memory type or cache attributes.
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @handle: returned a handle to created gem object.
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	- this handle will be set by gem module of kernel side.
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
2930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_gem_create {
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	uint64_t size;
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int flags;
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int handle;
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure for getting buffer offset.
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @handle: a pointer to gem object created.
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: just padding to be 64-bit aligned.
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @offset: relatived offset value of the memory region allocated.
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	- this value should be set by user.
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
4330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_gem_map_off {
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int handle;
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int pad;
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	uint64_t offset;
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure for mapping buffer.
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @handle: a handle to gem object created.
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pad: just padding to be 64-bit aligned.
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @size: memory size to be mapped.
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @mapped: having user virtual address mmaped.
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	- this variable would be filled by exynos gem module
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	of kernel side with user virtual address which is allocated
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	by do_mmap().
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
6030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_gem_mmap {
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int handle;
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int pad;
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	uint64_t size;
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	uint64_t mapped;
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure to gem information.
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @handle: a handle to gem object created.
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @flags: flag value including memory type and cache attribute and
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	this value would be set by driver.
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @size: size to memory region allocated by gem and this size would
7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	be set by driver.
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
7630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_gem_info {
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int handle;
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int flags;
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	uint64_t size;
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure for user connection request of virtual display.
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @connection: indicate whether doing connetion or not by user.
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @extensions: if this value is 1 then the vidi driver would need additional
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *	128bytes edid data.
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @edid: the edid data pointer from user side.
8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
9030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_vidi_connection {
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int connection;
9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int extensions;
9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	uint64_t edid;
9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* memory type definitions. */
9730692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum e_drm_exynos_gem_mem_type {
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* Physically Continuous memory and used as default. */
9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_BO_CONTIG	= 0 << 0,
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* Physically Non-Continuous memory. */
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_BO_NONCONTIG	= 1 << 0,
10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* non-cachable mapping and used as default. */
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_BO_NONCACHABLE	= 0 << 1,
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* cachable mapping. */
10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_BO_CACHABLE	= 1 << 1,
10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* write-combine mapping. */
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_BO_WC		= 1 << 2,
10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_BO_MASK		= EXYNOS_BO_NONCONTIG | EXYNOS_BO_CACHABLE |
10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng					EXYNOS_BO_WC
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_g2d_get_ver {
11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	major;
11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	minor;
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_g2d_cmd {
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	offset;
11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	data;
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12230692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_g2d_buf_type {
12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	G2D_BUF_USERPTR = 1 << 31,
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12630692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_g2d_event_type {
12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	G2D_EVENT_NOT,
12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	G2D_EVENT_NONSTOP,
12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	G2D_EVENT_STOP,		/* not yet */
13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
13230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_g2d_userptr {
13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned long userptr;
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned long size;
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
13730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_g2d_set_cmdlist {
13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64					cmd;
13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64					cmd_buf;
14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32					cmd_nr;
14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32					cmd_buf_nr;
14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* for g2d event */
14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64					event_type;
14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64					user_data;
14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_g2d_exec {
14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64					async;
15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15230692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_ops_id {
15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_OPS_SRC,
15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_OPS_DST,
15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_OPS_MAX,
15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_sz {
15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	hsize;
16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	vsize;
16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
16330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_pos {
16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	x;
16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	y;
16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	w;
16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	h;
16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17030692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_flip {
17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_FLIP_NONE = (0 << 0),
17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_FLIP_VERTICAL = (1 << 0),
17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_FLIP_HORIZONTAL = (1 << 1),
17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_FLIP_BOTH = EXYNOS_DRM_FLIP_VERTICAL |
17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng			EXYNOS_DRM_FLIP_HORIZONTAL,
17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17830692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_degree {
17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_DEGREE_0,
18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_DEGREE_90,
18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_DEGREE_180,
18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_DEGREE_270,
18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_planer {
18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_PLANAR_Y,
18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_PLANAR_CB,
18830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_PLANAR_CR,
18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	EXYNOS_DRM_PLANAR_MAX,
19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure for ipp supported property list.
19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @version: version of this structure.
19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @ipp_id: id of ipp driver.
19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @count: count of ipp driver.
19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @writeback: flag of writeback supporting.
19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @flip: flag of flip supporting.
20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @degree: flag of degree information.
20130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @csc: flag of csc supporting.
20230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @crop: flag of crop supporting.
20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @scale: flag of scale supporting.
20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @refresh_min: min hz of refresh.
20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @refresh_max: max hz of refresh.
20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @crop_min: crop min resolution.
20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @crop_max: crop max resolution.
20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @scale_min: scale min resolution.
20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @scale_max: scale max resolution.
21030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
21130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_ipp_prop_list {
21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	version;
21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	ipp_id;
21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	count;
21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	writeback;
21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	flip;
21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	degree;
21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	csc;
21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	crop;
22030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	scale;
22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	refresh_min;
22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	refresh_max;
22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	reserved;
22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_exynos_sz	crop_min;
22530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_exynos_sz	crop_max;
22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_exynos_sz	scale_min;
22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_exynos_sz	scale_max;
22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
23130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure for ipp config.
23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @ops_id: property of operation directions.
23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @flip: property of mirror, flip.
23530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @degree: property of rotation degree.
23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @fmt: property of image format.
23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @sz: property of image size.
23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @pos: property of image position(src-cropped,dst-scaler).
23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
24030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_ipp_config {
24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	enum drm_exynos_ops_id ops_id;
24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	enum drm_exynos_flip	flip;
24330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	enum drm_exynos_degree	degree;
24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	fmt;
24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_exynos_sz	sz;
24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_exynos_pos	pos;
24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
24830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24930692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_ipp_cmd {
25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CMD_NONE,
25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CMD_M2M,
25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CMD_WB,
25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CMD_OUTPUT,
25430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CMD_MAX,
25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
25830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure for ipp property.
25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @config: source, destination config.
26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @cmd: definition of command.
26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @ipp_id: id of ipp driver.
26330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @prop_id: id of property.
26430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @refresh_rate: refresh rate.
26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
26630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_ipp_property {
26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_exynos_ipp_config config[EXYNOS_DRM_OPS_MAX];
26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	enum drm_exynos_ipp_cmd	cmd;
26930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	ipp_id;
27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	prop_id;
27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	refresh_rate;
27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27430692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_ipp_buf_type {
27530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_BUF_ENQUEUE,
27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_BUF_DEQUEUE,
27730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure for ipp buffer operations.
28130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @ops_id: operation directions.
28330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @buf_type: definition of buffer.
28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @prop_id: id of property.
28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @buf_id: id of buffer.
28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @handle: Y, Cb, Cr each planar handle.
28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @user_data: user data.
28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
28930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_ipp_queue_buf {
29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	enum drm_exynos_ops_id	ops_id;
29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	enum drm_exynos_ipp_buf_type	buf_type;
29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	prop_id;
29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	buf_id;
29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	handle[EXYNOS_DRM_PLANAR_MAX];
29530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	reserved;
29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	user_data;
29730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
29930692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum drm_exynos_ipp_ctrl {
30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CTRL_PLAY,
30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CTRL_STOP,
30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CTRL_PAUSE,
30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CTRL_RESUME,
30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	IPP_CTRL_MAX,
30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/**
30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * A structure for ipp start/stop operations.
30930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
31030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @prop_id: id of property.
31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * @ctrl: definition of control.
31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
31330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_ipp_cmd_ctrl {
31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	prop_id;
31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	enum drm_exynos_ipp_ctrl	ctrl;
31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_GEM_CREATE		0x00
31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_GEM_MAP_OFFSET	0x01
32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_GEM_MMAP		0x02
32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Reserved 0x03 ~ 0x05 for exynos specific gem ioctl */
32230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_GEM_GET		0x04
32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_VIDI_CONNECTION	0x07
32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* G2D */
32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_G2D_GET_VER		0x20
32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_G2D_SET_CMDLIST	0x21
32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_G2D_EXEC		0x22
32930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* IPP - Image Post Processing */
33130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_IPP_GET_PROPERTY	0x30
33230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_IPP_SET_PROPERTY	0x31
33330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_IPP_QUEUE_BUF	0x32
33430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_IPP_CMD_CTRL	0x33
33530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_GEM_CREATE		DRM_IOWR(DRM_COMMAND_BASE + \
33730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
33830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_GEM_MAP_OFFSET	DRM_IOWR(DRM_COMMAND_BASE + \
34030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_GEM_MAP_OFFSET, struct drm_exynos_gem_map_off)
34130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_GEM_MMAP	DRM_IOWR(DRM_COMMAND_BASE + \
34330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_GEM_MMAP, struct drm_exynos_gem_mmap)
34430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_GEM_GET	DRM_IOWR(DRM_COMMAND_BASE + \
34630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_GEM_GET,	struct drm_exynos_gem_info)
34730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_VIDI_CONNECTION	DRM_IOWR(DRM_COMMAND_BASE + \
34930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_VIDI_CONNECTION, struct drm_exynos_vidi_connection)
35030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
35130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_G2D_GET_VER		DRM_IOWR(DRM_COMMAND_BASE + \
35230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
35330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST	DRM_IOWR(DRM_COMMAND_BASE + \
35430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
35530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_G2D_EXEC		DRM_IOWR(DRM_COMMAND_BASE + \
35630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
35730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
35830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_IPP_GET_PROPERTY	DRM_IOWR(DRM_COMMAND_BASE + \
35930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_IPP_GET_PROPERTY, struct drm_exynos_ipp_prop_list)
36030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_IPP_SET_PROPERTY	DRM_IOWR(DRM_COMMAND_BASE + \
36130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_IPP_SET_PROPERTY, struct drm_exynos_ipp_property)
36230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_IPP_QUEUE_BUF	DRM_IOWR(DRM_COMMAND_BASE + \
36330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_IPP_QUEUE_BUF, struct drm_exynos_ipp_queue_buf)
36430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_IOCTL_EXYNOS_IPP_CMD_CTRL		DRM_IOWR(DRM_COMMAND_BASE + \
36530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		DRM_EXYNOS_IPP_CMD_CTRL, struct drm_exynos_ipp_cmd_ctrl)
36630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
36730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* EXYNOS specific events */
36830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_G2D_EVENT		0x80000000
36930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define DRM_EXYNOS_IPP_EVENT		0x80000001
37030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_g2d_event {
37230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_event	base;
37330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64			user_data;
37430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			tv_sec;
37530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			tv_usec;
37630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			cmdlist_no;
37730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			reserved;
37830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
37930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
38030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct drm_exynos_ipp_event {
38130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct drm_event	base;
38230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64			user_data;
38330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			tv_sec;
38430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			tv_usec;
38530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			prop_id;
38630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			reserved;
38730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			buf_id[EXYNOS_DRM_OPS_MAX];
38830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
38930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
39030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPI_EXYNOS_DRM_H_ */
391