/* * Samsung Exynos SoC series VIPx driver * * Copyright (c) 2018 Samsung Electronics Co., Ltd * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef __TEMP_VISION_FOR_LINUX_H__ #define __TEMP_VISION_FOR_LINUX_H__ #define MAX_NUM_OF_USER_PARAMS (180) enum vs4l_graph_flag { VS4L_GRAPH_FLAG_FIXED, VS4L_GRAPH_FLAG_SHARED_AMONG_SUBCHAINS, VS4L_GRAPH_FLAG_SHARING_AMONG_SUBCHAINS_PREFERRED, VS4L_GRAPH_FLAG_SHARED_AMONG_TASKS, VS4L_GRAPH_FLAG_SHARING_AMONG_TASKS_PREFERRED, VS4L_GRAPH_FLAG_DSBL_LATENCY_BALANCING, VS4L_STATIC_ALLOC_LARGE_MPRB_INSTEAD_SMALL_FLAG, VS4L_STATIC_ALLOC_PU_INSTANCE_LSB, VS4L_GRAPH_FLAG_PRIMITIVE, VS4L_GRAPH_FLAG_EXCLUSIVE, VS4L_GRAPH_FLAG_PERIODIC, VS4L_GRAPH_FLAG_ROUTING, VS4L_GRAPH_FLAG_BYPASS, VS4L_GRAPH_FLAG_END }; struct vs4l_graph { __u32 id; __u32 priority; __u32 time; /* in millisecond */ __u32 flags; __u32 size; unsigned long addr; }; struct vs4l_format { __u32 target; __u32 format; __u32 plane; __u32 width; __u32 height; }; struct vs4l_format_list { __u32 direction; __u32 count; struct vs4l_format *formats; }; struct vs4l_param { __u32 target; unsigned long addr; __u32 offset; __u32 size; }; struct vs4l_param_list { __u32 count; struct vs4l_param *params; }; struct vs4l_ctrl { __u32 ctrl; __u32 value; }; struct vs4l_roi { __u32 x; __u32 y; __u32 w; __u32 h; }; struct vs4l_buffer { struct vs4l_roi roi; union { unsigned long userptr; __s32 fd; } m; unsigned long reserved; }; enum vs4l_buffer_type { VS4L_BUFFER_LIST, VS4L_BUFFER_ROI, VS4L_BUFFER_PYRAMID }; enum vs4l_memory { VS4L_MEMORY_USERPTR = 1, VS4L_MEMORY_VIRTPTR, VS4L_MEMORY_DMABUF }; struct vs4l_container { __u32 type; __u32 target; __u32 memory; __u32 reserved[4]; __u32 count; struct vs4l_buffer *buffers; }; enum vs4l_direction { VS4L_DIRECTION_IN = 1, VS4L_DIRECTION_OT }; enum vs4l_cl_flag { VS4L_CL_FLAG_TIMESTAMP, VS4L_CL_FLAG_PREPARE = 8, VS4L_CL_FLAG_INVALID, VS4L_CL_FLAG_DONE }; struct vs4l_container_list { __u32 direction; __u32 id; __u32 index; __u32 flags; struct timeval timestamp[6]; __u32 count; __u32 user_params[MAX_NUM_OF_USER_PARAMS]; struct vs4l_container *containers; }; #define VS4L_DF_IMAGE(a, b, c, d) ((a) | (b << 8) | (c << 16) | (d << 24)) #define VS4L_DF_IMAGE_RGB VS4L_DF_IMAGE('R', 'G', 'B', '2') #define VS4L_DF_IMAGE_RGBX VS4L_DF_IMAGE('R', 'G', 'B', 'A') #define VS4L_DF_IMAGE_NV12 VS4L_DF_IMAGE('N', 'V', '1', '2') #define VS4L_DF_IMAGE_NV21 VS4L_DF_IMAGE('N', 'V', '2', '1') #define VS4L_DF_IMAGE_YV12 VS4L_DF_IMAGE('Y', 'V', '1', '2') #define VS4L_DF_IMAGE_I420 VS4L_DF_IMAGE('I', '4', '2', '0') #define VS4L_DF_IMAGE_I422 VS4L_DF_IMAGE('I', '4', '2', '2') #define VS4L_DF_IMAGE_YUYV VS4L_DF_IMAGE('Y', 'U', 'Y', 'V') #define VS4L_DF_IMAGE_YUV4 VS4L_DF_IMAGE('Y', 'U', 'V', '4') #define VS4L_DF_IMAGE_U8 VS4L_DF_IMAGE('U', '0', '0', '8') #define VS4L_DF_IMAGE_U16 VS4L_DF_IMAGE('U', '0', '1', '6') #define VS4L_DF_IMAGE_U32 VS4L_DF_IMAGE('U', '0', '3', '2') #define VS4L_DF_IMAGE_S16 VS4L_DF_IMAGE('S', '0', '1', '6') #define VS4L_DF_IMAGE_S32 VS4L_DF_IMAGE('S', '0', '3', '2') #define VS4L_VERTEXIOC_S_GRAPH _IOW('V', 0, struct vs4l_graph) #define VS4L_VERTEXIOC_S_FORMAT _IOW('V', 1, struct vs4l_format_list) #define VS4L_VERTEXIOC_S_PARAM _IOW('V', 2, struct vs4l_param_list) #define VS4L_VERTEXIOC_S_CTRL _IOW('V', 3, struct vs4l_ctrl) #define VS4L_VERTEXIOC_STREAM_ON _IO('V', 4) #define VS4L_VERTEXIOC_STREAM_OFF _IO('V', 5) #define VS4L_VERTEXIOC_QBUF _IOW('V', 6, struct vs4l_container_list) #define VS4L_VERTEXIOC_DQBUF _IOW('V', 7, struct vs4l_container_list) #endif