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