/* * include/uapi/linux/nvhost_nvdla_ioctl.h * * Tegra NvDLA 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 and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope 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, see . */ #ifndef __UAPI_LINUX_NVHOST_NVDLA_IOCTL_H #define __UAPI_LINUX_NVHOST_NVDLA_IOCTL_H #include #include #if !defined(__KERNEL__) #define __user #endif /** * 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 * @reserved reserved for future use **/ struct nvdla_mem_share_handle { __u32 share_id; __u32 offset; __u32 access_flags; __u32 reserved; }; /** * 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_TASKS_PER_SUBMIT 16 #define NVDLA_SUBMIT_FLAGS_ATOMIC (1 << 0) __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 * */ struct nvdla_mem_handle { __u32 handle; __u32 offset; }; /** * 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 NVDLA_MAX_BUFFERS_PER_TASK (6144) __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 */