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