1 #ifndef _RGA_DRIVER_H_
\r
2 #define _RGA_DRIVER_H_
\r
4 #include <linux/mutex.h>
\r
6 #define RGA_BLIT_SYNC 0x5017
\r
7 #define RGA_BLIT_ASYNC 0x5018
\r
8 #define RGA_FLUSH 0x5019
\r
9 #define RGA_GET_RESULT 0x501a
\r
10 #define RGA_GET_VERSION 0x501b
\r
13 #define RGA_REG_CTRL_LEN 0x8 /* 8 */
\r
14 #define RGA_REG_CMD_LEN 0x1c /* 28 */
\r
15 #define RGA_CMD_BUF_SIZE 0x700 /* 16*28*4 */
\r
17 #define RGA_OUT_OF_RESOURCES -10
\r
18 #define RGA_MALLOC_ERROR -11
\r
21 #define rgaIS_ERROR(status) (status < 0)
\r
22 #define rgaNO_ERROR(status) (status >= 0)
\r
23 #define rgaIS_SUCCESS(status) (status == 0)
\r
27 /* RGA process mode enum */
\r
31 color_palette_mode = 0x1,
\r
32 color_fill_mode = 0x2,
\r
33 line_point_drawing_mode = 0x3,
\r
34 blur_sharp_filter_mode = 0x4,
\r
35 pre_scaling_mode = 0x5,
\r
36 update_palette_table_mode = 0x6,
\r
37 update_patten_buff_mode = 0x7,
\r
43 rop_enable_mask = 0x2,
\r
44 dither_enable_mask = 0x8,
\r
45 fading_enable_mask = 0x10,
\r
46 PD_enbale_mask = 0x20,
\r
51 yuv2rgb_mode0 = 0x0, /* BT.601 MPEG */
\r
52 yuv2rgb_mode1 = 0x1, /* BT.601 JPEG */
\r
53 yuv2rgb_mode2 = 0x2, /* BT.709 */
\r
57 /* RGA rotate mode */
\r
60 rotate_mode0 = 0x0, /* no rotate */
\r
61 rotate_mode1 = 0x1, /* rotate */
\r
62 rotate_mode2 = 0x2, /* x_mirror */
\r
63 rotate_mode3 = 0x3, /* y_mirror */
\r
68 color_palette_mode0 = 0x0, /* 1K */
\r
69 color_palette_mode1 = 0x1, /* 2K */
\r
70 color_palette_mode2 = 0x2, /* 4K */
\r
71 color_palette_mode3 = 0x3, /* 8K */
\r
77 // Alpha Red Green Blue
\r
78 { 4, 32, {{32,24, 8, 0, 16, 8, 24,16 }}, GGL_RGBA }, // RK_FORMAT_RGBA_8888
\r
79 { 4, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGBX_8888
\r
80 { 3, 24, {{ 0, 0, 8, 0, 16, 8, 24,16 }}, GGL_RGB }, // RK_FORMAT_RGB_888
\r
81 { 4, 32, {{32,24, 24,16, 16, 8, 8, 0 }}, GGL_BGRA }, // RK_FORMAT_BGRA_8888
\r
82 { 2, 16, {{ 0, 0, 16,11, 11, 5, 5, 0 }}, GGL_RGB }, // RK_FORMAT_RGB_565
\r
83 { 2, 16, {{ 1, 0, 16,11, 11, 6, 6, 1 }}, GGL_RGBA }, // RK_FORMAT_RGBA_5551
\r
84 { 2, 16, {{ 4, 0, 16,12, 12, 8, 8, 4 }}, GGL_RGBA }, // RK_FORMAT_RGBA_4444
\r
85 { 3, 24, {{ 0, 0, 24,16, 16, 8, 8, 0 }}, GGL_BGR }, // RK_FORMAT_BGB_888
\r
90 RK_FORMAT_RGBA_8888 = 0x0,
\r
91 RK_FORMAT_RGBX_8888 = 0x1,
\r
92 RK_FORMAT_RGB_888 = 0x2,
\r
93 RK_FORMAT_BGRA_8888 = 0x3,
\r
94 RK_FORMAT_RGB_565 = 0x4,
\r
95 RK_FORMAT_RGBA_5551 = 0x5,
\r
96 RK_FORMAT_RGBA_4444 = 0x6,
\r
97 RK_FORMAT_BGR_888 = 0x7,
\r
99 RK_FORMAT_YCbCr_422_SP = 0x8,
\r
100 RK_FORMAT_YCbCr_422_P = 0x9,
\r
101 RK_FORMAT_YCbCr_420_SP = 0xa,
\r
102 RK_FORMAT_YCbCr_420_P = 0xb,
\r
104 RK_FORMAT_YCrCb_422_SP = 0xc,
\r
105 RK_FORMAT_YCrCb_422_P = 0xd,
\r
106 RK_FORMAT_YCrCb_420_SP = 0xe,
\r
107 RK_FORMAT_YCrCb_420_P = 0xf,
\r
109 RK_FORMAT_BPP1 = 0x10,
\r
110 RK_FORMAT_BPP2 = 0x11,
\r
111 RK_FORMAT_BPP4 = 0x12,
\r
112 RK_FORMAT_BPP8 = 0x13,
\r
116 typedef struct rga_img_info_t
\r
118 unsigned int yrgb_addr; /* yrgb mem addr */
\r
119 unsigned int uv_addr; /* cb/cr mem addr */
\r
120 unsigned int v_addr; /* cr mem addr */
\r
121 unsigned int format; //definition by RK_FORMAT
\r
123 unsigned short act_w;
\r
124 unsigned short act_h;
\r
125 unsigned short x_offset;
\r
126 unsigned short y_offset;
\r
128 unsigned short vir_w;
\r
129 unsigned short vir_h;
\r
131 unsigned short endian_mode; //for BPP
\r
132 unsigned short alpha_swap;
\r
137 typedef struct mdp_img_act
\r
139 unsigned short w; // width
\r
140 unsigned short h; // height
\r
141 short x_off; // x offset for the vir
\r
142 short y_off; // y offset for the vir
\r
148 typedef struct RANGE
\r
150 unsigned short min;
\r
151 unsigned short max;
\r
155 typedef struct POINT
\r
162 typedef struct RECT
\r
164 unsigned short xmin;
\r
165 unsigned short xmax; // width - 1
\r
166 unsigned short ymin;
\r
167 unsigned short ymax; // height - 1
\r
181 unsigned char mmu_en;
\r
182 uint32_t base_addr;
\r
183 uint32_t mmu_flag; /* [0] mmu enable [1] src_flush [2] dst_flush [3] CMD_flush [4~5] page size*/
\r
189 typedef struct COLOR_FILL
\r
200 //u8 cp_gr_saturation;
\r
204 typedef struct FADING
\r
214 typedef struct line_draw_t
\r
216 POINT start_point; /* LineDraw_start_point */
\r
217 POINT end_point; /* LineDraw_end_point */
\r
218 uint32_t color; /* LineDraw_color */
\r
219 uint32_t flag; /* (enum) LineDrawing mode sel */
\r
220 uint32_t line_width; /* range 1~16 */
\r
227 uint8_t render_mode; /* (enum) process mode sel */
\r
229 rga_img_info_t src; /* src image info */
\r
230 rga_img_info_t dst; /* dst image info */
\r
231 rga_img_info_t pat; /* patten image info */
\r
233 uint32_t rop_mask_addr; /* rop4 mask addr */
\r
234 uint32_t LUT_addr; /* LUT addr */
\r
236 RECT clip; /* dst clip window default value is dst_vir */
\r
237 /* value from [0, w-1] / [0, h-1]*/
\r
239 int32_t sina; /* dst angle default value 0 16.16 scan from table */
\r
240 int32_t cosa; /* dst angle default value 0 16.16 scan from table */
\r
242 uint16_t alpha_rop_flag; /* alpha rop process flag */
\r
243 /* ([0] = 1 alpha_rop_enable) */
\r
244 /* ([1] = 1 rop enable) */
\r
245 /* ([2] = 1 fading_enable) */
\r
246 /* ([3] = 1 PD_enable) */
\r
247 /* ([4] = 1 alpha cal_mode_sel) */
\r
248 /* ([5] = 1 dither_enable) */
\r
249 /* ([6] = 1 gradient fill mode sel) */
\r
250 /* ([7] = 1 AA_enable) */
\r
252 uint8_t scale_mode; /* 0 nearst / 1 bilnear / 2 bicubic */
\r
254 uint32_t color_key_max; /* color key max */
\r
255 uint32_t color_key_min; /* color key min */
\r
257 uint32_t fg_color; /* foreground color */
\r
258 uint32_t bg_color; /* background color */
\r
260 COLOR_FILL gr_color; /* color fill use gradient */
\r
262 line_draw_t line_draw_info;
\r
266 uint8_t PD_mode; /* porter duff alpha mode sel */
\r
268 uint8_t alpha_global_value; /* global alpha value */
\r
270 uint16_t rop_code; /* rop2/3/4 code scan from rop code table*/
\r
272 uint8_t bsfilter_flag; /* [2] 0 blur 1 sharp / [1:0] filter_type*/
\r
274 uint8_t palette_mode; /* (enum) color palatte 0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/
\r
276 uint8_t yuv2rgb_mode; /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709 */
\r
278 uint8_t endian_mode; /* 0/big endian 1/little endian*/
\r
280 uint8_t rotate_mode; /* (enum) rotate mode */
\r
281 /* 0x0, no rotate */
\r
283 /* 0x2, x_mirror */
\r
284 /* 0x3, y_mirror */
\r
286 uint8_t color_fill_mode; /* 0 solid color / 1 patten color */
\r
288 MMU mmu_info; /* mmu information */
\r
290 uint8_t alpha_rop_mode; /* ([0~1] alpha mode) */
\r
291 /* ([2~3] rop mode) */
\r
292 /* ([4] zero mode en) */
\r
293 /* ([5] dst alpha mode) */
\r
295 uint8_t src_trans_mode;
\r
299 typedef struct TILE_INFO
\r
303 uint16_t tile_x_num; /* x axis tile num / tile size is 8x8 pixel */
\r
304 uint16_t tile_y_num; /* y axis tile num */
\r
306 int16_t dst_x_tmp; /* dst pos x = (xstart - xoff) default value 0 */
\r
307 int16_t dst_y_tmp; /* dst pos y = (ystart - yoff) default value 0 */
\r
311 int16_t tile_start_x_coor;
\r
312 int16_t tile_start_y_coor;
\r
316 int32_t tile_temp_xstart;
\r
317 int32_t tile_temp_ystart;
\r
319 /* src tile incr */
\r
325 mdp_img_act dst_ctrl;
\r
332 * struct for process session which connect to rga
\r
334 * @author ZhangShengqin (2012-2-15)
\r
336 typedef struct rga_session {
\r
337 /* a linked list of data so we can access them for debugging */
\r
338 struct list_head list_session;
\r
339 /* a linked list of register data waiting for process */
\r
340 struct list_head waiting;
\r
341 /* a linked list of register data in processing */
\r
342 struct list_head running;
\r
343 /* all coommand this thread done */
\r
345 wait_queue_head_t wait;
\r
347 atomic_t task_running;
\r
352 rga_session *session;
\r
353 struct list_head session_link; /* link to rga service session */
\r
354 struct list_head status_link; /* link to register set list */
\r
355 uint32_t sys_reg[RGA_REG_CTRL_LEN];
\r
356 uint32_t cmd_reg[RGA_REG_CMD_LEN];
\r
357 uint32_t *MMU_base;
\r
358 //atomic_t int_enable;
\r
360 //struct rga_req req;
\r
365 typedef struct rga_service_info {
\r
367 struct timer_list timer; /* timer for power off */
\r
368 struct list_head waiting; /* link to link_reg in struct vpu_reg */
\r
369 struct list_head running; /* link to link_reg in struct vpu_reg */
\r
370 struct list_head done; /* link to link_reg in struct vpu_reg */
\r
371 struct list_head session; /* link to list_session in struct vpu_session */
\r
372 atomic_t total_running;
\r
374 struct rga_reg *reg;
\r
375 uint32_t cmd_buff[28*8];/* cmd_buff for rga */
\r
376 uint32_t *pre_scale_buf;
\r
377 atomic_t int_disable; /* 0 int enable 1 int disable */
\r
379 atomic_t src_format_swt;
\r
380 int last_prc_src_format;
\r
381 atomic_t rga_working;
\r
384 struct mutex mutex; // mutex
\r
385 } rga_service_info;
\r
389 #define RGA_BASE 0x1010c000
\r
391 //General Registers
\r
392 #define RGA_SYS_CTRL 0x000
\r
393 #define RGA_CMD_CTRL 0x004
\r
394 #define RGA_CMD_ADDR 0x008
\r
395 #define RGA_STATUS 0x00c
\r
396 #define RGA_INT 0x010
\r
397 #define RGA_AXI_ID 0x014
\r
398 #define RGA_MMU_STA_CTRL 0x018
\r
399 #define RGA_MMU_STA 0x01c
\r
401 //Command code start
\r
402 #define RGA_MODE_CTRL 0x100
\r
404 //Source Image Registers
\r
405 #define RGA_SRC_Y_MST 0x104
\r
406 #define RGA_SRC_CB_MST 0x108
\r
407 #define RGA_MASK_READ_MST 0x108 //repeat
\r
408 #define RGA_SRC_CR_MST 0x10c
\r
409 #define RGA_SRC_VIR_INFO 0x110
\r
410 #define RGA_SRC_ACT_INFO 0x114
\r
411 #define RGA_SRC_X_PARA 0x118
\r
412 #define RGA_SRC_Y_PARA 0x11c
\r
413 #define RGA_SRC_TILE_XINFO 0x120
\r
414 #define RGA_SRC_TILE_YINFO 0x124
\r
415 #define RGA_SRC_TILE_H_INCR 0x128
\r
416 #define RGA_SRC_TILE_V_INCR 0x12c
\r
417 #define RGA_SRC_TILE_OFFSETX 0x130
\r
418 #define RGA_SRC_TILE_OFFSETY 0x134
\r
419 #define RGA_SRC_BG_COLOR 0x138
\r
420 #define RGA_SRC_FG_COLOR 0x13c
\r
421 #define RGA_LINE_DRAWING_COLOR 0x13c //repeat
\r
422 #define RGA_SRC_TR_COLOR0 0x140
\r
423 #define RGA_CP_GR_A 0x140 //repeat
\r
424 #define RGA_SRC_TR_COLOR1 0x144
\r
425 #define RGA_CP_GR_B 0x144 //repeat
\r
427 #define RGA_LINE_DRAW 0x148
\r
428 #define RGA_PAT_START_POINT 0x148 //repeat
\r
430 //Destination Image Registers
\r
431 #define RGA_DST_MST 0x14c
\r
432 #define RGA_LUT_MST 0x14c //repeat
\r
433 #define RGA_PAT_MST 0x14c //repeat
\r
434 #define RGA_LINE_DRAWING_MST 0x14c //repeat
\r
436 #define RGA_DST_VIR_INFO 0x150
\r
438 #define RGA_DST_CTR_INFO 0x154
\r
439 #define RGA_LINE_DRAW_XY_INFO 0x154 //repeat
\r
441 //Alpha/ROP Registers
\r
442 #define RGA_ALPHA_CON 0x158
\r
444 #define RGA_PAT_CON 0x15c
\r
445 #define RGA_DST_VIR_WIDTH_PIX 0x15c //repeat
\r
447 #define RGA_ROP_CON0 0x160
\r
448 #define RGA_CP_GR_G 0x160 //repeat
\r
449 #define RGA_PRESCL_CB_MST 0x160 //repeat
\r
451 #define RGA_ROP_CON1 0x164
\r
452 #define RGA_CP_GR_R 0x164 //repeat
\r
453 #define RGA_PRESCL_CR_MST 0x164 //repeat
\r
456 #define RGA_FADING_CON 0x168
\r
457 #define RGA_MMU_CTRL 0x168 //repeat
\r
459 #define RGA_MMU_TBL 0x16c //repeat
\r
462 #define RGA_BLIT_COMPLETE_EVENT 1
\r
467 #endif /*_RK29_IPP_DRIVER_H_*/
\r