1*4882a593Smuzhiyun /* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright (C) 2019 Rockchip Electronics Co., Ltd. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef _UAPI_RK_ISPP_CONFIG_H 7*4882a593Smuzhiyun #define _UAPI_RK_ISPP_CONFIG_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/types.h> 10*4882a593Smuzhiyun #include <linux/v4l2-controls.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define ISPP_API_VERSION KERNEL_VERSION(1, 8, 0) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define ISPP_ID_TNR (0) 15*4882a593Smuzhiyun #define ISPP_ID_NR (1) 16*4882a593Smuzhiyun #define ISPP_ID_SHP (2) 17*4882a593Smuzhiyun #define ISPP_ID_FEC (3) 18*4882a593Smuzhiyun #define ISPP_ID_ORB (4) 19*4882a593Smuzhiyun #define ISPP_ID_MAX (5) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define ISPP_MODULE_TNR BIT(ISPP_ID_TNR)/* 2TO1 */ 22*4882a593Smuzhiyun #define ISPP_MODULE_NR BIT(ISPP_ID_NR) 23*4882a593Smuzhiyun #define ISPP_MODULE_SHP BIT(ISPP_ID_SHP) 24*4882a593Smuzhiyun #define ISPP_MODULE_FEC BIT(ISPP_ID_FEC)/* CALIBRATION */ 25*4882a593Smuzhiyun #define ISPP_MODULE_ORB BIT(ISPP_ID_ORB) 26*4882a593Smuzhiyun /* extra function */ 27*4882a593Smuzhiyun #define ISPP_MODULE_TNR_3TO1 (BIT(16) | ISPP_MODULE_TNR) 28*4882a593Smuzhiyun #define ISPP_MODULE_FEC_ST (BIT(17) | ISPP_MODULE_FEC)/* STABILIZATION */ 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #define TNR_SIGMA_CURVE_SIZE 17 31*4882a593Smuzhiyun #define TNR_LUMA_CURVE_SIZE 6 32*4882a593Smuzhiyun #define TNR_GFCOEF6_SIZE 6 33*4882a593Smuzhiyun #define TNR_GFCOEF3_SIZE 3 34*4882a593Smuzhiyun #define TNR_SCALE_YG_SIZE 4 35*4882a593Smuzhiyun #define TNR_SCALE_YL_SIZE 3 36*4882a593Smuzhiyun #define TNR_SCALE_CG_SIZE 3 37*4882a593Smuzhiyun #define TNR_SCALE_Y2CG_SIZE 3 38*4882a593Smuzhiyun #define TNR_SCALE_CL_SIZE 2 39*4882a593Smuzhiyun #define TNR_SCALE_Y2CL_SIZE 3 40*4882a593Smuzhiyun #define TNR_WEIGHT_Y_SIZE 3 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #define NR_UVNR_UVGAIN_SIZE 2 43*4882a593Smuzhiyun #define NR_UVNR_T1FLT_WTQ_SIZE 8 44*4882a593Smuzhiyun #define NR_UVNR_T2GEN_WTQ_SIZE 4 45*4882a593Smuzhiyun #define NR_UVNR_T2FLT_WT_SIZE 3 46*4882a593Smuzhiyun #define NR_YNR_SGM_DX_SIZE 16 47*4882a593Smuzhiyun #define NR_YNR_SGM_Y_SIZE 17 48*4882a593Smuzhiyun #define NR_YNR_HWEIT_D_SIZE 20 49*4882a593Smuzhiyun #define NR_YNR_HGRAD_Y_SIZE 24 50*4882a593Smuzhiyun #define NR_YNR_HSTV_Y_SIZE 17 51*4882a593Smuzhiyun #define NR_YNR_CI_SIZE 4 52*4882a593Smuzhiyun #define NR_YNR_LGAIN_MIN_SIZE 4 53*4882a593Smuzhiyun #define NR_YNR_LWEIT_FLT_SIZE 4 54*4882a593Smuzhiyun #define NR_YNR_HGAIN_SGM_SIZE 4 55*4882a593Smuzhiyun #define NR_YNR_HWEIT_SIZE 4 56*4882a593Smuzhiyun #define NR_YNR_LWEIT_CMP_SIZE 2 57*4882a593Smuzhiyun #define NR_YNR_ST_SCALE_SIZE 3 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #define SHP_PBF_KERNEL_SIZE 3 60*4882a593Smuzhiyun #define SHP_MRF_KERNEL_SIZE 6 61*4882a593Smuzhiyun #define SHP_MBF_KERNEL_SIZE 12 62*4882a593Smuzhiyun #define SHP_HRF_KERNEL_SIZE 6 63*4882a593Smuzhiyun #define SHP_HBF_KERNEL_SIZE 3 64*4882a593Smuzhiyun #define SHP_EDGE_COEF_SIZE 3 65*4882a593Smuzhiyun #define SHP_EDGE_SMOTH_SIZE 3 66*4882a593Smuzhiyun #define SHP_EDGE_GAUS_SIZE 6 67*4882a593Smuzhiyun #define SHP_DOG_KERNEL_SIZE 6 68*4882a593Smuzhiyun #define SHP_LUM_POINT_SIZE 6 69*4882a593Smuzhiyun #define SHP_SIGMA_SIZE 8 70*4882a593Smuzhiyun #define SHP_LUM_CLP_SIZE 8 71*4882a593Smuzhiyun #define SHP_LUM_MIN_SIZE 8 72*4882a593Smuzhiyun #define SHP_EDGE_LUM_THED_SIZE 8 73*4882a593Smuzhiyun #define SHP_CLAMP_SIZE 8 74*4882a593Smuzhiyun #define SHP_DETAIL_ALPHA_SIZE 8 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #define ORB_DATA_NUM 10000 77*4882a593Smuzhiyun #define ORB_BRIEF_NUM 15 78*4882a593Smuzhiyun #define ORB_DUMMY_NUM 13 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #define FEC_MESH_BUF_MAX 7 81*4882a593Smuzhiyun #define FEC_MESH_BUF_NUM 2 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #define MAX_BUF_IDXFD_NUM 64 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun /************VIDIOC_PRIVATE*************/ 86*4882a593Smuzhiyun #define RKISPP_CMD_SET_INIT_MODULE \ 87*4882a593Smuzhiyun _IOW('V', BASE_VIDIOC_PRIVATE + 0, int) 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun #define RKISPP_CMD_GET_FECBUF_INFO \ 90*4882a593Smuzhiyun _IOR('V', BASE_VIDIOC_PRIVATE + 1, struct rkispp_fecbuf_info) 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define RKISPP_CMD_SET_FECBUF_SIZE \ 93*4882a593Smuzhiyun _IOW('V', BASE_VIDIOC_PRIVATE + 2, struct rkispp_fecbuf_size) 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun #define RKISPP_CMD_TRIGGER_MODE \ 96*4882a593Smuzhiyun _IOW('V', BASE_VIDIOC_PRIVATE + 3, struct rkispp_trigger_mode) 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #define RKISPP_CMD_GET_TNRBUF_FD \ 99*4882a593Smuzhiyun _IOR('V', BASE_VIDIOC_PRIVATE + 4, struct rkispp_buf_idxfd) 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #define RKISPP_CMD_GET_NRBUF_FD \ 102*4882a593Smuzhiyun _IOR('V', BASE_VIDIOC_PRIVATE + 5, struct rkispp_buf_idxfd) 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun /**independent fec video**/ 105*4882a593Smuzhiyun #define RKISPP_CMD_FEC_IN_OUT \ 106*4882a593Smuzhiyun _IOW('V', BASE_VIDIOC_PRIVATE + 10, struct rkispp_fec_in_out) 107*4882a593Smuzhiyun #define RKISPP_CMD_FEC_BUF_ADD \ 108*4882a593Smuzhiyun _IOW('V', BASE_VIDIOC_PRIVATE + 11, int) 109*4882a593Smuzhiyun #define RKISPP_CMD_FEC_BUF_DEL \ 110*4882a593Smuzhiyun _IOW('V', BASE_VIDIOC_PRIVATE + 12, int) 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun /************EVENT_PRIVATE**************/ 113*4882a593Smuzhiyun #define RKISPP_V4L2_EVENT_TNR_COMPLETE \ 114*4882a593Smuzhiyun (V4L2_EVENT_PRIVATE_START + 3) 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun struct rkispp_fec_in_out { 117*4882a593Smuzhiyun int in_width; 118*4882a593Smuzhiyun int in_height; 119*4882a593Smuzhiyun int out_width; 120*4882a593Smuzhiyun int out_height; 121*4882a593Smuzhiyun int in_fourcc; 122*4882a593Smuzhiyun int out_fourcc; 123*4882a593Smuzhiyun int in_pic_fd; 124*4882a593Smuzhiyun int out_pic_fd; 125*4882a593Smuzhiyun int mesh_xint_fd; 126*4882a593Smuzhiyun int mesh_xfra_fd; 127*4882a593Smuzhiyun int mesh_yint_fd; 128*4882a593Smuzhiyun int mesh_yfra_fd; 129*4882a593Smuzhiyun }; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun struct rkispp_buf_idxfd { 132*4882a593Smuzhiyun __u32 buf_num; 133*4882a593Smuzhiyun __u32 index[MAX_BUF_IDXFD_NUM]; 134*4882a593Smuzhiyun __s32 dmafd[MAX_BUF_IDXFD_NUM]; 135*4882a593Smuzhiyun } __attribute__ ((packed)); 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun struct rkispp_trigger_mode { 138*4882a593Smuzhiyun __u32 module; 139*4882a593Smuzhiyun __u32 on; 140*4882a593Smuzhiyun } __attribute__ ((packed)); 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun struct rkispp_tnr_config { 143*4882a593Smuzhiyun __u8 opty_en; 144*4882a593Smuzhiyun __u8 optc_en; 145*4882a593Smuzhiyun __u8 gain_en; 146*4882a593Smuzhiyun __u8 pk0_y; 147*4882a593Smuzhiyun __u8 pk1_y; 148*4882a593Smuzhiyun __u8 pk0_c; 149*4882a593Smuzhiyun __u8 pk1_c; 150*4882a593Smuzhiyun __u8 glb_gain_cur_sqrt; 151*4882a593Smuzhiyun __u8 sigma_x[TNR_SIGMA_CURVE_SIZE - 1]; 152*4882a593Smuzhiyun __u8 gfcoef_y0[TNR_GFCOEF6_SIZE]; 153*4882a593Smuzhiyun __u8 gfcoef_y1[TNR_GFCOEF3_SIZE]; 154*4882a593Smuzhiyun __u8 gfcoef_y2[TNR_GFCOEF3_SIZE]; 155*4882a593Smuzhiyun __u8 gfcoef_y3[TNR_GFCOEF3_SIZE]; 156*4882a593Smuzhiyun __u8 gfcoef_yg0[TNR_GFCOEF6_SIZE]; 157*4882a593Smuzhiyun __u8 gfcoef_yg1[TNR_GFCOEF3_SIZE]; 158*4882a593Smuzhiyun __u8 gfcoef_yg2[TNR_GFCOEF3_SIZE]; 159*4882a593Smuzhiyun __u8 gfcoef_yg3[TNR_GFCOEF3_SIZE]; 160*4882a593Smuzhiyun __u8 gfcoef_yl0[TNR_GFCOEF6_SIZE]; 161*4882a593Smuzhiyun __u8 gfcoef_yl1[TNR_GFCOEF3_SIZE]; 162*4882a593Smuzhiyun __u8 gfcoef_yl2[TNR_GFCOEF3_SIZE]; 163*4882a593Smuzhiyun __u8 gfcoef_cg0[TNR_GFCOEF6_SIZE]; 164*4882a593Smuzhiyun __u8 gfcoef_cg1[TNR_GFCOEF3_SIZE]; 165*4882a593Smuzhiyun __u8 gfcoef_cg2[TNR_GFCOEF3_SIZE]; 166*4882a593Smuzhiyun __u8 gfcoef_cl0[TNR_GFCOEF6_SIZE]; 167*4882a593Smuzhiyun __u8 gfcoef_cl1[TNR_GFCOEF3_SIZE]; 168*4882a593Smuzhiyun __u8 weight_y[TNR_WEIGHT_Y_SIZE]; 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun __u16 glb_gain_cur __attribute__((aligned(2))); 171*4882a593Smuzhiyun __u16 glb_gain_nxt; 172*4882a593Smuzhiyun __u16 glb_gain_cur_div; 173*4882a593Smuzhiyun __u16 txt_th1_y; 174*4882a593Smuzhiyun __u16 txt_th0_c; 175*4882a593Smuzhiyun __u16 txt_th1_c; 176*4882a593Smuzhiyun __u16 txt_thy_dlt; 177*4882a593Smuzhiyun __u16 txt_thc_dlt; 178*4882a593Smuzhiyun __u16 txt_th0_y; 179*4882a593Smuzhiyun __u16 sigma_y[TNR_SIGMA_CURVE_SIZE]; 180*4882a593Smuzhiyun __u16 luma_curve[TNR_LUMA_CURVE_SIZE]; 181*4882a593Smuzhiyun __u16 scale_yg[TNR_SCALE_YG_SIZE]; 182*4882a593Smuzhiyun __u16 scale_yl[TNR_SCALE_YL_SIZE]; 183*4882a593Smuzhiyun __u16 scale_cg[TNR_SCALE_CG_SIZE]; 184*4882a593Smuzhiyun __u16 scale_y2cg[TNR_SCALE_Y2CG_SIZE]; 185*4882a593Smuzhiyun __u16 scale_cl[TNR_SCALE_CL_SIZE]; 186*4882a593Smuzhiyun __u16 scale_y2cl[TNR_SCALE_Y2CL_SIZE]; 187*4882a593Smuzhiyun } __attribute__ ((packed)); 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun struct rkispp_nr_config { 190*4882a593Smuzhiyun __u8 uvnr_step1_en; 191*4882a593Smuzhiyun __u8 uvnr_step2_en; 192*4882a593Smuzhiyun __u8 nr_gain_en; 193*4882a593Smuzhiyun __u8 uvnr_sd32_self_en; 194*4882a593Smuzhiyun __u8 uvnr_nobig_en; 195*4882a593Smuzhiyun __u8 uvnr_big_en; 196*4882a593Smuzhiyun __u8 uvnr_gain_1sigma; 197*4882a593Smuzhiyun __u8 uvnr_gain_offset; 198*4882a593Smuzhiyun __u8 uvnr_gain_t2gen; 199*4882a593Smuzhiyun __u8 uvnr_gain_iso; 200*4882a593Smuzhiyun __u8 uvnr_t1gen_m3alpha; 201*4882a593Smuzhiyun __u8 uvnr_t1flt_mode; 202*4882a593Smuzhiyun __u8 uvnr_t1flt_wtp; 203*4882a593Smuzhiyun __u8 uvnr_t2gen_m3alpha; 204*4882a593Smuzhiyun __u8 uvnr_t2gen_wtp; 205*4882a593Smuzhiyun __u8 uvnr_gain_uvgain[NR_UVNR_UVGAIN_SIZE]; 206*4882a593Smuzhiyun __u8 uvnr_t1flt_wtq[NR_UVNR_T1FLT_WTQ_SIZE]; 207*4882a593Smuzhiyun __u8 uvnr_t2gen_wtq[NR_UVNR_T2GEN_WTQ_SIZE]; 208*4882a593Smuzhiyun __u8 uvnr_t2flt_wtp; 209*4882a593Smuzhiyun __u8 uvnr_t2flt_wt[NR_UVNR_T2FLT_WT_SIZE]; 210*4882a593Smuzhiyun __u8 ynr_sgm_dx[NR_YNR_SGM_DX_SIZE]; 211*4882a593Smuzhiyun __u8 ynr_lci[NR_YNR_CI_SIZE]; 212*4882a593Smuzhiyun __u8 ynr_lgain_min[NR_YNR_LGAIN_MIN_SIZE]; 213*4882a593Smuzhiyun __u8 ynr_lgain_max; 214*4882a593Smuzhiyun __u8 ynr_lmerge_bound; 215*4882a593Smuzhiyun __u8 ynr_lmerge_ratio; 216*4882a593Smuzhiyun __u8 ynr_lweit_flt[NR_YNR_LWEIT_FLT_SIZE]; 217*4882a593Smuzhiyun __u8 ynr_hlci[NR_YNR_CI_SIZE]; 218*4882a593Smuzhiyun __u8 ynr_lhci[NR_YNR_CI_SIZE]; 219*4882a593Smuzhiyun __u8 ynr_hhci[NR_YNR_CI_SIZE]; 220*4882a593Smuzhiyun __u8 ynr_hgain_sgm[NR_YNR_HGAIN_SGM_SIZE]; 221*4882a593Smuzhiyun __u8 ynr_hweit_d[NR_YNR_HWEIT_D_SIZE]; 222*4882a593Smuzhiyun __u8 ynr_hgrad_y[NR_YNR_HGRAD_Y_SIZE]; 223*4882a593Smuzhiyun __u8 ynr_hmax_adjust; 224*4882a593Smuzhiyun __u8 ynr_hstrength; 225*4882a593Smuzhiyun __u8 ynr_lweit_cmp[NR_YNR_LWEIT_CMP_SIZE]; 226*4882a593Smuzhiyun __u8 ynr_lmaxgain_lv4; 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun __u16 uvnr_t1flt_msigma __attribute__((aligned(2))); 229*4882a593Smuzhiyun __u16 uvnr_t2gen_msigma; 230*4882a593Smuzhiyun __u16 uvnr_t2flt_msigma; 231*4882a593Smuzhiyun __u16 ynr_lsgm_y[NR_YNR_SGM_Y_SIZE]; 232*4882a593Smuzhiyun __u16 ynr_hsgm_y[NR_YNR_SGM_Y_SIZE]; 233*4882a593Smuzhiyun __u16 ynr_hweit[NR_YNR_HWEIT_SIZE]; 234*4882a593Smuzhiyun __u16 ynr_hstv_y[NR_YNR_HSTV_Y_SIZE]; 235*4882a593Smuzhiyun __u16 ynr_st_scale[NR_YNR_ST_SCALE_SIZE]; 236*4882a593Smuzhiyun } __attribute__ ((packed)); 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun struct rkispp_sharp_config { 239*4882a593Smuzhiyun __u8 rotation; 240*4882a593Smuzhiyun __u8 scl_down_v; 241*4882a593Smuzhiyun __u8 scl_down_h; 242*4882a593Smuzhiyun __u8 tile_ycnt; 243*4882a593Smuzhiyun __u8 tile_xcnt; 244*4882a593Smuzhiyun __u8 alpha_adp_en; 245*4882a593Smuzhiyun __u8 yin_flt_en; 246*4882a593Smuzhiyun __u8 edge_avg_en; 247*4882a593Smuzhiyun __u8 ehf_th; 248*4882a593Smuzhiyun __u8 pbf_ratio; 249*4882a593Smuzhiyun __u8 edge_thed; 250*4882a593Smuzhiyun __u8 dir_min; 251*4882a593Smuzhiyun __u8 pbf_shf_bits; 252*4882a593Smuzhiyun __u8 mbf_shf_bits; 253*4882a593Smuzhiyun __u8 hbf_shf_bits; 254*4882a593Smuzhiyun __u8 m_ratio; 255*4882a593Smuzhiyun __u8 h_ratio; 256*4882a593Smuzhiyun __u8 pbf_k[SHP_PBF_KERNEL_SIZE]; 257*4882a593Smuzhiyun __u8 mrf_k[SHP_MRF_KERNEL_SIZE]; 258*4882a593Smuzhiyun __u8 mbf_k[SHP_MBF_KERNEL_SIZE]; 259*4882a593Smuzhiyun __u8 hrf_k[SHP_HRF_KERNEL_SIZE]; 260*4882a593Smuzhiyun __u8 hbf_k[SHP_HBF_KERNEL_SIZE]; 261*4882a593Smuzhiyun __s8 eg_coef[SHP_EDGE_COEF_SIZE]; 262*4882a593Smuzhiyun __u8 eg_smoth[SHP_EDGE_SMOTH_SIZE]; 263*4882a593Smuzhiyun __u8 eg_gaus[SHP_EDGE_GAUS_SIZE]; 264*4882a593Smuzhiyun __s8 dog_k[SHP_DOG_KERNEL_SIZE]; 265*4882a593Smuzhiyun __u8 lum_point[SHP_LUM_POINT_SIZE]; 266*4882a593Smuzhiyun __u8 pbf_sigma[SHP_SIGMA_SIZE]; 267*4882a593Smuzhiyun __u8 lum_clp_m[SHP_LUM_CLP_SIZE]; 268*4882a593Smuzhiyun __s8 lum_min_m[SHP_LUM_MIN_SIZE]; 269*4882a593Smuzhiyun __u8 mbf_sigma[SHP_SIGMA_SIZE]; 270*4882a593Smuzhiyun __u8 lum_clp_h[SHP_LUM_CLP_SIZE]; 271*4882a593Smuzhiyun __u8 hbf_sigma[SHP_SIGMA_SIZE]; 272*4882a593Smuzhiyun __u8 edge_lum_thed[SHP_EDGE_LUM_THED_SIZE]; 273*4882a593Smuzhiyun __u8 clamp_pos[SHP_CLAMP_SIZE]; 274*4882a593Smuzhiyun __u8 clamp_neg[SHP_CLAMP_SIZE]; 275*4882a593Smuzhiyun __u8 detail_alpha[SHP_DETAIL_ALPHA_SIZE]; 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun __u16 hbf_ratio __attribute__((aligned(2))); 278*4882a593Smuzhiyun __u16 smoth_th4; 279*4882a593Smuzhiyun __u16 l_alpha; 280*4882a593Smuzhiyun __u16 g_alpha; 281*4882a593Smuzhiyun __u16 rfl_ratio; 282*4882a593Smuzhiyun __u16 rfh_ratio; 283*4882a593Smuzhiyun } __attribute__ ((packed)); 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun enum rkispp_fecbuf_stat { 286*4882a593Smuzhiyun FEC_BUF_INIT = 0, 287*4882a593Smuzhiyun FEC_BUF_WAIT2CHIP, 288*4882a593Smuzhiyun FEC_BUF_CHIPINUSE, 289*4882a593Smuzhiyun }; 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun struct rkispp_fecbuf_info { 292*4882a593Smuzhiyun __s32 buf_fd[FEC_MESH_BUF_MAX]; 293*4882a593Smuzhiyun __u32 buf_size[FEC_MESH_BUF_MAX]; 294*4882a593Smuzhiyun } __attribute__ ((packed)); 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun struct rkispp_fecbuf_size { 297*4882a593Smuzhiyun __u32 meas_width; 298*4882a593Smuzhiyun __u32 meas_height; 299*4882a593Smuzhiyun __u32 meas_mode; 300*4882a593Smuzhiyun int buf_cnt; 301*4882a593Smuzhiyun } __attribute__ ((packed)); 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun struct rkispp_fec_head { 304*4882a593Smuzhiyun enum rkispp_fecbuf_stat stat; 305*4882a593Smuzhiyun __u32 meshxf_oft; 306*4882a593Smuzhiyun __u32 meshyf_oft; 307*4882a593Smuzhiyun __u32 meshxi_oft; 308*4882a593Smuzhiyun __u32 meshyi_oft; 309*4882a593Smuzhiyun } __attribute__ ((packed)); 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun struct rkispp_fec_config { 312*4882a593Smuzhiyun __u8 mesh_density; 313*4882a593Smuzhiyun __u8 crop_en; 314*4882a593Smuzhiyun __u16 crop_width __attribute__((aligned(2))); 315*4882a593Smuzhiyun __u16 crop_height; 316*4882a593Smuzhiyun __u32 mesh_size __attribute__((aligned(4))); 317*4882a593Smuzhiyun __s32 buf_fd; 318*4882a593Smuzhiyun } __attribute__ ((packed)); 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun struct rkispp_orb_config { 321*4882a593Smuzhiyun __u8 limit_value; 322*4882a593Smuzhiyun __u32 max_feature __attribute__((aligned(4))); 323*4882a593Smuzhiyun } __attribute__ ((packed)); 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun struct rkispp_buf_info { 326*4882a593Smuzhiyun /* __s32 fd; */ 327*4882a593Smuzhiyun __u32 index; 328*4882a593Smuzhiyun __u32 size; 329*4882a593Smuzhiyun } __attribute__ ((packed)); 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun /** 332*4882a593Smuzhiyun * struct rkispp_params_cfghead - Rockchip ISPP Input Parameters Meta Data 333*4882a593Smuzhiyun * 334*4882a593Smuzhiyun * @module_en_update: mask the enable bits of which module should be updated 335*4882a593Smuzhiyun * @module_ens: mask the enable value of each module, only update the module 336*4882a593Smuzhiyun * which correspond bit was set in module_en_update 337*4882a593Smuzhiyun * @module_cfg_update: mask the config bits of which module should be updated 338*4882a593Smuzhiyun */ 339*4882a593Smuzhiyun struct rkispp_params_cfghead { 340*4882a593Smuzhiyun __u32 module_en_update; 341*4882a593Smuzhiyun __u32 module_ens; 342*4882a593Smuzhiyun __u32 module_cfg_update; 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun __u32 frame_id; 345*4882a593Smuzhiyun } __attribute__ ((packed)); 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun /** 348*4882a593Smuzhiyun * struct rkispp_params_tnrcfg - Rockchip ISPP Input Parameters Meta Data 349*4882a593Smuzhiyun */ 350*4882a593Smuzhiyun struct rkispp_params_tnrcfg { 351*4882a593Smuzhiyun struct rkispp_params_cfghead head; 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun struct rkispp_tnr_config tnr_cfg; 354*4882a593Smuzhiyun /* struct rkispp_buf_info gain; */ 355*4882a593Smuzhiyun /* struct rkispp_buf_info image; */ 356*4882a593Smuzhiyun } __attribute__ ((packed)); 357*4882a593Smuzhiyun 358*4882a593Smuzhiyun /** 359*4882a593Smuzhiyun * struct rkispp_params_nrcfg - Rockchip ISPP Input Parameters Meta Data 360*4882a593Smuzhiyun */ 361*4882a593Smuzhiyun struct rkispp_params_nrcfg { 362*4882a593Smuzhiyun struct rkispp_params_cfghead head; 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun struct rkispp_nr_config nr_cfg; 365*4882a593Smuzhiyun struct rkispp_sharp_config shp_cfg; 366*4882a593Smuzhiyun struct rkispp_orb_config orb_cfg; 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun struct rkispp_buf_info gain; 369*4882a593Smuzhiyun /* struct rkispp_buf_info image; */ 370*4882a593Smuzhiyun } __attribute__ ((packed)); 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun /** 373*4882a593Smuzhiyun * struct rkispp_params_feccfg - Rockchip ISPP Input Parameters Meta Data 374*4882a593Smuzhiyun */ 375*4882a593Smuzhiyun struct rkispp_params_feccfg { 376*4882a593Smuzhiyun struct rkispp_params_cfghead head; 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun struct rkispp_fec_config fec_cfg; 379*4882a593Smuzhiyun struct rkispp_buf_info image; 380*4882a593Smuzhiyun } __attribute__ ((packed)); 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun struct rkispp_orb_data { 383*4882a593Smuzhiyun __u8 brief[ORB_BRIEF_NUM]; 384*4882a593Smuzhiyun __u32 y : 13; 385*4882a593Smuzhiyun __u32 x : 13; 386*4882a593Smuzhiyun __u32 dmy1 : 6; 387*4882a593Smuzhiyun __u8 dmy2[ORB_DUMMY_NUM]; 388*4882a593Smuzhiyun } __attribute__ ((packed)); 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun /** 391*4882a593Smuzhiyun * struct rkispp_stats_nrbuf - Rockchip ISPP Statistics 392*4882a593Smuzhiyun * 393*4882a593Smuzhiyun * @meas_type: measurement types 394*4882a593Smuzhiyun * @frame_id: frame ID for sync 395*4882a593Smuzhiyun * @data: statistics data 396*4882a593Smuzhiyun */ 397*4882a593Smuzhiyun struct rkispp_stats_nrbuf { 398*4882a593Smuzhiyun struct rkispp_orb_data data[ORB_DATA_NUM]; 399*4882a593Smuzhiyun 400*4882a593Smuzhiyun __u32 total_num __attribute__((aligned(4))); 401*4882a593Smuzhiyun __u32 meas_type; 402*4882a593Smuzhiyun __u32 frame_id; 403*4882a593Smuzhiyun 404*4882a593Smuzhiyun struct rkispp_buf_info image; 405*4882a593Smuzhiyun } __attribute__ ((packed)); 406*4882a593Smuzhiyun 407*4882a593Smuzhiyun /** 408*4882a593Smuzhiyun * struct rkispp_stats_tnrbuf - Rockchip ISPP Statistics 409*4882a593Smuzhiyun * 410*4882a593Smuzhiyun * @meas_type: measurement types 411*4882a593Smuzhiyun * @frame_id: frame ID for sync 412*4882a593Smuzhiyun */ 413*4882a593Smuzhiyun struct rkispp_stats_tnrbuf { 414*4882a593Smuzhiyun __u32 meas_type; 415*4882a593Smuzhiyun __u32 frame_id; 416*4882a593Smuzhiyun 417*4882a593Smuzhiyun struct rkispp_buf_info gain; 418*4882a593Smuzhiyun struct rkispp_buf_info gainkg; 419*4882a593Smuzhiyun /* struct rkispp_buf_info image; */ 420*4882a593Smuzhiyun } __attribute__ ((packed)); 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun #endif 423