tegra_drm.h revision 08d7334d
108d7334dSsnj/*
208d7334dSsnj * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
308d7334dSsnj *
408d7334dSsnj * Permission is hereby granted, free of charge, to any person obtaining a
508d7334dSsnj * copy of this software and associated documentation files (the "Software"),
608d7334dSsnj * to deal in the Software without restriction, including without limitation
708d7334dSsnj * the rights to use, copy, modify, merge, publish, distribute, sublicense,
808d7334dSsnj * and/or sell copies of the Software, and to permit persons to whom the
908d7334dSsnj * Software is furnished to do so, subject to the following conditions:
1008d7334dSsnj *
1108d7334dSsnj * The above copyright notice and this permission notice shall be included in
1208d7334dSsnj * all copies or substantial portions of the Software.
1308d7334dSsnj *
1408d7334dSsnj * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1508d7334dSsnj * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1608d7334dSsnj * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1708d7334dSsnj * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
1808d7334dSsnj * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
1908d7334dSsnj * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2008d7334dSsnj * OTHER DEALINGS IN THE SOFTWARE.
2108d7334dSsnj */
2208d7334dSsnj
2308d7334dSsnj#ifndef _UAPI_TEGRA_DRM_H_
2408d7334dSsnj#define _UAPI_TEGRA_DRM_H_
2508d7334dSsnj
2608d7334dSsnj#include <drm.h>
2708d7334dSsnj
2808d7334dSsnj#define DRM_TEGRA_GEM_CREATE_TILED     (1 << 0)
2908d7334dSsnj#define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1)
3008d7334dSsnj
3108d7334dSsnjstruct drm_tegra_gem_create {
3208d7334dSsnj	__u64 size;
3308d7334dSsnj	__u32 flags;
3408d7334dSsnj	__u32 handle;
3508d7334dSsnj};
3608d7334dSsnj
3708d7334dSsnjstruct drm_tegra_gem_mmap {
3808d7334dSsnj	__u32 handle;
3908d7334dSsnj	__u32 offset;
4008d7334dSsnj};
4108d7334dSsnj
4208d7334dSsnjstruct drm_tegra_syncpt_read {
4308d7334dSsnj	__u32 id;
4408d7334dSsnj	__u32 value;
4508d7334dSsnj};
4608d7334dSsnj
4708d7334dSsnjstruct drm_tegra_syncpt_incr {
4808d7334dSsnj	__u32 id;
4908d7334dSsnj	__u32 pad;
5008d7334dSsnj};
5108d7334dSsnj
5208d7334dSsnjstruct drm_tegra_syncpt_wait {
5308d7334dSsnj	__u32 id;
5408d7334dSsnj	__u32 thresh;
5508d7334dSsnj	__u32 timeout;
5608d7334dSsnj	__u32 value;
5708d7334dSsnj};
5808d7334dSsnj
5908d7334dSsnj#define DRM_TEGRA_NO_TIMEOUT	(0xffffffff)
6008d7334dSsnj
6108d7334dSsnjstruct drm_tegra_open_channel {
6208d7334dSsnj	__u32 client;
6308d7334dSsnj	__u32 pad;
6408d7334dSsnj	__u64 context;
6508d7334dSsnj};
6608d7334dSsnj
6708d7334dSsnjstruct drm_tegra_close_channel {
6808d7334dSsnj	__u64 context;
6908d7334dSsnj};
7008d7334dSsnj
7108d7334dSsnjstruct drm_tegra_get_syncpt {
7208d7334dSsnj	__u64 context;
7308d7334dSsnj	__u32 index;
7408d7334dSsnj	__u32 id;
7508d7334dSsnj};
7608d7334dSsnj
7708d7334dSsnjstruct drm_tegra_get_syncpt_base {
7808d7334dSsnj	__u64 context;
7908d7334dSsnj	__u32 syncpt;
8008d7334dSsnj	__u32 id;
8108d7334dSsnj};
8208d7334dSsnj
8308d7334dSsnjstruct drm_tegra_syncpt {
8408d7334dSsnj	__u32 id;
8508d7334dSsnj	__u32 incrs;
8608d7334dSsnj};
8708d7334dSsnj
8808d7334dSsnjstruct drm_tegra_cmdbuf {
8908d7334dSsnj	__u32 handle;
9008d7334dSsnj	__u32 offset;
9108d7334dSsnj	__u32 words;
9208d7334dSsnj	__u32 pad;
9308d7334dSsnj};
9408d7334dSsnj
9508d7334dSsnjstruct drm_tegra_reloc {
9608d7334dSsnj	struct {
9708d7334dSsnj		__u32 handle;
9808d7334dSsnj		__u32 offset;
9908d7334dSsnj	} cmdbuf;
10008d7334dSsnj	struct {
10108d7334dSsnj		__u32 handle;
10208d7334dSsnj		__u32 offset;
10308d7334dSsnj	} target;
10408d7334dSsnj	__u32 shift;
10508d7334dSsnj	__u32 pad;
10608d7334dSsnj};
10708d7334dSsnj
10808d7334dSsnjstruct drm_tegra_waitchk {
10908d7334dSsnj	__u32 handle;
11008d7334dSsnj	__u32 offset;
11108d7334dSsnj	__u32 syncpt;
11208d7334dSsnj	__u32 thresh;
11308d7334dSsnj};
11408d7334dSsnj
11508d7334dSsnjstruct drm_tegra_submit {
11608d7334dSsnj	__u64 context;
11708d7334dSsnj	__u32 num_syncpts;
11808d7334dSsnj	__u32 num_cmdbufs;
11908d7334dSsnj	__u32 num_relocs;
12008d7334dSsnj	__u32 num_waitchks;
12108d7334dSsnj	__u32 waitchk_mask;
12208d7334dSsnj	__u32 timeout;
12308d7334dSsnj	__u64 syncpts;
12408d7334dSsnj	__u64 cmdbufs;
12508d7334dSsnj	__u64 relocs;
12608d7334dSsnj	__u64 waitchks;
12708d7334dSsnj	__u32 fence;		/* Return value */
12808d7334dSsnj
12908d7334dSsnj	__u32 reserved[5];	/* future expansion */
13008d7334dSsnj};
13108d7334dSsnj
13208d7334dSsnj#define DRM_TEGRA_GEM_TILING_MODE_PITCH 0
13308d7334dSsnj#define DRM_TEGRA_GEM_TILING_MODE_TILED 1
13408d7334dSsnj#define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2
13508d7334dSsnj
13608d7334dSsnjstruct drm_tegra_gem_set_tiling {
13708d7334dSsnj	/* input */
13808d7334dSsnj	__u32 handle;
13908d7334dSsnj	__u32 mode;
14008d7334dSsnj	__u32 value;
14108d7334dSsnj	__u32 pad;
14208d7334dSsnj};
14308d7334dSsnj
14408d7334dSsnjstruct drm_tegra_gem_get_tiling {
14508d7334dSsnj	/* input */
14608d7334dSsnj	__u32 handle;
14708d7334dSsnj	/* output */
14808d7334dSsnj	__u32 mode;
14908d7334dSsnj	__u32 value;
15008d7334dSsnj	__u32 pad;
15108d7334dSsnj};
15208d7334dSsnj
15308d7334dSsnj#define DRM_TEGRA_GEM_BOTTOM_UP		(1 << 0)
15408d7334dSsnj#define DRM_TEGRA_GEM_FLAGS		(DRM_TEGRA_GEM_BOTTOM_UP)
15508d7334dSsnj
15608d7334dSsnjstruct drm_tegra_gem_set_flags {
15708d7334dSsnj	/* input */
15808d7334dSsnj	__u32 handle;
15908d7334dSsnj	/* output */
16008d7334dSsnj	__u32 flags;
16108d7334dSsnj};
16208d7334dSsnj
16308d7334dSsnjstruct drm_tegra_gem_get_flags {
16408d7334dSsnj	/* input */
16508d7334dSsnj	__u32 handle;
16608d7334dSsnj	/* output */
16708d7334dSsnj	__u32 flags;
16808d7334dSsnj};
16908d7334dSsnj
17008d7334dSsnj#define DRM_TEGRA_GEM_CREATE		0x00
17108d7334dSsnj#define DRM_TEGRA_GEM_MMAP		0x01
17208d7334dSsnj#define DRM_TEGRA_SYNCPT_READ		0x02
17308d7334dSsnj#define DRM_TEGRA_SYNCPT_INCR		0x03
17408d7334dSsnj#define DRM_TEGRA_SYNCPT_WAIT		0x04
17508d7334dSsnj#define DRM_TEGRA_OPEN_CHANNEL		0x05
17608d7334dSsnj#define DRM_TEGRA_CLOSE_CHANNEL		0x06
17708d7334dSsnj#define DRM_TEGRA_GET_SYNCPT		0x07
17808d7334dSsnj#define DRM_TEGRA_SUBMIT		0x08
17908d7334dSsnj#define DRM_TEGRA_GET_SYNCPT_BASE	0x09
18008d7334dSsnj#define DRM_TEGRA_GEM_SET_TILING	0x0a
18108d7334dSsnj#define DRM_TEGRA_GEM_GET_TILING	0x0b
18208d7334dSsnj#define DRM_TEGRA_GEM_SET_FLAGS		0x0c
18308d7334dSsnj#define DRM_TEGRA_GEM_GET_FLAGS		0x0d
18408d7334dSsnj
18508d7334dSsnj#define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create)
18608d7334dSsnj#define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap)
18708d7334dSsnj#define DRM_IOCTL_TEGRA_SYNCPT_READ DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_READ, struct drm_tegra_syncpt_read)
18808d7334dSsnj#define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr)
18908d7334dSsnj#define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait)
19008d7334dSsnj#define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel)
19108d7334dSsnj#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_open_channel)
19208d7334dSsnj#define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt)
19308d7334dSsnj#define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit)
19408d7334dSsnj#define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base)
19508d7334dSsnj#define DRM_IOCTL_TEGRA_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_TILING, struct drm_tegra_gem_set_tiling)
19608d7334dSsnj#define DRM_IOCTL_TEGRA_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_TILING, struct drm_tegra_gem_get_tiling)
19708d7334dSsnj#define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags)
19808d7334dSsnj#define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags)
19908d7334dSsnj
20008d7334dSsnj#endif
201