tegrakernel/kernel/nvidia/include/uapi/linux/nvhost_ioctl.h

500 lines
13 KiB
C

/*
* include/uapi/linux/nvhost_ioctl.h
*
* Tegra graphics host driver
*
* Copyright (c) 2016-2020, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __UAPI_LINUX_NVHOST_IOCTL_H
#define __UAPI_LINUX_NVHOST_IOCTL_H
#include <linux/ioctl.h>
#include <linux/types.h>
#if !defined(__KERNEL__)
#define __user
#endif
#define NVHOST_INVALID_SYNCPOINT 0xFFFFFFFF
#define NVHOST_NO_TIMEOUT (-1)
#define NVHOST_NO_CONTEXT 0x0
#define NVHOST_IOCTL_MAGIC 'H'
#define NVHOST_PRIORITY_LOW 50
#define NVHOST_PRIORITY_MEDIUM 100
#define NVHOST_PRIORITY_HIGH 150
#define NVHOST_TIMEOUT_FLAG_DISABLE_DUMP 0
#define NVHOST_SUBMIT_VERSION_V0 0x0
#define NVHOST_SUBMIT_VERSION_V1 0x1
#define NVHOST_SUBMIT_VERSION_V2 0x2
#define NVHOST_SUBMIT_VERSION_MAX_SUPPORTED NVHOST_SUBMIT_VERSION_V2
struct nvhost_cmdbuf {
__u32 mem;
__u32 offset;
__u32 words;
} __packed;
struct nvhost_cmdbuf_ext {
__s32 pre_fence;
__u32 reserved;
};
struct nvhost_reloc {
__u32 cmdbuf_mem;
__u32 cmdbuf_offset;
__u32 target;
__u32 target_offset;
};
struct nvhost_reloc_shift {
__u32 shift;
} __packed;
#define NVHOST_RELOC_TYPE_DEFAULT 0
#define NVHOST_RELOC_TYPE_PITCH_LINEAR 1
#define NVHOST_RELOC_TYPE_BLOCK_LINEAR 2
#define NVHOST_RELOC_TYPE_NVLINK 3
struct nvhost_reloc_type {
__u32 reloc_type;
__u32 padding;
};
struct nvhost_waitchk {
__u32 mem;
__u32 offset;
__u32 syncpt_id;
__u32 thresh;
};
struct nvhost_syncpt_incr {
__u32 syncpt_id;
__u32 syncpt_incrs;
};
struct nvhost_get_param_args {
__u32 value;
} __packed;
struct nvhost_get_param_arg {
__u32 param;
__u32 value;
};
struct nvhost_get_client_managed_syncpt_arg {
__u64 name;
__u32 param;
__u32 value;
};
struct nvhost_free_client_managed_syncpt_arg {
__u32 param;
__u32 value;
};
struct nvhost_channel_open_args {
__s32 channel_fd;
};
struct nvhost_set_syncpt_name_args {
__u64 name;
__u32 syncpt_id;
__u32 padding;
};
struct nvhost_set_nvmap_fd_args {
__u32 fd;
} __packed;
enum nvhost_clk_attr {
NVHOST_CLOCK = 0,
NVHOST_BW,
NVHOST_PIXELRATE,
NVHOST_BW_KHZ,
};
/*
* moduleid[15:0] => module id
* moduleid[24:31] => nvhost_clk_attr
*/
#define NVHOST_MODULE_ID_BIT_POS 0
#define NVHOST_MODULE_ID_BIT_WIDTH 16
#define NVHOST_CLOCK_ATTR_BIT_POS 24
#define NVHOST_CLOCK_ATTR_BIT_WIDTH 8
struct nvhost_clk_rate_args {
__u32 rate;
__u32 moduleid;
};
struct nvhost_set_timeout_args {
__u32 timeout;
} __packed;
struct nvhost_set_timeout_ex_args {
__u32 timeout;
__u32 flags;
};
struct nvhost_set_priority_args {
__u32 priority;
} __packed;
struct nvhost_set_error_notifier {
__u64 offset;
__u64 size;
__u32 mem;
__u32 padding;
};
struct nvhost32_ctrl_module_regrdwr_args {
__u32 id;
__u32 num_offsets;
__u32 block_size;
__u32 offsets;
__u32 values;
__u32 write;
};
struct nvhost_ctrl_module_regrdwr_args {
__u32 id;
__u32 num_offsets;
__u32 block_size;
__u32 write;
__u64 offsets;
__u64 values;
};
struct nvhost32_submit_args {
__u32 submit_version;
__u32 num_syncpt_incrs;
__u32 num_cmdbufs;
__u32 num_relocs;
__u32 num_waitchks;
__u32 timeout;
__u32 syncpt_incrs;
__u32 cmdbufs;
__u32 relocs;
__u32 reloc_shifts;
__u32 waitchks;
__u32 waitbases;
__u32 class_ids;
__u32 pad[2]; /* future expansion */
__u32 fences;
__u32 fence; /* Return value */
} __packed;
#define NVHOST_SUBMIT_FLAG_SYNC_FENCE_FD 0
#define NVHOST_SUBMIT_MAX_NUM_SYNCPT_INCRS 10
struct nvhost_submit_args {
__u32 submit_version;
__u32 num_syncpt_incrs;
__u32 num_cmdbufs;
__u32 num_relocs;
__u32 num_waitchks;
__u32 timeout;
__u32 flags;
__u32 fence; /* Return value */
__u64 syncpt_incrs;
__u64 cmdbuf_exts;
__u32 checksum_methods;
__u32 checksum_falcon_methods;
__u64 pad[1]; /* future expansion */
__u64 reloc_types;
__u64 cmdbufs;
__u64 relocs;
__u64 reloc_shifts;
__u64 waitchks;
__u64 waitbases;
__u64 class_ids;
__u64 fences;
};
struct nvhost_set_ctxswitch_args {
__u32 num_cmdbufs_save;
__u32 num_save_incrs;
__u32 save_incrs;
__u32 save_waitbases;
__u32 cmdbuf_save;
__u32 num_cmdbufs_restore;
__u32 num_restore_incrs;
__u32 restore_incrs;
__u32 restore_waitbases;
__u32 cmdbuf_restore;
__u32 num_relocs;
__u32 relocs;
__u32 reloc_shifts;
__u32 pad;
};
struct nvhost_channel_buffer {
__u32 dmabuf_fd; /* in */
__u32 reserved0; /* reserved, must be 0 */
__u64 reserved1[2]; /* reserved, must be 0 */
__u64 address; /* out, device view to the buffer */
};
struct nvhost_channel_unmap_buffer_args {
__u32 num_buffers; /* in, number of buffers to unmap */
__u32 reserved; /* reserved, must be 0 */
__u64 table_address; /* pointer to beginning of buffer */
};
struct nvhost_channel_map_buffer_args {
__u32 num_buffers; /* in, number of buffers to map */
__u32 reserved; /* reserved, must be 0 */
__u64 table_address; /* pointer to beginning of buffer */
};
#define NVHOST_IOCTL_CHANNEL_GET_SYNCPOINTS \
_IOR(NVHOST_IOCTL_MAGIC, 2, struct nvhost_get_param_args)
#define NVHOST_IOCTL_CHANNEL_GET_WAITBASES \
_IOR(NVHOST_IOCTL_MAGIC, 3, struct nvhost_get_param_args)
#define NVHOST_IOCTL_CHANNEL_GET_MODMUTEXES \
_IOR(NVHOST_IOCTL_MAGIC, 4, struct nvhost_get_param_args)
#define NVHOST_IOCTL_CHANNEL_SET_NVMAP_FD \
_IOW(NVHOST_IOCTL_MAGIC, 5, struct nvhost_set_nvmap_fd_args)
#define NVHOST_IOCTL_CHANNEL_NULL_KICKOFF \
_IOR(NVHOST_IOCTL_MAGIC, 6, struct nvhost_get_param_args)
#define NVHOST_IOCTL_CHANNEL_GET_CLK_RATE \
_IOWR(NVHOST_IOCTL_MAGIC, 9, struct nvhost_clk_rate_args)
#define NVHOST_IOCTL_CHANNEL_SET_CLK_RATE \
_IOW(NVHOST_IOCTL_MAGIC, 10, struct nvhost_clk_rate_args)
#define NVHOST_IOCTL_CHANNEL_SET_TIMEOUT \
_IOW(NVHOST_IOCTL_MAGIC, 11, struct nvhost_set_timeout_args)
#define NVHOST_IOCTL_CHANNEL_GET_TIMEDOUT \
_IOR(NVHOST_IOCTL_MAGIC, 12, struct nvhost_get_param_args)
#define NVHOST_IOCTL_CHANNEL_SET_PRIORITY \
_IOW(NVHOST_IOCTL_MAGIC, 13, struct nvhost_set_priority_args)
#define NVHOST32_IOCTL_CHANNEL_MODULE_REGRDWR \
_IOWR(NVHOST_IOCTL_MAGIC, 14, struct nvhost32_ctrl_module_regrdwr_args)
#define NVHOST32_IOCTL_CHANNEL_SUBMIT \
_IOWR(NVHOST_IOCTL_MAGIC, 15, struct nvhost32_submit_args)
#define NVHOST_IOCTL_CHANNEL_GET_SYNCPOINT \
_IOWR(NVHOST_IOCTL_MAGIC, 16, struct nvhost_get_param_arg)
#define NVHOST_IOCTL_CHANNEL_GET_WAITBASE \
_IOWR(NVHOST_IOCTL_MAGIC, 17, struct nvhost_get_param_arg)
#define NVHOST_IOCTL_CHANNEL_SET_TIMEOUT_EX \
_IOWR(NVHOST_IOCTL_MAGIC, 18, struct nvhost_set_timeout_ex_args)
#define NVHOST_IOCTL_CHANNEL_GET_CLIENT_MANAGED_SYNCPOINT \
_IOWR(NVHOST_IOCTL_MAGIC, 19, struct nvhost_get_client_managed_syncpt_arg)
#define NVHOST_IOCTL_CHANNEL_FREE_CLIENT_MANAGED_SYNCPOINT \
_IOWR(NVHOST_IOCTL_MAGIC, 20, struct nvhost_free_client_managed_syncpt_arg)
#define NVHOST_IOCTL_CHANNEL_GET_MODMUTEX \
_IOWR(NVHOST_IOCTL_MAGIC, 23, struct nvhost_get_param_arg)
#define NVHOST_IOCTL_CHANNEL_SET_CTXSWITCH \
_IOWR(NVHOST_IOCTL_MAGIC, 25, struct nvhost_set_ctxswitch_args)
/* ioctls added for 64bit compatibility */
#define NVHOST_IOCTL_CHANNEL_SUBMIT \
_IOWR(NVHOST_IOCTL_MAGIC, 26, struct nvhost_submit_args)
#define NVHOST_IOCTL_CHANNEL_MODULE_REGRDWR \
_IOWR(NVHOST_IOCTL_MAGIC, 27, struct nvhost_ctrl_module_regrdwr_args)
#define NVHOST_IOCTL_CHANNEL_MAP_BUFFER \
_IOWR(NVHOST_IOCTL_MAGIC, 28, struct nvhost_channel_map_buffer_args)
#define NVHOST_IOCTL_CHANNEL_UNMAP_BUFFER \
_IOWR(NVHOST_IOCTL_MAGIC, 29, struct nvhost_channel_unmap_buffer_args)
#define NVHOST_IOCTL_CHANNEL_SET_SYNCPOINT_NAME \
_IOW(NVHOST_IOCTL_MAGIC, 30, struct nvhost_set_syncpt_name_args)
#define NVHOST_IOCTL_CHANNEL_SET_ERROR_NOTIFIER \
_IOWR(NVHOST_IOCTL_MAGIC, 111, struct nvhost_set_error_notifier)
#define NVHOST_IOCTL_CHANNEL_OPEN \
_IOR(NVHOST_IOCTL_MAGIC, 112, struct nvhost_channel_open_args)
#define NVHOST_IOCTL_CHANNEL_LAST \
_IOC_NR(NVHOST_IOCTL_CHANNEL_OPEN)
#define NVHOST_IOCTL_CHANNEL_MAX_ARG_SIZE sizeof(struct nvhost_submit_args)
struct nvhost_ctrl_syncpt_read_args {
__u32 id;
__u32 value;
};
struct nvhost_ctrl_syncpt_incr_args {
__u32 id;
} __packed;
struct nvhost_ctrl_syncpt_wait_args {
__u32 id;
__u32 thresh;
__s32 timeout;
} __packed;
struct nvhost_ctrl_syncpt_waitex_args {
__u32 id;
__u32 thresh;
__s32 timeout;
__u32 value;
};
struct nvhost_ctrl_syncpt_waitmex_args {
__u32 id;
__u32 thresh;
__s32 timeout;
__u32 value;
__u32 tv_sec;
__u32 tv_nsec;
__u32 clock_id;
__u32 reserved;
};
struct nvhost_ctrl_sync_fence_info {
__u32 id;
__u32 thresh;
};
struct nvhost32_ctrl_sync_fence_create_args {
__u32 num_pts;
__u64 pts; /* struct nvhost_ctrl_sync_fence_info* */
__u64 name; /* const char* */
__s32 fence_fd; /* fd of new fence */
};
struct nvhost_ctrl_sync_fence_create_args {
__u32 num_pts;
__s32 fence_fd; /* fd of new fence */
__u64 pts; /* struct nvhost_ctrl_sync_fence_info* */
__u64 name; /* const char* */
};
struct nvhost_ctrl_sync_fence_name_args {
__u64 name; /* const char* for name */
__s32 fence_fd; /* fd of fence */
};
struct nvhost_ctrl_module_mutex_args {
__u32 id;
__u32 lock;
};
enum nvhost_module_id {
NVHOST_MODULE_NONE = -1,
NVHOST_MODULE_DISPLAY_A = 0,
NVHOST_MODULE_DISPLAY_B,
NVHOST_MODULE_VI,
NVHOST_MODULE_ISP,
NVHOST_MODULE_MPE,
NVHOST_MODULE_MSENC,
NVHOST_MODULE_TSEC,
NVHOST_MODULE_GPU,
NVHOST_MODULE_VIC,
NVHOST_MODULE_NVDEC,
NVHOST_MODULE_NVJPG,
NVHOST_MODULE_VII2C,
NVHOST_MODULE_NVENC1,
NVHOST_MODULE_NVDEC1,
NVHOST_MODULE_NVCSI,
NVHOST_MODULE_TSECB = (1<<16) | NVHOST_MODULE_TSEC,
};
struct nvhost_characteristics {
#define NVHOST_CHARACTERISTICS_GFILTER (1 << 0)
#define NVHOST_CHARACTERISTICS_RESOURCE_PER_CHANNEL_INSTANCE (1 << 1)
#define NVHOST_CHARACTERISTICS_SUPPORT_PREFENCES (1 << 2)
__u64 flags;
__u32 num_mlocks;
__u32 num_syncpts;
__u32 syncpts_base;
__u32 syncpts_limit;
__u32 num_hw_pts;
__u32 padding;
};
struct nvhost_ctrl_get_characteristics {
__u64 nvhost_characteristics_buf_size;
__u64 nvhost_characteristics_buf_addr;
};
struct nvhost_ctrl_check_module_support_args {
__u32 module_id;
__u32 value;
};
struct nvhost_ctrl_poll_fd_create_args {
__s32 fd;
__u32 padding;
};
struct nvhost_ctrl_poll_fd_trigger_event_args {
__s32 fd;
__u32 id;
__u32 thresh;
__u32 padding;
};
#define NVHOST_IOCTL_CTRL_SYNCPT_READ \
_IOWR(NVHOST_IOCTL_MAGIC, 1, struct nvhost_ctrl_syncpt_read_args)
#define NVHOST_IOCTL_CTRL_SYNCPT_INCR \
_IOW(NVHOST_IOCTL_MAGIC, 2, struct nvhost_ctrl_syncpt_incr_args)
#define NVHOST_IOCTL_CTRL_SYNCPT_WAIT \
_IOW(NVHOST_IOCTL_MAGIC, 3, struct nvhost_ctrl_syncpt_wait_args)
#define NVHOST_IOCTL_CTRL_MODULE_MUTEX \
_IOWR(NVHOST_IOCTL_MAGIC, 4, struct nvhost_ctrl_module_mutex_args)
#define NVHOST32_IOCTL_CTRL_MODULE_REGRDWR \
_IOWR(NVHOST_IOCTL_MAGIC, 5, struct nvhost32_ctrl_module_regrdwr_args)
#define NVHOST_IOCTL_CTRL_SYNCPT_WAITEX \
_IOWR(NVHOST_IOCTL_MAGIC, 6, struct nvhost_ctrl_syncpt_waitex_args)
#define NVHOST_IOCTL_CTRL_GET_VERSION \
_IOR(NVHOST_IOCTL_MAGIC, 7, struct nvhost_get_param_args)
#define NVHOST_IOCTL_CTRL_SYNCPT_READ_MAX \
_IOWR(NVHOST_IOCTL_MAGIC, 8, struct nvhost_ctrl_syncpt_read_args)
#define NVHOST_IOCTL_CTRL_SYNCPT_WAITMEX \
_IOWR(NVHOST_IOCTL_MAGIC, 9, struct nvhost_ctrl_syncpt_waitmex_args)
#define NVHOST32_IOCTL_CTRL_SYNC_FENCE_CREATE \
_IOWR(NVHOST_IOCTL_MAGIC, 10, struct nvhost32_ctrl_sync_fence_create_args)
#define NVHOST_IOCTL_CTRL_SYNC_FENCE_CREATE \
_IOWR(NVHOST_IOCTL_MAGIC, 11, struct nvhost_ctrl_sync_fence_create_args)
#define NVHOST_IOCTL_CTRL_MODULE_REGRDWR \
_IOWR(NVHOST_IOCTL_MAGIC, 12, struct nvhost_ctrl_module_regrdwr_args)
#define NVHOST_IOCTL_CTRL_SYNC_FENCE_SET_NAME \
_IOWR(NVHOST_IOCTL_MAGIC, 13, struct nvhost_ctrl_sync_fence_name_args)
#define NVHOST_IOCTL_CTRL_GET_CHARACTERISTICS \
_IOWR(NVHOST_IOCTL_MAGIC, 14, struct nvhost_ctrl_get_characteristics)
#define NVHOST_IOCTL_CTRL_CHECK_MODULE_SUPPORT \
_IOWR(NVHOST_IOCTL_MAGIC, 15, struct nvhost_ctrl_check_module_support_args)
#define NVHOST_IOCTL_CTRL_POLL_FD_CREATE \
_IOR(NVHOST_IOCTL_MAGIC, 16, struct nvhost_ctrl_poll_fd_create_args)
#define NVHOST_IOCTL_CTRL_POLL_FD_TRIGGER_EVENT \
_IOW(NVHOST_IOCTL_MAGIC, 17, struct nvhost_ctrl_poll_fd_trigger_event_args)
#define NVHOST_IOCTL_CTRL_LAST \
_IOC_NR(NVHOST_IOCTL_CTRL_POLL_FD_TRIGGER_EVENT)
#define NVHOST_IOCTL_CTRL_MAX_ARG_SIZE \
sizeof(struct nvhost_ctrl_syncpt_waitmex_args)
#endif