/* * Copyright (C) 2019-2024 Amlogic, Inc. All rights reserved. * */ #ifndef __CVE_H__ #define __CVE_H__ #include "aml_comm_cve.h" #include "aml_cve.h" #include "cve_reg.h" #include #include #include #define AML_MOD_CVE "cve" #define AML_ASSERT(expr) \ do { \ if (!(expr)) { \ panic("\nASSERT at:\n" \ " >Function : %s\n" \ " >Line No. : %d\n" \ " >Condition: %s\n", \ __FUNCTION__, __LINE__, #expr); \ } \ } while (0) #define CVE_LOG(level, fmt...) \ do { \ printk(fmt); \ } while (0) #define CVE_ERR_LOG(fmt, ...) \ do { \ CVE_LOG("[Func]:%s [Line]:%d [Error]:" fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ } while (0) #define CMD_HANDLE_MAX 0x10000000 #define CVE_ALIGN_DOWN(x, g) (((x) / (g)) * (g)) #define CVE_ALIGN_UP(x, g) ((((x) + (g)-1) / (g)) * (g)) #define CVE_ALIGN 16 #define CVE_REG_ADDR_OFFSET(reg) ((((reg)-CVE_REG_BASE) << 2)) #define HIST_OUTPUT_PROCESS_LUT (1 << 0) #define NCC_OUTPUT_PROCESS_REG (1 << 1) #define CCL_OUTPUT_PROCESS_REG (1 << 2) #define MATCH_BG_MODEL_OUTPUT_PROCESS_REG (1 << 3) #define UPDATE_BG_MODEL_OUTPUT_PROCESS_REG (1 << 4) #define LK_OPTICAL_FLOWPYR_OUTPUT_PROCESS_REG (1 << 5) #define STCORNER_OUTPUT_PROCESS_REG (1 << 6) #define CANNY_OUTPUT_PROCESS_REG (1 << 7) #define TOF_OUTPUT_PROCESS_LUT (1 << 8) #define SUB_OUTPUT_PROCESS_REG (1 << 9) #define ADD_OUTPUT_PROCESS_REG (1 << 10) #define MAP_INPUT_PROCESS_LUT (1 << 0) #define EQUALIZE_HIST_INPUT_PROCESS_LUT (1 << 1) #define TOF_INPUT_PROCESS_LUT (1 << 2) #define CVE_SRC_MAX 8 #define CVE_DST_MAX 5 #define CVE_LUMA_MULTI_CMD_MAX CVE_LUMA_RECT_MAX #define IOC_TYPE_CVE 'F' #define CVE_OP_DMA _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_DMA, CVE_OP_DMA_T) #define CVE_OP_LUMA_STAT _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_LUMA_STAT, CVE_OP_LUAM_STAT_ARRAY_T) #define CVE_OP_FILTER _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_FILTER, CVE_OP_FILTER_T) #define CVE_OP_CSC _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_CSC, CVE_OP_CSC_T) #define CVE_OP_FILTER_AND_CSC \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_FILTER_AND_CSC, CVE_OP_FILTER_AND_CSC_T) #define CVE_OP_DILATE _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_DILATE, CVE_OP_DILATE_T) #define CVE_OP_ERODE _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_ERODE, CVE_OP_ERODE_T) #define CVE_OP_BERNSEN _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_ERODE, CVE_OP_BERNSEN_T) #define CVE_OP_THRESH _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_THRESH, CVE_OP_THRESH_T) #define CVE_OP_SOBEL _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_SOBEL, CVE_OP_SOBEL_T) #define CVE_OP_INTEG _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_INTEG, CVE_OP_INTEG_T) #define CVE_OP_HIST _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_HIST, CVE_OP_HIST_T) #define CVE_OP_NCC _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_NCC, CVE_OP_NCC_T) #define CVE_OP_THRESH_S16 _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_THRESH_S16, CVE_OP_THRESH_S16_T) #define CVE_OP_THRESH_U16 _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_THRESH_U16, CVE_OP_THRESH_U16_T) #define CVE_OP_ORD_STAT_FILTER \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_ORD_STAT_FILTER, CVE_OP_ORD_STAT_FILTER_T) #define CVE_OP_16BIT_TO_8BIT \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_16BIT_TO_8BIT, CVE_OP_16BIT_TO_8BIT_T) #define CVE_OP_MATCH_BG_MODEL \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_MATCH_BG_MODEL, CVE_OP_MATCH_BG_MODEL_T) #define CVE_OP_UPDATE_BG_MODEL \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_UPDATE_BG_MODEL, CVE_OP_UPDATE_BG_MODEL_T) #define CVE_OP_GRAD_FG _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_GRAD_FG, CVE_OP_GRAD_FG_T) #define CVE_OP_LBP _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_LBP, CVE_OP_LBP_T) #define CVE_OP_GMM _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_GMM, CVE_OP_GMM_T) #define CVE_OP_EQUALIZE_HIST \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_EQUALIZE_HIST, CVE_OP_EQUALIZE_HIST_T) #define CVE_OP_CCL _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_CCL, CVE_OP_CCL_T) #define CVE_OP_CANNY_HYS_EDGE \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_CANNY_HYS_EDGE, CVE_OP_CANNY_HYS_EDGE_T) #define CVE_OP_ST_CANDI_CORNER \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_ST_CANDI_CORNER, CVE_OP_ST_CANDI_CORNER_T) #define CVE_OP_SAD _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_SAD, CVE_OP_SAD_T) #define CVE_OP_LK_OPTICAL_FLOW_PYR \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_LK_OPTICAL_FLOW_PYR, CVE_OP_LK_OPTICAL_FLOW_PYR_T) #define CVE_OP_BUILD_LK_OPTICAL_FLOW_PYR \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_BUILD_LK_OPTICAL_FLOW_PYR, CVE_OP_BUILD_LK_OPTICAL_FLOW_PYR_T) #define CVE_OP_MAP _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_MAP, CVE_OP_MAP_T) #define CVE_OP_NORM_GRAD _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_NORM_GRAD, CVE_OP_NORM_GRAD_T) #define CVE_OP_AND _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_AND, CVE_OP_AND_T) #define CVE_OP_OR _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_OR, CVE_OP_OR_T) #define CVE_OP_XOR _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_XOR, CVE_OP_XOR_T) #define CVE_OP_SUB _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_SUB, CVE_OP_SUB_T) #define CVE_OP_ADD _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_ADD, CVE_OP_ADD_T) #define CVE_OP_ADD_MAP255TO1 \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_ADD_MAP_255_TO1, CVE_OP_ADD_MAP255TO1_T) #define CVE_OP_DOT _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_DOT, CVE_OP_DOT_T) #define CVE_OP_MAG_AND_ANG _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_MAG_AND_ANG, CVE_OP_MAG_AND_ANG_T) //#define CVE_OP_TOF _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_TOF, CVE_OP_TOF_T) #define CVE_OP_KCF_GET_YF _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_KCF_GET_YF, CVE_OP_KCF_GET_YF_T) #define CVE_OP_KCF_GET_FEATURE \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_KCF_GET_FEATURE, CVE_OP_KCF_GET_FEATURE_T) #define CVE_OP_KCF_TRAIN_AND_TRACK \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_KCF_TRAIN_AND_TRACK, CVE_OP_KCF_TRAIN_AND_TRACK_T) #define CVE_OP_LINE_FILTER _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_LINE_FILTER, CVE_OP_LINE_FILTER_T) #define CVE_OP_NOISE_REMOVE _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_NOISE_REMOVE, CVE_OP_NOISE_REMOVE_T) #define CVE_OP_ADP_THRESH _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_ADP_THRESH, CVE_OP_ADP_THRESH_T) #define CVE_OP_REDUCE _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_REDUCE, CVE_OP_REDUCE_T) #define CVE_OP_PERSP_TRANS _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_PERSP_TRANS, CVE_OP_PERSP_TRANS_T) #define CVE_OP_FAST_GUIDED_FILTER \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_FAST_GUIDED_FILTER, CVE_OP_FAST_GUIDE_FILTER_T) //#define CVE_OP_TOF2_MATF _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_TOF2_MATF, CVE_OP_TOF2_T) //#define CVE_OP_TOF2_PRE_PROC _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_TOF2_PRE_PROC, CVE_OP_TOF2_T) //#define CVE_OP_TOF2_PST _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_TOF2_PST, CVE_OP_TOF2_T) #define CVE_OP_HOG _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_HOG, CVE_OP_HOG_T) #define CVE_OP_RESIZE _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_RESIZE, CVE_OP_RESIZE_T) #define CVE_OP_SVM_KERNEL _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_SVM_KERNEL, CVE_OP_SVM_KERNEL_T) #define CVE_OP_SVM_PREDICT _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_SVM_PREDICT, CVE_OP_SVM_PREDICT_T) #define CVE_OP_RESHAPS _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_RESHAPS, CVE_OP_RESHAPE_T) #define CVE_OP_IM2COL _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_IM2COL, CVE_OP_IM2COL_T) #define CVE_OP_GEMM _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_GEMM, CVE_OP_GEMM_T) #define CVE_OP_POOLING _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_POOLING, CVE_OP_POOLING_T) #define CVE_OP_AIISP_TNR_PRE_PROC \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_AIISP_TNR_PRE_PROC, CVE_OP_AIISP_TNR_PRE_PROCESS_T) #define CVE_OP_AIISP_TNR_POST_PROC \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_AIISP_TNR_POST_PROC, CVE_OP_AIISP_TNR_POST_PROCESS_T) #define CVE_OP_AIISP_SNR_POST_PROC \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_AIISP_SNR_POST_PROC, CVE_OP_AIISP_SNR_POST_PROCESS_T) #define CVE_OP_AIISP_TNR_MFNR_PROC \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_AIISP_TNR_MFNR_PROC, CVE_OP_AIISP_TNR_MFNR_PROCESS_T) #define CVE_OP_AIISP_SNR_MFNR_PROC \ _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_AIISP_SNR_MFNR_PROC, CVE_OP_AIISP_SNR_MFNR_PROCESS_T) #define CVE_OP_QUERY _IOWR(IOC_TYPE_CVE, IOC_NR_CVE_OP_QUERY, CVE_OP_QUERY_T) typedef enum { CVE_OP_TYPE_DMA = 0, CVE_OP_TYPE_FILTER = 1, CVE_OP_TYPE_CSC = 2, CVE_OP_TYPE_FILTER_AND_CSC = 3, CVE_OP_TYPE_SOBEL = 4, CVE_OP_TYPE_MAG_AND_ANG = 5, CVE_OP_TYPE_MATCH_BG_MODEL = 6, CVE_OP_TYPE_DILATE_AND_ERODE = 7, CVE_OP_TYPE_THRESH = 8, CVE_OP_TYPE_ALU = 9, CVE_OP_TYPE_INTEG = 10, CVE_OP_TYPE_HIST = 11, CVE_OP_TYPE_THRESH_S16 = 12, CVE_OP_TYPE_THRESH_U16 = 13, CVE_OP_TYPE_16BIT_TO_8BIT = 14, CVE_OP_TYPE_ORD_STAT_FILTER = 15, CVE_OP_TYPE_MAP = 16, CVE_OP_TYPE_EQUALIZE_HIST = 17, CVE_OP_TYPE_NCC = 18, CVE_OP_TYPE_CCL = 19, CVE_OP_TYPE_GMM = 20, CVE_OP_TYPE_CANNY_HYS_EDGE = 21, CVE_OP_TYPE_LBP = 22, CVE_OP_TYPE_NROM_GRAD = 23, CVE_OP_TYPE_BULID_LK_OPTICAL_FLOW_PYR = 24, CVE_OP_TYPE_LK_OPTIAL_FLOW_PRY = 25, CVE_OP_TYPE_ST_CANDI_CORNER = 26, CVE_OP_TYPE_SAD = 27, CVE_OP_TYPE_GRAD_FG = 28, CVE_OP_TYPE_UPDATE_BG_MODEL = 29, CVE_OP_TYPE_TOF = 30, CVE_OP_TYPE_KCF_GET_YF = 31, CVE_OP_TYPE_KCF_GET_FEATURE = 32, CVE_OP_TYPE_KCF_TRAIN_AND_TRACK = 33, CVE_OP_TYPE_LINE_FILTER = 34, CVE_OP_TYPE_NOISE_REMOVE = 35, CVE_OP_TYPE_ADP_THRESH = 36, CVE_OP_TYPE_REDUCE = 37, CVE_OP_TYPE_PERSP_TRANS = 38, CVE_OP_TYPE_FAST_GUIDED_FILTER = 39, CVE_OP_TYPE_TOF2_MATF = 40, CVE_OP_TYPE_TOF2_PRE_PROC = 41, CVE_OP_TYPE_TOF2_PST = 42, CVE_OP_TYPE_HOG = 43, CVE_OP_TYPE_RESIZE = 44, CVE_OP_TYPE_SVM_KERNEL = 45, CVE_OP_TYPE_SVM_PREDICT = 46, CVE_OP_TYPE_RESHAPS = 47, CVE_OP_TYPE_IM2COL = 48, CVE_OP_TYPE_GEMM = 49, CVE_OP_TYPE_POOLING = 50, CVE_OP_TYPE_AIISP_TNR_PRE_PROC = 51, CVE_OP_TYPE_AIISP_TNR_POST_PROC = 52, CVE_OP_TYPE_AIISP_SNR_POST_PROC = 53, CVE_OP_TYPE_BUTT, } cve_op_type_e; typedef enum { IOC_NR_CVE_OP_DMA, IOC_NR_CVE_OP_LUMA_STAT, IOC_NR_CVE_OP_FILTER, IOC_NR_CVE_OP_CSC, IOC_NR_CVE_OP_FILTER_AND_CSC, IOC_NR_CVE_OP_DILATE, IOC_NR_CVE_OP_ERODE, IOC_NR_CVE_OP_THRESH, IOC_NR_CVE_OP_SOBEL, IOC_NR_CVE_OP_INTEG, IOC_NR_CVE_OP_HIST, IOC_NR_CVE_OP_NCC, IOC_NR_CVE_OP_THRESH_S16, IOC_NR_CVE_OP_THRESH_U16, IOC_NR_CVE_OP_ORD_STAT_FILTER, IOC_NR_CVE_OP_16BIT_TO_8BIT, IOC_NR_CVE_OP_MATCH_BG_MODEL, IOC_NR_CVE_OP_UPDATE_BG_MODEL, IOC_NR_CVE_OP_GRAD_FG, IOC_NR_CVE_OP_LBP, IOC_NR_CVE_OP_GMM, IOC_NR_CVE_OP_EQUALIZE_HIST, IOC_NR_CVE_OP_CCL, IOC_NR_CVE_OP_CANNY_HYS_EDGE, IOC_NR_CVE_OP_ST_CANDI_CORNER, IOC_NR_CVE_OP_SAD, IOC_NR_CVE_OP_LK_OPTICAL_FLOW_PYR, IOC_NR_CVE_OP_BUILD_LK_OPTICAL_FLOW_PYR, IOC_NR_CVE_OP_MAP, IOC_NR_CVE_OP_NORM_GRAD, IOC_NR_CVE_OP_AND, IOC_NR_CVE_OP_OR, IOC_NR_CVE_OP_XOR, IOC_NR_CVE_OP_SUB, IOC_NR_CVE_OP_ADD, IOC_NR_CVE_OP_ADD_MAP_255_TO1, IOC_NR_CVE_OP_DOT, IOC_NR_CVE_OP_MAG_AND_ANG, IOC_NR_CVE_OP_TOF, IOC_NR_CVE_OP_KCF_GET_YF, IOC_NR_CVE_OP_KCF_GET_FEATURE, IOC_NR_CVE_OP_KCF_TRAIN_AND_TRACK, IOC_NR_CVE_OP_LINE_FILTER, IOC_NR_CVE_OP_NOISE_REMOVE, IOC_NR_CVE_OP_ADP_THRESH, IOC_NR_CVE_OP_REDUCE, IOC_NR_CVE_OP_PERSP_TRANS, IOC_NR_CVE_OP_FAST_GUIDED_FILTER, IOC_NR_CVE_OP_TOF2_MATF, IOC_NR_CVE_OP_TOF2_PRE_PROC, IOC_NR_CVE_OP_TOF2_PST, IOC_NR_CVE_OP_HOG, IOC_NR_CVE_OP_RESIZE, IOC_NR_CVE_OP_SVM_KERNEL, IOC_NR_CVE_OP_SVM_PREDICT, IOC_NR_CVE_OP_RESHAPS, IOC_NR_CVE_OP_IM2COL, IOC_NR_CVE_OP_GEMM, IOC_NR_CVE_OP_POOLING, IOC_NR_CVE_OP_AIISP_TNR_PRE_PROC, IOC_NR_CVE_OP_AIISP_TNR_POST_PROC, IOC_NR_CVE_OP_AIISP_SNR_POST_PROC, IOC_NR_CVE_OP_AIISP_TNR_MFNR_PROC, IOC_NR_CVE_OP_AIISP_SNR_MFNR_PROC, IOC_NR_CVE_OP_QUERY, } ioc_nr_cve_op_type_e; typedef enum { CVE_ALU_SEL_SUB = 0, CVE_ALU_SEL_OR = 1, CVE_ALU_SEL_XOR = 2, CVE_ALU_SEL_AND = 3, CVE_ALU_SEL_ADD = 4, CVE_ALU_SEL_ADD_MAP_255TO1 = 5, CVE_ALU_SEL_DOT = 6, } cve_alu_sel_e; /* Dma type */ typedef enum { CVE_MODE_DMA, CVE_MODE_LUMA_STAT, } CVE_DMA_OP_MODE_E; /* Alu type */ typedef enum { CVE_MODE_ERODE, CVE_MODE_DILATE, CVE_MODE_BERNSEN, } CVE_ERODE_OR_DILATE_OP_MODE_E; /* Alu type */ typedef enum { CVE_ALU_MODE_AND = 0x0, CVE_ALU_MODE_OR = 0x1, CVE_ALU_MODE_XOR = 0x2, CVE_ALU_MODE_ADD = 0x3, CVE_ALU_MODE_SUB = 0x4, CVE_ALU_MODE_ADD_MAP_255_TO1 = 0x5, CVE_ALU_MODE_DOT = 0x6, } CVE_ALU_OP_MODE_E; typedef struct { CVE_HANDLE cveHandle; CVE_DATA_T stSrcDATA; CVE_DST_DATA_T stDstDATA; CVE_DMA_CTRL_T stDmaCtrl; bool bInstant; } CVE_OP_DMA_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_MEM_INFO_T stDstMem; CVE_RECT_U16_T astCveLumaRect[CVE_LUMA_RECT_MAX]; CVE_LUMA_STAT_ARRAY_CTRL_T stLumaStatArrayCtrl; bool bInstant; } CVE_OP_LUAM_STAT_ARRAY_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_DST_MEM_INFO_T stDstMem; CVE_FILTER_CTRL_T stFilterCtrl; bool bInstant; } CVE_OP_FILTER_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_CSC_CTRL_T stCscCtrl; bool bInstant; } CVE_OP_CSC_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_FILTER_AND_CSC_CTRL_T stFilterCscCtrl; bool bInstant; } CVE_OP_FILTER_AND_CSC_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_DILATE_CTRL_T stDilateCtrl; bool bInstant; } CVE_OP_DILATE_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_ERODE_CTRL_T stErodeCtrl; bool bInstant; } CVE_OP_ERODE_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_BERNSEN_CTRL_T stBernsenCtrl; bool bInstant; } CVE_OP_BERNSEN_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_THRESH_CTRL_T stThreshCtrl; bool bInstant; } CVE_OP_THRESH_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_EQUALIZE_HIST_CTRL_T stEqualizeHistCtrl; bool bInstant; } CVE_OP_EQUALIZE_HIST_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_INTEG_CTRL_T stIntegCtrl; bool bInstant; } CVE_OP_INTEG_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_MEM_INFO_T stDstMem; CVE_HIST_CTRL_T stHistCtrl; bool bInstant; } CVE_OP_HIST_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_DST_MEM_INFO_T stBlob; CVE_CCL_CTRL_T stCclCtrl; bool bInstant; } CVE_OP_CCL_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrc; CVE_DST_IMAGE_T stLabel; CVE_DST_IMAGE_T stCandiCorner; CVE_DST_MEM_INFO_T stCandiCornerPoint; CVE_ST_CANDI_CORNER_CTRL_T stStCandiCornerCtrl; bool bInstant; } CVE_OP_ST_CANDI_CORNER_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage1; CVE_SRC_IMAGE_T stSrcImage2; CVE_DST_MEM_INFO_T stDstmem; CVE_NCC_CTRL_T stNccCtrl; bool bInstant; } CVE_OP_NCC_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_THRESH_S16_CTRL_T stThreshS16Ctrl; bool bInstant; } CVE_OP_THRESH_S16_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_THRESH_U16_CTRL_T stThreshU16Ctrl; bool bInstant; } CVE_OP_THRESH_U16_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_LBP_CTRL_T stLbpCtrl; bool bInstant; } CVE_OP_LBP_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_ORD_STAT_FILTER_CTRL_T stOrdStatFltCtrl; bool bInstant; } CVE_OP_ORD_STAT_FILTER_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_16BIT_TO_8BIT_CTRL_T st16BitTo8BitCtrl; bool bInstant; } CVE_OP_16BIT_TO_8BIT_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stCurImg; CVE_SRC_IMAGE_T stPreImg; CVE_MEM_INFO_T stBgModel; CVE_DST_IMAGE_T stFg; CVE_DST_IMAGE_T stBg; CVE_DST_IMAGE_T stCurDiffBg; CVE_DST_IMAGE_T stFrmDiff; CVE_MATCH_BG_MODEL_CTRL_T stMatchBgModelCtrl; bool bInstant; } CVE_OP_MATCH_BG_MODEL_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stCurImg; CVE_MEM_INFO_T stBgModel1; CVE_MEM_INFO_T stBgModel2; CVE_DST_MEM_INFO_T stStatData; CVE_UPDATE_BG_MODEL_CTRL_T stUpdateBgModelCtrl; bool bInstant; } CVE_OP_UPDATE_BG_MODEL_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stFg; CVE_SRC_IMAGE_T stCurGrad; CVE_SRC_IMAGE_T stBgGrad; CVE_DST_IMAGE_T stGradFg; CVE_GRAD_FG_CTRL_T stGradFgCtrl; bool bInstant; } CVE_OP_GRAD_FG_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_SRC_IMAGE_T stFactor; CVE_DST_IMAGE_T stFg; CVE_DST_IMAGE_T stBg; CVE_MEM_INFO_T stModel; CVE_GMM_CTRL_T stGmmCtrl; bool bInstant; } CVE_OP_GMM_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stEdge; CVE_DST_MEM_INFO_T stStack; CVE_CANNY_HYS_EDGE_CTRL_T stCannyHysEdgeCtrl; bool bInstant; } CVE_OP_CANNY_HYS_EDGE_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage1; CVE_SRC_IMAGE_T stSrcImage2; CVE_DST_IMAGE_T stSad; CVE_DST_IMAGE_T stThr; CVE_SAD_CTRL_T stSadCtrl; bool bInstant; } CVE_OP_SAD_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T astSrcPrevPyr[4]; CVE_SRC_IMAGE_T astSrcNextPyr[4]; CVE_SRC_MEM_INFO_T stPrevPts; CVE_MEM_INFO_T stNextPts; CVE_DST_MEM_INFO_T stStatus; CVE_DST_MEM_INFO_T stErr; CVE_LK_OPTICAL_FLOW_PYR_CTRL_T stLkOptiFlowPyrCtrl; bool bInstant; } CVE_OP_LK_OPTICAL_FLOW_PYR_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcPyr; CVE_DST_IMAGE_T astDstPyr[4]; CVE_BUILD_LK_OPTICAL_FLOW_PYR_CTRL_T stLkBuildOptiFlowPyrCtrl; bool bInstant; } CVE_OP_BUILD_LK_OPTICAL_FLOW_PYR_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_SRC_MEM_INFO_T stMap; CVE_DST_IMAGE_T stDstImage; CVE_MAP_CTRL_T stMapCtrl; bool bInstant; } CVE_OP_MAP_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstMag; CVE_DST_IMAGE_T stDstAng; CVE_MAG_AND_ANG_CTRL_T stMagAndAngCtrl; bool bInstant; } CVE_OP_MAG_AND_ANG_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage0; CVE_SRC_IMAGE_T stSrcImage1; CVE_DST_IMAGE_T stDst; CVE_AND_CTRL_T stAndCtrl; CVE_OR_CTRL_T stOrCtrl; CVE_XOR_CTRL_T stXorCtrl; CVE_DOT_CTRL_T stDotCtrl; bool bInstant; } CVE_OP_AND_T; typedef CVE_OP_AND_T CVE_OP_OR_T; typedef CVE_OP_AND_T CVE_OP_XOR_T; typedef CVE_OP_AND_T CVE_OP_DOT_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage0; CVE_SRC_IMAGE_T stSrcImage1; CVE_DST_MEM_INFO_T stDstMem; CVE_DST_IMAGE_T stDst; CVE_SUB_CTRL_T stSubCtrl; bool bInstant; } CVE_OP_SUB_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage0; CVE_SRC_IMAGE_T stSrcImage1; CVE_DST_MEM_INFO_T stDstMem; CVE_DST_IMAGE_T stDst; CVE_ADD_CTRL_T stAddCtrl; CVE_ADD_MAP_255_TO_1_CTRL_T stAddMap255To1Ctrl; bool bInstant; } CVE_OP_ADD_T; typedef CVE_OP_ADD_T CVE_OP_ADD_MAP255TO1_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstH; CVE_DST_IMAGE_T stDstV; CVE_DST_IMAGE_T stDstHV; CVE_NORM_GRAD_CTRL_T stNormGradCtrl; bool bInstant; } CVE_OP_NORM_GRAD_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstH; CVE_DST_IMAGE_T stDstV; CVE_SOBEL_CTRL_T stSobelCtrl; bool bInstant; } CVE_OP_SOBEL_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_MEM_INFO_T stSrcMem; CVE_DST_MEM_INFO_T stDstMem; CVE_KCF_GET_YF_CTRL_T stKcfGetYfCtrl; bool bInstant; } CVE_OP_KCF_GET_YF_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_MEM_INFO_T stDstMem0; CVE_DST_MEM_INFO_T stDstMem1; CVE_KCF_GET_FEATURE_CTRL_T stKcfGetFeatureCtrl; bool bInstant; } CVE_OP_KCF_GET_FEATURE_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_MEM_INFO_T stSrcMem1; CVE_SRC_MEM_INFO_T stSrcMem2; CVE_SRC_MEM_INFO_T stSrcMem3; CVE_DST_MEM_INFO_T stDstMem0; CVE_DST_MEM_INFO_T stDstMem1; CVE_DST_MEM_INFO_T stDstMem2; CVE_KCF_TRAIN_AND_TRACK_CTRL_T stKcfTrainAndTrackCtrl; bool bInstant; } CVE_OP_KCF_TRAIN_AND_TRACK_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_LINE_FILTER_CTRL_T stLineFilterCtrl; bool bInstant; } CVE_OP_LINE_FILTER_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_NOISE_REMOVE_CTRL_T stNoiseRemoveCtrl; bool bInstant; } CVE_OP_NOISE_REMOVE_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage0; CVE_SRC_IMAGE_T stSrcImage1; CVE_DST_IMAGE_T stDstImage; CVE_ADP_THRESH_CTRL_T stAdpThreshCtrl; bool bInstant; } CVE_OP_ADP_THRESH_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_MEM_INFO_T stDstMem0; CVE_DST_MEM_INFO_T stDstMem1; CVE_DST_MEM_INFO_T stDstMem2; CVE_REDUCE_CTRL_T stReduceCtrl; bool bInstant; } CVE_OP_REDUCE_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_PERSP_TRANS_CTRL_T stPerspTransCtrl; bool bInstant; } CVE_OP_PERSP_TRANS_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage0; CVE_SRC_IMAGE_T stSrcImage1; CVE_DST_IMAGE_T stDstImage0; CVE_DST_IMAGE_T stDstImage1; CVE_DST_IMAGE_T stDstImage2; CVE_FAST_GUIDE_FILTER_CTRL_T stFastGuideFilterCtrl; bool bInstant; } CVE_OP_FAST_GUIDE_FILTER_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_SRC_MEM_INFO_T stSrcMem; CVE_DST_IMAGE_T stDstImage; CVE_HOG_CTRL_T stHogCtrl; bool bInstant; } CVE_OP_HOG_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_SRC_IMAGE_T stSrcImage1; CVE_DST_IMAGE_T stDstImage; CVE_DST_IMAGE_T stDstImage1; CVE_RESIZE_CTRL_T stResizeCtrl; bool bInstant; } CVE_OP_RESIZE_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_MEM_INFO_T stSrcMem0; CVE_SRC_MEM_INFO_T stSrcMem1; CVE_DST_MEM_INFO_T stDstMem; CVE_SVM_KERNEL_CTRL_T stSvmKernelCtrl; bool bInstant; } CVE_OP_SVM_KERNEL_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_MEM_INFO_T stSrcMem0; CVE_SRC_MEM_INFO_T stSrcMem1; CVE_DST_MEM_INFO_T stDstMem0; CVE_DST_MEM_INFO_T stDstMem1; CVE_SVM_PREDICT_CTRL_T stSvmPredictCtrl; bool bInstant; } CVE_OP_SVM_PREDICT_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_RESHAPE_CTRL_T stReShapeCtrl; bool bInstant; } CVE_OP_RESHAPE_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage; CVE_DST_IMAGE_T stDstImage; CVE_IM2COL_CTRL_T stImToColCtrl; bool bInstant; } CVE_OP_IM2COL_T; typedef struct { CVE_HANDLE cveHandle; CVE_SRC_IMAGE_T stSrcImage0; CVE_SRC_IMAGE_T stSrcImage1; CVE_SRC_IMAGE_T stSrcImage2; CVE_DST_IMAGE_T stDstImage; CVE_GEMM_CTRL_T stGemmCtrl; bool bInstant; } CVE_OP_GEMM_T; typedef struct { CVE_HANDLE cveHandle; CVE_IMAGE_T stSrcImage; CVE_IMAGE_T stDstImage; CVE_POOLING_CTRL_T stPoolingCtrl; bool bInstant; } CVE_OP_POOLING_T; typedef struct { CVE_HANDLE cveHandle; CVE_RAW_AIISP_T stSrcRaw0; CVE_RAW_AIISP_T stSrcRaw1; CVE_IMAGE_T stDstImage; CVE_AIISP_TNR_PRE_PROCESS_CTRL_T stAiIspTnrPreProcessCtrl; bool bInstant; } CVE_OP_AIISP_TNR_PRE_PROCESS_T; typedef struct { CVE_HANDLE cveHandle; CVE_RAW_AIISP_T stSrcRaw0; CVE_RAW_AIISP_T stSrcRaw1; CVE_SRC_IMAGE_T stSrcImage2; CVE_IMAGE_T stSrcImage3; CVE_IMAGE_T stDstImage0; CVE_RAW_AIISP_T stDstRaw1; CVE_DST_IMAGE_T stDstImage2; CVE_DST_IMAGE_T stDstImage3; CVE_AIISP_TNR_POST_PROCESS_CTRL_T stAiIspTnrPostProcessCtrl; bool bInstant; } CVE_OP_AIISP_TNR_POST_PROCESS_T; typedef struct { CVE_HANDLE cveHandle; CVE_IMAGE_T stSrcImage0; CVE_IMAGE_T stSrcImage1; CVE_SRC_IMAGE_T stSrcImage2; CVE_RAW_AIISP_T stDstRaw; CVE_AIISP_SNR_POST_PROCESS_CTRL_T stAiIspSnrPostProcessCtrl; bool bInstant; } CVE_OP_AIISP_SNR_POST_PROCESS_T; typedef struct { CVE_HANDLE cveHandle; CVE_RAW_AIISP_T stSrcRaw; CVE_IMAGE_T stDstImage; CVE_AIISP_TNR_MFNR_PROCESS_CTRL_T stAiIspTnrMfnrProcessCtrl; bool bInstant; } CVE_OP_AIISP_TNR_MFNR_PROCESS_T; typedef struct { CVE_HANDLE cveHandle; CVE_RAW_AIISP_T stSrcRaw; CVE_RAW_AIISP_T stDstRaw; CVE_AIISP_SNR_MFNR_PROCESS_CTRL_T stAiIspSnrMfnrProcessCtrl; bool bInstant; } CVE_OP_AIISP_SNR_MFNR_PROCESS_T; typedef struct { CVE_HANDLE cveHandle; bool bBlock; bool bFinish; } CVE_OP_QUERY_T; typedef struct { struct device *dev; phys_addr_t phys_start; unsigned long virt_start; unsigned long size; } cve_dma_buffer_t; typedef struct { unsigned long src_addr[CVE_SRC_MAX]; unsigned long dst_addr[CVE_DST_MAX]; unsigned int src_stride[CVE_SRC_MAX]; unsigned int dst_stride[CVE_DST_MAX]; unsigned short src_width; unsigned short src_height; unsigned short dst_width; unsigned short dst_height; unsigned short xstart; unsigned short ystart; unsigned short xSize; unsigned short ySize; } cve_comm_init_params_t; typedef struct { int task_id; bool task_started; unsigned long virt_addr; unsigned long phys_addr; unsigned int total_cmd_num; unsigned int total_cmd_line_num; bool bInvalid; struct list_head cmd_list; struct list_head list; } cve_task_desc_t; typedef struct { cve_op_type_e op_type; unsigned int op_mode; CVE_HANDLE cveHandle; unsigned long virt_addr; unsigned long phys_addr; unsigned int cmd_line_num; unsigned int instant; struct list_head list; cve_task_desc_t *task_desc; } cve_cmd_desc_t; typedef struct { unsigned long phys_start; unsigned long virt_start; unsigned int task_cmdq_index; unsigned int wait_cmdq_num; unsigned int total_cmdq_max; unsigned int total_task_max; unsigned int task_instant; cve_task_desc_t *task_descs; struct list_head idle_list; struct list_head wait_list; cve_cmd_desc_t *cmd_descs; unsigned int cmd_descs_index; } cve_cq_desc_t; typedef struct { int cmd_handle; unsigned int cmd_finish_cnt; unsigned int cur_finish_cmd_id; unsigned int cmd_handle_wrap; unsigned int finish_cmd_wrap; } cve_task_info_t; typedef struct { unsigned long phys_start; unsigned long virt_start; unsigned int length; unsigned int cmd_size; unsigned int cur_index; unsigned int index_max; struct semaphore cmd_buf_sema; } cve_cmd_buf_t; typedef struct { bool cve_dbg_run_cycles_en; bool cve_ccl_dbg_dis_sec_pass_en; bool cve_id_stat_en; bool cve_timeout_en; bool cve_ute_stat_en; unsigned int cve_ute_cycles; unsigned int cve_once_run_cycles; } cve_run_time_cycle_t; typedef struct { unsigned int dma; unsigned int luma_stat; unsigned int filter; unsigned int csc; unsigned int filter_and_csc; unsigned int sobel; unsigned int mag_and_ang; unsigned int match_bg_model; unsigned int update_bg_model; unsigned int dilate; unsigned int erode; unsigned int bernsen; unsigned int thresh; unsigned int and; unsigned int or ; unsigned int xor ; unsigned int sub; unsigned int add; unsigned int add_map_255_to_1; unsigned int dot; unsigned int integ; unsigned int hist; unsigned int thresh_s16; unsigned int thresh_u16; unsigned int _16bit_to_8bit; unsigned int ord_stat_filter; unsigned int map; unsigned int equalize_hist; unsigned int ncc; unsigned int ccl; unsigned int gmm; unsigned int canny_edge; unsigned int lbp; unsigned int nrom_grad; unsigned int bulid_lk_optical_flow_pyr; unsigned int lk_optial_flow_pry; unsigned int st_candi_corner; unsigned int sad; unsigned int grad_fg; unsigned int kcf_get_yf; unsigned int kcf_get_feature; unsigned int kcf_train_and_track; unsigned int line_filter; unsigned int noise_remove; unsigned int adp_thresh; unsigned int reduce; unsigned int persp_trans; unsigned int fast_guided_filter; unsigned int hog; unsigned int resize; unsigned int svm_kernel; unsigned int svm_predict; unsigned int reshaps; unsigned int im2col; unsigned int gemm; unsigned int pooling; unsigned int aiisp_tnr_pre_proc; unsigned int aiisp_tnr_post_proc; unsigned int aiisp_snr_post_proc; } cve_op_info_t; typedef struct { bool last_instant; unsigned int last_int_cnt_per_sec; unsigned int max_int_cnt_per_sec; unsigned int total_int_cnt_last_sec; unsigned int total_int_cnt; unsigned int query_timeout_cnt; unsigned int system_timeout_cnt; unsigned int last_int_cost_time; unsigned int int_cost_time_max; unsigned int last_persec_int_cost_time; unsigned int persec_int_cost_time_max; unsigned int total_int_cost_time; unsigned int total_cve_run_time; unsigned int op_cve_run_time; cve_op_info_t cve_op_cycle; cve_run_time_cycle_t cve_cycle; } cve_run_time_info_t; typedef struct { cve_task_info_t task_info; cve_run_time_info_t run_time_info; cve_op_info_t invoke_count; struct semaphore cve_sema; struct wait_queue_head cve_wait; cve_task_desc_t *task_desc_outp; cve_task_desc_t *cq0_task_desc; cve_task_desc_t *cq1_task_desc; cve_cq_desc_t cq_desc; cve_dma_buffer_t cve_cq_buffer; cve_cmd_buf_t cmd_bufs; cve_dma_buffer_t cve_cmd_buffer; } cve_context_t; #endif /* __CVE_H__ */