xref: /OK3568_Linux_fs/kernel/drivers/media/platform/sti/delta/delta-mjpeg-fw.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) STMicroelectronics SA 2015
4*4882a593Smuzhiyun  * Author: Hugues Fruchet <hugues.fruchet@st.com> for STMicroelectronics.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef DELTA_MJPEG_FW_H
8*4882a593Smuzhiyun #define DELTA_MJPEG_FW_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /*
11*4882a593Smuzhiyun  * struct jpeg_decoded_buffer_address_t
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  * defines the addresses where the decoded picture/additional
14*4882a593Smuzhiyun  * info related to the block structures will be stored
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  * @display_luma_p:		address of the luma buffer
17*4882a593Smuzhiyun  * @display_chroma_p:		address of the chroma buffer
18*4882a593Smuzhiyun  */
19*4882a593Smuzhiyun struct jpeg_decoded_buffer_address_t {
20*4882a593Smuzhiyun 	u32 luma_p;
21*4882a593Smuzhiyun 	u32 chroma_p;
22*4882a593Smuzhiyun };
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /*
25*4882a593Smuzhiyun  * struct jpeg_display_buffer_address_t
26*4882a593Smuzhiyun  *
27*4882a593Smuzhiyun  * defines the addresses (used by the Display Reconstruction block)
28*4882a593Smuzhiyun  * where the pictures to be displayed will be stored
29*4882a593Smuzhiyun  *
30*4882a593Smuzhiyun  * @struct_size:		size of the structure in bytes
31*4882a593Smuzhiyun  * @display_luma_p:		address of the luma buffer
32*4882a593Smuzhiyun  * @display_chroma_p:		address of the chroma buffer
33*4882a593Smuzhiyun  * @display_decimated_luma_p:	address of the decimated luma buffer
34*4882a593Smuzhiyun  * @display_decimated_chroma_p:	address of the decimated chroma buffer
35*4882a593Smuzhiyun  */
36*4882a593Smuzhiyun struct jpeg_display_buffer_address_t {
37*4882a593Smuzhiyun 	u32 struct_size;
38*4882a593Smuzhiyun 	u32 display_luma_p;
39*4882a593Smuzhiyun 	u32 display_chroma_p;
40*4882a593Smuzhiyun 	u32 display_decimated_luma_p;
41*4882a593Smuzhiyun 	u32 display_decimated_chroma_p;
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun /*
45*4882a593Smuzhiyun  * used for enabling main/aux outputs for both display &
46*4882a593Smuzhiyun  * reference reconstruction blocks
47*4882a593Smuzhiyun  */
48*4882a593Smuzhiyun enum jpeg_rcn_ref_disp_enable_t {
49*4882a593Smuzhiyun 	/* enable decimated (for display) reconstruction */
50*4882a593Smuzhiyun 	JPEG_DISP_AUX_EN = 0x00000010,
51*4882a593Smuzhiyun 	/* enable main (for display) reconstruction */
52*4882a593Smuzhiyun 	JPEG_DISP_MAIN_EN = 0x00000020,
53*4882a593Smuzhiyun 	/* enable both main & decimated (for display) reconstruction */
54*4882a593Smuzhiyun 	JPEG_DISP_AUX_MAIN_EN = 0x00000030,
55*4882a593Smuzhiyun 	/* enable only reference output(ex. for trick modes) */
56*4882a593Smuzhiyun 	JPEG_REF_MAIN_EN = 0x00000100,
57*4882a593Smuzhiyun 	/*
58*4882a593Smuzhiyun 	 * enable reference output with decimated
59*4882a593Smuzhiyun 	 * (for display) reconstruction
60*4882a593Smuzhiyun 	 */
61*4882a593Smuzhiyun 	JPEG_REF_MAIN_DISP_AUX_EN = 0x00000110,
62*4882a593Smuzhiyun 	/*
63*4882a593Smuzhiyun 	 * enable reference output with main
64*4882a593Smuzhiyun 	 * (for display) reconstruction
65*4882a593Smuzhiyun 	 */
66*4882a593Smuzhiyun 	JPEG_REF_MAIN_DISP_MAIN_EN = 0x00000120,
67*4882a593Smuzhiyun 	/*
68*4882a593Smuzhiyun 	 * enable reference output with main & decimated
69*4882a593Smuzhiyun 	 * (for display) reconstruction
70*4882a593Smuzhiyun 	 */
71*4882a593Smuzhiyun 	JPEG_REF_MAIN_DISP_MAIN_AUX_EN = 0x00000130
72*4882a593Smuzhiyun };
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /* identifies the horizontal decimation factor */
75*4882a593Smuzhiyun enum jpeg_horizontal_deci_factor_t {
76*4882a593Smuzhiyun 	/* no resize */
77*4882a593Smuzhiyun 	JPEG_HDEC_1 = 0x00000000,
78*4882a593Smuzhiyun 	/* Advanced H/2 resize using improved 8-tap filters */
79*4882a593Smuzhiyun 	JPEG_HDEC_ADVANCED_2 = 0x00000101,
80*4882a593Smuzhiyun 	/* Advanced H/4 resize using improved 8-tap filters */
81*4882a593Smuzhiyun 	JPEG_HDEC_ADVANCED_4 = 0x00000102
82*4882a593Smuzhiyun };
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun /* identifies the vertical decimation factor */
85*4882a593Smuzhiyun enum jpeg_vertical_deci_factor_t {
86*4882a593Smuzhiyun 	/* no resize */
87*4882a593Smuzhiyun 	JPEG_VDEC_1 = 0x00000000,
88*4882a593Smuzhiyun 	/* V/2 , progressive resize */
89*4882a593Smuzhiyun 	JPEG_VDEC_ADVANCED_2_PROG = 0x00000204,
90*4882a593Smuzhiyun 	/* V/2 , interlaced resize */
91*4882a593Smuzhiyun 	JPEG_VDEC_ADVANCED_2_INT = 0x000000208
92*4882a593Smuzhiyun };
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /* status of the decoding process */
95*4882a593Smuzhiyun enum jpeg_decoding_error_t {
96*4882a593Smuzhiyun 	JPEG_DECODER_NO_ERROR = 0,
97*4882a593Smuzhiyun 	JPEG_DECODER_UNDEFINED_HUFF_TABLE = 1,
98*4882a593Smuzhiyun 	JPEG_DECODER_UNSUPPORTED_MARKER = 2,
99*4882a593Smuzhiyun 	JPEG_DECODER_UNABLE_ALLOCATE_MEMORY = 3,
100*4882a593Smuzhiyun 	JPEG_DECODER_NON_SUPPORTED_SAMP_FACTORS = 4,
101*4882a593Smuzhiyun 	JPEG_DECODER_BAD_PARAMETER = 5,
102*4882a593Smuzhiyun 	JPEG_DECODER_DECODE_ERROR = 6,
103*4882a593Smuzhiyun 	JPEG_DECODER_BAD_RESTART_MARKER = 7,
104*4882a593Smuzhiyun 	JPEG_DECODER_UNSUPPORTED_COLORSPACE = 8,
105*4882a593Smuzhiyun 	JPEG_DECODER_BAD_SOS_SPECTRAL = 9,
106*4882a593Smuzhiyun 	JPEG_DECODER_BAD_SOS_SUCCESSIVE = 10,
107*4882a593Smuzhiyun 	JPEG_DECODER_BAD_HEADER_LENGTH = 11,
108*4882a593Smuzhiyun 	JPEG_DECODER_BAD_COUNT_VALUE = 12,
109*4882a593Smuzhiyun 	JPEG_DECODER_BAD_DHT_MARKER = 13,
110*4882a593Smuzhiyun 	JPEG_DECODER_BAD_INDEX_VALUE = 14,
111*4882a593Smuzhiyun 	JPEG_DECODER_BAD_NUMBER_HUFFMAN_TABLES = 15,
112*4882a593Smuzhiyun 	JPEG_DECODER_BAD_QUANT_TABLE_LENGTH = 16,
113*4882a593Smuzhiyun 	JPEG_DECODER_BAD_NUMBER_QUANT_TABLES = 17,
114*4882a593Smuzhiyun 	JPEG_DECODER_BAD_COMPONENT_COUNT = 18,
115*4882a593Smuzhiyun 	JPEG_DECODER_DIVIDE_BY_ZERO_ERROR = 19,
116*4882a593Smuzhiyun 	JPEG_DECODER_NOT_JPG_IMAGE = 20,
117*4882a593Smuzhiyun 	JPEG_DECODER_UNSUPPORTED_ROTATION_ANGLE = 21,
118*4882a593Smuzhiyun 	JPEG_DECODER_UNSUPPORTED_SCALING = 22,
119*4882a593Smuzhiyun 	JPEG_DECODER_INSUFFICIENT_OUTPUTBUFFER_SIZE = 23,
120*4882a593Smuzhiyun 	JPEG_DECODER_BAD_HWCFG_GP_VERSION_VALUE = 24,
121*4882a593Smuzhiyun 	JPEG_DECODER_BAD_VALUE_FROM_RED = 25,
122*4882a593Smuzhiyun 	JPEG_DECODER_BAD_SUBREGION_PARAMETERS = 26,
123*4882a593Smuzhiyun 	JPEG_DECODER_PROGRESSIVE_DECODE_NOT_SUPPORTED = 27,
124*4882a593Smuzhiyun 	JPEG_DECODER_ERROR_TASK_TIMEOUT = 28,
125*4882a593Smuzhiyun 	JPEG_DECODER_ERROR_FEATURE_NOT_SUPPORTED = 29
126*4882a593Smuzhiyun };
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /* identifies the decoding mode */
129*4882a593Smuzhiyun enum jpeg_decoding_mode_t {
130*4882a593Smuzhiyun 	JPEG_NORMAL_DECODE = 0,
131*4882a593Smuzhiyun };
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun enum jpeg_additional_flags_t {
134*4882a593Smuzhiyun 	JPEG_ADDITIONAL_FLAG_NONE = 0,
135*4882a593Smuzhiyun 	/* request firmware to return values of the CEH registers */
136*4882a593Smuzhiyun 	JPEG_ADDITIONAL_FLAG_CEH = 1,
137*4882a593Smuzhiyun 	/* output storage of auxiliary reconstruction in Raster format. */
138*4882a593Smuzhiyun 	JPEG_ADDITIONAL_FLAG_RASTER = 64,
139*4882a593Smuzhiyun 	/* output storage of auxiliary reconstruction in 420MB format. */
140*4882a593Smuzhiyun 	JPEG_ADDITIONAL_FLAG_420MB = 128
141*4882a593Smuzhiyun };
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun /*
144*4882a593Smuzhiyun  * struct jpeg_video_decode_init_params_t - initialization command parameters
145*4882a593Smuzhiyun  *
146*4882a593Smuzhiyun  * @circular_buffer_begin_addr_p:	start address of fw circular buffer
147*4882a593Smuzhiyun  * @circular_buffer_end_addr_p:		end address of fw circular buffer
148*4882a593Smuzhiyun  */
149*4882a593Smuzhiyun struct jpeg_video_decode_init_params_t {
150*4882a593Smuzhiyun 	u32 circular_buffer_begin_addr_p;
151*4882a593Smuzhiyun 	u32 circular_buffer_end_addr_p;
152*4882a593Smuzhiyun 	u32 reserved;
153*4882a593Smuzhiyun };
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun /*
156*4882a593Smuzhiyun  * struct jpeg_decode_params_t - decode command parameters
157*4882a593Smuzhiyun  *
158*4882a593Smuzhiyun  * @picture_start_addr_p:	start address of jpeg picture
159*4882a593Smuzhiyun  * @picture_end_addr_p:		end address of jpeg picture
160*4882a593Smuzhiyun  * @decoded_buffer_addr:	decoded picture buffer
161*4882a593Smuzhiyun  * @display_buffer_addr:	display picture buffer
162*4882a593Smuzhiyun  * @main_aux_enable:		enable main and/or aux outputs
163*4882a593Smuzhiyun  * @horizontal_decimation_factor:horizontal decimation factor
164*4882a593Smuzhiyun  * @vertical_decimation_factor:	vertical decimation factor
165*4882a593Smuzhiyun  * @xvalue0:			the x(0) coordinate for subregion decoding
166*4882a593Smuzhiyun  * @xvalue1:			the x(1) coordinate for subregion decoding
167*4882a593Smuzhiyun  * @yvalue0:			the y(0) coordinate for subregion decoding
168*4882a593Smuzhiyun  * @yvalue1:			the y(1) coordinate for subregion decoding
169*4882a593Smuzhiyun  * @decoding_mode:		decoding mode
170*4882a593Smuzhiyun  * @additional_flags:		additional flags
171*4882a593Smuzhiyun  * @field_flag:			determines frame/field scan
172*4882a593Smuzhiyun  * @is_jpeg_image:		1 = still jpeg, 0 = motion jpeg
173*4882a593Smuzhiyun  */
174*4882a593Smuzhiyun struct jpeg_decode_params_t {
175*4882a593Smuzhiyun 	u32 picture_start_addr_p;
176*4882a593Smuzhiyun 	u32 picture_end_addr_p;
177*4882a593Smuzhiyun 	struct jpeg_decoded_buffer_address_t decoded_buffer_addr;
178*4882a593Smuzhiyun 	struct jpeg_display_buffer_address_t display_buffer_addr;
179*4882a593Smuzhiyun 	enum jpeg_rcn_ref_disp_enable_t main_aux_enable;
180*4882a593Smuzhiyun 	enum jpeg_horizontal_deci_factor_t horizontal_decimation_factor;
181*4882a593Smuzhiyun 	enum jpeg_vertical_deci_factor_t vertical_decimation_factor;
182*4882a593Smuzhiyun 	u32 xvalue0;
183*4882a593Smuzhiyun 	u32 xvalue1;
184*4882a593Smuzhiyun 	u32 yvalue0;
185*4882a593Smuzhiyun 	u32 yvalue1;
186*4882a593Smuzhiyun 	enum jpeg_decoding_mode_t decoding_mode;
187*4882a593Smuzhiyun 	u32 additional_flags;
188*4882a593Smuzhiyun 	u32 field_flag;
189*4882a593Smuzhiyun 	u32 reserved;
190*4882a593Smuzhiyun 	u32 is_jpeg_image;
191*4882a593Smuzhiyun };
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /*
194*4882a593Smuzhiyun  * struct jpeg_decode_return_params_t
195*4882a593Smuzhiyun  *
196*4882a593Smuzhiyun  * status returned by firmware after decoding
197*4882a593Smuzhiyun  *
198*4882a593Smuzhiyun  * @decode_time_in_us:	decoding time in microseconds
199*4882a593Smuzhiyun  * @pm_cycles:		profiling information
200*4882a593Smuzhiyun  * @pm_dmiss:		profiling information
201*4882a593Smuzhiyun  * @pm_imiss:		profiling information
202*4882a593Smuzhiyun  * @pm_bundles:		profiling information
203*4882a593Smuzhiyun  * @pm_pft:		profiling information
204*4882a593Smuzhiyun  * @error_code:		status of the decoding process
205*4882a593Smuzhiyun  * @ceh_registers:	array where values of the Contrast Enhancement
206*4882a593Smuzhiyun  *			Histogram (CEH) registers will be stored.
207*4882a593Smuzhiyun  *			ceh_registers[0] correspond to register MBE_CEH_0_7,
208*4882a593Smuzhiyun  *			ceh_registers[1] correspond to register MBE_CEH_8_15
209*4882a593Smuzhiyun  *			ceh_registers[2] correspond to register MBE_CEH_16_23
210*4882a593Smuzhiyun  *			Note that elements of this array will be updated only
211*4882a593Smuzhiyun  *			if additional_flags has JPEG_ADDITIONAL_FLAG_CEH set.
212*4882a593Smuzhiyun  */
213*4882a593Smuzhiyun struct jpeg_decode_return_params_t {
214*4882a593Smuzhiyun 	/* profiling info */
215*4882a593Smuzhiyun 	u32 decode_time_in_us;
216*4882a593Smuzhiyun 	u32 pm_cycles;
217*4882a593Smuzhiyun 	u32 pm_dmiss;
218*4882a593Smuzhiyun 	u32 pm_imiss;
219*4882a593Smuzhiyun 	u32 pm_bundles;
220*4882a593Smuzhiyun 	u32 pm_pft;
221*4882a593Smuzhiyun 	enum jpeg_decoding_error_t error_code;
222*4882a593Smuzhiyun 	u32 ceh_registers[32];
223*4882a593Smuzhiyun };
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun #endif /* DELTA_MJPEG_FW_H */
226