Blame exynos/exynos_drm.h

Packit 631bab
/* exynos_drm.h
Packit 631bab
 *
Packit 631bab
 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
Packit 631bab
 * Authors:
Packit 631bab
 *	Inki Dae <inki.dae@samsung.com>
Packit 631bab
 *	Joonyoung Shim <jy0922.shim@samsung.com>
Packit 631bab
 *	Seung-Woo Kim <sw0312.kim@samsung.com>
Packit 631bab
 *
Packit 631bab
 * Permission is hereby granted, free of charge, to any person obtaining a
Packit 631bab
 * copy of this software and associated documentation files (the "Software"),
Packit 631bab
 * to deal in the Software without restriction, including without limitation
Packit 631bab
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Packit 631bab
 * and/or sell copies of the Software, and to permit persons to whom the
Packit 631bab
 * Software is furnished to do so, subject to the following conditions:
Packit 631bab
 *
Packit 631bab
 * The above copyright notice and this permission notice (including the next
Packit 631bab
 * paragraph) shall be included in all copies or substantial portions of the
Packit 631bab
 * Software.
Packit 631bab
 *
Packit 631bab
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Packit 631bab
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Packit 631bab
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
Packit 631bab
 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
Packit 631bab
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Packit 631bab
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Packit 631bab
 * OTHER DEALINGS IN THE SOFTWARE.
Packit 631bab
 */
Packit 631bab
Packit 631bab
#ifndef _EXYNOS_DRM_H_
Packit 631bab
#define _EXYNOS_DRM_H_
Packit 631bab
Packit 631bab
#include "drm.h"
Packit 631bab
Packit 631bab
/**
Packit 631bab
 * User-desired buffer creation information structure.
Packit 631bab
 *
Packit 631bab
 * @size: user-desired memory allocation size.
Packit 631bab
 *	- this size value would be page-aligned internally.
Packit 631bab
 * @flags: user request for setting memory type or cache attributes.
Packit 631bab
 * @handle: returned a handle to created gem object.
Packit 631bab
 *	- this handle will be set by gem module of kernel side.
Packit 631bab
 */
Packit 631bab
struct drm_exynos_gem_create {
Packit 631bab
	uint64_t size;
Packit 631bab
	unsigned int flags;
Packit 631bab
	unsigned int handle;
Packit 631bab
};
Packit 631bab
Packit 631bab
/**
Packit 631bab
 * A structure to gem information.
Packit 631bab
 *
Packit 631bab
 * @handle: a handle to gem object created.
Packit 631bab
 * @flags: flag value including memory type and cache attribute and
Packit 631bab
 *	this value would be set by driver.
Packit 631bab
 * @size: size to memory region allocated by gem and this size would
Packit 631bab
 *	be set by driver.
Packit 631bab
 */
Packit 631bab
struct drm_exynos_gem_info {
Packit 631bab
	unsigned int handle;
Packit 631bab
	unsigned int flags;
Packit 631bab
	uint64_t size;
Packit 631bab
};
Packit 631bab
Packit 631bab
/**
Packit 631bab
 * A structure for user connection request of virtual display.
Packit 631bab
 *
Packit 631bab
 * @connection: indicate whether doing connection or not by user.
Packit 631bab
 * @extensions: if this value is 1 then the vidi driver would need additional
Packit 631bab
 *	128bytes edid data.
Packit 631bab
 * @edid: the edid data pointer from user side.
Packit 631bab
 */
