xref: /OK3568_Linux_fs/buildroot/package/directfb/0001-fix-missing-davinci-voodoo-header.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunThe archive of directfb-1.6.3 is still missing some header files against
2*4882a593Smuzhiyunthe tagged git tree of directfb. The following files are missing.
3*4882a593Smuzhiyun
4*4882a593Smuzhiyungfxdrivers/davinci/davinci_c64x.h
5*4882a593Smuzhiyungfxdrivers/davinci/davincifb.h
6*4882a593Smuzhiyungfxdrivers/davinci/davinci_gfxdriver.h
7*4882a593Smuzhiyuntests/voodoo/voodoo_test.h
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunThe headers of course are needed to be able to build every module of
10*4882a593Smuzhiyundirectfb. The headers are taken from the git tree of directfb
11*4882a593Smuzhiyunhttp://git.directfb.org/?p=core/DirectFB.git;a=commit;h=38b784549bc59bb07c58bb29667cb658695d39a7,
12*4882a593Smuzhiyuntag DIRECTFB_1_6_3, SHA1ID 38b784549bc59bb07c58bb29667cb658695d39a7.
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunSigned-off-by: Carsten Schoenert <c.schoenert@gmail.com>
15*4882a593Smuzhiyun
16*4882a593Smuzhiyundiff -puNr -Naur directfb-1.6.3-orig/gfxdrivers/davinci/davinci_c64x.h directfb-1.6.3/gfxdrivers/davinci/davinci_c64x.h
17*4882a593Smuzhiyun--- directfb-1.6.3-orig/gfxdrivers/davinci/davinci_c64x.h	1970-01-01 01:00:00.000000000 +0100
18*4882a593Smuzhiyun+++ directfb-1.6.3/gfxdrivers/davinci/davinci_c64x.h	2013-04-07 21:33:25.928530187 +0200
19*4882a593Smuzhiyun@@ -0,0 +1,935 @@
20*4882a593Smuzhiyun+/*
21*4882a593Smuzhiyun+   TI Davinci driver - C64X+ DSP Library
22*4882a593Smuzhiyun+
23*4882a593Smuzhiyun+   (c) Copyright 2008  directfb.org
24*4882a593Smuzhiyun+   (c) Copyright 2007  Telio AG
25*4882a593Smuzhiyun+
26*4882a593Smuzhiyun+   Written by Denis Oliver Kropp <dok@directfb.org> and
27*4882a593Smuzhiyun+              Olaf Dreesen <olaf@directfb.org>.
28*4882a593Smuzhiyun+
29*4882a593Smuzhiyun+   All rights reserved.
30*4882a593Smuzhiyun+
31*4882a593Smuzhiyun+   This library is free software; you can redistribute it and/or
32*4882a593Smuzhiyun+   modify it under the terms of the GNU General Public License
33*4882a593Smuzhiyun+   version 2 as published by the Free Software Foundation.
34*4882a593Smuzhiyun+
35*4882a593Smuzhiyun+   This library is distributed in the hope that it will be useful,
36*4882a593Smuzhiyun+   but WITHOUT ANY WARRANTY; without even the implied warranty of
37*4882a593Smuzhiyun+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
38*4882a593Smuzhiyun+   General Public License for more details.
39*4882a593Smuzhiyun+
40*4882a593Smuzhiyun+   You should have received a copy of the GNU General Public
41*4882a593Smuzhiyun+   License along with this library; if not, write to the
42*4882a593Smuzhiyun+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
43*4882a593Smuzhiyun+   Boston, MA 02111-1307, USA.
44*4882a593Smuzhiyun+*/
45*4882a593Smuzhiyun+
46*4882a593Smuzhiyun+#ifndef __DAVINCI_C64X_H__
47*4882a593Smuzhiyun+#define __DAVINCI_C64X_H__
48*4882a593Smuzhiyun+
49*4882a593Smuzhiyun+#include <unistd.h>
50*4882a593Smuzhiyun+
51*4882a593Smuzhiyun+#include <directfb.h>
52*4882a593Smuzhiyun+
53*4882a593Smuzhiyun+#include <direct/messages.h>
54*4882a593Smuzhiyun+#include <direct/trace.h>
55*4882a593Smuzhiyun+
56*4882a593Smuzhiyun+#include <linux/c64x.h>
57*4882a593Smuzhiyun+
58*4882a593Smuzhiyun+#define mb() __asm__ __volatile__ ("" : : : "memory")
59*4882a593Smuzhiyun+
60*4882a593Smuzhiyun+/**********************************************************************************************************************/
61*4882a593Smuzhiyun+
62*4882a593Smuzhiyun+typedef struct {
63*4882a593Smuzhiyun+     int                 magic;
64*4882a593Smuzhiyun+
65*4882a593Smuzhiyun+     int                 fd;
66*4882a593Smuzhiyun+     c64xTaskControl    *ctl;
67*4882a593Smuzhiyun+     void               *mem;
68*4882a593Smuzhiyun+
69*4882a593Smuzhiyun+     c64xTask           *QueueL;
70*4882a593Smuzhiyun+} DavinciC64x;
71*4882a593Smuzhiyun+
72*4882a593Smuzhiyun+typedef struct {
73*4882a593Smuzhiyun+     int                 magic;
74*4882a593Smuzhiyun+     unsigned int        max_tasks;
75*4882a593Smuzhiyun+     unsigned int        num_tasks;
76*4882a593Smuzhiyun+     c64xTask           *tasks;
77*4882a593Smuzhiyun+} DavinciC64xTasks;
78*4882a593Smuzhiyun+
79*4882a593Smuzhiyun+typedef enum {
80*4882a593Smuzhiyun+     C64X_TEF_NONE       = 0x0000,
81*4882a593Smuzhiyun+     C64X_TEF_RESET      = 0x0001
82*4882a593Smuzhiyun+} DavinciC64xEmitFlags;
83*4882a593Smuzhiyun+
84*4882a593Smuzhiyun+/**********************************************************************************************************************/
85*4882a593Smuzhiyun+
86*4882a593Smuzhiyun+DFBResult davinci_c64x_open    ( DavinciC64x *c64x );
87*4882a593Smuzhiyun+
88*4882a593Smuzhiyun+DFBResult davinci_c64x_close   ( DavinciC64x *c64x );
89*4882a593Smuzhiyun+
90*4882a593Smuzhiyun+DFBResult davinci_c64x_wait_low( DavinciC64x *c64x );
91*4882a593Smuzhiyun+
92*4882a593Smuzhiyun+/**********************************************************************************************************************/
93*4882a593Smuzhiyun+
94*4882a593Smuzhiyun+DFBResult davinci_c64x_tasks_init   ( DavinciC64xTasks *tasks,
95*4882a593Smuzhiyun+                                      unsigned int      size );
96*4882a593Smuzhiyun+
97*4882a593Smuzhiyun+DFBResult davinci_c64x_tasks_destroy( DavinciC64xTasks *tasks );
98*4882a593Smuzhiyun+
99*4882a593Smuzhiyun+/**********************************************************************************************************************/
100*4882a593Smuzhiyun+
101*4882a593Smuzhiyun+DFBResult davinci_c64x_emit_tasks( DavinciC64x          *c64x,
102*4882a593Smuzhiyun+                                   DavinciC64xTasks     *tasks,
103*4882a593Smuzhiyun+                                   DavinciC64xEmitFlags  flags );
104*4882a593Smuzhiyun+
105*4882a593Smuzhiyun+/**********************************************************************************************************************/
106*4882a593Smuzhiyun+
107*4882a593Smuzhiyun+static const char *state_names[] = { "DONE", "ERROR", "TODO", "RUNNING" };
108*4882a593Smuzhiyun+
109*4882a593Smuzhiyun+static inline c64xTask *
110*4882a593Smuzhiyun+c64x_get_task( DavinciC64x *c64x )
111*4882a593Smuzhiyun+{
112*4882a593Smuzhiyun+     c64xTaskControl *ctl   = c64x->ctl;
113*4882a593Smuzhiyun+     uint32_t         idx   = ctl->QL_arm;
114*4882a593Smuzhiyun+     uint32_t         next  = (idx + 1) & C64X_QUEUE_MASK;
115*4882a593Smuzhiyun+     c64xTask        *task  = &c64x->QueueL[idx];
116*4882a593Smuzhiyun+     int              loops = 0;
117*4882a593Smuzhiyun+     uint32_t         idle  = 0;
118*4882a593Smuzhiyun+
119*4882a593Smuzhiyun+     /* Wait for the entry (and next) to be processed by the DSP (rare case). */
120*4882a593Smuzhiyun+     while (task->c64x_flags & C64X_FLAG_TODO || ctl->QL_dsp == next) {
121*4882a593Smuzhiyun+          if (loops > 666 || (idle && ctl->idlecounter - idle > 666)) {
122*4882a593Smuzhiyun+               c64xTask *dsp_task = &c64x->QueueL[ctl->QL_dsp];
123*4882a593Smuzhiyun+
124*4882a593Smuzhiyun+               D_PERROR( "Davinci/C64X+: Blocked! [DSP %d / %d (%s), ARM %d / %d (%s)]\n",
125*4882a593Smuzhiyun+                         ctl->QL_dsp,
126*4882a593Smuzhiyun+                         (dsp_task->c64x_function >> 2) & 0x3fff,
127*4882a593Smuzhiyun+                         state_names[dsp_task->c64x_function & 3],
128*4882a593Smuzhiyun+                         ctl->QL_arm,
129*4882a593Smuzhiyun+                         (task->c64x_function >> 2) & 0x3fff,
130*4882a593Smuzhiyun+                         state_names[task->c64x_function & 3] );
131*4882a593Smuzhiyun+
132*4882a593Smuzhiyun+               break;
133*4882a593Smuzhiyun+          }
134*4882a593Smuzhiyun+
135*4882a593Smuzhiyun+          idle = ctl->idlecounter;
136*4882a593Smuzhiyun+
137*4882a593Smuzhiyun+          /* Queue is full, waiting 10-20ms should not be too bad. */
138*4882a593Smuzhiyun+          if (loops++ > 10)
139*4882a593Smuzhiyun+               usleep( 5000 );
140*4882a593Smuzhiyun+     }
141*4882a593Smuzhiyun+
142*4882a593Smuzhiyun+     return task;
143*4882a593Smuzhiyun+}
144*4882a593Smuzhiyun+
145*4882a593Smuzhiyun+static inline void
146*4882a593Smuzhiyun+c64x_submit_task( DavinciC64x *c64x, c64xTask *task )
147*4882a593Smuzhiyun+{
148*4882a593Smuzhiyun+     c64xTaskControl *ctl  = c64x->ctl;
149*4882a593Smuzhiyun+     uint32_t         idx  = ctl->QL_arm;
150*4882a593Smuzhiyun+     uint32_t         next = (idx + 1) & C64X_QUEUE_MASK;
151*4882a593Smuzhiyun+
152*4882a593Smuzhiyun+     mb();
153*4882a593Smuzhiyun+
154*4882a593Smuzhiyun+     ctl->QL_arm = next;
155*4882a593Smuzhiyun+
156*4882a593Smuzhiyun+     mb();
157*4882a593Smuzhiyun+}
158*4882a593Smuzhiyun+
159*4882a593Smuzhiyun+/**********************************************************************************************************************/
160*4882a593Smuzhiyun+
161*4882a593Smuzhiyun+static inline void
162*4882a593Smuzhiyun+davinci_c64x_wb_inv_range( DavinciC64x   *c64x,
163*4882a593Smuzhiyun+                           unsigned long  start,
164*4882a593Smuzhiyun+                           u32            length,
165*4882a593Smuzhiyun+                           u32            func )
166*4882a593Smuzhiyun+{
167*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
168*4882a593Smuzhiyun+
169*4882a593Smuzhiyun+     task->c64x_arg[0] = start;
170*4882a593Smuzhiyun+     task->c64x_arg[1] = length;
171*4882a593Smuzhiyun+     task->c64x_arg[2] = func;
172*4882a593Smuzhiyun+
173*4882a593Smuzhiyun+     task->c64x_function = C64X_WB_INV_RANGE | C64X_FLAG_TODO;
174*4882a593Smuzhiyun+
175*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
176*4882a593Smuzhiyun+}
177*4882a593Smuzhiyun+
178*4882a593Smuzhiyun+static inline void
179*4882a593Smuzhiyun+davinci_c64x_write_back_all( DavinciC64x *c64x )
180*4882a593Smuzhiyun+{
181*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
182*4882a593Smuzhiyun+
183*4882a593Smuzhiyun+     task->c64x_function = C64X_WRITE_BACK_ALL | C64X_FLAG_TODO;
184*4882a593Smuzhiyun+
185*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
186*4882a593Smuzhiyun+}
187*4882a593Smuzhiyun+
188*4882a593Smuzhiyun+/**********************************************************************************************************************/
189*4882a593Smuzhiyun+
190*4882a593Smuzhiyun+static inline void
191*4882a593Smuzhiyun+davinci_c64x_load_block__L( DavinciC64xTasks *tasks,
192*4882a593Smuzhiyun+                            unsigned long     words,
193*4882a593Smuzhiyun+                            u32               num,
194*4882a593Smuzhiyun+                            u32               flags )
195*4882a593Smuzhiyun+{
196*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
197*4882a593Smuzhiyun+
198*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
199*4882a593Smuzhiyun+
200*4882a593Smuzhiyun+     task->c64x_arg[0] = words;
201*4882a593Smuzhiyun+     task->c64x_arg[1] = num;
202*4882a593Smuzhiyun+     task->c64x_arg[2] = flags;
203*4882a593Smuzhiyun+
204*4882a593Smuzhiyun+     task->c64x_function = C64X_LOAD_BLOCK | C64X_FLAG_TODO;
205*4882a593Smuzhiyun+
206*4882a593Smuzhiyun+     tasks->num_tasks++;
207*4882a593Smuzhiyun+}
208*4882a593Smuzhiyun+
209*4882a593Smuzhiyun+static inline void
210*4882a593Smuzhiyun+davinci_c64x_load_block( DavinciC64x   *c64x,
211*4882a593Smuzhiyun+                         unsigned long  words,
212*4882a593Smuzhiyun+                         u32            num,
213*4882a593Smuzhiyun+                         u32            flags )
214*4882a593Smuzhiyun+{
215*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
216*4882a593Smuzhiyun+
217*4882a593Smuzhiyun+     task->c64x_arg[0] = words;
218*4882a593Smuzhiyun+     task->c64x_arg[1] = num;
219*4882a593Smuzhiyun+     task->c64x_arg[2] = flags;
220*4882a593Smuzhiyun+
221*4882a593Smuzhiyun+     task->c64x_function = C64X_LOAD_BLOCK | C64X_FLAG_TODO;
222*4882a593Smuzhiyun+
223*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
224*4882a593Smuzhiyun+}
225*4882a593Smuzhiyun+
226*4882a593Smuzhiyun+static inline void
227*4882a593Smuzhiyun+davinci_c64x_fetch_uyvy( DavinciC64x   *c64x,
228*4882a593Smuzhiyun+                         unsigned long  dest,
229*4882a593Smuzhiyun+                         unsigned long  source,
230*4882a593Smuzhiyun+                         u32            pitch,
231*4882a593Smuzhiyun+                         u32            height,
232*4882a593Smuzhiyun+                         u32            flags )
233*4882a593Smuzhiyun+{
234*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
235*4882a593Smuzhiyun+
236*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
237*4882a593Smuzhiyun+     task->c64x_arg[1] = source;
238*4882a593Smuzhiyun+     task->c64x_arg[2] = pitch;
239*4882a593Smuzhiyun+     task->c64x_arg[3] = height;
240*4882a593Smuzhiyun+     task->c64x_arg[4] = flags;
241*4882a593Smuzhiyun+
242*4882a593Smuzhiyun+     task->c64x_function = C64X_FETCH_UYVY | C64X_FLAG_TODO;
243*4882a593Smuzhiyun+
244*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
245*4882a593Smuzhiyun+}
246*4882a593Smuzhiyun+
247*4882a593Smuzhiyun+static inline void
248*4882a593Smuzhiyun+davinci_c64x_mc( DavinciC64x   *c64x,
249*4882a593Smuzhiyun+                 unsigned long  dest,
250*4882a593Smuzhiyun+                 u32            dpitch,
251*4882a593Smuzhiyun+                 unsigned long  source0,
252*4882a593Smuzhiyun+                 unsigned long  source1,
253*4882a593Smuzhiyun+                 u32            spitch,
254*4882a593Smuzhiyun+                 u32            height,
255*4882a593Smuzhiyun+                 int            func )
256*4882a593Smuzhiyun+{
257*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
258*4882a593Smuzhiyun+
259*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
260*4882a593Smuzhiyun+     task->c64x_arg[1] = dpitch;
261*4882a593Smuzhiyun+     task->c64x_arg[2] = source0;
262*4882a593Smuzhiyun+     task->c64x_arg[3] = source1;
263*4882a593Smuzhiyun+     task->c64x_arg[4] = spitch;
264*4882a593Smuzhiyun+     task->c64x_arg[5] = height;
265*4882a593Smuzhiyun+
266*4882a593Smuzhiyun+     task->c64x_function = func | C64X_FLAG_TODO;
267*4882a593Smuzhiyun+
268*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
269*4882a593Smuzhiyun+}
270*4882a593Smuzhiyun+
271*4882a593Smuzhiyun+static inline void
272*4882a593Smuzhiyun+davinci_c64x_put_idct_uyvy_16x16__L( DavinciC64xTasks *tasks,
273*4882a593Smuzhiyun+                                     unsigned long     dest,
274*4882a593Smuzhiyun+                                     u32               pitch,
275*4882a593Smuzhiyun+                                     u32               flags )
276*4882a593Smuzhiyun+{
277*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
278*4882a593Smuzhiyun+
279*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
280*4882a593Smuzhiyun+
281*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
282*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
283*4882a593Smuzhiyun+     task->c64x_arg[2] = flags;
284*4882a593Smuzhiyun+
285*4882a593Smuzhiyun+     task->c64x_function = C64X_PUT_IDCT_UYVY_16x16 | C64X_FLAG_TODO;
286*4882a593Smuzhiyun+
287*4882a593Smuzhiyun+     tasks->num_tasks++;
288*4882a593Smuzhiyun+}
289*4882a593Smuzhiyun+
290*4882a593Smuzhiyun+static inline void
291*4882a593Smuzhiyun+davinci_c64x_put_idct_uyvy_16x16( DavinciC64x   *c64x,
292*4882a593Smuzhiyun+                                  unsigned long  dest,
293*4882a593Smuzhiyun+                                  u32            pitch,
294*4882a593Smuzhiyun+                                  u32            flags )
295*4882a593Smuzhiyun+{
296*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
297*4882a593Smuzhiyun+
298*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
299*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
300*4882a593Smuzhiyun+     task->c64x_arg[2] = flags;
301*4882a593Smuzhiyun+
302*4882a593Smuzhiyun+     task->c64x_function = C64X_PUT_IDCT_UYVY_16x16 | C64X_FLAG_TODO;
303*4882a593Smuzhiyun+
304*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
305*4882a593Smuzhiyun+}
306*4882a593Smuzhiyun+
307*4882a593Smuzhiyun+static inline void
308*4882a593Smuzhiyun+davinci_c64x_put_mc_uyvy_16x16__L( DavinciC64xTasks *tasks,
309*4882a593Smuzhiyun+                                   unsigned long     dest,
310*4882a593Smuzhiyun+                                   u32               pitch,
311*4882a593Smuzhiyun+                                   u32               flags )
312*4882a593Smuzhiyun+{
313*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
314*4882a593Smuzhiyun+
315*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
316*4882a593Smuzhiyun+
317*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
318*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
319*4882a593Smuzhiyun+     task->c64x_arg[2] = flags;
320*4882a593Smuzhiyun+
321*4882a593Smuzhiyun+     task->c64x_function = C64X_PUT_MC_UYVY_16x16 | C64X_FLAG_TODO;
322*4882a593Smuzhiyun+
323*4882a593Smuzhiyun+     tasks->num_tasks++;
324*4882a593Smuzhiyun+}
325*4882a593Smuzhiyun+
326*4882a593Smuzhiyun+static inline void
327*4882a593Smuzhiyun+davinci_c64x_put_mc_uyvy_16x16( DavinciC64x   *c64x,
328*4882a593Smuzhiyun+                                unsigned long  dest,
329*4882a593Smuzhiyun+                                u32            pitch,
330*4882a593Smuzhiyun+                                u32            flags )
331*4882a593Smuzhiyun+{
332*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
333*4882a593Smuzhiyun+
334*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
335*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
336*4882a593Smuzhiyun+     task->c64x_arg[2] = flags;
337*4882a593Smuzhiyun+
338*4882a593Smuzhiyun+     task->c64x_function = C64X_PUT_MC_UYVY_16x16 | C64X_FLAG_TODO;
339*4882a593Smuzhiyun+
340*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
341*4882a593Smuzhiyun+}
342*4882a593Smuzhiyun+
343*4882a593Smuzhiyun+static inline void
344*4882a593Smuzhiyun+davinci_c64x_put_sum_uyvy_16x16__L( DavinciC64xTasks *tasks,
345*4882a593Smuzhiyun+                                    unsigned long     dest,
346*4882a593Smuzhiyun+                                    u32               pitch,
347*4882a593Smuzhiyun+                                    u32               flags )
348*4882a593Smuzhiyun+{
349*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
350*4882a593Smuzhiyun+
351*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
352*4882a593Smuzhiyun+
353*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
354*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
355*4882a593Smuzhiyun+     task->c64x_arg[2] = flags;
356*4882a593Smuzhiyun+
357*4882a593Smuzhiyun+     task->c64x_function = C64X_PUT_SUM_UYVY_16x16 | C64X_FLAG_TODO;
358*4882a593Smuzhiyun+
359*4882a593Smuzhiyun+     tasks->num_tasks++;
360*4882a593Smuzhiyun+}
361*4882a593Smuzhiyun+
362*4882a593Smuzhiyun+static inline void
363*4882a593Smuzhiyun+davinci_c64x_put_sum_uyvy_16x16( DavinciC64x   *c64x,
364*4882a593Smuzhiyun+                                 unsigned long  dest,
365*4882a593Smuzhiyun+                                 u32            pitch,
366*4882a593Smuzhiyun+                                 u32            flags )
367*4882a593Smuzhiyun+{
368*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
369*4882a593Smuzhiyun+
370*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
371*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
372*4882a593Smuzhiyun+     task->c64x_arg[2] = flags;
373*4882a593Smuzhiyun+
374*4882a593Smuzhiyun+     task->c64x_function = C64X_PUT_SUM_UYVY_16x16 | C64X_FLAG_TODO;
375*4882a593Smuzhiyun+
376*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
377*4882a593Smuzhiyun+}
378*4882a593Smuzhiyun+
379*4882a593Smuzhiyun+static inline void
380*4882a593Smuzhiyun+davinci_c64x_dva_begin_frame__L( DavinciC64xTasks *tasks,
381*4882a593Smuzhiyun+                                 u32               pitch,
382*4882a593Smuzhiyun+                                 unsigned long     current,
383*4882a593Smuzhiyun+                                 unsigned long     past,
384*4882a593Smuzhiyun+                                 unsigned long     future,
385*4882a593Smuzhiyun+                                 u32               flags )
386*4882a593Smuzhiyun+{
387*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
388*4882a593Smuzhiyun+
389*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
390*4882a593Smuzhiyun+
391*4882a593Smuzhiyun+     task->c64x_arg[0] = pitch;
392*4882a593Smuzhiyun+     task->c64x_arg[1] = current;
393*4882a593Smuzhiyun+     task->c64x_arg[2] = past;
394*4882a593Smuzhiyun+     task->c64x_arg[3] = future;
395*4882a593Smuzhiyun+     task->c64x_arg[4] = flags;
396*4882a593Smuzhiyun+
397*4882a593Smuzhiyun+     task->c64x_function = C64X_DVA_BEGIN_FRAME | C64X_FLAG_TODO;
398*4882a593Smuzhiyun+
399*4882a593Smuzhiyun+     tasks->num_tasks++;
400*4882a593Smuzhiyun+}
401*4882a593Smuzhiyun+
402*4882a593Smuzhiyun+static inline void
403*4882a593Smuzhiyun+davinci_c64x_dva_begin_frame( DavinciC64x   *c64x,
404*4882a593Smuzhiyun+                              u32            pitch,
405*4882a593Smuzhiyun+                              unsigned long  current,
406*4882a593Smuzhiyun+                              unsigned long  past,
407*4882a593Smuzhiyun+                              unsigned long  future,
408*4882a593Smuzhiyun+                              u32            flags )
409*4882a593Smuzhiyun+{
410*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
411*4882a593Smuzhiyun+
412*4882a593Smuzhiyun+     task->c64x_arg[0] = pitch;
413*4882a593Smuzhiyun+     task->c64x_arg[1] = current;
414*4882a593Smuzhiyun+     task->c64x_arg[2] = past;
415*4882a593Smuzhiyun+     task->c64x_arg[3] = future;
416*4882a593Smuzhiyun+     task->c64x_arg[4] = flags;
417*4882a593Smuzhiyun+
418*4882a593Smuzhiyun+     task->c64x_function = C64X_DVA_BEGIN_FRAME | C64X_FLAG_TODO;
419*4882a593Smuzhiyun+
420*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
421*4882a593Smuzhiyun+}
422*4882a593Smuzhiyun+
423*4882a593Smuzhiyun+static inline void
424*4882a593Smuzhiyun+davinci_c64x_dva_motion_block__L( DavinciC64xTasks *tasks,
425*4882a593Smuzhiyun+                                  unsigned long     macroblock )
426*4882a593Smuzhiyun+{
427*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
428*4882a593Smuzhiyun+
429*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
430*4882a593Smuzhiyun+
431*4882a593Smuzhiyun+     task->c64x_arg[0] = macroblock;
432*4882a593Smuzhiyun+
433*4882a593Smuzhiyun+     task->c64x_function = C64X_DVA_MOTION_BLOCK | C64X_FLAG_TODO;
434*4882a593Smuzhiyun+
435*4882a593Smuzhiyun+     tasks->num_tasks++;
436*4882a593Smuzhiyun+}
437*4882a593Smuzhiyun+
438*4882a593Smuzhiyun+static inline void
439*4882a593Smuzhiyun+davinci_c64x_dva_motion_block( DavinciC64x   *c64x,
440*4882a593Smuzhiyun+                               unsigned long  macroblock )
441*4882a593Smuzhiyun+{
442*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
443*4882a593Smuzhiyun+
444*4882a593Smuzhiyun+     task->c64x_arg[0] = macroblock;
445*4882a593Smuzhiyun+
446*4882a593Smuzhiyun+     task->c64x_function = C64X_DVA_MOTION_BLOCK | C64X_FLAG_TODO;
447*4882a593Smuzhiyun+
448*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
449*4882a593Smuzhiyun+}
450*4882a593Smuzhiyun+
451*4882a593Smuzhiyun+/**********************************************************************************************************************/
452*4882a593Smuzhiyun+
453*4882a593Smuzhiyun+static inline void
454*4882a593Smuzhiyun+davinci_c64x_dva_idct( DavinciC64x   *c64x,
455*4882a593Smuzhiyun+				   unsigned long  dest,
456*4882a593Smuzhiyun+				   u32            pitch,
457*4882a593Smuzhiyun+				   unsigned long  source )
458*4882a593Smuzhiyun+{
459*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
460*4882a593Smuzhiyun+
461*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
462*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
463*4882a593Smuzhiyun+     task->c64x_arg[2] = source;
464*4882a593Smuzhiyun+
465*4882a593Smuzhiyun+     task->c64x_function = C64X_DVA_IDCT | C64X_FLAG_TODO;
466*4882a593Smuzhiyun+
467*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
468*4882a593Smuzhiyun+}
469*4882a593Smuzhiyun+
470*4882a593Smuzhiyun+/**********************************************************************************************************************/
471*4882a593Smuzhiyun+
472*4882a593Smuzhiyun+static inline void
473*4882a593Smuzhiyun+davinci_c64x_put_uyvy_16x16( DavinciC64x   *c64x,
474*4882a593Smuzhiyun+                             unsigned long  dest,
475*4882a593Smuzhiyun+                             u32            pitch,
476*4882a593Smuzhiyun+                             unsigned long  source,
477*4882a593Smuzhiyun+                             u32            flags )
478*4882a593Smuzhiyun+{
479*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
480*4882a593Smuzhiyun+
481*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
482*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
483*4882a593Smuzhiyun+     task->c64x_arg[2] = source;
484*4882a593Smuzhiyun+     task->c64x_arg[3] = flags;
485*4882a593Smuzhiyun+
486*4882a593Smuzhiyun+     task->c64x_function = C64X_PUT_UYVY_16x16 | C64X_FLAG_TODO;
487*4882a593Smuzhiyun+
488*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
489*4882a593Smuzhiyun+}
490*4882a593Smuzhiyun+
491*4882a593Smuzhiyun+static inline void
492*4882a593Smuzhiyun+davinci_c64x_dither_argb__L( DavinciC64xTasks *tasks,
493*4882a593Smuzhiyun+                             unsigned long     dst_rgb,
494*4882a593Smuzhiyun+                             unsigned long     dst_alpha,
495*4882a593Smuzhiyun+                             u32               dst_pitch,
496*4882a593Smuzhiyun+                             unsigned long     source,
497*4882a593Smuzhiyun+                             u32               src_pitch,
498*4882a593Smuzhiyun+                             u32               width,
499*4882a593Smuzhiyun+                             u32               height )
500*4882a593Smuzhiyun+{
501*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
502*4882a593Smuzhiyun+
503*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
504*4882a593Smuzhiyun+
505*4882a593Smuzhiyun+     task->c64x_arg[0] = dst_rgb;
506*4882a593Smuzhiyun+     task->c64x_arg[1] = dst_alpha;
507*4882a593Smuzhiyun+     task->c64x_arg[2] = dst_pitch;
508*4882a593Smuzhiyun+     task->c64x_arg[3] = source;
509*4882a593Smuzhiyun+     task->c64x_arg[4] = src_pitch;
510*4882a593Smuzhiyun+     task->c64x_arg[5] = width;
511*4882a593Smuzhiyun+     task->c64x_arg[6] = height;
512*4882a593Smuzhiyun+
513*4882a593Smuzhiyun+     task->c64x_function = C64X_DITHER_ARGB | C64X_FLAG_TODO;
514*4882a593Smuzhiyun+
515*4882a593Smuzhiyun+     tasks->num_tasks++;
516*4882a593Smuzhiyun+}
517*4882a593Smuzhiyun+
518*4882a593Smuzhiyun+static inline void
519*4882a593Smuzhiyun+davinci_c64x_dither_argb( DavinciC64x   *c64x,
520*4882a593Smuzhiyun+                          unsigned long  dst_rgb,
521*4882a593Smuzhiyun+                          unsigned long  dst_alpha,
522*4882a593Smuzhiyun+                          u32            dst_pitch,
523*4882a593Smuzhiyun+                          unsigned long  source,
524*4882a593Smuzhiyun+                          u32            src_pitch,
525*4882a593Smuzhiyun+                          u32            width,
526*4882a593Smuzhiyun+                          u32            height )
527*4882a593Smuzhiyun+{
528*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
529*4882a593Smuzhiyun+
530*4882a593Smuzhiyun+     task->c64x_arg[0] = dst_rgb;
531*4882a593Smuzhiyun+     task->c64x_arg[1] = dst_alpha;
532*4882a593Smuzhiyun+     task->c64x_arg[2] = dst_pitch;
533*4882a593Smuzhiyun+     task->c64x_arg[3] = source;
534*4882a593Smuzhiyun+     task->c64x_arg[4] = src_pitch;
535*4882a593Smuzhiyun+     task->c64x_arg[5] = width;
536*4882a593Smuzhiyun+     task->c64x_arg[6] = height;
537*4882a593Smuzhiyun+
538*4882a593Smuzhiyun+     task->c64x_function = C64X_DITHER_ARGB | C64X_FLAG_TODO;
539*4882a593Smuzhiyun+
540*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
541*4882a593Smuzhiyun+}
542*4882a593Smuzhiyun+
543*4882a593Smuzhiyun+static inline void
544*4882a593Smuzhiyun+davinci_c64x_fill_16__L( DavinciC64xTasks *tasks,
545*4882a593Smuzhiyun+                         unsigned long     dest,
546*4882a593Smuzhiyun+                         u32               pitch,
547*4882a593Smuzhiyun+                         u32               width,
548*4882a593Smuzhiyun+                         u32               height,
549*4882a593Smuzhiyun+                         u32               value )
550*4882a593Smuzhiyun+{
551*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
552*4882a593Smuzhiyun+
553*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
554*4882a593Smuzhiyun+
555*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
556*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
557*4882a593Smuzhiyun+     task->c64x_arg[2] = width;
558*4882a593Smuzhiyun+     task->c64x_arg[3] = height;
559*4882a593Smuzhiyun+     task->c64x_arg[4] = value;
560*4882a593Smuzhiyun+
561*4882a593Smuzhiyun+     task->c64x_function = C64X_FILL_16 | C64X_FLAG_TODO;
562*4882a593Smuzhiyun+
563*4882a593Smuzhiyun+     tasks->num_tasks++;
564*4882a593Smuzhiyun+}
565*4882a593Smuzhiyun+
566*4882a593Smuzhiyun+static inline void
567*4882a593Smuzhiyun+davinci_c64x_fill_16( DavinciC64x   *c64x,
568*4882a593Smuzhiyun+                      unsigned long  dest,
569*4882a593Smuzhiyun+                      u32            pitch,
570*4882a593Smuzhiyun+                      u32            width,
571*4882a593Smuzhiyun+                      u32            height,
572*4882a593Smuzhiyun+                      u32            value )
573*4882a593Smuzhiyun+{
574*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
575*4882a593Smuzhiyun+
576*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
577*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
578*4882a593Smuzhiyun+     task->c64x_arg[2] = width;
579*4882a593Smuzhiyun+     task->c64x_arg[3] = height;
580*4882a593Smuzhiyun+     task->c64x_arg[4] = value;
581*4882a593Smuzhiyun+
582*4882a593Smuzhiyun+     task->c64x_function = C64X_FILL_16 | C64X_FLAG_TODO;
583*4882a593Smuzhiyun+
584*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
585*4882a593Smuzhiyun+}
586*4882a593Smuzhiyun+
587*4882a593Smuzhiyun+static inline void
588*4882a593Smuzhiyun+davinci_c64x_fill_32__L( DavinciC64xTasks *tasks,
589*4882a593Smuzhiyun+                         unsigned long     dest,
590*4882a593Smuzhiyun+                         u32               pitch,
591*4882a593Smuzhiyun+                         u32               width,
592*4882a593Smuzhiyun+                         u32               height,
593*4882a593Smuzhiyun+                         u32               value )
594*4882a593Smuzhiyun+{
595*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
596*4882a593Smuzhiyun+
597*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
598*4882a593Smuzhiyun+
599*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
600*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
601*4882a593Smuzhiyun+     task->c64x_arg[2] = width;
602*4882a593Smuzhiyun+     task->c64x_arg[3] = height;
603*4882a593Smuzhiyun+     task->c64x_arg[4] = value;
604*4882a593Smuzhiyun+
605*4882a593Smuzhiyun+     task->c64x_function = C64X_FILL_32 | C64X_FLAG_TODO;
606*4882a593Smuzhiyun+
607*4882a593Smuzhiyun+     tasks->num_tasks++;
608*4882a593Smuzhiyun+}
609*4882a593Smuzhiyun+
610*4882a593Smuzhiyun+static inline void
611*4882a593Smuzhiyun+davinci_c64x_fill_32( DavinciC64x   *c64x,
612*4882a593Smuzhiyun+                      unsigned long  dest,
613*4882a593Smuzhiyun+                      u32            pitch,
614*4882a593Smuzhiyun+                      u32            width,
615*4882a593Smuzhiyun+                      u32            height,
616*4882a593Smuzhiyun+                      u32            value )
617*4882a593Smuzhiyun+{
618*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
619*4882a593Smuzhiyun+
620*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
621*4882a593Smuzhiyun+     task->c64x_arg[1] = pitch;
622*4882a593Smuzhiyun+     task->c64x_arg[2] = width;
623*4882a593Smuzhiyun+     task->c64x_arg[3] = height;
624*4882a593Smuzhiyun+     task->c64x_arg[4] = value;
625*4882a593Smuzhiyun+
626*4882a593Smuzhiyun+     task->c64x_function = C64X_FILL_32 | C64X_FLAG_TODO;
627*4882a593Smuzhiyun+
628*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
629*4882a593Smuzhiyun+}
630*4882a593Smuzhiyun+
631*4882a593Smuzhiyun+static inline void
632*4882a593Smuzhiyun+davinci_c64x_blit_16__L( DavinciC64xTasks *tasks,
633*4882a593Smuzhiyun+                         unsigned long     dest,
634*4882a593Smuzhiyun+                         u32               dpitch,
635*4882a593Smuzhiyun+                         unsigned long     src,
636*4882a593Smuzhiyun+                         u32               spitch,
637*4882a593Smuzhiyun+                         u32               width,
638*4882a593Smuzhiyun+                         u32               height )
639*4882a593Smuzhiyun+{
640*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
641*4882a593Smuzhiyun+
642*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
643*4882a593Smuzhiyun+
644*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
645*4882a593Smuzhiyun+     task->c64x_arg[1] = dpitch;
646*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
647*4882a593Smuzhiyun+     task->c64x_arg[3] = spitch;
648*4882a593Smuzhiyun+     task->c64x_arg[4] = width;
649*4882a593Smuzhiyun+     task->c64x_arg[5] = height;
650*4882a593Smuzhiyun+
651*4882a593Smuzhiyun+     task->c64x_function = C64X_COPY_16 | C64X_FLAG_TODO;
652*4882a593Smuzhiyun+
653*4882a593Smuzhiyun+     tasks->num_tasks++;
654*4882a593Smuzhiyun+}
655*4882a593Smuzhiyun+
656*4882a593Smuzhiyun+static inline void
657*4882a593Smuzhiyun+davinci_c64x_blit_16( DavinciC64x   *c64x,
658*4882a593Smuzhiyun+                      unsigned long  dest,
659*4882a593Smuzhiyun+                      u32            dpitch,
660*4882a593Smuzhiyun+                      unsigned long  src,
661*4882a593Smuzhiyun+                      u32            spitch,
662*4882a593Smuzhiyun+                      u32            width,
663*4882a593Smuzhiyun+                      u32            height )
664*4882a593Smuzhiyun+{
665*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
666*4882a593Smuzhiyun+
667*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
668*4882a593Smuzhiyun+     task->c64x_arg[1] = dpitch;
669*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
670*4882a593Smuzhiyun+     task->c64x_arg[3] = spitch;
671*4882a593Smuzhiyun+     task->c64x_arg[4] = width;
672*4882a593Smuzhiyun+     task->c64x_arg[5] = height;
673*4882a593Smuzhiyun+
674*4882a593Smuzhiyun+     task->c64x_function = C64X_COPY_16 | C64X_FLAG_TODO;
675*4882a593Smuzhiyun+
676*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
677*4882a593Smuzhiyun+}
678*4882a593Smuzhiyun+
679*4882a593Smuzhiyun+static inline void
680*4882a593Smuzhiyun+davinci_c64x_blit_32__L( DavinciC64xTasks *tasks,
681*4882a593Smuzhiyun+                         unsigned long     dest,
682*4882a593Smuzhiyun+                         u32               dpitch,
683*4882a593Smuzhiyun+                         unsigned long     src,
684*4882a593Smuzhiyun+                         u32               spitch,
685*4882a593Smuzhiyun+                         u32               width,
686*4882a593Smuzhiyun+                         u32               height )
687*4882a593Smuzhiyun+{
688*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
689*4882a593Smuzhiyun+
690*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
691*4882a593Smuzhiyun+
692*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
693*4882a593Smuzhiyun+     task->c64x_arg[1] = dpitch;
694*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
695*4882a593Smuzhiyun+     task->c64x_arg[3] = spitch;
696*4882a593Smuzhiyun+     task->c64x_arg[4] = width;
697*4882a593Smuzhiyun+     task->c64x_arg[5] = height;
698*4882a593Smuzhiyun+
699*4882a593Smuzhiyun+     task->c64x_function = C64X_COPY_32 | C64X_FLAG_TODO;
700*4882a593Smuzhiyun+
701*4882a593Smuzhiyun+     tasks->num_tasks++;
702*4882a593Smuzhiyun+}
703*4882a593Smuzhiyun+
704*4882a593Smuzhiyun+static inline void
705*4882a593Smuzhiyun+davinci_c64x_blit_32( DavinciC64x   *c64x,
706*4882a593Smuzhiyun+                      unsigned long  dest,
707*4882a593Smuzhiyun+                      u32            dpitch,
708*4882a593Smuzhiyun+                      unsigned long  src,
709*4882a593Smuzhiyun+                      u32            spitch,
710*4882a593Smuzhiyun+                      u32            width,
711*4882a593Smuzhiyun+                      u32            height )
712*4882a593Smuzhiyun+{
713*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
714*4882a593Smuzhiyun+
715*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
716*4882a593Smuzhiyun+     task->c64x_arg[1] = dpitch;
717*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
718*4882a593Smuzhiyun+     task->c64x_arg[3] = spitch;
719*4882a593Smuzhiyun+     task->c64x_arg[4] = width;
720*4882a593Smuzhiyun+     task->c64x_arg[5] = height;
721*4882a593Smuzhiyun+
722*4882a593Smuzhiyun+     task->c64x_function = C64X_COPY_32 | C64X_FLAG_TODO;
723*4882a593Smuzhiyun+
724*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
725*4882a593Smuzhiyun+}
726*4882a593Smuzhiyun+
727*4882a593Smuzhiyun+static inline void
728*4882a593Smuzhiyun+davinci_c64x_stretch_32__L( DavinciC64xTasks *tasks,
729*4882a593Smuzhiyun+                            unsigned long     dest,
730*4882a593Smuzhiyun+                            u32               dpitch,
731*4882a593Smuzhiyun+                            unsigned long     src,
732*4882a593Smuzhiyun+                            u32               spitch,
733*4882a593Smuzhiyun+                            u32               dw,
734*4882a593Smuzhiyun+                            u32               dh,
735*4882a593Smuzhiyun+                            u32               sw,
736*4882a593Smuzhiyun+                            u32               sh,
737*4882a593Smuzhiyun+                            const DFBRegion  *clip )
738*4882a593Smuzhiyun+{
739*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
740*4882a593Smuzhiyun+
741*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
742*4882a593Smuzhiyun+
743*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
744*4882a593Smuzhiyun+     task->c64x_arg[1] = src;
745*4882a593Smuzhiyun+     task->c64x_arg[2] = dpitch   | (spitch   << 16);
746*4882a593Smuzhiyun+     task->c64x_arg[3] = dh       | (dw       << 16);
747*4882a593Smuzhiyun+     task->c64x_arg[4] = sh       | (sw       << 16);
748*4882a593Smuzhiyun+     task->c64x_arg[5] = clip->x2 | (clip->y2 << 16);
749*4882a593Smuzhiyun+     task->c64x_arg[6] = clip->x1 | (clip->y1 << 16);
750*4882a593Smuzhiyun+
751*4882a593Smuzhiyun+     if (sw > dw && sh > dh)
752*4882a593Smuzhiyun+          task->c64x_function = C64X_STRETCH_32_down | C64X_FLAG_TODO;
753*4882a593Smuzhiyun+     else
754*4882a593Smuzhiyun+          task->c64x_function = C64X_STRETCH_32_up | C64X_FLAG_TODO;
755*4882a593Smuzhiyun+
756*4882a593Smuzhiyun+     tasks->num_tasks++;
757*4882a593Smuzhiyun+}
758*4882a593Smuzhiyun+
759*4882a593Smuzhiyun+static inline void
760*4882a593Smuzhiyun+davinci_c64x_stretch_32( DavinciC64x     *c64x,
761*4882a593Smuzhiyun+                         unsigned long    dest,
762*4882a593Smuzhiyun+                         u32              dpitch,
763*4882a593Smuzhiyun+                         unsigned long    src,
764*4882a593Smuzhiyun+                         u32              spitch,
765*4882a593Smuzhiyun+                         u32              dw,
766*4882a593Smuzhiyun+                         u32              dh,
767*4882a593Smuzhiyun+                         u32              sw,
768*4882a593Smuzhiyun+                         u32              sh,
769*4882a593Smuzhiyun+                         const DFBRegion *clip )
770*4882a593Smuzhiyun+{
771*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
772*4882a593Smuzhiyun+
773*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
774*4882a593Smuzhiyun+     task->c64x_arg[1] = src;
775*4882a593Smuzhiyun+     task->c64x_arg[2] = dpitch   | (spitch   << 16);
776*4882a593Smuzhiyun+     task->c64x_arg[3] = dh       | (dw       << 16);
777*4882a593Smuzhiyun+     task->c64x_arg[4] = sh       | (sw       << 16);
778*4882a593Smuzhiyun+     task->c64x_arg[5] = clip->x2 | (clip->y2 << 16);
779*4882a593Smuzhiyun+     task->c64x_arg[6] = clip->x1 | (clip->y1 << 16);
780*4882a593Smuzhiyun+
781*4882a593Smuzhiyun+     if (sw > dw && sh > dh)
782*4882a593Smuzhiyun+          task->c64x_function = C64X_STRETCH_32_down | C64X_FLAG_TODO;
783*4882a593Smuzhiyun+     else
784*4882a593Smuzhiyun+          task->c64x_function = C64X_STRETCH_32_up | C64X_FLAG_TODO;
785*4882a593Smuzhiyun+
786*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
787*4882a593Smuzhiyun+}
788*4882a593Smuzhiyun+
789*4882a593Smuzhiyun+static inline void
790*4882a593Smuzhiyun+davinci_c64x_blit_blend_32__L( DavinciC64xTasks *tasks,
791*4882a593Smuzhiyun+                               u32               sub_func,
792*4882a593Smuzhiyun+                               unsigned long     dest,
793*4882a593Smuzhiyun+                               u32               dpitch,
794*4882a593Smuzhiyun+                               unsigned long     src,
795*4882a593Smuzhiyun+                               u32               spitch,
796*4882a593Smuzhiyun+                               u32               width,
797*4882a593Smuzhiyun+                               u32               height,
798*4882a593Smuzhiyun+                               u32               argb,
799*4882a593Smuzhiyun+                               u8                alpha )
800*4882a593Smuzhiyun+{
801*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
802*4882a593Smuzhiyun+
803*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
804*4882a593Smuzhiyun+
805*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
806*4882a593Smuzhiyun+     task->c64x_arg[1] = dpitch;
807*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
808*4882a593Smuzhiyun+     task->c64x_arg[3] = spitch;
809*4882a593Smuzhiyun+     task->c64x_arg[4] = width | (height << 16);
810*4882a593Smuzhiyun+     task->c64x_arg[5] = argb;
811*4882a593Smuzhiyun+     task->c64x_arg[6] = alpha;
812*4882a593Smuzhiyun+
813*4882a593Smuzhiyun+     task->c64x_function = (sub_func << 16) | C64X_BLEND_32 | C64X_FLAG_TODO;
814*4882a593Smuzhiyun+
815*4882a593Smuzhiyun+     tasks->num_tasks++;
816*4882a593Smuzhiyun+}
817*4882a593Smuzhiyun+
818*4882a593Smuzhiyun+static inline void
819*4882a593Smuzhiyun+davinci_c64x_blit_blend_32( DavinciC64x   *c64x,
820*4882a593Smuzhiyun+                            u32            sub_func,
821*4882a593Smuzhiyun+                            unsigned long  dest,
822*4882a593Smuzhiyun+                            u32            dpitch,
823*4882a593Smuzhiyun+                            unsigned long  src,
824*4882a593Smuzhiyun+                            u32            spitch,
825*4882a593Smuzhiyun+                            u32            width,
826*4882a593Smuzhiyun+                            u32            height,
827*4882a593Smuzhiyun+                            u32            argb,
828*4882a593Smuzhiyun+                            u8             alpha )
829*4882a593Smuzhiyun+{
830*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
831*4882a593Smuzhiyun+
832*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
833*4882a593Smuzhiyun+     task->c64x_arg[1] = dpitch;
834*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
835*4882a593Smuzhiyun+     task->c64x_arg[3] = spitch;
836*4882a593Smuzhiyun+     task->c64x_arg[4] = width | (height << 16);
837*4882a593Smuzhiyun+     task->c64x_arg[5] = argb;
838*4882a593Smuzhiyun+     task->c64x_arg[6] = alpha;
839*4882a593Smuzhiyun+
840*4882a593Smuzhiyun+     task->c64x_function = (sub_func << 16) | C64X_BLEND_32 | C64X_FLAG_TODO;
841*4882a593Smuzhiyun+
842*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
843*4882a593Smuzhiyun+}
844*4882a593Smuzhiyun+
845*4882a593Smuzhiyun+static inline void
846*4882a593Smuzhiyun+davinci_c64x_blit_keyed_16__L( DavinciC64xTasks *tasks,
847*4882a593Smuzhiyun+                               unsigned long     dest,
848*4882a593Smuzhiyun+                               u32               dpitch,
849*4882a593Smuzhiyun+                               unsigned long     src,
850*4882a593Smuzhiyun+                               u32               spitch,
851*4882a593Smuzhiyun+                               u32               width,
852*4882a593Smuzhiyun+                               u32               height,
853*4882a593Smuzhiyun+                               u32               key,
854*4882a593Smuzhiyun+                               u32               mask )
855*4882a593Smuzhiyun+{
856*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
857*4882a593Smuzhiyun+
858*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
859*4882a593Smuzhiyun+
860*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
861*4882a593Smuzhiyun+     task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff);
862*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
863*4882a593Smuzhiyun+     task->c64x_arg[3] = width;
864*4882a593Smuzhiyun+     task->c64x_arg[4] = height;
865*4882a593Smuzhiyun+     task->c64x_arg[5] = key;
866*4882a593Smuzhiyun+     task->c64x_arg[6] = mask;
867*4882a593Smuzhiyun+
868*4882a593Smuzhiyun+     task->c64x_function = C64X_COPY_KEYED_16 | C64X_FLAG_TODO;
869*4882a593Smuzhiyun+
870*4882a593Smuzhiyun+     tasks->num_tasks++;
871*4882a593Smuzhiyun+}
872*4882a593Smuzhiyun+
873*4882a593Smuzhiyun+static inline void
874*4882a593Smuzhiyun+davinci_c64x_blit_keyed_16( DavinciC64x   *c64x,
875*4882a593Smuzhiyun+                            unsigned long  dest,
876*4882a593Smuzhiyun+                            u32            dpitch,
877*4882a593Smuzhiyun+                            unsigned long  src,
878*4882a593Smuzhiyun+                            u32            spitch,
879*4882a593Smuzhiyun+                            u32            width,
880*4882a593Smuzhiyun+                            u32            height,
881*4882a593Smuzhiyun+                            u32            key,
882*4882a593Smuzhiyun+                            u32            mask )
883*4882a593Smuzhiyun+{
884*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
885*4882a593Smuzhiyun+
886*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
887*4882a593Smuzhiyun+     task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff);
888*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
889*4882a593Smuzhiyun+     task->c64x_arg[3] = width;
890*4882a593Smuzhiyun+     task->c64x_arg[4] = height;
891*4882a593Smuzhiyun+     task->c64x_arg[5] = key;
892*4882a593Smuzhiyun+     task->c64x_arg[6] = mask;
893*4882a593Smuzhiyun+
894*4882a593Smuzhiyun+     task->c64x_function = C64X_COPY_KEYED_16 | C64X_FLAG_TODO;
895*4882a593Smuzhiyun+
896*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
897*4882a593Smuzhiyun+}
898*4882a593Smuzhiyun+
899*4882a593Smuzhiyun+static inline void
900*4882a593Smuzhiyun+davinci_c64x_blit_keyed_32__L( DavinciC64xTasks *tasks,
901*4882a593Smuzhiyun+                               unsigned long     dest,
902*4882a593Smuzhiyun+                               u32               dpitch,
903*4882a593Smuzhiyun+                               unsigned long     src,
904*4882a593Smuzhiyun+                               u32               spitch,
905*4882a593Smuzhiyun+                               u32               width,
906*4882a593Smuzhiyun+                               u32               height,
907*4882a593Smuzhiyun+                               u32               key,
908*4882a593Smuzhiyun+                               u32               mask )
909*4882a593Smuzhiyun+{
910*4882a593Smuzhiyun+     c64xTask *task = &tasks->tasks[tasks->num_tasks];
911*4882a593Smuzhiyun+
912*4882a593Smuzhiyun+     D_ASSERT( tasks->num_tasks < tasks->max_tasks );
913*4882a593Smuzhiyun+
914*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
915*4882a593Smuzhiyun+     task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff);
916*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
917*4882a593Smuzhiyun+     task->c64x_arg[3] = width;
918*4882a593Smuzhiyun+     task->c64x_arg[4] = height;
919*4882a593Smuzhiyun+     task->c64x_arg[5] = key;
920*4882a593Smuzhiyun+     task->c64x_arg[6] = mask;
921*4882a593Smuzhiyun+
922*4882a593Smuzhiyun+     task->c64x_function = C64X_COPY_KEYED_32 | C64X_FLAG_TODO;
923*4882a593Smuzhiyun+
924*4882a593Smuzhiyun+     tasks->num_tasks++;
925*4882a593Smuzhiyun+}
926*4882a593Smuzhiyun+
927*4882a593Smuzhiyun+static inline void
928*4882a593Smuzhiyun+davinci_c64x_blit_keyed_32( DavinciC64x   *c64x,
929*4882a593Smuzhiyun+                            unsigned long  dest,
930*4882a593Smuzhiyun+                            u32            dpitch,
931*4882a593Smuzhiyun+                            unsigned long  src,
932*4882a593Smuzhiyun+                            u32            spitch,
933*4882a593Smuzhiyun+                            u32            width,
934*4882a593Smuzhiyun+                            u32            height,
935*4882a593Smuzhiyun+                            u32            key,
936*4882a593Smuzhiyun+                            u32            mask )
937*4882a593Smuzhiyun+{
938*4882a593Smuzhiyun+     c64xTask *task = c64x_get_task( c64x );
939*4882a593Smuzhiyun+
940*4882a593Smuzhiyun+     task->c64x_arg[0] = dest;
941*4882a593Smuzhiyun+     task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff);
942*4882a593Smuzhiyun+     task->c64x_arg[2] = src;
943*4882a593Smuzhiyun+     task->c64x_arg[3] = width;
944*4882a593Smuzhiyun+     task->c64x_arg[4] = height;
945*4882a593Smuzhiyun+     task->c64x_arg[5] = key;
946*4882a593Smuzhiyun+     task->c64x_arg[6] = mask;
947*4882a593Smuzhiyun+
948*4882a593Smuzhiyun+     task->c64x_function = C64X_COPY_KEYED_32 | C64X_FLAG_TODO;
949*4882a593Smuzhiyun+
950*4882a593Smuzhiyun+     c64x_submit_task( c64x, task );
951*4882a593Smuzhiyun+}
952*4882a593Smuzhiyun+
953*4882a593Smuzhiyun+#endif
954*4882a593Smuzhiyun+
955*4882a593Smuzhiyundiff -puNr -Naur directfb-1.6.3-orig/gfxdrivers/davinci/davincifb.h directfb-1.6.3/gfxdrivers/davinci/davincifb.h
956*4882a593Smuzhiyun--- directfb-1.6.3-orig/gfxdrivers/davinci/davincifb.h	1970-01-01 01:00:00.000000000 +0100
957*4882a593Smuzhiyun+++ directfb-1.6.3/gfxdrivers/davinci/davincifb.h	2013-04-07 21:33:21.488622184 +0200
958*4882a593Smuzhiyun@@ -0,0 +1,581 @@
959*4882a593Smuzhiyun+/*
960*4882a593Smuzhiyun+ * Copyright (C) 2006 Texas Instruments Inc
961*4882a593Smuzhiyun+ *
962*4882a593Smuzhiyun+ * This program is free software; you can redistribute it and/or modify
963*4882a593Smuzhiyun+ * it under the terms of the GNU General Public License as published by
964*4882a593Smuzhiyun+ * the Free Software Foundation; either version 2 of the License, or
965*4882a593Smuzhiyun+ * (at your option)any later version.
966*4882a593Smuzhiyun+ *
967*4882a593Smuzhiyun+ * This program is distributed in the hope that it will be useful,
968*4882a593Smuzhiyun+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
969*4882a593Smuzhiyun+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
970*4882a593Smuzhiyun+ * GNU General Public License for more details.
971*4882a593Smuzhiyun+ *
972*4882a593Smuzhiyun+ * You should have received a copy of the GNU General Public License
973*4882a593Smuzhiyun+ * along with this program; if not, write to the Free Software
974*4882a593Smuzhiyun+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
975*4882a593Smuzhiyun+ *
976*4882a593Smuzhiyun+ * File: davincifb.h
977*4882a593Smuzhiyun+ */
978*4882a593Smuzhiyun+
979*4882a593Smuzhiyun+#ifndef DAVINVI_VPBE_H
980*4882a593Smuzhiyun+#define DAVINVI_VPBE_H
981*4882a593Smuzhiyun+
982*4882a593Smuzhiyun+/* include Linux files */
983*4882a593Smuzhiyun+#include <linux/fb.h>
984*4882a593Smuzhiyun+
985*4882a593Smuzhiyun+/* define the custom FBIO_WAITFORVSYNC ioctl */
986*4882a593Smuzhiyun+#define FBIO_WAITFORVSYNC	_IOW('F', 0x20, u_int32_t)
987*4882a593Smuzhiyun+#define FBIO_SETATTRIBUTE       _IOW('F', 0x21, struct fb_fillrect)
988*4882a593Smuzhiyun+
989*4882a593Smuzhiyun+/* Backported IOCTLS. */
990*4882a593Smuzhiyun+#define FBIO_SETPOSX                            _IOW('F', 0x22, u_int32_t)
991*4882a593Smuzhiyun+#define FBIO_SETPOSY                            _IOW('F', 0x23, u_int32_t)
992*4882a593Smuzhiyun+#define FBIO_SETZOOM            		_IOW('F', 0x24, struct zoom_params)
993*4882a593Smuzhiyun+#define FBIO_GETSTD                             _IOR('F', 0x25, u_int32_t)
994*4882a593Smuzhiyun+#define FBIO_RESIZER		                _IOW('F', 0x26, struct vpfe_resizer_params)
995*4882a593Smuzhiyun+#define FBIO_SYNC		                _IOW('F', 0x27, u_int32_t)
996*4882a593Smuzhiyun+
997*4882a593Smuzhiyun+typedef struct zoom_params {
998*4882a593Smuzhiyun+	u_int32_t window_id;
999*4882a593Smuzhiyun+	u_int32_t zoom_h;
1000*4882a593Smuzhiyun+	u_int32_t zoom_v;
1001*4882a593Smuzhiyun+} zoom_params_t;
1002*4882a593Smuzhiyun+
1003*4882a593Smuzhiyun+typedef struct vpfe_resizer_params
1004*4882a593Smuzhiyun+{
1005*4882a593Smuzhiyun+	u_int32_t rsz_cnt;	//busy-lock
1006*4882a593Smuzhiyun+	u_int32_t out_size;	//busy-lock
1007*4882a593Smuzhiyun+	u_int32_t in_start;	//busy-lock
1008*4882a593Smuzhiyun+	u_int32_t in_size;	//busy-lock
1009*4882a593Smuzhiyun+	u_int32_t sdr_inadd;	//shadowed
1010*4882a593Smuzhiyun+	u_int32_t sdr_inoff;	//shadowed
1011*4882a593Smuzhiyun+	u_int32_t sdr_outadd;	//shadowed
1012*4882a593Smuzhiyun+	u_int32_t sdr_outoff;	//shadowed
1013*4882a593Smuzhiyun+	u_int32_t hfilt[16];	//busy-lock
1014*4882a593Smuzhiyun+	u_int32_t vfilt[16];	//busy-lock
1015*4882a593Smuzhiyun+	u_int32_t yenh;		//busy-lock
1016*4882a593Smuzhiyun+} vpfe_resizer_params_t;
1017*4882a593Smuzhiyun+
1018*4882a593Smuzhiyun+typedef struct fb_set_start {
1019*4882a593Smuzhiyun+	int		offset;		/* offset from smem_start */
1020*4882a593Smuzhiyun+	unsigned long	physical;	/* absolute physical address when offset < 0 */
1021*4882a593Smuzhiyun+
1022*4882a593Smuzhiyun+	u_int64_t	sync;		/* input:  target sync counter for change or 0 for no sync at all,
1023*4882a593Smuzhiyun+					   output: sync counter of actual change or 0 if still pending */
1024*4882a593Smuzhiyun+} fb_set_start_t;
1025*4882a593Smuzhiyun+
1026*4882a593Smuzhiyun+
1027*4882a593Smuzhiyun+#ifdef _IOC_TYPECHECK
1028*4882a593Smuzhiyun+#undef _IOC_TYPECHECK
1029*4882a593Smuzhiyun+#define _IOC_TYPECHECK(x)     (sizeof(x))
1030*4882a593Smuzhiyun+#endif
1031*4882a593Smuzhiyun+
1032*4882a593Smuzhiyun+#define	RAM_CLUT_SIZE	256*3
1033*4882a593Smuzhiyun+#define FBIO_ENABLE_DISABLE_WIN		\
1034*4882a593Smuzhiyun+	_IOW('F', 0x30, unsigned char)
1035*4882a593Smuzhiyun+#define FBIO_SET_BITMAP_BLEND_FACTOR	\
1036*4882a593Smuzhiyun+	_IOW('F', 0x31, vpbe_bitmap_blend_params_t)
1037*4882a593Smuzhiyun+#define FBIO_SET_BITMAP_WIN_RAM_CLUT    \
1038*4882a593Smuzhiyun+	_IOW('F', 0x32, unsigned char)*RAM_CLUT_SIZE)
1039*4882a593Smuzhiyun+#define FBIO_ENABLE_DISABLE_ATTRIBUTE_WIN \
1040*4882a593Smuzhiyun+	_IOW('F', 0x33, unsigned int)
1041*4882a593Smuzhiyun+#define FBIO_GET_BLINK_INTERVAL		\
1042*4882a593Smuzhiyun+	_IOR('F', 0x34, vpbe_blink_option_t)
1043*4882a593Smuzhiyun+#define FBIO_SET_BLINK_INTERVAL         \
1044*4882a593Smuzhiyun+	_IOW('F', 0x35, vpbe_blink_option_t)
1045*4882a593Smuzhiyun+#define FBIO_GET_VIDEO_CONFIG_PARAMS    \
1046*4882a593Smuzhiyun+	_IOR('F', 0x36, vpbe_video_config_params_t)
1047*4882a593Smuzhiyun+#define FBIO_SET_VIDEO_CONFIG_PARAMS    \
1048*4882a593Smuzhiyun+	_IOW('F', 0x37, vpbe_video_config_params_t)
1049*4882a593Smuzhiyun+#define FBIO_GET_BITMAP_CONFIG_PARAMS   \
1050*4882a593Smuzhiyun+	_IOR('F', 0x38, vpbe_bitmap_config_params_t)
1051*4882a593Smuzhiyun+#define FBIO_SET_BITMAP_CONFIG_PARAMS   \
1052*4882a593Smuzhiyun+	_IOW('F', 0x39, vpbe_bitmap_config_params_t)
1053*4882a593Smuzhiyun+#define FBIO_SET_DCLK                   \
1054*4882a593Smuzhiyun+	_IOW('F', 0x40, vpbe_dclk_t)
1055*4882a593Smuzhiyun+#define FBIO_SET_INTERFACE		\
1056*4882a593Smuzhiyun+	_IOW('F', 0x41, unsigned char)
1057*4882a593Smuzhiyun+#define FBIO_GET_INTERFACE		\
1058*4882a593Smuzhiyun+	_IOR('F', 0x42, unsigned char)
1059*4882a593Smuzhiyun+#define FBIO_QUERY_TIMING		\
1060*4882a593Smuzhiyun+	_IOWR('F', 0x43, struct vpbe_mode_info)
1061*4882a593Smuzhiyun+#define FBIO_SET_TIMING			\
1062*4882a593Smuzhiyun+	_IOW('F', 0x44, struct vpbe_fb_videomode)
1063*4882a593Smuzhiyun+#define FBIO_GET_TIMING                 \
1064*4882a593Smuzhiyun+	_IOR('F', 0x45, struct vpbe_fb_videomode)
1065*4882a593Smuzhiyun+#define FBIO_SET_VENC_CLK_SOURCE	\
1066*4882a593Smuzhiyun+	_IOW('F', 0x46, unsigned char)
1067*4882a593Smuzhiyun+#define FBIO_SET_BACKG_COLOR            \
1068*4882a593Smuzhiyun+	_IOW('F', 0x47, vpbe_backg_color_t)
1069*4882a593Smuzhiyun+#define FBIO_ENABLE_DISPLAY		\
1070*4882a593Smuzhiyun+	_IOW('F', 0x48, unsigned char)
1071*4882a593Smuzhiyun+#define FBIO_SETPOS            		\
1072*4882a593Smuzhiyun+	_IOW('F', 0x49, u_int32_t)
1073*4882a593Smuzhiyun+#define FBIO_SET_CURSOR         	\
1074*4882a593Smuzhiyun+	_IOW('F', 0x50, struct fb_cursor)
1075*4882a593Smuzhiyun+#define FBIO_SET_START     		\
1076*4882a593Smuzhiyun+	_IOW('F', 0x66, struct fb_set_start)
1077*4882a593Smuzhiyun+
1078*4882a593Smuzhiyun+/*
1079*4882a593Smuzhiyun+ * Defines and Constants
1080*4882a593Smuzhiyun+ */
1081*4882a593Smuzhiyun+#ifdef __KERNEL__
1082*4882a593Smuzhiyun+#define DAVINCIFB_DEVICE "davincifb"
1083*4882a593Smuzhiyun+#define DAVINCIFB_DRIVER "davincifb"
1084*4882a593Smuzhiyun+
1085*4882a593Smuzhiyun+#define MULTIPLE_BUFFERING      1
1086*4882a593Smuzhiyun+
1087*4882a593Smuzhiyun+#ifdef MULTIPLE_BUFFERING
1088*4882a593Smuzhiyun+#define DOUBLE_BUF      2
1089*4882a593Smuzhiyun+#define TRIPLE_BUF      3
1090*4882a593Smuzhiyun+#else
1091*4882a593Smuzhiyun+#define DOUBLE_BUF      1
1092*4882a593Smuzhiyun+#define TRIPLE_BUF      1
1093*4882a593Smuzhiyun+#endif
1094*4882a593Smuzhiyun+
1095*4882a593Smuzhiyun+/* usage:	if (is_win(info->fix.id, OSD0)) ... */
1096*4882a593Smuzhiyun+#define is_win(name, x) ((strcmp(name, x ## _FBNAME) == 0) ? 1 : 0)
1097*4882a593Smuzhiyun+
1098*4882a593Smuzhiyun+/*
1099*4882a593Smuzhiyun+ * display controller register I/O routines
1100*4882a593Smuzhiyun+ */
1101*4882a593Smuzhiyun+u32 dispc_reg_in(u32 offset);
1102*4882a593Smuzhiyun+u32 dispc_reg_out(u32 offset, u32 val);
1103*4882a593Smuzhiyun+u32 dispc_reg_merge(u32 offset, u32 val, u32 mask);
1104*4882a593Smuzhiyun+
1105*4882a593Smuzhiyun+#endif				/*__KERNEL__*/
1106*4882a593Smuzhiyun+
1107*4882a593Smuzhiyun+/*  Error return codes  */
1108*4882a593Smuzhiyun+#define VPBE_INVALID_PARA_VALUE         700
1109*4882a593Smuzhiyun+#define VPBE_WRONG_WINDOW_ID            701
1110*4882a593Smuzhiyun+#define VPBE_CURRENTLY_IN_REQUIRED_MODE 702
1111*4882a593Smuzhiyun+#define VPBE_INSUFFICIENT_CLUT_VALUES   703
1112*4882a593Smuzhiyun+#define VPBE_CLUT_WRITE_TIMEOUT         704
1113*4882a593Smuzhiyun+#define VPBE_VID0_BUF_ADR_NULL          705
1114*4882a593Smuzhiyun+#define VPBE_WINDOW_NOT_DISABLED        706
1115*4882a593Smuzhiyun+#define VPBE_WINDOW_NOT_ENABLED         707
1116*4882a593Smuzhiyun+
1117*4882a593Smuzhiyun+#ifndef __KERNEL__
1118*4882a593Smuzhiyun+/*  Window ID definations */
1119*4882a593Smuzhiyun+#define OSD0      0
1120*4882a593Smuzhiyun+#define VID0      1
1121*4882a593Smuzhiyun+#define OSD1      2
1122*4882a593Smuzhiyun+#define VID1      3
1123*4882a593Smuzhiyun+#endif
1124*4882a593Smuzhiyun+
1125*4882a593Smuzhiyun+/* There are 4 framebuffers, each represented by an fb_info and
1126*4882a593Smuzhiyun+ * a dm_win_info structure */
1127*4882a593Smuzhiyun+#define OSD0_FBNAME "dm_osd0_fb"
1128*4882a593Smuzhiyun+#define OSD1_FBNAME "dm_osd1_fb"
1129*4882a593Smuzhiyun+#define VID0_FBNAME "dm_vid0_fb"
1130*4882a593Smuzhiyun+#define VID1_FBNAME "dm_vid1_fb"
1131*4882a593Smuzhiyun+
1132*4882a593Smuzhiyun+/*  FIXME: Digital LCD RGB matrix coefficients */
1133*4882a593Smuzhiyun+#define DLCD_DGY_VAL    0
1134*4882a593Smuzhiyun+#define DLCD_DRV_VAL    0
1135*4882a593Smuzhiyun+#define DLCD_DGU_VAL    0
1136*4882a593Smuzhiyun+#define DLCD_DBU_VAL		0
1137*4882a593Smuzhiyun+
1138*4882a593Smuzhiyun+/* Defines for bitmap format */
1139*4882a593Smuzhiyun+#define VPBE_BITMAP_BIT_1	1
1140*4882a593Smuzhiyun+#define VPBE_BITMAP_BIT_2	2
1141*4882a593Smuzhiyun+#define VPBE_BITMAP_BIT_4	4
1142*4882a593Smuzhiyun+#define VPBE_BITMAP_BIT_8	8
1143*4882a593Smuzhiyun+#define VPBE_BITMAP_RGB565	16
1144*4882a593Smuzhiyun+#define VPBE_VIDEO_YUV422 	16
1145*4882a593Smuzhiyun+#define VPBE_VIDEO_RGB888 	24
1146*4882a593Smuzhiyun+
1147*4882a593Smuzhiyun+/* Defines foe cursor parameter validation*/
1148*4882a593Smuzhiyun+#define MAX_CURSOR_WIDTH	0x3FF
1149*4882a593Smuzhiyun+#define MAX_CURSOR_HEIGHT	0x1FF
1150*4882a593Smuzhiyun+#define MAX_CURSOR_LINEWIDTH    7
1151*4882a593Smuzhiyun+
1152*4882a593Smuzhiyun+#define BASEX		0x80
1153*4882a593Smuzhiyun+#define BASEY		0x12
1154*4882a593Smuzhiyun+#define BASEX_DLCD		0x59
1155*4882a593Smuzhiyun+#define BASEY_DLCD		0x22
1156*4882a593Smuzhiyun+
1157*4882a593Smuzhiyun+/*
1158*4882a593Smuzhiyun+ * Enumerations
1159*4882a593Smuzhiyun+ */
1160*4882a593Smuzhiyun+/*  Enum for blending factor  */
1161*4882a593Smuzhiyun+typedef enum vpbe_blend_factor {
1162*4882a593Smuzhiyun+	OSD_CONTRIBUTION_ZERO = 0,
1163*4882a593Smuzhiyun+	OSD_CONTRIBUTION_1_BY_8 = 1,
1164*4882a593Smuzhiyun+	OSD_CONTRIBUTION_2_BY_8 = 2,
1165*4882a593Smuzhiyun+	OSD_CONTRIBUTION_3_BY_8 = 3,
1166*4882a593Smuzhiyun+	OSD_CONTRIBUTION_4_BY_8 = 4,
1167*4882a593Smuzhiyun+	OSD_CONTRIBUTION_5_BY_8 = 5,
1168*4882a593Smuzhiyun+	OSD_CONTRIBUTION_6_BY_8 = 6,
1169*4882a593Smuzhiyun+	OSD_CONTRIBUTION_ONE = 7
1170*4882a593Smuzhiyun+} vpbe_blend_factor_t;
1171*4882a593Smuzhiyun+
1172*4882a593Smuzhiyun+/*  Enum for Boolean variables  */
1173*4882a593Smuzhiyun+typedef enum {
1174*4882a593Smuzhiyun+	SET_0 = 0,
1175*4882a593Smuzhiyun+	SET_1 = 1
1176*4882a593Smuzhiyun+} CB_CR_ORDER, ATTRIBUTE, ROM_RAM_CLUT;
1177*4882a593Smuzhiyun+
1178*4882a593Smuzhiyun+/*  Defines for Display Interface */
1179*4882a593Smuzhiyun+#define  PRGB		0
1180*4882a593Smuzhiyun+#define  COMPOSITE      1
1181*4882a593Smuzhiyun+#define  SVIDEO    	2
1182*4882a593Smuzhiyun+#define  COMPONENT 	3
1183*4882a593Smuzhiyun+#define  RGB       	4
1184*4882a593Smuzhiyun+#define  YCC16     	5
1185*4882a593Smuzhiyun+#define  YCC8      	6
1186*4882a593Smuzhiyun+#define  SRGB      	7
1187*4882a593Smuzhiyun+#define  EPSON     	8
1188*4882a593Smuzhiyun+#define  CASIO1G   	9
1189*4882a593Smuzhiyun+#define  UDISP     	10
1190*4882a593Smuzhiyun+#define  STN       	11
1191*4882a593Smuzhiyun+#define VPBE_MAX_INTERFACES	12
1192*4882a593Smuzhiyun+
1193*4882a593Smuzhiyun+/*  Defines for Display Mode */
1194*4882a593Smuzhiyun+#define  LCD    0
1195*4882a593Smuzhiyun+#define  NTSC	1
1196*4882a593Smuzhiyun+#define  PAL    2
1197*4882a593Smuzhiyun+#define  P525   3
1198*4882a593Smuzhiyun+#define  P625   4
1199*4882a593Smuzhiyun+
1200*4882a593Smuzhiyun+#define DEFAULT_MODE 0
1201*4882a593Smuzhiyun+#define  P480   0
1202*4882a593Smuzhiyun+#define  P400   1
1203*4882a593Smuzhiyun+#define  P350   2
1204*4882a593Smuzhiyun+#define NON_EXISTING_MODE 255
1205*4882a593Smuzhiyun+/*  Enable/Disable enum */
1206*4882a593Smuzhiyun+typedef enum {
1207*4882a593Smuzhiyun+	VPBE_DISABLE = 0,
1208*4882a593Smuzhiyun+	VPBE_ENABLE = 1
1209*4882a593Smuzhiyun+} ATTENUATION, TRANSPARENCY, EXPANSION, BLINKING;
1210*4882a593Smuzhiyun+
1211*4882a593Smuzhiyun+typedef enum clk_source {
1212*4882a593Smuzhiyun+	CLK_SOURCE_CLK27 = 0,
1213*4882a593Smuzhiyun+	CLK_SOURCE_CLK54 = 1,
1214*4882a593Smuzhiyun+	CLK_SOURCE_VPBECLK = 2
1215*4882a593Smuzhiyun+} CLK_SOURCE;
1216*4882a593Smuzhiyun+
1217*4882a593Smuzhiyun+/*
1218*4882a593Smuzhiyun+ * Structures and Union Definitions
1219*4882a593Smuzhiyun+ */
1220*4882a593Smuzhiyun+
1221*4882a593Smuzhiyun+/*  Structure for transparency and the blending factor for the bitmap window  */
1222*4882a593Smuzhiyun+typedef struct vpbe_bitmap_blend_params {
1223*4882a593Smuzhiyun+	unsigned int colorkey;	/* color key to be blend */
1224*4882a593Smuzhiyun+	unsigned int enable_colorkeying;	/* enable color keying */
1225*4882a593Smuzhiyun+	unsigned int bf;	/* valid range from 0 to 7 only. */
1226*4882a593Smuzhiyun+} vpbe_bitmap_blend_params_t;
1227*4882a593Smuzhiyun+
1228*4882a593Smuzhiyun+/*  Structure for window expansion  */
1229*4882a593Smuzhiyun+typedef struct vpbe_win_expansion {
1230*4882a593Smuzhiyun+	EXPANSION horizontal;
1231*4882a593Smuzhiyun+	EXPANSION vertical;	/* 1: Enable 0:disable */
1232*4882a593Smuzhiyun+} vpbe_win_expansion_t;
1233*4882a593Smuzhiyun+
1234*4882a593Smuzhiyun+/*  Structure for OSD window blinking options */
1235*4882a593Smuzhiyun+typedef struct vpbe_blink_option {
1236*4882a593Smuzhiyun+	BLINKING blinking;	/* 1: Enable blinking 0: Disable */
1237*4882a593Smuzhiyun+	unsigned int interval;	/* Valid only if blinking is 1 */
1238*4882a593Smuzhiyun+} vpbe_blink_option_t;
1239*4882a593Smuzhiyun+
1240*4882a593Smuzhiyun+/*  Structure for DCLK parameters */
1241*4882a593Smuzhiyun+typedef struct vpbe_dclk {
1242*4882a593Smuzhiyun+	unsigned char dclk_pattern_width;
1243*4882a593Smuzhiyun+	unsigned int dclk_pattern0;
1244*4882a593Smuzhiyun+	unsigned int dclk_pattern1;
1245*4882a593Smuzhiyun+	unsigned int dclk_pattern2;
1246*4882a593Smuzhiyun+	unsigned int dclk_pattern3;
1247*4882a593Smuzhiyun+} vpbe_dclk_t;
1248*4882a593Smuzhiyun+
1249*4882a593Smuzhiyun+/*  Structure for display format  */
1250*4882a593Smuzhiyun+typedef struct vpbe_display_format {
1251*4882a593Smuzhiyun+	unsigned char interface;	/* Output interface type */
1252*4882a593Smuzhiyun+	unsigned char mode;	/* output mode */
1253*4882a593Smuzhiyun+} vpbe_display_format_t;
1254*4882a593Smuzhiyun+
1255*4882a593Smuzhiyun+/*  Structure for background color  */
1256*4882a593Smuzhiyun+typedef struct vpbe_backg_color {
1257*4882a593Smuzhiyun+	unsigned char clut_select;	/* 2: RAM CLUT 1:ROM1 CLUT 0:ROM0 CLUT */
1258*4882a593Smuzhiyun+	unsigned char color_offset;	/* index of color */
1259*4882a593Smuzhiyun+} vpbe_backg_color_t;
1260*4882a593Smuzhiyun+
1261*4882a593Smuzhiyun+/*  Structure for Video window configurable parameters  */
1262*4882a593Smuzhiyun+typedef struct vpbe_video_config_params {
1263*4882a593Smuzhiyun+	CB_CR_ORDER cb_cr_order;	/*Cb/Cr order in input data for a pixel. */
1264*4882a593Smuzhiyun+	/*    0: cb cr  1:  cr cb */
1265*4882a593Smuzhiyun+	vpbe_win_expansion_t exp_info;	/* HZ/VT Expansion enable disable */
1266*4882a593Smuzhiyun+} vpbe_video_config_params_t;
1267*4882a593Smuzhiyun+
1268*4882a593Smuzhiyun+/*Union of structures giving the CLUT index for the 1, 2, 4 bit bitmap values.*/
1269*4882a593Smuzhiyun+typedef union vpbe_clut_idx {
1270*4882a593Smuzhiyun+	struct _for_4bit_bimap {
1271*4882a593Smuzhiyun+		unsigned char bitmap_val_0;
1272*4882a593Smuzhiyun+		unsigned char bitmap_val_1;
1273*4882a593Smuzhiyun+		unsigned char bitmap_val_2;
1274*4882a593Smuzhiyun+		unsigned char bitmap_val_3;
1275*4882a593Smuzhiyun+		unsigned char bitmap_val_4;
1276*4882a593Smuzhiyun+		unsigned char bitmap_val_5;
1277*4882a593Smuzhiyun+		unsigned char bitmap_val_6;
1278*4882a593Smuzhiyun+		unsigned char bitmap_val_7;
1279*4882a593Smuzhiyun+		unsigned char bitmap_val_8;
1280*4882a593Smuzhiyun+		unsigned char bitmap_val_9;
1281*4882a593Smuzhiyun+		unsigned char bitmap_val_10;
1282*4882a593Smuzhiyun+		unsigned char bitmap_val_11;
1283*4882a593Smuzhiyun+		unsigned char bitmap_val_12;
1284*4882a593Smuzhiyun+		unsigned char bitmap_val_13;
1285*4882a593Smuzhiyun+		unsigned char bitmap_val_14;
1286*4882a593Smuzhiyun+		unsigned char bitmap_val_15;
1287*4882a593Smuzhiyun+	} for_4bit_bimap;
1288*4882a593Smuzhiyun+	struct _for_2bit_bimap {
1289*4882a593Smuzhiyun+		unsigned char bitmap_val_0;
1290*4882a593Smuzhiyun+		unsigned char dummy0[4];
1291*4882a593Smuzhiyun+		unsigned char bitmap_val_1;
1292*4882a593Smuzhiyun+		unsigned char dummy1[4];
1293*4882a593Smuzhiyun+		unsigned char bitmap_val_2;
1294*4882a593Smuzhiyun+		unsigned char dummy2[4];
1295*4882a593Smuzhiyun+		unsigned char bitmap_val_3;
1296*4882a593Smuzhiyun+	} for_2bit_bimap;
1297*4882a593Smuzhiyun+	struct _for_1bit_bimap {
1298*4882a593Smuzhiyun+		unsigned char bitmap_val_0;
1299*4882a593Smuzhiyun+		unsigned char dummy0[14];
1300*4882a593Smuzhiyun+		unsigned char bitmap_val_1;
1301*4882a593Smuzhiyun+	} for_1bit_bimap;
1302*4882a593Smuzhiyun+} vpbe_clut_idx_t;
1303*4882a593Smuzhiyun+
1304*4882a593Smuzhiyun+/*  Structure for bitmap window configurable parameters */
1305*4882a593Smuzhiyun+typedef struct vpbe_bitmap_config_params {
1306*4882a593Smuzhiyun+	/* Only for bitmap width = 1,2,4 bits */
1307*4882a593Smuzhiyun+	vpbe_clut_idx_t clut_idx;
1308*4882a593Smuzhiyun+	/* Attenuation value for YUV o/p for bitmap window */
1309*4882a593Smuzhiyun+	unsigned char attenuation_enable;
1310*4882a593Smuzhiyun+	/* 0: ROM DM270, 1:ROM DM320, 2:RAM CLUT */
1311*4882a593Smuzhiyun+	unsigned char clut_select;
1312*4882a593Smuzhiyun+} vpbe_bitmap_config_params_t;
1313*4882a593Smuzhiyun+
1314*4882a593Smuzhiyun+/*  Unioun for video/OSD configuration parameters  */
1315*4882a593Smuzhiyun+typedef union vpbe_conf_params {
1316*4882a593Smuzhiyun+
1317*4882a593Smuzhiyun+	struct vpbe_video_params {
1318*4882a593Smuzhiyun+		CB_CR_ORDER cb_cr_order;
1319*4882a593Smuzhiyun+		/* HZ/VT Expansion enable disable */
1320*4882a593Smuzhiyun+		vpbe_win_expansion_t exp_info;
1321*4882a593Smuzhiyun+	} video_params;
1322*4882a593Smuzhiyun+
1323*4882a593Smuzhiyun+	struct vpbe_bitmap_params {
1324*4882a593Smuzhiyun+		/* Attenuation value for YUV o/p */
1325*4882a593Smuzhiyun+		ATTENUATION attenuation_enable;
1326*4882a593Smuzhiyun+		/* 0: ROM DM270, 1: ROM DM320, 2:RAM CLUT */
1327*4882a593Smuzhiyun+		unsigned char clut_select;
1328*4882a593Smuzhiyun+		/* Only for bitmap width = 1,2,4 bits */
1329*4882a593Smuzhiyun+		vpbe_clut_idx_t clut_idx;
1330*4882a593Smuzhiyun+		/* 0: OSD window is bitmap window */
1331*4882a593Smuzhiyun+		/* 1: OSD window is attribute window */
1332*4882a593Smuzhiyun+		ATTRIBUTE enable_attribute;
1333*4882a593Smuzhiyun+		/* To hold bps value.
1334*4882a593Smuzhiyun+		   Used to switch back from attribute to bitmap. */
1335*4882a593Smuzhiyun+		unsigned int stored_bits_per_pixel;
1336*4882a593Smuzhiyun+		/* Blending information */
1337*4882a593Smuzhiyun+		vpbe_bitmap_blend_params_t blend_info;
1338*4882a593Smuzhiyun+		/* OSD Blinking information */
1339*4882a593Smuzhiyun+		vpbe_blink_option_t blink_info;
1340*4882a593Smuzhiyun+	} bitmap_params;
1341*4882a593Smuzhiyun+
1342*4882a593Smuzhiyun+} vpbe_conf_params_t;
1343*4882a593Smuzhiyun+
1344*4882a593Smuzhiyun+typedef struct vpbe_video_params vpbe_video_params_t;
1345*4882a593Smuzhiyun+typedef struct vpbe_bitmap_params vpbe_bitmap_params_t;
1346*4882a593Smuzhiyun+
1347*4882a593Smuzhiyun+/* Structure to hold window position */
1348*4882a593Smuzhiyun+typedef struct vpbe_window_position {
1349*4882a593Smuzhiyun+	unsigned int xpos;	/* X position of the window */
1350*4882a593Smuzhiyun+	unsigned int ypos;	/* Y position of the window */
1351*4882a593Smuzhiyun+} vpbe_window_position_t;
1352*4882a593Smuzhiyun+
1353*4882a593Smuzhiyun+#ifdef __KERNEL__
1354*4882a593Smuzhiyun+/*  Structure for each window */
1355*4882a593Smuzhiyun+typedef struct vpbe_dm_win_info {
1356*4882a593Smuzhiyun+	struct fb_info info;
1357*4882a593Smuzhiyun+	vpbe_window_position_t win_pos;	/* X,Y position of window */
1358*4882a593Smuzhiyun+	/* Size of window is already there in var_info structure. */
1359*4882a593Smuzhiyun+
1360*4882a593Smuzhiyun+	dma_addr_t fb_base_phys;	/*framebuffer area */
1361*4882a593Smuzhiyun+	unsigned int fb_base;	/*window memory pointer */
1362*4882a593Smuzhiyun+	unsigned int fb_size;	/*memory size */
1363*4882a593Smuzhiyun+	unsigned int pseudo_palette[17];
1364*4882a593Smuzhiyun+	int alloc_fb_mem;
1365*4882a593Smuzhiyun+	/*flag to identify if framebuffer area is fixed or not */
1366*4882a593Smuzhiyun+	unsigned long sdram_address;
1367*4882a593Smuzhiyun+	struct vpbe_dm_info *dm;
1368*4882a593Smuzhiyun+	unsigned char window_enable;	/*Additions for all windows */
1369*4882a593Smuzhiyun+	zoom_params_t zoom;	/*Zooming parameters */
1370*4882a593Smuzhiyun+	unsigned char field_frame_select;	/*To select Field or frame */
1371*4882a593Smuzhiyun+	unsigned char numbufs;	/*Number of buffers valid 2 or 3 */
1372*4882a593Smuzhiyun+	vpbe_conf_params_t conf_params;
1373*4882a593Smuzhiyun+	/*window configuration parameter union pointer */
1374*4882a593Smuzhiyun+} vpbe_dm_win_info_t;
1375*4882a593Smuzhiyun+#endif				/*__KERNEL__*/
1376*4882a593Smuzhiyun+
1377*4882a593Smuzhiyun+/*
1378*4882a593Smuzhiyun+ *  Videmode structure for display interface and mode settings
1379*4882a593Smuzhiyun+ */
1380*4882a593Smuzhiyun+typedef struct vpbe_fb_videomode {
1381*4882a593Smuzhiyun+	unsigned char name[10];	/* Mode name ( NTSC , PAL) */
1382*4882a593Smuzhiyun+	unsigned int vmode;	/* FB_MODE_INTERLACED or FB_MODE_NON_INTERLACED */
1383*4882a593Smuzhiyun+	unsigned int xres;	/* X Resolution of the display */
1384*4882a593Smuzhiyun+	unsigned int yres;	/* Y Resolution of the display */
1385*4882a593Smuzhiyun+	unsigned int fps;	/* frames per second */
1386*4882a593Smuzhiyun+	/* Timing Parameters applicable for std = 0 only */
1387*4882a593Smuzhiyun+	unsigned int left_margin;
1388*4882a593Smuzhiyun+	unsigned int right_margin;
1389*4882a593Smuzhiyun+	unsigned int upper_margin;
1390*4882a593Smuzhiyun+	unsigned int lower_margin;
1391*4882a593Smuzhiyun+	unsigned int hsync_len;
1392*4882a593Smuzhiyun+	unsigned int vsync_len;
1393*4882a593Smuzhiyun+	unsigned int sync;	/* 0: hsync -ve/vsync -ve */
1394*4882a593Smuzhiyun+	/*1: hsync -ve/vsync +ve */
1395*4882a593Smuzhiyun+	/*2: hsync +ve/vsync -ve */
1396*4882a593Smuzhiyun+	/*3: hsync +ve/vsync +ve */
1397*4882a593Smuzhiyun+	unsigned int basepx;	/* Display x,y start position */
1398*4882a593Smuzhiyun+	unsigned int basepy;
1399*4882a593Smuzhiyun+/*  1= Mode s available in modelist 0=Mode is not available in modelist */
1400*4882a593Smuzhiyun+	unsigned int std;
1401*4882a593Smuzhiyun+} vpbe_fb_videomode_t;
1402*4882a593Smuzhiyun+
1403*4882a593Smuzhiyun+/* Structure to interface videomode to application*/
1404*4882a593Smuzhiyun+typedef struct vpbe_mode_info {
1405*4882a593Smuzhiyun+	vpbe_fb_videomode_t vid_mode;
1406*4882a593Smuzhiyun+	unsigned char interface;
1407*4882a593Smuzhiyun+	unsigned char mode_idx;
1408*4882a593Smuzhiyun+} vpbe_mode_info_t;
1409*4882a593Smuzhiyun+
1410*4882a593Smuzhiyun+#ifdef __KERNEL__
1411*4882a593Smuzhiyun+/*
1412*4882a593Smuzhiyun+ * Structure for the driver holding information of windows,
1413*4882a593Smuzhiyun+ *  memory base addresses etc.
1414*4882a593Smuzhiyun+ */
1415*4882a593Smuzhiyun+typedef struct vpbe_dm_info {
1416*4882a593Smuzhiyun+	vpbe_dm_win_info_t *osd0;
1417*4882a593Smuzhiyun+	vpbe_dm_win_info_t *osd1;
1418*4882a593Smuzhiyun+	vpbe_dm_win_info_t *vid0;
1419*4882a593Smuzhiyun+	vpbe_dm_win_info_t *vid1;
1420*4882a593Smuzhiyun+
1421*4882a593Smuzhiyun+/* to map the registers */
1422*4882a593Smuzhiyun+	dma_addr_t mmio_base_phys;
1423*4882a593Smuzhiyun+	unsigned int mmio_base;
1424*4882a593Smuzhiyun+	unsigned int mmio_size;
1425*4882a593Smuzhiyun+
1426*4882a593Smuzhiyun+	wait_queue_head_t vsync_wait;
1427*4882a593Smuzhiyun+	unsigned int vsync_cnt;
1428*4882a593Smuzhiyun+	int timeout;
1429*4882a593Smuzhiyun+
1430*4882a593Smuzhiyun+	/* this is the function that configures the output device (NTSC/PAL/LCD)
1431*4882a593Smuzhiyun+	 * for the required output format (composite/s-video/component/rgb)
1432*4882a593Smuzhiyun+	 */
1433*4882a593Smuzhiyun+	void (*output_device_config) (void);
1434*4882a593Smuzhiyun+
1435*4882a593Smuzhiyun+	struct device *dev;
1436*4882a593Smuzhiyun+
1437*4882a593Smuzhiyun+	vpbe_backg_color_t backg;	/* background color */
1438*4882a593Smuzhiyun+	vpbe_dclk_t dclk;	/*DCLK parameters */
1439*4882a593Smuzhiyun+	vpbe_display_format_t display;	/*Display interface and mode */
1440*4882a593Smuzhiyun+	vpbe_fb_videomode_t videomode;	/*Cuurent videomode */
1441*4882a593Smuzhiyun+	char ram_clut[256][3];	/*RAM CLUT array */
1442*4882a593Smuzhiyun+	struct fb_cursor cursor;	/* cursor config params from fb.h */
1443*4882a593Smuzhiyun+/*Flag that indicates whether any of the display is enabled or not*/
1444*4882a593Smuzhiyun+	int display_enable;
1445*4882a593Smuzhiyun+} vpbe_dm_info_t;
1446*4882a593Smuzhiyun+
1447*4882a593Smuzhiyun+/*
1448*4882a593Smuzhiyun+ * Functions Definitions for 'davincifb' module
1449*4882a593Smuzhiyun+ */
1450*4882a593Smuzhiyun+int vpbe_mem_alloc_window_buf(vpbe_dm_win_info_t *);
1451*4882a593Smuzhiyun+int vpbe_mem_release_window_buf(vpbe_dm_win_info_t *);
1452*4882a593Smuzhiyun+void init_display_function(vpbe_display_format_t *);
1453*4882a593Smuzhiyun+int vpbe_mem_alloc_struct(vpbe_dm_win_info_t **);
1454*4882a593Smuzhiyun+void set_vid0_default_conf(void);
1455*4882a593Smuzhiyun+void set_vid1_default_conf(void);
1456*4882a593Smuzhiyun+void set_osd0_default_conf(void);
1457*4882a593Smuzhiyun+void set_osd1_default_conf(void);
1458*4882a593Smuzhiyun+void set_cursor_default_conf(void);
1459*4882a593Smuzhiyun+void set_dm_default_conf(void);
1460*4882a593Smuzhiyun+void set_win_enable(char *, unsigned int);
1461*4882a593Smuzhiyun+int within_vid0_limits(u32, u32, u32, u32);
1462*4882a593Smuzhiyun+void vpbe_set_display_default(void);
1463*4882a593Smuzhiyun+#ifdef __KERNEL__
1464*4882a593Smuzhiyun+void set_win_position(char *, u32, u32, u32, u32);
1465*4882a593Smuzhiyun+void change_win_param(int);
1466*4882a593Smuzhiyun+void set_interlaced(char *, unsigned int);
1467*4882a593Smuzhiyun+#endif /* __KERNEL__ */
1468*4882a593Smuzhiyun+
1469*4882a593Smuzhiyun+/*
1470*4882a593Smuzhiyun+ *	Function definations for 'osd' module
1471*4882a593Smuzhiyun+ */
1472*4882a593Smuzhiyun+
1473*4882a593Smuzhiyun+int vpbe_enable_window(vpbe_dm_win_info_t *);
1474*4882a593Smuzhiyun+int vpbe_disable_window(vpbe_dm_win_info_t *);
1475*4882a593Smuzhiyun+int vpbe_vid_osd_select_field_frame(u8 *, u8);
1476*4882a593Smuzhiyun+int vpbe_bitmap_set_blend_factor(u8 *, vpbe_bitmap_blend_params_t *);
1477*4882a593Smuzhiyun+int vpbe_bitmap_set_ram_clut(void);
1478*4882a593Smuzhiyun+int vpbe_enable_disable_attribute_window(u32);
1479*4882a593Smuzhiyun+int vpbe_get_blinking(u8 *, vpbe_blink_option_t *);
1480*4882a593Smuzhiyun+int vpbe_set_blinking(u8 *, vpbe_blink_option_t *);
1481*4882a593Smuzhiyun+int vpbe_set_vid_params(u8 *, vpbe_video_config_params_t *);
1482*4882a593Smuzhiyun+int vpbe_get_vid_params(u8 *, vpbe_video_config_params_t *);
1483*4882a593Smuzhiyun+int vpbe_bitmap_get_params(u8 *, vpbe_bitmap_config_params_t *);
1484*4882a593Smuzhiyun+int vpbe_bitmap_set_params(u8 *, vpbe_bitmap_config_params_t *);
1485*4882a593Smuzhiyun+int vpbe_set_cursor_params(struct fb_cursor *);
1486*4882a593Smuzhiyun+int vpbe_set_vid_expansion(vpbe_win_expansion_t *);
1487*4882a593Smuzhiyun+int vpbe_set_dclk(vpbe_dclk_t *);
1488*4882a593Smuzhiyun+int vpbe_set_display_format(vpbe_display_format_t *);
1489*4882a593Smuzhiyun+int vpbe_set_backg_color(vpbe_backg_color_t *);
1490*4882a593Smuzhiyun+int vpbe_set_interface(u8);
1491*4882a593Smuzhiyun+int vpbe_query_mode(vpbe_mode_info_t *);
1492*4882a593Smuzhiyun+int vpbe_set_mode(struct vpbe_fb_videomode *);
1493*4882a593Smuzhiyun+int vpbe_set_venc_clk_source(u8);
1494*4882a593Smuzhiyun+void set_vid0_default_conf(void);
1495*4882a593Smuzhiyun+void set_osd0_default_conf(void);
1496*4882a593Smuzhiyun+void set_vid1_default_conf(void);
1497*4882a593Smuzhiyun+void set_osd1_default_conf(void);
1498*4882a593Smuzhiyun+void set_cursor_default_conf(void);
1499*4882a593Smuzhiyun+void set_dm_default_conf(void);
1500*4882a593Smuzhiyun+/*
1501*4882a593Smuzhiyun+ * Function definations for 'venc' module
1502*4882a593Smuzhiyun+ */
1503*4882a593Smuzhiyun+
1504*4882a593Smuzhiyun+void davincifb_ntsc_composite_config(void);
1505*4882a593Smuzhiyun+void davincifb_ntsc_svideo_config(void);
1506*4882a593Smuzhiyun+void davincifb_ntsc_component_config(void);
1507*4882a593Smuzhiyun+void davincifb_pal_composite_config(void);
1508*4882a593Smuzhiyun+void davincifb_pal_svideo_config(void);
1509*4882a593Smuzhiyun+void davincifb_pal_component_config(void);
1510*4882a593Smuzhiyun+
1511*4882a593Smuzhiyun+void vpbe_davincifb_ntsc_rgb_config(void);
1512*4882a593Smuzhiyun+void vpbe_davincifb_pal_rgb_config(void);
1513*4882a593Smuzhiyun+void vpbe_davincifb_525p_component_config(void);
1514*4882a593Smuzhiyun+void vpbe_davincifb_625p_component_config(void);
1515*4882a593Smuzhiyun+
1516*4882a593Smuzhiyun+void vpbe_enable_venc(int);
1517*4882a593Smuzhiyun+void vpbe_enable_dacs(int);
1518*4882a593Smuzhiyun+/*
1519*4882a593Smuzhiyun+ * Function definations for 'dlcd' module
1520*4882a593Smuzhiyun+ */
1521*4882a593Smuzhiyun+void vpbe_davincifb_480p_prgb_config(void);
1522*4882a593Smuzhiyun+void vpbe_davincifb_400p_prgb_config(void);
1523*4882a593Smuzhiyun+void vpbe_davincifb_350p_prgb_config(void);
1524*4882a593Smuzhiyun+void vpbe_set_display_timing(struct vpbe_fb_videomode *);
1525*4882a593Smuzhiyun+
1526*4882a593Smuzhiyun+void vpbe_enable_lcd(int);
1527*4882a593Smuzhiyun+/*
1528*4882a593Smuzhiyun+ * Following functions are not implemented
1529*4882a593Smuzhiyun+ */
1530*4882a593Smuzhiyun+void vpbe_davincifb_default_ycc16_config(void);
1531*4882a593Smuzhiyun+void vpbe_davincifb_default_ycc8_config(void);
1532*4882a593Smuzhiyun+void vpbe_davincifb_default_srgb_config(void);
1533*4882a593Smuzhiyun+void vpbe_davincifb_default_epson_config(void);
1534*4882a593Smuzhiyun+void vpbe_davincifb_default_casio_config(void);
1535*4882a593Smuzhiyun+void vpbe_davincifb_default_UDISP_config(void);
1536*4882a593Smuzhiyun+void vpbe_davincifb_default_STN_config(void);
1537*4882a593Smuzhiyun+#endif				/*__KERNEL__*/
1538*4882a593Smuzhiyun+
1539*4882a593Smuzhiyun+#endif				/* End of #ifndef DAVINCI_VPBE_H */
1540*4882a593Smuzhiyundiff -puNr -Naur directfb-1.6.3-orig/gfxdrivers/davinci/davinci_gfxdriver.h directfb-1.6.3/gfxdrivers/davinci/davinci_gfxdriver.h
1541*4882a593Smuzhiyun--- directfb-1.6.3-orig/gfxdrivers/davinci/davinci_gfxdriver.h	1970-01-01 01:00:00.000000000 +0100
1542*4882a593Smuzhiyun+++ directfb-1.6.3/gfxdrivers/davinci/davinci_gfxdriver.h	2013-04-07 21:33:19.560662133 +0200
1543*4882a593Smuzhiyun@@ -0,0 +1,169 @@
1544*4882a593Smuzhiyun+/*
1545*4882a593Smuzhiyun+   TI Davinci driver - Graphics Driver
1546*4882a593Smuzhiyun+
1547*4882a593Smuzhiyun+   (c) Copyright 2007  Telio AG
1548*4882a593Smuzhiyun+
1549*4882a593Smuzhiyun+   Written by Denis Oliver Kropp <dok@directfb.org>
1550*4882a593Smuzhiyun+
1551*4882a593Smuzhiyun+   Code is derived from VMWare driver.
1552*4882a593Smuzhiyun+
1553*4882a593Smuzhiyun+   (c) Copyright 2001-2009  The world wide DirectFB Open Source Community (directfb.org)
1554*4882a593Smuzhiyun+   (c) Copyright 2000-2004  Convergence (integrated media) GmbH
1555*4882a593Smuzhiyun+
1556*4882a593Smuzhiyun+   All rights reserved.
1557*4882a593Smuzhiyun+
1558*4882a593Smuzhiyun+   This library is free software; you can redistribute it and/or
1559*4882a593Smuzhiyun+   modify it under the terms of the GNU Lesser General Public
1560*4882a593Smuzhiyun+   License as published by the Free Software Foundation; either
1561*4882a593Smuzhiyun+   version 2 of the License, or (at your option) any later version.
1562*4882a593Smuzhiyun+
1563*4882a593Smuzhiyun+   This library is distributed in the hope that it will be useful,
1564*4882a593Smuzhiyun+   but WITHOUT ANY WARRANTY; without even the implied warranty of
1565*4882a593Smuzhiyun+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1566*4882a593Smuzhiyun+   Lesser General Public License for more details.
1567*4882a593Smuzhiyun+
1568*4882a593Smuzhiyun+   You should have received a copy of the GNU Lesser General Public
1569*4882a593Smuzhiyun+   License along with this library; if not, write to the
1570*4882a593Smuzhiyun+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
1571*4882a593Smuzhiyun+   Boston, MA 02111-1307, USA.
1572*4882a593Smuzhiyun+*/
1573*4882a593Smuzhiyun+
1574*4882a593Smuzhiyun+#ifndef __DAVINCI_GFXDRIVER_H__
1575*4882a593Smuzhiyun+#define __DAVINCI_GFXDRIVER_H__
1576*4882a593Smuzhiyun+
1577*4882a593Smuzhiyun+#include <sys/ioctl.h>
1578*4882a593Smuzhiyun+#include <davincifb.h>
1579*4882a593Smuzhiyun+
1580*4882a593Smuzhiyun+#include <core/surface_buffer.h>
1581*4882a593Smuzhiyun+
1582*4882a593Smuzhiyun+#include "davincifb.h"
1583*4882a593Smuzhiyun+
1584*4882a593Smuzhiyun+#include "davinci_c64x.h"
1585*4882a593Smuzhiyun+
1586*4882a593Smuzhiyun+
1587*4882a593Smuzhiyun+typedef struct {
1588*4882a593Smuzhiyun+     /* validation flags */
1589*4882a593Smuzhiyun+     int                       v_flags;
1590*4882a593Smuzhiyun+
1591*4882a593Smuzhiyun+     /* cached/computed values */
1592*4882a593Smuzhiyun+     void                     *dst_addr;
1593*4882a593Smuzhiyun+     unsigned long             dst_phys;
1594*4882a593Smuzhiyun+     unsigned int              dst_size;
1595*4882a593Smuzhiyun+     unsigned long             dst_pitch;
1596*4882a593Smuzhiyun+     DFBSurfacePixelFormat     dst_format;
1597*4882a593Smuzhiyun+     unsigned long             dst_bpp;
1598*4882a593Smuzhiyun+
1599*4882a593Smuzhiyun+     void                     *src_addr;
1600*4882a593Smuzhiyun+     unsigned long             src_phys;
1601*4882a593Smuzhiyun+     unsigned long             src_pitch;
1602*4882a593Smuzhiyun+     DFBSurfacePixelFormat     src_format;
1603*4882a593Smuzhiyun+     unsigned long             src_bpp;
1604*4882a593Smuzhiyun+
1605*4882a593Smuzhiyun+     unsigned long             source_mult;
1606*4882a593Smuzhiyun+
1607*4882a593Smuzhiyun+     unsigned long             fillcolor;
1608*4882a593Smuzhiyun+
1609*4882a593Smuzhiyun+     int                       blit_blend_sub_function;
1610*4882a593Smuzhiyun+     int                       draw_blend_sub_function;
1611*4882a593Smuzhiyun+
1612*4882a593Smuzhiyun+     DFBColor                  color;
1613*4882a593Smuzhiyun+     unsigned long             color_argb;
1614*4882a593Smuzhiyun+     unsigned long             colorkey;
1615*4882a593Smuzhiyun+
1616*4882a593Smuzhiyun+     DFBSurfaceBlittingFlags   blitting_flags;
1617*4882a593Smuzhiyun+
1618*4882a593Smuzhiyun+     DFBRegion                 clip;
1619*4882a593Smuzhiyun+
1620*4882a593Smuzhiyun+     /** Add shared data here... **/
1621*4882a593Smuzhiyun+     struct fb_fix_screeninfo  fix[4];
1622*4882a593Smuzhiyun+
1623*4882a593Smuzhiyun+     CoreSurfacePool          *osd_pool;
1624*4882a593Smuzhiyun+     CoreSurfacePool          *video_pool;
1625*4882a593Smuzhiyun+
1626*4882a593Smuzhiyun+     bool                      synced;
1627*4882a593Smuzhiyun+} DavinciDeviceData;
1628*4882a593Smuzhiyun+
1629*4882a593Smuzhiyun+
1630*4882a593Smuzhiyun+typedef struct {
1631*4882a593Smuzhiyun+     int                       num;
1632*4882a593Smuzhiyun+     int                       fd;
1633*4882a593Smuzhiyun+     void                     *mem;
1634*4882a593Smuzhiyun+     int                       size;
1635*4882a593Smuzhiyun+} DavinciFB;
1636*4882a593Smuzhiyun+
1637*4882a593Smuzhiyun+typedef struct {
1638*4882a593Smuzhiyun+     DavinciDeviceData        *ddev;
1639*4882a593Smuzhiyun+
1640*4882a593Smuzhiyun+     CoreDFB                  *core;
1641*4882a593Smuzhiyun+
1642*4882a593Smuzhiyun+     CoreScreen               *screen;
1643*4882a593Smuzhiyun+     CoreLayer                *osd;
1644*4882a593Smuzhiyun+     CoreLayer                *video;
1645*4882a593Smuzhiyun+
1646*4882a593Smuzhiyun+     DavinciFB                 fb[4];
1647*4882a593Smuzhiyun+
1648*4882a593Smuzhiyun+     DavinciC64x               c64x;
1649*4882a593Smuzhiyun+     bool                      c64x_present;
1650*4882a593Smuzhiyun+
1651*4882a593Smuzhiyun+     DavinciC64xTasks          tasks;
1652*4882a593Smuzhiyun+} DavinciDriverData;
1653*4882a593Smuzhiyun+
1654*4882a593Smuzhiyun+
1655*4882a593Smuzhiyun+static inline DFBResult
1656*4882a593Smuzhiyun+davincifb_pan_display( const DavinciFB             *fb,
1657*4882a593Smuzhiyun+                       struct fb_var_screeninfo    *var,
1658*4882a593Smuzhiyun+                       const CoreSurfaceBufferLock *lock,
1659*4882a593Smuzhiyun+                       DFBSurfaceFlipFlags          flags,
1660*4882a593Smuzhiyun+                       int                          x,
1661*4882a593Smuzhiyun+                       int                          y )
1662*4882a593Smuzhiyun+{
1663*4882a593Smuzhiyun+     int ret;
1664*4882a593Smuzhiyun+
1665*4882a593Smuzhiyun+     if (lock) {
1666*4882a593Smuzhiyun+#ifdef FBIO_SET_START
1667*4882a593Smuzhiyun+          CoreSurfaceBuffer   *buffer = lock->buffer;
1668*4882a593Smuzhiyun+          struct fb_set_start  set_start;
1669*4882a593Smuzhiyun+
1670*4882a593Smuzhiyun+          /* physical mode */
1671*4882a593Smuzhiyun+          set_start.offset   = -1;
1672*4882a593Smuzhiyun+          set_start.sync     = (flags & DSFLIP_ONSYNC) ? 1 : 0;
1673*4882a593Smuzhiyun+
1674*4882a593Smuzhiyun+          /* life's so easy */
1675*4882a593Smuzhiyun+          set_start.physical = lock->phys + DFB_BYTES_PER_LINE( buffer->format, x ) + y * lock->pitch;
1676*4882a593Smuzhiyun+
1677*4882a593Smuzhiyun+          ret = ioctl( fb->fd, FBIO_SET_START, &set_start );
1678*4882a593Smuzhiyun+          if (ret < 0)
1679*4882a593Smuzhiyun+               D_DEBUG( "FBIO_SET_START (0x%08lx, sync %llu) failed!\n",
1680*4882a593Smuzhiyun+                         set_start.physical, set_start.sync );
1681*4882a593Smuzhiyun+
1682*4882a593Smuzhiyun+          if (ret == 0) {
1683*4882a593Smuzhiyun+               if (flags & DSFLIP_WAIT)
1684*4882a593Smuzhiyun+                    ioctl( fb->fd, FBIO_WAITFORVSYNC );
1685*4882a593Smuzhiyun+
1686*4882a593Smuzhiyun+               return DFB_OK;
1687*4882a593Smuzhiyun+          }
1688*4882a593Smuzhiyun+
1689*4882a593Smuzhiyun+          /* fallback */
1690*4882a593Smuzhiyun+#endif
1691*4882a593Smuzhiyun+          var->xoffset = x;                  /* poor version */
1692*4882a593Smuzhiyun+          var->yoffset = y + lock->offset / lock->pitch;
1693*4882a593Smuzhiyun+     }
1694*4882a593Smuzhiyun+     else {
1695*4882a593Smuzhiyun+          var->xoffset = x;
1696*4882a593Smuzhiyun+          var->yoffset = y;
1697*4882a593Smuzhiyun+     }
1698*4882a593Smuzhiyun+
1699*4882a593Smuzhiyun+     var->activate = /*(flags & DSFLIP_ONSYNC) ? FB_ACTIVATE_VBL :*/ FB_ACTIVATE_NOW;
1700*4882a593Smuzhiyun+
1701*4882a593Smuzhiyun+     ret = ioctl( fb->fd, FBIOPAN_DISPLAY, var );
1702*4882a593Smuzhiyun+     if (ret)
1703*4882a593Smuzhiyun+          D_PERROR( "Davinci/FB: FBIOPAN_DISPLAY (fb%d - %d,%d) failed!\n",
1704*4882a593Smuzhiyun+                    fb->num, var->xoffset, var->yoffset );
1705*4882a593Smuzhiyun+
1706*4882a593Smuzhiyun+     if (flags & DSFLIP_WAIT)
1707*4882a593Smuzhiyun+          ioctl( fb->fd, FBIO_WAITFORVSYNC );
1708*4882a593Smuzhiyun+
1709*4882a593Smuzhiyun+     return DFB_OK;
1710*4882a593Smuzhiyun+}
1711*4882a593Smuzhiyun+
1712*4882a593Smuzhiyun+#endif
1713*4882a593Smuzhiyundiff -puNr -Naur directfb-1.6.3-orig/tests/voodoo/voodoo_test.h directfb-1.6.3/tests/voodoo/voodoo_test.h
1714*4882a593Smuzhiyun--- directfb-1.6.3-orig/tests/voodoo/voodoo_test.h	1970-01-01 01:00:00.000000000 +0100
1715*4882a593Smuzhiyun+++ directfb-1.6.3/tests/voodoo/voodoo_test.h	2013-04-07 21:33:31.824408024 +0200
1716*4882a593Smuzhiyun@@ -0,0 +1,10 @@
1717*4882a593Smuzhiyun+#ifndef __VOODOO_TEST_H__
1718*4882a593Smuzhiyun+#define __VOODOO_TEST_H__
1719*4882a593Smuzhiyun+
1720*4882a593Smuzhiyun+typedef enum {
1721*4882a593Smuzhiyun+     VOODOO_TEST_INCREASE,
1722*4882a593Smuzhiyun+     VOODOO_TEST_QUERY
1723*4882a593Smuzhiyun+} VoodooTestCall;
1724*4882a593Smuzhiyun+
1725*4882a593Smuzhiyun+#endif
1726*4882a593Smuzhiyun+
1727