799365e7ca54134f804434bbeb35819f17b0aea0
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / rga2 / rga2.h
1 #ifndef _RGA_DRIVER_H_\r
2 #define _RGA_DRIVER_H_\r
3 \r
4 #include <linux/mutex.h>\r
5 #include <linux/scatterlist.h>\r
6 \r
7 \r
8 \r
9 #define RGA_BLIT_SYNC   0x5017\r
10 #define RGA_BLIT_ASYNC  0x5018\r
11 #define RGA_FLUSH       0x5019\r
12 #define RGA_GET_RESULT  0x501a\r
13 #define RGA_GET_VERSION 0x501b\r
14 \r
15 #define RGA2_BLIT_SYNC   0x6017\r
16 #define RGA2_BLIT_ASYNC  0x6018\r
17 #define RGA2_FLUSH       0x6019\r
18 #define RGA2_GET_RESULT  0x601a\r
19 #define RGA2_GET_VERSION 0x601b\r
20 \r
21 \r
22 #define RGA2_REG_CTRL_LEN    0x8    /* 8  */\r
23 #define RGA2_REG_CMD_LEN     0x20   /* 32 */\r
24 #define RGA2_CMD_BUF_SIZE    0x700  /* 16*28*4 */\r
25 \r
26 #define RGA2_OUT_OF_RESOURCES    -10\r
27 #define RGA2_MALLOC_ERROR        -11\r
28 \r
29 #define SCALE_DOWN_LARGE 1\r
30 \r
31 #define rgaIS_ERROR(status)                     (status < 0)\r
32 #define rgaNO_ERROR(status)                     (status >= 0)\r
33 #define rgaIS_SUCCESS(status)           (status == 0)\r
34 \r
35 /* RGA2 process mode enum */\r
36 enum\r
37 {\r
38     bitblt_mode               = 0x0,\r
39     color_palette_mode        = 0x1,\r
40     color_fill_mode           = 0x2,\r
41     update_palette_table_mode = 0x3,\r
42     update_patten_buff_mode   = 0x4,\r
43 };  /*render mode*/\r
44 \r
45 enum\r
46 {\r
47     A_B_B =0x0,\r
48     A_B_C =0x1,\r
49 };  //bitblt_mode select\r
50 \r
51 enum\r
52 {\r
53     rop_enable_mask          = 0x2,\r
54     dither_enable_mask       = 0x8,\r
55     fading_enable_mask       = 0x10,\r
56     PD_enbale_mask           = 0x20,\r
57 };\r
58 \r
59 \r
60 \r
61 /*\r
62 //          Alpha    Red     Green   Blue\r
63 {  4, 32, {{32,24,   8, 0,  16, 8,  24,16 }}, GGL_RGBA },   // RK_FORMAT_RGBA_8888\r
64 {  4, 24, {{ 0, 0,   8, 0,  16, 8,  24,16 }}, GGL_RGB  },   // RK_FORMAT_RGBX_8888\r
65 {  3, 24, {{ 0, 0,   8, 0,  16, 8,  24,16 }}, GGL_RGB  },   // RK_FORMAT_RGB_888\r
66 {  4, 32, {{32,24,  24,16,  16, 8,   8, 0 }}, GGL_BGRA },   // RK_FORMAT_BGRA_8888\r
67 {  2, 16, {{ 0, 0,  16,11,  11, 5,   5, 0 }}, GGL_RGB  },   // RK_FORMAT_RGB_565\r
68 {  2, 16, {{ 1, 0,  16,11,  11, 6,   6, 1 }}, GGL_RGBA },   // RK_FORMAT_RGBA_5551\r
69 {  2, 16, {{ 4, 0,  16,12,  12, 8,   8, 4 }}, GGL_RGBA },   // RK_FORMAT_RGBA_4444\r
70 {  2, 16, {{ 0, 0,   5, 0   11, 5,   16,11}}, GGL_BGR  },   // RK_FORMAT_BGR_565\r
71 {  2, 16, {{ 1, 0,   6, 1,  11, 6,   16,11}}, GGL_BGRA },   // RK_FORMAT_BGRA_5551\r
72 {  2, 16, {{ 4, 0,   8, 4,  12, 8,   16,12}}, GGL_BGRA },   // RK_FORMAT_BGRA_4444\r
73 \r
74 */\r
75 enum\r
76 {\r
77         RGA2_FORMAT_RGBA_8888    = 0x0,\r
78     RGA2_FORMAT_RGBX_8888    = 0x1,\r
79     RGA2_FORMAT_RGB_888      = 0x2,\r
80     RGA2_FORMAT_BGRA_8888    = 0x3,\r
81     RGA2_FORMAT_BGRX_8888    = 0x4,\r
82     RGA2_FORMAT_BGR_888      = 0x5,\r
83     RGA2_FORMAT_RGB_565      = 0x6,\r
84     RGA2_FORMAT_RGBA_5551    = 0x7,\r
85     RGA2_FORMAT_RGBA_4444    = 0x8,\r
86     RGA2_FORMAT_BGR_565      = 0x9,\r
87     RGA2_FORMAT_BGRA_5551    = 0xa,\r
88     RGA2_FORMAT_BGRA_4444    = 0xb,\r
89 \r
90     RGA2_FORMAT_YCbCr_422_SP = 0x10,\r
91     RGA2_FORMAT_YCbCr_422_P  = 0x11,\r
92     RGA2_FORMAT_YCbCr_420_SP = 0x12,\r
93     RGA2_FORMAT_YCbCr_420_P  = 0x13,\r
94     RGA2_FORMAT_YCrCb_422_SP = 0x14,\r
95     RGA2_FORMAT_YCrCb_422_P  = 0x15,\r
96     RGA2_FORMAT_YCrCb_420_SP = 0x16,\r
97     RGA2_FORMAT_YCrCb_420_P  = 0x17,\r
98 };\r
99 \r
100 typedef struct mdp_img\r
101 {\r
102     u16 width;\r
103     u16 height;\r
104     u32 format;\r
105     u32 mem_addr;\r
106 }\r
107 mdp_img;\r
108 \r
109 typedef struct mdp_img_act\r
110 {\r
111     u16 width;     // width\r
112     u16 height;    // height\r
113     s16 x_off;     // x offset for the vir\r
114     s16 y_off;     // y offset for the vir\r
115     s16 uv_x_off;\r
116     s16 uv_y_off;\r
117 }\r
118 mdp_img_act;\r
119 \r
120 typedef struct mdp_img_vir\r
121 {\r
122     u16 width;\r
123     u16 height;\r
124     u32 format;\r
125     u32 mem_addr;\r
126     u32 uv_addr;\r
127     u32 v_addr;\r
128 }\r
129 mdp_img_vir;\r
130 \r
131 \r
132 typedef struct MMU_INFO\r
133 {\r
134     u32 src0_base_addr;\r
135     u32 src1_base_addr;\r
136     u32 dst_base_addr;\r
137     u32 els_base_addr;\r
138 \r
139     u8 src0_mmu_flag;     /* [0] src0 mmu enable [1] src0_flush [2] src0_prefetch_en [3] src0_prefetch dir */\r
140     u8 src1_mmu_flag;     /* [0] src1 mmu enable [1] src1_flush [2] src1_prefetch_en [3] src1_prefetch dir */\r
141     u8 dst_mmu_flag;      /* [0] dst  mmu enable [1] dst_flush  [2] dst_prefetch_en  [3] dst_prefetch dir  */\r
142     u8 els_mmu_flag;      /* [0] els  mmu enable [1] els_flush  [2] els_prefetch_en  [3] els_prefetch dir  */\r
143 } MMU_INFO;\r
144 \r
145 \r
146 enum\r
147 {\r
148         MMU_DIS = 0x0,\r
149         MMU_EN  = 0x1\r
150 };\r
151 enum\r
152 {\r
153         MMU_FLUSH_DIS = 0x0,\r
154         MMU_FLUSH_EN  = 0x2\r
155 };\r
156 enum\r
157 {\r
158         MMU_PRE_DIS = 0x0,\r
159         MMU_PRE_EN  = 0x4\r
160 };\r
161 enum\r
162 {\r
163         MMU_PRE_DIR_FORW  = 0x0,\r
164         MMU_PRE_DIR_BACK  = 0x8\r
165 };\r
166 typedef struct COLOR_FILL\r
167 {\r
168     s16 gr_x_a;\r
169     s16 gr_y_a;\r
170     s16 gr_x_b;\r
171     s16 gr_y_b;\r
172     s16 gr_x_g;\r
173     s16 gr_y_g;\r
174     s16 gr_x_r;\r
175     s16 gr_y_r;\r
176 }\r
177 COLOR_FILL;\r
178 \r
179 enum\r
180 {\r
181         ALPHA_ORIGINAL = 0x0,\r
182         ALPHA_NO_128   = 0x1\r
183 };\r
184 \r
185 enum\r
186 {\r
187         R2_BLACK       = 0x00,\r
188         R2_COPYPEN     = 0xf0,\r
189         R2_MASKNOTPEN  = 0x0a,\r
190         R2_MASKPEN     = 0xa0,\r
191         R2_MASKPENNOT  = 0x50,\r
192         R2_MERGENOTPEN = 0xaf,\r
193         R2_MERGEPEN    = 0xfa,\r
194         R2_MERGEPENNOT = 0xf5,\r
195         R2_NOP         = 0xaa,\r
196         R2_NOT         = 0x55,\r
197         R2_NOTCOPYPEN  = 0x0f,\r
198         R2_NOTMASKPEN  = 0x5f,\r
199         R2_NOTMERGEPEN = 0x05,\r
200         R2_NOTXORPEN   = 0xa5,\r
201         R2_WHITE       = 0xff,\r
202         R2_XORPEN      = 0x5a\r
203 };\r
204 \r
205 \r
206 /***************************************/\r
207 /* porting from rga.h for msg convert  */\r
208 /***************************************/\r
209 \r
210 typedef struct FADING\r
211 {\r
212     uint8_t b;\r
213     uint8_t g;\r
214     uint8_t r;\r
215     uint8_t res;\r
216 }\r
217 FADING;\r
218 \r
219 typedef struct MMU\r
220 {\r
221     unsigned char mmu_en;\r
222     uint32_t base_addr;\r
223     uint32_t mmu_flag;     /* [0] mmu enable [1] src_flush [2] dst_flush [3] CMD_flush [4~5] page size*/\r
224 } MMU;\r
225 \r
226 \r
227 typedef struct RECT\r
228 {\r
229     unsigned short xmin;\r
230     unsigned short xmax; // width - 1\r
231     unsigned short ymin;\r
232     unsigned short ymax; // height - 1\r
233 } RECT;\r
234 \r
235 typedef struct POINT\r
236 {\r
237     unsigned short x;\r
238     unsigned short y;\r
239 }\r
240 POINT;\r
241 \r
242 typedef struct line_draw_t\r
243 {\r
244     POINT start_point;              /* LineDraw_start_point                */\r
245     POINT end_point;                /* LineDraw_end_point                  */\r
246     uint32_t   color;               /* LineDraw_color                      */\r
247     uint32_t   flag;                /* (enum) LineDrawing mode sel         */\r
248     uint32_t   line_width;          /* range 1~16 */\r
249 }\r
250 line_draw_t;\r
251 \r
252 typedef struct rga_img_info_t\r
253 {\r
254     unsigned int yrgb_addr;      /* yrgb    mem addr         */\r
255     unsigned int uv_addr;        /* cb/cr   mem addr         */\r
256     unsigned int v_addr;         /* cr      mem addr         */\r
257     unsigned int format;         //definition by RK_FORMAT\r
258 \r
259     unsigned short act_w;\r
260     unsigned short act_h;\r
261     unsigned short x_offset;\r
262     unsigned short y_offset;\r
263 \r
264     unsigned short vir_w;\r
265     unsigned short vir_h;\r
266 \r
267     unsigned short endian_mode; //for BPP\r
268     unsigned short alpha_swap;\r
269 \r
270     //unsigned short uv_x_off;\r
271     //unsigned short uv_y_off;\r
272 }\r
273 rga_img_info_t;\r
274 \r
275 struct rga_req {\r
276     uint8_t render_mode;            /* (enum) process mode sel */\r
277 \r
278     rga_img_info_t src;             /* src image info */\r
279     rga_img_info_t dst;             /* dst image info */\r
280     rga_img_info_t pat;             /* patten image info */\r
281 \r
282     uint32_t rop_mask_addr;         /* rop4 mask addr */\r
283     uint32_t LUT_addr;              /* LUT addr */\r
284 \r
285     RECT clip;                      /* dst clip window default value is dst_vir */\r
286                                     /* value from [0, w-1] / [0, h-1]*/\r
287 \r
288     int32_t sina;                   /* dst angle  default value 0  16.16 scan from table */\r
289     int32_t cosa;                   /* dst angle  default value 0  16.16 scan from table */\r
290 \r
291     uint16_t alpha_rop_flag;        /* alpha rop process flag           */\r
292                                     /* ([0] = 1 alpha_rop_enable)       */\r
293                                     /* ([1] = 1 rop enable)             */\r
294                                     /* ([2] = 1 fading_enable)          */\r
295                                     /* ([3] = 1 PD_enable)              */\r
296                                     /* ([4] = 1 alpha cal_mode_sel)     */\r
297                                     /* ([5] = 1 dither_enable)          */\r
298                                     /* ([6] = 1 gradient fill mode sel) */\r
299                                     /* ([7] = 1 AA_enable)              */\r
300 \r
301     uint8_t  scale_mode;            /* 0 nearst / 1 bilnear / 2 bicubic */\r
302 \r
303     uint32_t color_key_max;         /* color key max */\r
304     uint32_t color_key_min;         /* color key min */\r
305 \r
306     uint32_t fg_color;              /* foreground color */\r
307     uint32_t bg_color;              /* background color */\r
308 \r
309     COLOR_FILL gr_color;            /* color fill use gradient */\r
310 \r
311     line_draw_t line_draw_info;\r
312 \r
313     FADING fading;\r
314 \r
315     uint8_t PD_mode;                /* porter duff alpha mode sel */\r
316 \r
317     uint8_t alpha_global_value;     /* global alpha value */\r
318 \r
319     uint16_t rop_code;              /* rop2/3/4 code  scan from rop code table*/\r
320 \r
321     uint8_t bsfilter_flag;          /* [2] 0 blur 1 sharp / [1:0] filter_type*/\r
322 \r
323     uint8_t palette_mode;           /* (enum) color palatte  0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/\r
324 \r
325     uint8_t yuv2rgb_mode;           /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709  */\r
326 \r
327     uint8_t endian_mode;            /* 0/big endian 1/little endian*/\r
328 \r
329     uint8_t rotate_mode;            /* (enum) rotate mode  */\r
330                                     /* 0x0,     no rotate  */\r
331                                     /* 0x1,     rotate     */\r
332                                     /* 0x2,     x_mirror   */\r
333                                     /* 0x3,     y_mirror   */\r
334 \r
335     uint8_t color_fill_mode;        /* 0 solid color / 1 patten color */\r
336 \r
337     MMU mmu_info;                   /* mmu information */\r
338 \r
339     uint8_t  alpha_rop_mode;        /* ([0~1] alpha mode)            */\r
340                                     /* ([2~3] rop   mode)            */\r
341                                     /* ([4]   zero  mode en)         */\r
342                                     /* ([5]   dst   alpha mode)      */\r
343                                     /* ([6]   alpha output mode sel) 0 src / 1 dst*/\r
344 \r
345     uint8_t  src_trans_mode;\r
346 };\r
347 \r
348 \r
349 \r
350 struct rga2_req\r
351 {\r
352     u8 render_mode;          /* (enum) process mode sel */\r
353 \r
354     rga_img_info_t src;    // src  active window\r
355     rga_img_info_t src1;   // src1 active window\r
356     rga_img_info_t dst;    // dst  active window\r
357     rga_img_info_t pat;    // patten active window\r
358 \r
359     u32 rop_mask_addr;       // rop4 mask addr\r
360     u32 LUT_addr;            // LUT addr\r
361 \r
362     u32 rop_mask_stride;\r
363 \r
364     u8 bitblt_mode;          /* 0: SRC + DST  => DST     */\r
365                              /* 1: SRC + SRC1 => DST     */\r
366 \r
367     u8 rotate_mode;          /* [1:0]                           */\r
368                              /* 0   degree 0x0                  */\r
369                              /* 90  degree 0x1                  */\r
370                              /* 180 degree 0x2                  */\r
371                              /* 270 degree 0x3                  */\r
372                              /* [5:4]                           */\r
373                              /* none                0x0         */\r
374                              /* x_mirror            0x1         */\r
375                              /* y_mirror            0x2         */\r
376                              /* x_mirror + y_mirror 0x3         */\r
377 \r
378     u16 alpha_rop_flag;         /* alpha rop process flag           */\r
379                                 /* ([0] = 1 alpha_rop_enable)       */\r
380                                 /* ([1] = 1 rop enable)             */\r
381                                 /* ([2] = 1 fading_enable)          */\r
382                                 /* ([3] = 1 alpha cal_mode_sel)     */\r
383                                 /* ([4] = 1 src_dither_up_enable)   */\r
384                                 /* ([5] = 1 dst_dither_up_enable)   */\r
385                                 /* ([6] = 1 dither_down_enable)     */\r
386                                 /* ([7] = 1 gradient fill mode sel) */\r
387 \r
388 \r
389     u16 alpha_mode_0;           /* [0]     SrcAlphaMode0          */\r
390                                 /* [2:1]   SrcGlobalAlphaMode0    */\r
391                                 /* [3]     SrcAlphaSelectMode0    */\r
392                                 /* [6:4]   SrcFactorMode0         */\r
393                                 /* [7]     SrcColorMode           */\r
394 \r
395                                 /* [8]     DstAlphaMode0          */\r
396                                 /* [10:9]  DstGlobalAlphaMode0    */\r
397                                 /* [11]    DstAlphaSelectMode0    */\r
398                                 /* [14:12] DstFactorMode0         */\r
399                                 /* [15]    DstColorMode0          */\r
400 \r
401     u16 alpha_mode_1;           /* [0]     SrcAlphaMode1          */\r
402                                 /* [2:1]   SrcGlobalAlphaMode1    */\r
403                                 /* [3]     SrcAlphaSelectMode1    */\r
404                                 /* [6:4]   SrcFactorMode1         */\r
405 \r
406                                 /* [8]     DstAlphaMode1          */\r
407                                 /* [10:9]  DstGlobalAlphaMode1    */\r
408                                 /* [11]    DstAlphaSelectMode1    */\r
409                                 /* [14:12] DstFactorMode1         */\r
410 \r
411     u8  scale_bicu_mode;    /* 0   1   2  3 */\r
412 \r
413     u32 color_key_max;      /* color key max */\r
414     u32 color_key_min;      /* color key min */\r
415 \r
416     u32 fg_color;           /* foreground color */\r
417     u32 bg_color;           /* background color */\r
418 \r
419     u8 color_fill_mode;\r
420     COLOR_FILL gr_color;    /* color fill use gradient */\r
421 \r
422     u8 fading_alpha_value;  /* Fading value */\r
423     u8 fading_r_value;\r
424     u8 fading_g_value;\r
425     u8 fading_b_value;\r
426 \r
427     u8 src_a_global_val;    /* src global alpha value        */\r
428     u8 dst_a_global_val;    /* dst global alpha value        */\r
429 \r
430 \r
431     u8  rop_mode;\r
432     u16 rop_code;           /* rop2/3/4 code */\r
433 \r
434     u8 palette_mode;        /* (enum) color palatte  0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/\r
435 \r
436     u8 yuv2rgb_mode;        /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709  */\r
437 \r
438     u8 endian_mode;         /* 0/little endian 1/big endian */\r
439 \r
440     u8 CMD_fin_int_enable;\r
441 \r
442     MMU_INFO mmu_info;               /* mmu infomation */\r
443 \r
444     u8 alpha_zero_key;\r
445     u8 src_trans_mode;\r
446 \r
447     u8 alpha_swp;\r
448     u8 dither_mode;\r
449 \r
450     u8 rgb2yuv_mode;\r
451 \r
452     #if defined(CONFIG_ROCKCHIP_IOMMU) & defined(CONFIG_ION_ROCKCHIP)\r
453     struct sg_table *sg_src0;\r
454     struct sg_table *sg_src1;\r
455     struct sg_table *sg_dst;\r
456     struct sg_table *sg_els;\r
457     #endif\r
458 };\r
459 \r
460 struct rga2_mmu_buf_t {\r
461     int32_t front;\r
462     int32_t back;\r
463     int32_t size;\r
464     int32_t curr;\r
465     unsigned int *buf;\r
466     unsigned int *buf_virtual;\r
467 };\r
468 \r
469 //add for FPGA test ,by hxx & luj\r
470 \r
471 enum\r
472 {\r
473     BB_ROTATE_OFF   = 0x0,     /* no rotate  */\r
474     BB_ROTATE_90    = 0x1,     /* rotate 90  */\r
475     BB_ROTATE_180   = 0x2,     /* rotate 180 */\r
476     BB_ROTATE_270   = 0x3,     /* rotate 270 */\r
477 };  /*rotate mode*/\r
478 \r
479 enum\r
480 {\r
481     BB_MIRROR_OFF   = (0x0 << 4),     /* no mirror  */\r
482     BB_MIRROR_X     = (0x1 << 4),     /* x  mirror  */\r
483     BB_MIRROR_Y     = (0x2 << 4),     /* y  mirror  */\r
484     BB_MIRROR_XY    = (0x3 << 4),     /* xy mirror  */\r
485 };  /*mirror mode*/\r
486 \r
487 enum\r
488 {\r
489     BB_COPY_USE_TILE = (0x1 << 6),    /* bitblt mode copy but use Tile mode */\r
490 };\r
491 \r
492 enum\r
493 {\r
494         //BYPASS        = 0x0,\r
495     BT_601_RANGE0   = 0x1,\r
496     BT_601_RANGE1   = 0x2,\r
497     BT_709_RANGE0   = 0x3,\r
498 }; /*yuv2rgb_mode*/\r
499 \r
500 enum\r
501 {\r
502     BPP1        = 0x0,     /* BPP1 */\r
503     BPP2        = 0x1,     /* BPP2 */\r
504     BPP4        = 0x2,     /* BPP4 */\r
505     BPP8        = 0x3      /* BPP8 */\r
506 }; /*palette_mode*/\r
507 \r
508 enum\r
509 {\r
510         SOLID_COLOR   = 0x0, //color fill mode; ROP4: SOLID_rop4_mask_addr COLOR\r
511         PATTERN_COLOR = 0x1  //pattern_fill_mode;ROP4:PATTERN_COLOR\r
512 };  /*color fill mode*/\r
513 \r
514 enum\r
515 {\r
516         COLOR_FILL_CLIP     = 0x0,\r
517         COLOR_FILL_NOT_CLIP = 0x1\r
518 };\r
519 \r
520 enum\r
521 {\r
522     CATROM    = 0x0,\r
523     MITCHELL  = 0x1,\r
524     HERMITE   = 0x2,\r
525     B_SPLINE  = 0x3,\r
526 };  /*bicubic coefficient*/\r
527 \r
528 enum\r
529 {\r
530         ROP2 = 0x0,\r
531         ROP3 = 0x1,\r
532         ROP4 = 0x2\r
533 };  /*ROP mode*/\r
534 \r
535 enum\r
536 {\r
537         BIG_ENDIAN    = 0x0,\r
538         LITTLE_ENDIAN = 0x1\r
539 };  /*endian mode*/\r
540 \r
541 enum\r
542 {\r
543         MMU_TABLE_4KB  = 0x0,\r
544         MMU_TABLE_64KB = 0x1,\r
545 };  /*MMU table size*/\r
546 \r
547 enum\r
548 {\r
549     RGB_2_666 = 0x0,\r
550     RGB_2_565 = 0x1,\r
551     RGB_2_555 = 0x2,\r
552     RGB_2_444 = 0x3,\r
553 };  /*dither down mode*/\r
554 \r
555 \r
556 \r
557 /**\r
558  * struct for process session which connect to rga\r
559  *\r
560  * @author ZhangShengqin (2012-2-15)\r
561  */\r
562 typedef struct rga2_session {\r
563         /* a linked list of data so we can access them for debugging */\r
564         struct list_head    list_session;\r
565         /* a linked list of register data waiting for process */\r
566         struct list_head    waiting;\r
567         /* a linked list of register data in processing */\r
568         struct list_head    running;\r
569         /* all coommand this thread done */\r
570     atomic_t            done;\r
571         wait_queue_head_t   wait;\r
572         pid_t           pid;\r
573         atomic_t        task_running;\r
574     atomic_t        num_done;\r
575 } rga2_session;\r
576 \r
577 struct rga2_reg {\r
578     rga2_session                *session;\r
579         struct list_head        session_link;           /* link to rga service session */\r
580         struct list_head        status_link;            /* link to register set list */\r
581         uint32_t  sys_reg[8];\r
582     uint32_t  cmd_reg[32];\r
583 \r
584     uint32_t *MMU_base;\r
585     uint32_t MMU_len;\r
586     //atomic_t int_enable;\r
587 \r
588     //struct rga_req      req;\r
589 };\r
590 \r
591 \r
592 \r
593 struct rga2_service_info {\r
594     struct mutex        lock;\r
595     struct timer_list   timer;                  /* timer for power off */\r
596     struct list_head    waiting;                /* link to link_reg in struct vpu_reg */\r
597     struct list_head    running;                /* link to link_reg in struct vpu_reg */\r
598     struct list_head    done;                   /* link to link_reg in struct vpu_reg */\r
599     struct list_head    session;                /* link to list_session in struct vpu_session */\r
600     atomic_t            total_running;\r
601 \r
602     struct rga2_reg        *reg;\r
603 \r
604     uint32_t            cmd_buff[32*8];/* cmd_buff for rga */\r
605     uint32_t            *pre_scale_buf;\r
606     atomic_t            int_disable;     /* 0 int enable 1 int disable  */\r
607     atomic_t            cmd_num;\r
608     atomic_t            src_format_swt;\r
609     int                 last_prc_src_format;\r
610     atomic_t            rga_working;\r
611     bool                enable;\r
612 \r
613     //struct rga_req      req[10];\r
614 \r
615     struct mutex        mutex;  // mutex\r
616 };\r
617 \r
618 #define RGA2_TEST_CASE 0\r
619 #define RGA2_TEST      0\r
620 #define RGA2_TEST_MSG  0\r
621 #define RGA2_TEST_TIME 0\r
622 \r
623 //General Registers\r
624 #define RGA2_SYS_CTRL             0x000\r
625 #define RGA2_CMD_CTRL             0x004\r
626 #define RGA2_CMD_BASE             0x008\r
627 #define RGA2_STATUS               0x00c\r
628 #define RGA2_INT                  0x010\r
629 #define RGA2_MMU_CTRL0            0x018\r
630 #define RGA2_MMU_CMD_BASE         0x01c\r
631 \r
632 //Command code start\r
633 #define RGA2_MODE_CTRL            0x100\r
634 #define RGA_BLIT_COMPLETE_EVENT 1\r
635 \r
636 long rga_ioctl_kernel(struct rga_req *req);\r
637 \r
638 \r
639 #endif /*_RK29_IPP_DRIVER_H_*/\r