5c51f92220c9a7d0fe0bf174277cc76a388bdce8
[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     RGA2_FORMAT_YCbCr_420_SP_10B = 0x20,\r
99     RGA2_FORMAT_YCrCb_420_SP_10B = 0x21,\r
100     RGA2_FORMAT_YCbCr_422_SP_10B = 0x22,\r
101     RGA2_FORMAT_YCrCb_422_SP_10B = 0x23,\r
102 };\r
103 \r
104 typedef struct mdp_img\r
105 {\r
106     u16 width;\r
107     u16 height;\r
108     u32 format;\r
109     u32 mem_addr;\r
110 }\r
111 mdp_img;\r
112 \r
113 typedef struct mdp_img_act\r
114 {\r
115     u16 width;     // width\r
116     u16 height;    // height\r
117     s16 x_off;     // x offset for the vir\r
118     s16 y_off;     // y offset for the vir\r
119     s16 uv_x_off;\r
120     s16 uv_y_off;\r
121 }\r
122 mdp_img_act;\r
123 \r
124 typedef struct mdp_img_vir\r
125 {\r
126     u16 width;\r
127     u16 height;\r
128     u32 format;\r
129     u32 mem_addr;\r
130     u32 uv_addr;\r
131     u32 v_addr;\r
132 }\r
133 mdp_img_vir;\r
134 \r
135 \r
136 typedef struct MMU_INFO\r
137 {\r
138     unsigned long src0_base_addr;\r
139     unsigned long src1_base_addr;\r
140     unsigned long dst_base_addr;\r
141     unsigned long els_base_addr;\r
142 \r
143     u8 src0_mmu_flag;     /* [0] src0 mmu enable [1] src0_flush [2] src0_prefetch_en [3] src0_prefetch dir */\r
144     u8 src1_mmu_flag;     /* [0] src1 mmu enable [1] src1_flush [2] src1_prefetch_en [3] src1_prefetch dir */\r
145     u8 dst_mmu_flag;      /* [0] dst  mmu enable [1] dst_flush  [2] dst_prefetch_en  [3] dst_prefetch dir  */\r
146     u8 els_mmu_flag;      /* [0] els  mmu enable [1] els_flush  [2] els_prefetch_en  [3] els_prefetch dir  */\r
147 } MMU_INFO;\r
148 \r
149 \r
150 enum\r
151 {\r
152         MMU_DIS = 0x0,\r
153         MMU_EN  = 0x1\r
154 };\r
155 enum\r
156 {\r
157         MMU_FLUSH_DIS = 0x0,\r
158         MMU_FLUSH_EN  = 0x2\r
159 };\r
160 enum\r
161 {\r
162         MMU_PRE_DIS = 0x0,\r
163         MMU_PRE_EN  = 0x4\r
164 };\r
165 enum\r
166 {\r
167         MMU_PRE_DIR_FORW  = 0x0,\r
168         MMU_PRE_DIR_BACK  = 0x8\r
169 };\r
170 typedef struct COLOR_FILL\r
171 {\r
172     s16 gr_x_a;\r
173     s16 gr_y_a;\r
174     s16 gr_x_b;\r
175     s16 gr_y_b;\r
176     s16 gr_x_g;\r
177     s16 gr_y_g;\r
178     s16 gr_x_r;\r
179     s16 gr_y_r;\r
180 }\r
181 COLOR_FILL;\r
182 \r
183 enum\r
184 {\r
185         ALPHA_ORIGINAL = 0x0,\r
186         ALPHA_NO_128   = 0x1\r
187 };\r
188 \r
189 enum\r
190 {\r
191         R2_BLACK       = 0x00,\r
192         R2_COPYPEN     = 0xf0,\r
193         R2_MASKNOTPEN  = 0x0a,\r
194         R2_MASKPEN     = 0xa0,\r
195         R2_MASKPENNOT  = 0x50,\r
196         R2_MERGENOTPEN = 0xaf,\r
197         R2_MERGEPEN    = 0xfa,\r
198         R2_MERGEPENNOT = 0xf5,\r
199         R2_NOP         = 0xaa,\r
200         R2_NOT         = 0x55,\r
201         R2_NOTCOPYPEN  = 0x0f,\r
202         R2_NOTMASKPEN  = 0x5f,\r
203         R2_NOTMERGEPEN = 0x05,\r
204         R2_NOTXORPEN   = 0xa5,\r
205         R2_WHITE       = 0xff,\r
206         R2_XORPEN      = 0x5a\r
207 };\r
208 \r
209 \r
210 /***************************************/\r
211 /* porting from rga.h for msg convert  */\r
212 /***************************************/\r
213 \r
214 typedef struct FADING\r
215 {\r
216     uint8_t b;\r
217     uint8_t g;\r
218     uint8_t r;\r
219     uint8_t res;\r
220 }\r
221 FADING;\r
222 \r
223 typedef struct MMU\r
224 {\r
225     unsigned char mmu_en;\r
226     unsigned long base_addr;\r
227     uint32_t mmu_flag;     /* [0] mmu enable [1] src_flush [2] dst_flush [3] CMD_flush [4~5] page size*/\r
228 } MMU;\r
229 \r
230 typedef struct MMU_32\r
231 {\r
232     unsigned char mmu_en;\r
233     uint32_t base_addr;\r
234     uint32_t mmu_flag;     /* [0] mmu enable [1] src_flush [2] dst_flush [3] CMD_flush [4~5] page size*/\r
235 } MMU_32;\r
236 \r
237 typedef struct RECT\r
238 {\r
239     unsigned short xmin;\r
240     unsigned short xmax; // width - 1\r
241     unsigned short ymin;\r
242     unsigned short ymax; // height - 1\r
243 } RECT;\r
244 \r
245 typedef struct POINT\r
246 {\r
247     unsigned short x;\r
248     unsigned short y;\r
249 }\r
250 POINT;\r
251 \r
252 typedef struct line_draw_t\r
253 {\r
254     POINT start_point;              /* LineDraw_start_point                */\r
255     POINT end_point;                /* LineDraw_end_point                  */\r
256     uint32_t   color;               /* LineDraw_color                      */\r
257     uint32_t   flag;                /* (enum) LineDrawing mode sel         */\r
258     uint32_t   line_width;          /* range 1~16 */\r
259 }\r
260 line_draw_t;\r
261 \r
262 typedef struct rga_img_info_t\r
263 {\r
264     unsigned long yrgb_addr;      /* yrgb    mem addr         */\r
265     unsigned long uv_addr;        /* cb/cr   mem addr         */\r
266     unsigned long v_addr;         /* cr      mem addr         */\r
267     unsigned int format;         //definition by RK_FORMAT\r
268 \r
269     unsigned short act_w;\r
270     unsigned short act_h;\r
271     unsigned short x_offset;\r
272     unsigned short y_offset;\r
273 \r
274     unsigned short vir_w;\r
275     unsigned short vir_h;\r
276 \r
277     unsigned short endian_mode; //for BPP\r
278     unsigned short alpha_swap;\r
279 }\r
280 rga_img_info_t;\r
281 typedef struct rga_img_info_32_t\r
282 {\r
283     uint32_t yrgb_addr;      /* yrgb    mem addr         */\r
284     uint32_t uv_addr;        /* cb/cr   mem addr         */\r
285     uint32_t v_addr;         /* cr      mem addr         */\r
286     unsigned int format;         //definition by RK_FORMAT\r
287     unsigned short act_w;\r
288     unsigned short act_h;\r
289     unsigned short x_offset;\r
290     unsigned short y_offset;\r
291     unsigned short vir_w;\r
292     unsigned short vir_h;\r
293     unsigned short endian_mode; //for BPP\r
294     unsigned short alpha_swap;\r
295 }\r
296 rga_img_info_32_t;\r
297 \r
298 struct rga_req {\r
299     uint8_t render_mode;            /* (enum) process mode sel */\r
300 \r
301     rga_img_info_t src;             /* src image info */\r
302     rga_img_info_t dst;             /* dst image info */\r
303     rga_img_info_t pat;             /* patten image info */\r
304 \r
305     unsigned long rop_mask_addr;         /* rop4 mask addr */\r
306     unsigned long LUT_addr;              /* LUT addr */\r
307 \r
308     RECT clip;                      /* dst clip window default value is dst_vir */\r
309                                     /* value from [0, w-1] / [0, h-1]*/\r
310 \r
311     int32_t sina;                   /* dst angle  default value 0  16.16 scan from table */\r
312     int32_t cosa;                   /* dst angle  default value 0  16.16 scan from table */\r
313 \r
314     uint16_t alpha_rop_flag;        /* alpha rop process flag           */\r
315                                     /* ([0] = 1 alpha_rop_enable)       */\r
316                                     /* ([1] = 1 rop enable)             */\r
317                                     /* ([2] = 1 fading_enable)          */\r
318                                     /* ([3] = 1 PD_enable)              */\r
319                                     /* ([4] = 1 alpha cal_mode_sel)     */\r
320                                     /* ([5] = 1 dither_enable)          */\r
321                                     /* ([6] = 1 gradient fill mode sel) */\r
322                                     /* ([7] = 1 AA_enable)              */\r
323 \r
324     uint8_t  scale_mode;            /* 0 nearst / 1 bilnear / 2 bicubic */\r
325 \r
326     uint32_t color_key_max;         /* color key max */\r
327     uint32_t color_key_min;         /* color key min */\r
328 \r
329     uint32_t fg_color;              /* foreground color */\r
330     uint32_t bg_color;              /* background color */\r
331 \r
332     COLOR_FILL gr_color;            /* color fill use gradient */\r
333 \r
334     line_draw_t line_draw_info;\r
335 \r
336     FADING fading;\r
337 \r
338     uint8_t PD_mode;                /* porter duff alpha mode sel */\r
339 \r
340     uint8_t alpha_global_value;     /* global alpha value */\r
341 \r
342     uint16_t rop_code;              /* rop2/3/4 code  scan from rop code table*/\r
343 \r
344     uint8_t bsfilter_flag;          /* [2] 0 blur 1 sharp / [1:0] filter_type*/\r
345 \r
346     uint8_t palette_mode;           /* (enum) color palatte  0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/\r
347 \r
348     uint8_t yuv2rgb_mode;           /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709  */\r
349 \r
350     uint8_t endian_mode;            /* 0/big endian 1/little endian*/\r
351 \r
352     uint8_t rotate_mode;            /* (enum) rotate mode  */\r
353                                     /* 0x0,     no rotate  */\r
354                                     /* 0x1,     rotate     */\r
355                                     /* 0x2,     x_mirror   */\r
356                                     /* 0x3,     y_mirror   */\r
357 \r
358     uint8_t color_fill_mode;        /* 0 solid color / 1 patten color */\r
359 \r
360     MMU mmu_info;                   /* mmu information */\r
361 \r
362     uint8_t  alpha_rop_mode;        /* ([0~1] alpha mode)            */\r
363                                     /* ([2~3] rop   mode)            */\r
364                                     /* ([4]   zero  mode en)         */\r
365                                     /* ([5]   dst   alpha mode)      */\r
366                                     /* ([6]   alpha output mode sel) 0 src / 1 dst*/\r
367 \r
368     uint8_t  src_trans_mode;\r
369 };\r
370 struct rga_req_32\r
371 {\r
372     uint8_t render_mode;            /* (enum) process mode sel */\r
373     rga_img_info_32_t src;             /* src image info */\r
374     rga_img_info_32_t dst;             /* dst image info */\r
375     rga_img_info_32_t pat;             /* patten image info */\r
376     uint32_t rop_mask_addr;         /* rop4 mask addr */\r
377     uint32_t LUT_addr;              /* LUT addr */\r
378     RECT clip;                      /* dst clip window default value is dst_vir */\r
379                                     /* value from [0, w-1] / [0, h-1]*/\r
380     int32_t sina;                   /* dst angle  default value 0  16.16 scan from table */\r
381     int32_t cosa;                   /* dst angle  default value 0  16.16 scan from table */\r
382     uint16_t alpha_rop_flag;        /* alpha rop process flag           */\r
383                                     /* ([0] = 1 alpha_rop_enable)       */\r
384                                     /* ([1] = 1 rop enable)             */\r
385                                     /* ([2] = 1 fading_enable)          */\r
386                                     /* ([3] = 1 PD_enable)              */\r
387                                     /* ([4] = 1 alpha cal_mode_sel)     */\r
388                                     /* ([5] = 1 dither_enable)          */\r
389                                     /* ([6] = 1 gradient fill mode sel) */\r
390                                     /* ([7] = 1 AA_enable)              */\r
391     uint8_t  scale_mode;            /* 0 nearst / 1 bilnear / 2 bicubic */\r
392     uint32_t color_key_max;         /* color key max */\r
393     uint32_t color_key_min;         /* color key min */\r
394     uint32_t fg_color;              /* foreground color */\r
395     uint32_t bg_color;              /* background color */\r
396     COLOR_FILL gr_color;            /* color fill use gradient */\r
397     line_draw_t line_draw_info;\r
398     FADING fading;\r
399     uint8_t PD_mode;                /* porter duff alpha mode sel */\r
400     uint8_t alpha_global_value;     /* global alpha value */\r
401     uint16_t rop_code;              /* rop2/3/4 code  scan from rop code table*/\r
402     uint8_t bsfilter_flag;          /* [2] 0 blur 1 sharp / [1:0] filter_type*/\r
403     uint8_t palette_mode;           /* (enum) color palatte  0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/\r
404     uint8_t yuv2rgb_mode;           /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709  */\r
405     uint8_t endian_mode;            /* 0/big endian 1/little endian*/\r
406     uint8_t rotate_mode;            /* (enum) rotate mode  */\r
407                                     /* 0x0,     no rotate  */\r
408                                     /* 0x1,     rotate     */\r
409                                     /* 0x2,     x_mirror   */\r
410                                     /* 0x3,     y_mirror   */\r
411     uint8_t color_fill_mode;        /* 0 solid color / 1 patten color */\r
412     MMU_32 mmu_info;                   /* mmu information */\r
413     uint8_t  alpha_rop_mode;        /* ([0~1] alpha mode)            */\r
414                                     /* ([2~3] rop   mode)            */\r
415                                     /* ([4]   zero  mode en)         */\r
416                                     /* ([5]   dst   alpha mode)      */\r
417                                     /* ([6]   alpha output mode sel) 0 src / 1 dst*/\r
418     uint8_t  src_trans_mode;\r
419 };\r
420 \r
421 \r
422 \r
423 struct rga2_req\r
424 {\r
425     u8 render_mode;          /* (enum) process mode sel */\r
426 \r
427     rga_img_info_t src;    // src  active window\r
428     rga_img_info_t src1;   // src1 active window\r
429     rga_img_info_t dst;    // dst  active window\r
430     rga_img_info_t pat;    // patten active window\r
431 \r
432     unsigned long rop_mask_addr;       // rop4 mask addr\r
433     unsigned long LUT_addr;            // LUT addr\r
434 \r
435     u32 rop_mask_stride;\r
436 \r
437     u8 bitblt_mode;          /* 0: SRC + DST  => DST     */\r
438                              /* 1: SRC + SRC1 => DST     */\r
439 \r
440     u8 rotate_mode;          /* [1:0]                           */\r
441                              /* 0   degree 0x0                  */\r
442                              /* 90  degree 0x1                  */\r
443                              /* 180 degree 0x2                  */\r
444                              /* 270 degree 0x3                  */\r
445                              /* [5:4]                           */\r
446                              /* none                0x0         */\r
447                              /* x_mirror            0x1         */\r
448                              /* y_mirror            0x2         */\r
449                              /* x_mirror + y_mirror 0x3         */\r
450 \r
451     u16 alpha_rop_flag;         /* alpha rop process flag           */\r
452                                 /* ([0] = 1 alpha_rop_enable)       */\r
453                                 /* ([1] = 1 rop enable)             */\r
454                                 /* ([2] = 1 fading_enable)          */\r
455                                 /* ([3] = 1 alpha cal_mode_sel)     */\r
456                                 /* ([4] = 1 src_dither_up_enable)   */\r
457                                 /* ([5] = 1 dst_dither_up_enable)   */\r
458                                 /* ([6] = 1 dither_down_enable)     */\r
459                                 /* ([7] = 1 gradient fill mode sel) */\r
460 \r
461 \r
462     u16 alpha_mode_0;           /* [0]     SrcAlphaMode0          */\r
463                                 /* [2:1]   SrcGlobalAlphaMode0    */\r
464                                 /* [3]     SrcAlphaSelectMode0    */\r
465                                 /* [6:4]   SrcFactorMode0         */\r
466                                 /* [7]     SrcColorMode           */\r
467 \r
468                                 /* [8]     DstAlphaMode0          */\r
469                                 /* [10:9]  DstGlobalAlphaMode0    */\r
470                                 /* [11]    DstAlphaSelectMode0    */\r
471                                 /* [14:12] DstFactorMode0         */\r
472                                 /* [15]    DstColorMode0          */\r
473 \r
474     u16 alpha_mode_1;           /* [0]     SrcAlphaMode1          */\r
475                                 /* [2:1]   SrcGlobalAlphaMode1    */\r
476                                 /* [3]     SrcAlphaSelectMode1    */\r
477                                 /* [6:4]   SrcFactorMode1         */\r
478 \r
479                                 /* [8]     DstAlphaMode1          */\r
480                                 /* [10:9]  DstGlobalAlphaMode1    */\r
481                                 /* [11]    DstAlphaSelectMode1    */\r
482                                 /* [14:12] DstFactorMode1         */\r
483 \r
484     u8  scale_bicu_mode;    /* 0   1   2  3 */\r
485 \r
486     u32 color_key_max;      /* color key max */\r
487     u32 color_key_min;      /* color key min */\r
488 \r
489     u32 fg_color;           /* foreground color */\r
490     u32 bg_color;           /* background color */\r
491 \r
492     u8 color_fill_mode;\r
493     COLOR_FILL gr_color;    /* color fill use gradient */\r
494 \r
495     u8 fading_alpha_value;  /* Fading value */\r
496     u8 fading_r_value;\r
497     u8 fading_g_value;\r
498     u8 fading_b_value;\r
499 \r
500     u8 src_a_global_val;    /* src global alpha value        */\r
501     u8 dst_a_global_val;    /* dst global alpha value        */\r
502 \r
503 \r
504     u8  rop_mode;\r
505     u16 rop_code;           /* rop2/3/4 code */\r
506 \r
507     u8 palette_mode;        /* (enum) color palatte  0/1bpp, 1/2bpp 2/4bpp 3/8bpp*/\r
508 \r
509     u8 yuv2rgb_mode;        /* (enum) BT.601 MPEG / BT.601 JPEG / BT.709  */\r
510 \r
511     u8 endian_mode;         /* 0/little endian 1/big endian */\r
512 \r
513     u8 CMD_fin_int_enable;\r
514 \r
515     MMU_INFO mmu_info;               /* mmu infomation */\r
516 \r
517     u8 alpha_zero_key;\r
518     u8 src_trans_mode;\r
519 \r
520     u8 alpha_swp;\r
521     u8 dither_mode;\r
522 \r
523     u8 rgb2yuv_mode;\r
524 \r
525     struct sg_table *sg_src0;\r
526     struct sg_table *sg_src1;\r
527     struct sg_table *sg_dst;\r
528     struct sg_table *sg_els;\r
529 };\r
530 \r
531 struct rga2_mmu_buf_t {\r
532     int32_t front;\r
533     int32_t back;\r
534     int32_t size;\r
535     int32_t curr;\r
536     unsigned int *buf;\r
537     unsigned int *buf_virtual;\r
538 \r
539     struct page **pages;\r
540 };\r
541 \r
542 enum\r
543 {\r
544     BB_ROTATE_OFF   = 0x0,     /* no rotate  */\r
545     BB_ROTATE_90    = 0x1,     /* rotate 90  */\r
546     BB_ROTATE_180   = 0x2,     /* rotate 180 */\r
547     BB_ROTATE_270   = 0x3,     /* rotate 270 */\r
548 };  /*rotate mode*/\r
549 \r
550 enum\r
551 {\r
552     BB_MIRROR_OFF   = (0x0 << 4),     /* no mirror  */\r
553     BB_MIRROR_X     = (0x1 << 4),     /* x  mirror  */\r
554     BB_MIRROR_Y     = (0x2 << 4),     /* y  mirror  */\r
555     BB_MIRROR_XY    = (0x3 << 4),     /* xy mirror  */\r
556 };  /*mirror mode*/\r
557 \r
558 enum\r
559 {\r
560     BB_COPY_USE_TILE = (0x1 << 6),    /* bitblt mode copy but use Tile mode */\r
561 };\r
562 \r
563 enum\r
564 {\r
565         //BYPASS        = 0x0,\r
566     BT_601_RANGE0   = 0x1,\r
567     BT_601_RANGE1   = 0x2,\r
568     BT_709_RANGE0   = 0x3,\r
569 }; /*yuv2rgb_mode*/\r
570 \r
571 enum\r
572 {\r
573     BPP1        = 0x0,     /* BPP1 */\r
574     BPP2        = 0x1,     /* BPP2 */\r
575     BPP4        = 0x2,     /* BPP4 */\r
576     BPP8        = 0x3      /* BPP8 */\r
577 }; /*palette_mode*/\r
578 \r
579 enum\r
580 {\r
581         SOLID_COLOR   = 0x0, //color fill mode; ROP4: SOLID_rop4_mask_addr COLOR\r
582         PATTERN_COLOR = 0x1  //pattern_fill_mode;ROP4:PATTERN_COLOR\r
583 };  /*color fill mode*/\r
584 \r
585 enum\r
586 {\r
587         COLOR_FILL_CLIP     = 0x0,\r
588         COLOR_FILL_NOT_CLIP = 0x1\r
589 };\r
590 \r
591 enum\r
592 {\r
593     CATROM    = 0x0,\r
594     MITCHELL  = 0x1,\r
595     HERMITE   = 0x2,\r
596     B_SPLINE  = 0x3,\r
597 };  /*bicubic coefficient*/\r
598 \r
599 enum\r
600 {\r
601         ROP2 = 0x0,\r
602         ROP3 = 0x1,\r
603         ROP4 = 0x2\r
604 };  /*ROP mode*/\r
605 \r
606 enum\r
607 {\r
608         BIG_ENDIAN    = 0x0,\r
609         LITTLE_ENDIAN = 0x1\r
610 };  /*endian mode*/\r
611 \r
612 enum\r
613 {\r
614         MMU_TABLE_4KB  = 0x0,\r
615         MMU_TABLE_64KB = 0x1,\r
616 };  /*MMU table size*/\r
617 \r
618 enum\r
619 {\r
620     RGB_2_666 = 0x0,\r
621     RGB_2_565 = 0x1,\r
622     RGB_2_555 = 0x2,\r
623     RGB_2_444 = 0x3,\r
624 };  /*dither down mode*/\r
625 \r
626 \r
627 \r
628 /**\r
629  * struct for process session which connect to rga\r
630  *\r
631  * @author ZhangShengqin (2012-2-15)\r
632  */\r
633 typedef struct rga2_session {\r
634         /* a linked list of data so we can access them for debugging */\r
635         struct list_head    list_session;\r
636         /* a linked list of register data waiting for process */\r
637         struct list_head    waiting;\r
638         /* a linked list of register data in processing */\r
639         struct list_head    running;\r
640         /* all coommand this thread done */\r
641     atomic_t            done;\r
642         wait_queue_head_t   wait;\r
643         pid_t           pid;\r
644         atomic_t        task_running;\r
645     atomic_t        num_done;\r
646 } rga2_session;\r
647 \r
648 struct rga2_reg {\r
649     rga2_session                *session;\r
650         struct list_head        session_link;           /* link to rga service session */\r
651         struct list_head        status_link;            /* link to register set list */\r
652         uint32_t  sys_reg[8];\r
653     uint32_t  cmd_reg[32];\r
654 \r
655     uint32_t *MMU_base;\r
656     uint32_t MMU_len;\r
657     //atomic_t int_enable;\r
658 \r
659     //struct rga_req      req;\r
660 };\r
661 \r
662 \r
663 \r
664 struct rga2_service_info {\r
665     struct mutex        lock;\r
666     struct timer_list   timer;                  /* timer for power off */\r
667     struct list_head    waiting;                /* link to link_reg in struct vpu_reg */\r
668     struct list_head    running;                /* link to link_reg in struct vpu_reg */\r
669     struct list_head    done;                   /* link to link_reg in struct vpu_reg */\r
670     struct list_head    session;                /* link to list_session in struct vpu_session */\r
671     atomic_t            total_running;\r
672 \r
673     struct rga2_reg        *reg;\r
674 \r
675     uint32_t            cmd_buff[32*8];/* cmd_buff for rga */\r
676     uint32_t            *pre_scale_buf;\r
677     atomic_t            int_disable;     /* 0 int enable 1 int disable  */\r
678     atomic_t            cmd_num;\r
679     atomic_t            src_format_swt;\r
680     int                 last_prc_src_format;\r
681     atomic_t            rga_working;\r
682     bool                enable;\r
683     uint32_t            dev_mode;\r
684 \r
685     //struct rga_req      req[10];\r
686 \r
687     struct mutex        mutex;  // mutex\r
688 };\r
689 \r
690 #define RGA2_TEST_CASE 0\r
691 #define RGA2_TEST      0\r
692 #define RGA2_TEST_MSG  0\r
693 #define RGA2_TEST_TIME 0\r
694 \r
695 //General Registers\r
696 #define RGA2_SYS_CTRL             0x000\r
697 #define RGA2_CMD_CTRL             0x004\r
698 #define RGA2_CMD_BASE             0x008\r
699 #define RGA2_STATUS               0x00c\r
700 #define RGA2_INT                  0x010\r
701 #define RGA2_MMU_CTRL0            0x018\r
702 #define RGA2_MMU_CMD_BASE         0x01c\r
703 \r
704 //Command code start\r
705 #define RGA2_MODE_CTRL            0x100\r
706 #define RGA_BLIT_COMPLETE_EVENT 1\r
707 \r
708 #endif /*_RK29_IPP_DRIVER_H_*/\r