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