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