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