xref: /OK3568_Linux_fs/kernel/include/uapi/linux/rk-ispp-config.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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