idp_imgdma.h
12.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* idp_imgdma.h
*
* Project:
* --------
* Maui
*
* Description:
* ------------
* image DMA
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by ClearCase. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* $Log$
*
* 05 08 2012 chrono.wu
* removed!
* .
*
* 02 23 2012 hung-wen.hsieh
* removed!
* .
*
* 11 29 2011 hung-wen.hsieh
* removed!
* .
*
* 10 25 2011 hung-wen.hsieh
* removed!
* .
*
* 09 24 2011 hung-wen.hsieh
* removed!
* .
*
* 09 13 2011 hung-wen.hsieh
* removed!
* .
*
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by ClearCase. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
/** \defgroup idp Image data path
* \brief This module defines image data path
* @{
*/
/** \defgroup imgdma Image DMA
* \brief This module defines image DMA.
* @{
*/
#ifndef __idp_imgdma_mt6255_h__
#define __idp_imgdma_mt6255_h__
#ifndef THIS_FILE_BELONGS_TO_IMAGE_DATA_PATH_MODULE_INTERNAL
#error "Hay~! Man~! You can not include this file directly~!"
#endif
#include "drv_features_mdp.h"
#if defined(DRV_IDP_MT6255_SERIES)
#include "reg_base.h"
#include "idp_core.h"
#include "img_common_enum.h"
#include "idp_hw_common.h"
/* RDMA MAX input size */
#define RDMA_MAX_INPUT_WIDTH (65535)
#define RDMA_MAX_INPUT_HEIGHT (65535)
#define MMSYS_CONFIG_BASE MMCONFG_base
/*** MDP Engine connect setting ***/
#ifndef MDP_C_MODEL
#define MMSYS_MDP_REQ_FLAG_0_REG (MMSYS_CONFIG_BASE + 0x0030)
#define IMGDMA_MMSYS_MDP_SEL_OUT_RDMA_REG (MMSYS_CONFIG_BASE + 0x004C)
#define IMGDMA_MMSYS_MDP_SEL_IN_VDOROT_REG (MMSYS_CONFIG_BASE + 0x006C)
#define IMGDMA_MMSYS_MDP_SEL_IN_RGBROT0_REG (MMSYS_CONFIG_BASE + 0x0070)
#define REG_MMSYS_MDP_REQ_FLAG_0 *((volatile unsigned int *)MMSYS_MDP_REQ_FLAG_0_REG)
#define REG_IMGDMA_MMSYS_MDP_SEL_OUT_RDMA *((volatile unsigned int *)IMGDMA_MMSYS_MDP_SEL_OUT_RDMA_REG)
#define REG_IMGDMA_MMSYS_MDP_SEL_IN_VDOROT *((volatile unsigned int *)IMGDMA_MMSYS_MDP_SEL_IN_VDOROT_REG)
#define REG_IMGDMA_MMSYS_MDP_SEL_IN_RGBROT0 *((volatile unsigned int *)IMGDMA_MMSYS_MDP_SEL_IN_RGBROT0_REG)
#else // MDP_C_MODEL
#endif // MDP_C_MODEL
//RDMA OUT
#define IMGDMA_MMSYS_MUX_RDMA_OUT_SEL_NONE() \
do {REG_IMGDMA_MMSYS_MDP_SEL_OUT_RDMA = 0x03;} while(0)
#define IMGDMA_MMSYS_MUX_RDMA_OUT_SEL_VRZ() \
do {REG_IMGDMA_MMSYS_MDP_SEL_OUT_RDMA = 0x00;} while(0)
#define IMGDMA_MMSYS_MUX_RDMA_OUT_SEL_CRZ() \
do {REG_IMGDMA_MMSYS_MDP_SEL_OUT_RDMA = 0x02;} while(0)
//VDOROT IN
#define IMGDMA_MMSYS_MUX_VDOROT_IN_SEL_NONE() \
do {REG_IMGDMA_MMSYS_MDP_SEL_IN_VDOROT = 0x03;} while(0)
#define IMGDMA_MMSYS_MUX_VDOROT_IN_SEL_MOUT() \
do {REG_IMGDMA_MMSYS_MDP_SEL_IN_VDOROT = 0x01;} while(0)
#define IMGDMA_MMSYS_MUX_VDOROT_IN_SEL_VRZ() \
do {REG_IMGDMA_MMSYS_MDP_SEL_IN_VDOROT = 0x00;} while(0)
//RGBROT0 IN
#define IMGDMA_MMSYS_MUX_RGBROT0_IN_SEL_NONE() \
do {REG_IMGDMA_MMSYS_MDP_SEL_IN_RGBROT0 = 0X03;} while(0)
#define IMGDMA_MMSYS_MUX_RGBROT0_IN_SEL_MOUT() \
do {REG_IMGDMA_MMSYS_MDP_SEL_IN_RGBROT0 = 0X01;} while(0)
#define IMGDMA_MMSYS_MUX_RGBROT0_IN_SEL_VRZ() \
do {REG_IMGDMA_MMSYS_MDP_SEL_IN_RGBROT0 = 0X00;} while(0)
typedef struct
{
// main parameters
idp_module_enum_t input_src; // IDP_MODULE_NONE is for each module use default: ROTDMA0: MOUT0, ROTDMA1: MOUT1, ROTDMA2: VRZ
img_rot_angle_enum_t rot_angle; /**< rotate direction */
kal_bool flip; /**< flip or not */
kal_bool rgb_output;
img_color_fmt_rgb_enum_t rgb_color_fmt; /**< output rgb format */
img_color_fmt_yuv_enum_t yuv_color_fmt; /**< output yuv format */
kal_bool block_base_yuv;
kal_bool semi_planar_yuv;
kal_bool uv_planar_v_lsb;
kal_uint32 y_dest_start_addr;
kal_uint32 u_dest_start_addr;
kal_uint32 v_dest_start_addr;
kal_uint8 alpha_value; /* for constant alpha ARGB8888 output */
kal_uint16 src_width; /**< width */
kal_uint16 src_height; /**< height */
kal_bool pitch_enable; /**< pitch */
kal_uint16 pitch_bytes; /**< horizontal pitch WARNING! the pitch is applied to three buffers */
kal_bool clip; /**< enable source clipping */
kal_uint16 clip_top;
kal_uint16 clip_bottom;
kal_uint16 clip_left;
kal_uint16 clip_right;
kal_bool dither_en; /**< dither enable */
kal_bool rgb_rounding; /**< enable RGB rounding, only use when KAL_TRUE == output_rgb */
kal_uint8 dithering_seed1;
kal_uint8 dithering_seed2;
kal_uint8 dithering_seed3;
// interrupt
kal_bool intr_en; /**< enable int or not */
idp_lisr_intr_cb_t intr_cb;
idp_lisr_intr_cb_param_t intr_cb_param;
//descriptor mode
kal_bool descriptor_mode;
kal_uint8 queue_depth; /**[1,16] */
kal_bool queue_empty_drop; /** otherwise: stall previous engine */
kal_uint32 des_queue_base_addr; //new: 6573 for future WinMo driver
kal_uint32 des_valid_seg_bitmap; //new: 6573 for future WinMo driver
kal_uint32 des_valid_seg_number; //new: 6573 for future WinMo driver
kal_uint32 *des_queue_data_addr; //new: 6573 for future WinMo driver
kal_bool auto_loop; /**< auto loop mode */
kal_bool hw_frame_sync;/**camera app, first beginning signal is from cam */
kal_bool hw_trigger_rdma; /**< enable hw trigger RDMA */
kal_bool hw_trigger_rdma_frame_sync_en; /** prevent tearing */
kal_bool hw_trigger_rdma_frame_sync_drop; /** drop or stall previous engine */
kal_bool hw_trigger_rdma_trigger_all_rest; /** trigger all rest RDMA des queue when ROT_DMA empty */
kal_bool stall_prev_engine_when_off;
kal_bool drop_prev_engine_when_off;
// performance related
kal_bool resample_en; /**< resample enable , for YUV2 & UYVY output */
kal_bool isp_datapath; /**< isp datapath enable */ // ???
kal_bool slow_down_en; /** slow the access EMI rate */
kal_uint16 slow_down_cnt; /** cnt: larger is slower */
kal_bool single_buffer_fifo_mode_en; /**< fifo mode enable */
kal_bool protect_en; /**< bus bandwidth protection for ROT_DMA enable */
kal_bool double_buf_en; /**< double buffer of working memory */
kal_bool ultra_high_en;
kal_uint16 bus_control_threshold; /** max emi burst type: HW default is 7 (burst 8-8) */
kal_uint16 main_lb_size_in_line; /** Sugguest to use 8 or 16 to fit all color format alignment. Size of working buffer 0. Unit is line number. */
/** private member */
kal_uint16 sample_rate; //Use to calculate Main/Sub Buffer Size//
kal_uint16 output_size_in_bytes; /** output_s_in_byte = main_lb_s_in_line * size_unit. size_unit: 4: ARGB8888& Block_yuv, 3: RGB888, 2: RGB565 & YUY2 & UYVY*/
kal_uint32 main_buf_line_size; /** calculated from main_lb_size_in_line & width*/
kal_uint32 main_blk_w; /** calculated from main_lb_size_in_line & width*/
kal_uint32 main_final_working_buf_size;
kal_uint32 sub_buf_line_size; /** calculated from sub_lb_size_in_line & width*/
kal_uint32 sub_blk_w; /** calculated from sub_lb_size_in_line & width*/
kal_uint32 sub_final_working_buf_size; /** calculated from sub_lb_size_in_line & width*/
kal_bool hw_trigger_lcd; /**< enable hw trigger LCD */
idp_lcd_hw_trigger_mode_t hw_trigger_mode;
kal_bool hw_trigger_rst_wait_lcd;
/** private member section */
kal_uint32 _y_dest_start_addr;
kal_uint32 _u_dest_start_addr;
kal_uint32 _v_dest_start_addr;
//not used, remove kal_uint32 work_mem_line_count;
kal_uint32 wm_addr_0;
kal_uint32 wm_addr_1;
kal_uint32 wm_addr_2;
kal_uint32 wm_addr_3;
//// For easy debugging...
kal_uint8 _yh;
kal_uint8 _yv;
kal_uint8 _uvh;
kal_uint8 _uvv;
//kal_uint8 _uh;
//kal_uint8 _uv;
//kal_uint8 _vh;
//kal_uint8 _vv;
} idp_imgdma_rotdma_struct;
/**
* Init IMGDMA HW engines
*/
extern void idp_imgdma_init(void);
/**
* The LISR for IMGDMA interruption
*/
//extern void image_dma_LISR(void);
extern void
idp_imgdma_rotdma_get_main_buff_parameters(
kal_bool is_rgb_format,
img_color_fmt_yuv_enum_t yuv_format,
kal_uint16 sample_rate,
kal_bool fifo_mode,
kal_uint32 clip_w,
kal_uint32 main_lb_s_in_line,
kal_uint32 *p_main_blk_w,
kal_uint32 *p_main_buf_line_size,
kal_uint32 * p_main_working_buff_size);
extern void
idp_imgdma_rotdma_get_sub_buff_parameters(
kal_bool is_rgb_format,
img_color_fmt_yuv_enum_t yuv_format,
kal_uint16 sample_rate,
kal_bool fifo_mode,
kal_bool resample_mode,
kal_uint32 clip_w,
kal_uint32 main_lb_s_in_line,
kal_uint32 *p_sub_blk_w,
kal_uint32 *p_sub_buf_line_size,
kal_uint32 * p_sub_working_buff_size);
extern kal_bool
idp_imgdma_rotdma_get_dst_start_address_shift_byte(
kal_bool input_rgb,
img_color_fmt_rgb_enum_t rgb_color_fmt,
img_color_fmt_yuv_enum_t yuv_color_fmt,
img_rot_angle_enum_t rot_angle,
kal_uint32 y_dst_w_in_byte,
kal_uint32 y_clip_w,
kal_uint32 y_clip_h,
kal_uint32 *y_shift,
kal_uint32 *uv_shift);
extern kal_uint32
idp_imgdma_jpgdma_get_wb_bpp_x_nol(
img_color_fmt_yuv_enum_t yuv_format);
#endif // #if defined(DRV_IDP_MT6255_SERIES)
#endif // __idp_imgdma_mt6255_h__