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