Files
linux-nv-oot/include/uapi/linux/nvhost_nvdla_ioctl.h
Laxman Dewangan c526d32af3 nvdla: Use SPDX license GPL 2.0 format
Use SPDX license GPL-V2.0 format and change Nvidia
copyright year to include 2023.

Bug 4078035

Change-Id: Ie5d525f06dde5b3e3d332caff3d135198059d325
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2890634
Reviewed-by: Amit Sharma (SW-TEGRA) <amisharma@nvidia.com>
Reviewed-by: Ken Adams <kadams@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
2023-04-21 11:40:49 -07:00

278 lines
7.0 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2016-2023, NVIDIA CORPORATION. All rights reserved.
*
* Tegra NvDLA Driver
*/
#ifndef __UAPI_LINUX_NVHOST_NVDLA_IOCTL_H
#define __UAPI_LINUX_NVHOST_NVDLA_IOCTL_H
#include <linux/ioctl.h>
#include <linux/types.h>
#if !defined(__KERNEL__)
#define __user
#endif
/**
* Limits exposed to userspace
*/
#define MAX_NVDLA_PREFENCES_PER_TASK 32
#define MAX_NVDLA_POSTFENCES_PER_TASK 32
#define MAX_NVDLA_EMU_PREFENCES_PER_TASK 16
#define MAX_NVDLA_EMU_POSTFENCES_PER_TASK 16
#define MAX_NVDLA_IN_STATUS_PER_TASK MAX_NVDLA_PREFENCES_PER_TASK
#define MAX_NVDLA_OUT_STATUS_PER_TASK 36
#define MAX_NVDLA_OUT_TIMESTAMPS_PER_TASK 32
/**
* struct nvdla_queue_stat_args strcture
*
* @status queue status flags
*
*/
struct nvdla_queue_status_args {
#define NVDLA_QUEUE_FLAGS_SUSPEND (1 << 0)
#define NVDLA_QUEUE_FLAGS_RESUME (1 << 1)
__u64 status;
};
/**
* struct nvdla_ping_args structure for ping data
*
* @in_challenge challenge data to be sent
* @out_response response/CRC on challenge data from engine
*
*/
struct nvdla_ping_args {
__u32 in_challenge;
__u32 out_response;
};
/**
* struct nvdla_mem_share_handle structure for sharing memory identifier
* and its properties
*
* @share_id identifier of handle to be shared
* @offset offset within the shared memory
* @access_flags access with which memory is intended to be shared
* @import_id memory import transaction identifier
**/
struct nvdla_mem_share_handle {
__u32 share_id;
__u32 offset;
#define NVDLA_MEM_ACCESS_NONE (0U)
#define NVDLA_MEM_ACCESS_READ (1U << 0U)
#define NVDLA_MEM_ACCESS_WRITE (1U << 1U)
#define NVDLA_MEM_ACCESS_READ_WRITE (NVDLA_MEM_ACCESS_READ | NVDLA_MEM_ACCESS_WRITE)
__u32 access_flags;
__u32 import_id;
};
/**
* struct nvdla_pin_unpin_args strcture args for buffer pin/unpin
*
* @buffers list of buffers to pin/unpin'ed
* @num_buffers number of buffers count
* @reserved reserved for future use
*
*/
struct nvdla_pin_unpin_args {
__u64 buffers;
__u32 num_buffers;
__u32 reserved;
};
/**
* struct nvdla_submit_args structure for task submit
*
* @tasks pointer to task list
* @num_tasks number of tasks count
* @flags flags for task submit, like atomic
* @version version of task structure
*
*/
struct nvdla_submit_args {
__u64 tasks;
__u16 num_tasks;
#define MAX_NVDLA_TASKS_PER_SUBMIT 16
#define NVDLA_SUBMIT_FLAGS_ATOMIC (1 << 0)
#define NVDLA_SUBMIT_FLAGS_BYPASS_EXEC (1 << 1)
__u16 flags;
__u32 version;
};
/**
* struct nvdla_get_fw_ver_args strcture
*
* @version Firmware version
*
*/
struct nvdla_get_fw_ver_args {
__u32 version;
};
/**
* struct nvdla_get_q_status_args strcture
*
* @id queue id
* @fence fence assigned to queue
*
*/
struct nvdla_get_q_status_args {
__u32 id;
__u64 fence;
};
/**
* struct nvdla_mem_handle structure for memory handles
*
* @handle handle to buffer allocated in userspace
* @offset offset in buffer
* @type buffer heap type
* @reserved reserved for future use
*
*/
struct nvdla_mem_handle {
__u32 handle;
__u32 offset;
#define NVDLA_BUFFER_TYPE_MC 0U
#define NVDLA_BUFFER_TYPE_CV 1U
#define NVDLA_BUFFER_TYPE_INTERNAL 2U
__u8 type;
__u8 reserved[3];
};
/**
* struct nvdla_ioctl_submit_task structure for single task information
*
* @num_prefences number of pre-fences in task
* @num_postfences number of post-fences in task
* @num_input_task_status number of input task status
* @num_sof_task_status number of sof task status
* @num_eof_task_status number of eof task status
* @num_sof_timestamps number of sof timestamp
* @num_eof_timestamps number of eof timestamp
* @flags flags for bitwise task info embeddeing
* @reserved reserved for future use
* @prefences pointer to pre-fence struct table
* @postfences pointer to post-fence struct table
* @input_task_status pointer to input task status struct table
* @sof_task_status pointer to sof task status struct table
* @eof_task_status pointer to eof task status struct table
* @sof_timestamps pointer to sof timestamp handle list
* @eof_timestamps pointer to eof timestamp handle list
* @num_addresses total number of addressed passed in structure
* @address_list pointer to address list
* @timeout task timeout
*
*/
struct nvdla_ioctl_submit_task {
__u8 num_prefences;
__u8 num_postfences;
__u8 num_input_task_status;
__u8 num_sof_task_status;
__u8 num_eof_task_status;
__u8 num_sof_timestamps;
__u8 num_eof_timestamps;
__u8 reserved0[1];
#define MAX_NVDLA_BUFFERS_PER_TASK (384U)
__u32 num_addresses;
__u16 flags;
__u16 reserved1;
__u64 prefences;
__u64 postfences;
__u64 input_task_status;
__u64 sof_task_status;
__u64 eof_task_status;
__u64 sof_timestamps;
__u64 eof_timestamps;
__u64 address_list;
__u64 timeout;
};
/**
* struct nvdla_ioctl_emu_submit_task structure for single emulator task
* information
*
* @num_prefences number of pre-fences in task
* @num_postfences number of post-fences in task
* @prefences pointer to pre-fence struct table
* @postfences pointer to post-fence struct table
*
*/
struct nvdla_ioctl_emu_submit_task {
__u32 num_prefences;
__u32 num_postfences;
__u64 prefences;
__u64 postfences;
};
/**
* struct nvdla_fence structure for passing fence information
*
* NOTE: this will be removed soon, please use generic fence type
* from nvdev_fence.h
*/
struct nvdla_fence {
__u32 type;
#define NVDLA_FENCE_TYPE_SYNCPT 0
#define NVDLA_FENCE_TYPE_SYNC_FD 1
#define NVDLA_FENCE_TYPE_SEMAPHORE 2
#define NVDLA_FENCE_TYPE_TS_SEMAPHORE 3
__u32 syncpoint_index;
__u32 syncpoint_value;
__u32 sync_fd;
__u32 sem_handle;
__u32 sem_offset;
__u32 sem_val;
};
/**
* struct nvdla_status_notify structure for passing status notify information
*
* @handle handle to buffer allocated in userspace
* @offset offset in buffer
* @status status
*
*/
struct nvdla_status_notify {
__u32 handle;
__u32 offset;
__u32 status;
};
#define NVHOST_NVDLA_IOCTL_MAGIC 'D'
#define NVDLA_IOCTL_PING \
_IOWR(NVHOST_NVDLA_IOCTL_MAGIC, 1, struct nvdla_ping_args)
#define NVDLA_IOCTL_PIN \
_IOW(NVHOST_NVDLA_IOCTL_MAGIC, 2, struct nvdla_pin_unpin_args)
#define NVDLA_IOCTL_UNPIN \
_IOW(NVHOST_NVDLA_IOCTL_MAGIC, 3, struct nvdla_pin_unpin_args)
#define NVDLA_IOCTL_SUBMIT \
_IOW(NVHOST_NVDLA_IOCTL_MAGIC, 4, struct nvdla_submit_args)
#define NVDLA_IOCTL_SET_QUEUE_STATUS \
_IOW(NVHOST_NVDLA_IOCTL_MAGIC, 5, struct nvdla_queue_status_args)
#define NVDLA_IOCTL_GET_FIRMWARE_VERSION \
_IOWR(NVHOST_NVDLA_IOCTL_MAGIC, 6, struct nvdla_get_fw_ver_args)
#define NVDLA_IOCTL_GET_QUEUE_STATUS \
_IOWR(NVHOST_NVDLA_IOCTL_MAGIC, 7, struct nvdla_get_q_status_args)
#define NVDLA_IOCTL_EMU_TASK_SUBMIT \
_IOWR(NVHOST_NVDLA_IOCTL_MAGIC, 8, struct nvdla_submit_args)
#define NVDLA_IOCTL_ALLOC_QUEUE \
_IO(NVHOST_NVDLA_IOCTL_MAGIC, 9)
#define NVDLA_IOCTL_RELEASE_QUEUE \
_IO(NVHOST_NVDLA_IOCTL_MAGIC, 10)
#define NVDLA_IOCTL_LAST \
_IOC_NR(NVDLA_IOCTL_RELEASE_QUEUE)
#define NVDLA_IOCTL_MAX_ARG_SIZE \
sizeof(struct nvdla_pin_unpin_args)
#endif /* __UAPI_LINUX_NVHOST_NVDLA_IOCTL_H */