Packit 631bab
struct drm_exynos_vidi_connection {
Packit 631bab
	unsigned int connection;
Packit 631bab
	unsigned int extensions;
Packit 631bab
	uint64_t edid;
Packit 631bab
};
Packit 631bab
Packit 631bab
/* memory type definitions. */
Packit 631bab
enum e_drm_exynos_gem_mem_type {
Packit 631bab
	/* Physically Continuous memory and used as default. */
Packit 631bab
	EXYNOS_BO_CONTIG	= 0 << 0,
Packit 631bab
	/* Physically Non-Continuous memory. */
Packit 631bab
	EXYNOS_BO_NONCONTIG	= 1 << 0,
Packit 631bab
	/* non-cachable mapping and used as default. */
Packit 631bab
	EXYNOS_BO_NONCACHABLE	= 0 << 1,
Packit 631bab
	/* cachable mapping. */
Packit 631bab
	EXYNOS_BO_CACHABLE	= 1 << 1,
Packit 631bab
	/* write-combine mapping. */
Packit 631bab
	EXYNOS_BO_WC		= 1 << 2,
Packit 631bab
	EXYNOS_BO_MASK		= EXYNOS_BO_NONCONTIG | EXYNOS_BO_CACHABLE |
Packit 631bab
					EXYNOS_BO_WC
Packit 631bab
};
Packit 631bab
Packit 631bab
struct drm_exynos_g2d_get_ver {
Packit 631bab
	__u32	major;
Packit 631bab
	__u32	minor;
Packit 631bab
};
Packit 631bab
Packit 631bab
struct drm_exynos_g2d_cmd {
Packit 631bab
	__u32	offset;
Packit 631bab
	__u32	data;
Packit 631bab
};
Packit 631bab
Packit 631bab
enum drm_exynos_g2d_buf_type {
Packit 631bab
	G2D_BUF_USERPTR = 1 << 31,
Packit 631bab
};
Packit 631bab
Packit 631bab
enum drm_exynos_g2d_event_type {
Packit 631bab
	G2D_EVENT_NOT,
Packit 631bab
	G2D_EVENT_NONSTOP,
Packit 631bab
	G2D_EVENT_STOP,		/* not yet */
Packit 631bab
};
Packit 631bab
Packit 631bab
struct drm_exynos_g2d_userptr {
Packit 631bab
	unsigned long userptr;
Packit 631bab
	unsigned long size;
Packit 631bab
};
Packit 631bab
Packit 631bab
struct drm_exynos_g2d_set_cmdlist {
Packit 631bab
	__u64					cmd;
Packit 631bab
	__u64					cmd_buf;
Packit 631bab
	__u32					cmd_nr;
Packit 631bab
	__u32					cmd_buf_nr;
Packit 631bab
Packit 631bab
	/* for g2d event */
Packit 631bab
	__u64					event_type;
Packit 631bab
	__u64					user_data;
Packit 631bab
};
Packit 631bab
Packit 631bab
struct drm_exynos_g2d_exec {
Packit 631bab
	__u64					async;
Packit 631bab
};
Packit 631bab
Packit 631bab
#define DRM_EXYNOS_GEM_CREATE		0x00
Packit 631bab
/* Reserved 0x04 ~ 0x05 for exynos specific gem ioctl */
Packit 631bab
#define DRM_EXYNOS_GEM_GET		0x04
Packit 631bab
#define DRM_EXYNOS_VIDI_CONNECTION	0x07
Packit 631bab
Packit 631bab
/* G2D */
Packit 631bab
#define DRM_EXYNOS_G2D_GET_VER		0x20
Packit 631bab
#define DRM_EXYNOS_G2D_SET_CMDLIST	0x21
Packit 631bab
#define DRM_EXYNOS_G2D_EXEC		0x22
Packit 631bab
Packit 631bab
#define DRM_IOCTL_EXYNOS_GEM_CREATE		DRM_IOWR(DRM_COMMAND_BASE + \
Packit 631bab
		DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
Packit 631bab
Packit 631bab
#define DRM_IOCTL_EXYNOS_GEM_GET	DRM_IOWR(DRM_COMMAND_BASE + \
Packit 631bab
		DRM_EXYNOS_GEM_GET,	struct drm_exynos_gem_info)
Packit 631bab
Packit 631bab
#define DRM_IOCTL_EXYNOS_VIDI_CONNECTION	DRM_IOWR(DRM_COMMAND_BASE + \
Packit 631bab
		DRM_EXYNOS_VIDI_CONNECTION, struct drm_exynos_vidi_connection)
Packit 631bab
Packit 631bab
#define DRM_IOCTL_EXYNOS_G2D_GET_VER		DRM_IOWR(DRM_COMMAND_BASE + \
Packit 631bab
		DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
Packit 631bab
#define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST	DRM_IOWR(DRM_COMMAND_BASE + \
Packit 631bab
		DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
Packit 631bab
#define DRM_IOCTL_EXYNOS_G2D_EXEC		DRM_IOWR(DRM_COMMAND_BASE + \
Packit 631bab
		DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
Packit 631bab
Packit 631bab
/* EXYNOS specific events */
Packit 631bab
#define DRM_EXYNOS_G2D_EVENT		0x80000000
Packit 631bab
Packit 631bab
struct drm_exynos_g2d_event {
Packit 631bab
	struct drm_event	base;
Packit 631bab
	__u64				user_data;
Packit 631bab
	__u32				tv_sec;
Packit 631bab
	__u32				tv_usec;
Packit 631bab
	__u32				cmdlist_no;
Packit 631bab
	__u32				reserved;
Packit 631bab
};
Packit 631bab
Packit 631bab
#endif