-From: Sebastian Ramacher <sramacher@debian.org>
-Date: Thu, 16 Mar 2017 20:53:09 +0100
-Subject: Add missing files from upstream
-
-Closes: #598976
----
- gfxdrivers/davinci/davinci_c64x.h | 935 +++++++++++++++++++++++++++++++++
- gfxdrivers/davinci/davinci_gfxdriver.h | 169 ++++++
- gfxdrivers/davinci/davincifb.h | 581 ++++++++++++++++++++
- 3 files changed, 1685 insertions(+)
- create mode 100644 gfxdrivers/davinci/davinci_c64x.h
- create mode 100644 gfxdrivers/davinci/davinci_gfxdriver.h
- create mode 100644 gfxdrivers/davinci/davincifb.h
-
-diff --git a/gfxdrivers/davinci/davinci_c64x.h b/gfxdrivers/davinci/davinci_c64x.h
-new file mode 100644
-index 0000000..682da22
---- /dev/null
-+++ b/gfxdrivers/davinci/davinci_c64x.h
-@@ -0,0 +1,935 @@
-+/*
-+ TI Davinci driver - C64X+ DSP Library
-+
-+ (c) Copyright 2008 directfb.org
-+ (c) Copyright 2007 Telio AG
-+
-+ Written by Denis Oliver Kropp <dok@directfb.org> and
-+ Olaf Dreesen <olaf@directfb.org>.
-+
-+ All rights reserved.
-+
-+ This library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU General Public License
-+ version 2 as published by the Free Software Foundation.
-+
-+ This library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public
-+ License along with this library; if not, write to the
-+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ Boston, MA 02111-1307, USA.
-+*/
-+
-+#ifndef __DAVINCI_C64X_H__
-+#define __DAVINCI_C64X_H__
-+
-+#include <unistd.h>
-+
-+#include <directfb.h>
-+
-+#include <direct/messages.h>
-+#include <direct/trace.h>
-+
-+#include <linux/c64x.h>
-+
-+#define mb() __asm__ __volatile__ ("" : : : "memory")
-+
-+/**********************************************************************************************************************/
-+
-+typedef struct {
-+ int magic;
-+
-+ int fd;
-+ c64xTaskControl *ctl;
-+ void *mem;
-+
-+ c64xTask *QueueL;
-+} DavinciC64x;
-+
-+typedef struct {
-+ int magic;
-+ unsigned int max_tasks;
-+ unsigned int num_tasks;
-+ c64xTask *tasks;
-+} DavinciC64xTasks;
-+
-+typedef enum {
-+ C64X_TEF_NONE = 0x0000,
-+ C64X_TEF_RESET = 0x0001
-+} DavinciC64xEmitFlags;
-+
-+/**********************************************************************************************************************/
-+
-+DFBResult davinci_c64x_open ( DavinciC64x *c64x );
-+
-+DFBResult davinci_c64x_close ( DavinciC64x *c64x );
-+
-+DFBResult davinci_c64x_wait_low( DavinciC64x *c64x );
-+
-+/**********************************************************************************************************************/
-+
-+DFBResult davinci_c64x_tasks_init ( DavinciC64xTasks *tasks,
-+ unsigned int size );
-+
-+DFBResult davinci_c64x_tasks_destroy( DavinciC64xTasks *tasks );
-+
-+/**********************************************************************************************************************/
-+
-+DFBResult davinci_c64x_emit_tasks( DavinciC64x *c64x,
-+ DavinciC64xTasks *tasks,
-+ DavinciC64xEmitFlags flags );
-+
-+/**********************************************************************************************************************/
-+
-+static const char *state_names[] = { "DONE", "ERROR", "TODO", "RUNNING" };
-+
-+static inline c64xTask *
-+c64x_get_task( DavinciC64x *c64x )
-+{
-+ c64xTaskControl *ctl = c64x->ctl;
-+ uint32_t idx = ctl->QL_arm;
-+ uint32_t next = (idx + 1) & C64X_QUEUE_MASK;
-+ c64xTask *task = &c64x->QueueL[idx];
-+ int loops = 0;
-+ uint32_t idle = 0;
-+
-+ /* Wait for the entry (and next) to be processed by the DSP (rare case). */
-+ while (task->c64x_flags & C64X_FLAG_TODO || ctl->QL_dsp == next) {
-+ if (loops > 666 || (idle && ctl->idlecounter - idle > 666)) {
-+ c64xTask *dsp_task = &c64x->QueueL[ctl->QL_dsp];
-+
-+ D_PERROR( "Davinci/C64X+: Blocked! [DSP %d / %d (%s), ARM %d / %d (%s)]\n",
-+ ctl->QL_dsp,
-+ (dsp_task->c64x_function >> 2) & 0x3fff,
-+ state_names[dsp_task->c64x_function & 3],
-+ ctl->QL_arm,
-+ (task->c64x_function >> 2) & 0x3fff,
-+ state_names[task->c64x_function & 3] );
-+
-+ break;
-+ }
-+
-+ idle = ctl->idlecounter;
-+
-+ /* Queue is full, waiting 10-20ms should not be too bad. */
-+ if (loops++ > 10)
-+ usleep( 5000 );
-+ }
-+
-+ return task;
-+}
-+
-+static inline void
-+c64x_submit_task( DavinciC64x *c64x, c64xTask *task )
-+{
-+ c64xTaskControl *ctl = c64x->ctl;
-+ uint32_t idx = ctl->QL_arm;
-+ uint32_t next = (idx + 1) & C64X_QUEUE_MASK;
-+
-+ mb();
-+
-+ ctl->QL_arm = next;
-+
-+ mb();
-+}
-+
-+/**********************************************************************************************************************/
-+
-+static inline void
-+davinci_c64x_wb_inv_range( DavinciC64x *c64x,
-+ unsigned long start,
-+ u32 length,
-+ u32 func )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = start;
-+ task->c64x_arg[1] = length;
-+ task->c64x_arg[2] = func;
-+
-+ task->c64x_function = C64X_WB_INV_RANGE | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_write_back_all( DavinciC64x *c64x )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_function = C64X_WRITE_BACK_ALL | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+/**********************************************************************************************************************/
-+
-+static inline void
-+davinci_c64x_load_block__L( DavinciC64xTasks *tasks,
-+ unsigned long words,
-+ u32 num,
-+ u32 flags )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = words;
-+ task->c64x_arg[1] = num;
-+ task->c64x_arg[2] = flags;
-+
-+ task->c64x_function = C64X_LOAD_BLOCK | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_load_block( DavinciC64x *c64x,
-+ unsigned long words,
-+ u32 num,
-+ u32 flags )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = words;
-+ task->c64x_arg[1] = num;
-+ task->c64x_arg[2] = flags;
-+
-+ task->c64x_function = C64X_LOAD_BLOCK | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_fetch_uyvy( DavinciC64x *c64x,
-+ unsigned long dest,
-+ unsigned long source,
-+ u32 pitch,
-+ u32 height,
-+ u32 flags )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = source;
-+ task->c64x_arg[2] = pitch;
-+ task->c64x_arg[3] = height;
-+ task->c64x_arg[4] = flags;
-+
-+ task->c64x_function = C64X_FETCH_UYVY | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_mc( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long source0,
-+ unsigned long source1,
-+ u32 spitch,
-+ u32 height,
-+ int func )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = dpitch;
-+ task->c64x_arg[2] = source0;
-+ task->c64x_arg[3] = source1;
-+ task->c64x_arg[4] = spitch;
-+ task->c64x_arg[5] = height;
-+
-+ task->c64x_function = func | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_put_idct_uyvy_16x16__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 flags )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = flags;
-+
-+ task->c64x_function = C64X_PUT_IDCT_UYVY_16x16 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_put_idct_uyvy_16x16( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 flags )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = flags;
-+
-+ task->c64x_function = C64X_PUT_IDCT_UYVY_16x16 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_put_mc_uyvy_16x16__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 flags )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = flags;
-+
-+ task->c64x_function = C64X_PUT_MC_UYVY_16x16 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_put_mc_uyvy_16x16( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 flags )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = flags;
-+
-+ task->c64x_function = C64X_PUT_MC_UYVY_16x16 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_put_sum_uyvy_16x16__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 flags )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = flags;
-+
-+ task->c64x_function = C64X_PUT_SUM_UYVY_16x16 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_put_sum_uyvy_16x16( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 flags )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = flags;
-+
-+ task->c64x_function = C64X_PUT_SUM_UYVY_16x16 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_dva_begin_frame__L( DavinciC64xTasks *tasks,
-+ u32 pitch,
-+ unsigned long current,
-+ unsigned long past,
-+ unsigned long future,
-+ u32 flags )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = pitch;
-+ task->c64x_arg[1] = current;
-+ task->c64x_arg[2] = past;
-+ task->c64x_arg[3] = future;
-+ task->c64x_arg[4] = flags;
-+
-+ task->c64x_function = C64X_DVA_BEGIN_FRAME | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_dva_begin_frame( DavinciC64x *c64x,
-+ u32 pitch,
-+ unsigned long current,
-+ unsigned long past,
-+ unsigned long future,
-+ u32 flags )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = pitch;
-+ task->c64x_arg[1] = current;
-+ task->c64x_arg[2] = past;
-+ task->c64x_arg[3] = future;
-+ task->c64x_arg[4] = flags;
-+
-+ task->c64x_function = C64X_DVA_BEGIN_FRAME | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_dva_motion_block__L( DavinciC64xTasks *tasks,
-+ unsigned long macroblock )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = macroblock;
-+
-+ task->c64x_function = C64X_DVA_MOTION_BLOCK | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_dva_motion_block( DavinciC64x *c64x,
-+ unsigned long macroblock )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = macroblock;
-+
-+ task->c64x_function = C64X_DVA_MOTION_BLOCK | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+/**********************************************************************************************************************/
-+
-+static inline void
-+davinci_c64x_dva_idct( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 pitch,
-+ unsigned long source )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = source;
-+
-+ task->c64x_function = C64X_DVA_IDCT | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+/**********************************************************************************************************************/
-+
-+static inline void
-+davinci_c64x_put_uyvy_16x16( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 pitch,
-+ unsigned long source,
-+ u32 flags )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = source;
-+ task->c64x_arg[3] = flags;
-+
-+ task->c64x_function = C64X_PUT_UYVY_16x16 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_dither_argb__L( DavinciC64xTasks *tasks,
-+ unsigned long dst_rgb,
-+ unsigned long dst_alpha,
-+ u32 dst_pitch,
-+ unsigned long source,
-+ u32 src_pitch,
-+ u32 width,
-+ u32 height )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dst_rgb;
-+ task->c64x_arg[1] = dst_alpha;
-+ task->c64x_arg[2] = dst_pitch;
-+ task->c64x_arg[3] = source;
-+ task->c64x_arg[4] = src_pitch;
-+ task->c64x_arg[5] = width;
-+ task->c64x_arg[6] = height;
-+
-+ task->c64x_function = C64X_DITHER_ARGB | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_dither_argb( DavinciC64x *c64x,
-+ unsigned long dst_rgb,
-+ unsigned long dst_alpha,
-+ u32 dst_pitch,
-+ unsigned long source,
-+ u32 src_pitch,
-+ u32 width,
-+ u32 height )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dst_rgb;
-+ task->c64x_arg[1] = dst_alpha;
-+ task->c64x_arg[2] = dst_pitch;
-+ task->c64x_arg[3] = source;
-+ task->c64x_arg[4] = src_pitch;
-+ task->c64x_arg[5] = width;
-+ task->c64x_arg[6] = height;
-+
-+ task->c64x_function = C64X_DITHER_ARGB | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_fill_16__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 width,
-+ u32 height,
-+ u32 value )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = width;
-+ task->c64x_arg[3] = height;
-+ task->c64x_arg[4] = value;
-+
-+ task->c64x_function = C64X_FILL_16 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_fill_16( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 width,
-+ u32 height,
-+ u32 value )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = width;
-+ task->c64x_arg[3] = height;
-+ task->c64x_arg[4] = value;
-+
-+ task->c64x_function = C64X_FILL_16 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_fill_32__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 width,
-+ u32 height,
-+ u32 value )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = width;
-+ task->c64x_arg[3] = height;
-+ task->c64x_arg[4] = value;
-+
-+ task->c64x_function = C64X_FILL_32 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_fill_32( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 pitch,
-+ u32 width,
-+ u32 height,
-+ u32 value )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = pitch;
-+ task->c64x_arg[2] = width;
-+ task->c64x_arg[3] = height;
-+ task->c64x_arg[4] = value;
-+
-+ task->c64x_function = C64X_FILL_32 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_blit_16__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = dpitch;
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = spitch;
-+ task->c64x_arg[4] = width;
-+ task->c64x_arg[5] = height;
-+
-+ task->c64x_function = C64X_COPY_16 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_blit_16( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = dpitch;
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = spitch;
-+ task->c64x_arg[4] = width;
-+ task->c64x_arg[5] = height;
-+
-+ task->c64x_function = C64X_COPY_16 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_blit_32__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = dpitch;
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = spitch;
-+ task->c64x_arg[4] = width;
-+ task->c64x_arg[5] = height;
-+
-+ task->c64x_function = C64X_COPY_32 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_blit_32( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = dpitch;
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = spitch;
-+ task->c64x_arg[4] = width;
-+ task->c64x_arg[5] = height;
-+
-+ task->c64x_function = C64X_COPY_32 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_stretch_32__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 dw,
-+ u32 dh,
-+ u32 sw,
-+ u32 sh,
-+ const DFBRegion *clip )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = src;
-+ task->c64x_arg[2] = dpitch | (spitch << 16);
-+ task->c64x_arg[3] = dh | (dw << 16);
-+ task->c64x_arg[4] = sh | (sw << 16);
-+ task->c64x_arg[5] = clip->x2 | (clip->y2 << 16);
-+ task->c64x_arg[6] = clip->x1 | (clip->y1 << 16);
-+
-+ if (sw > dw && sh > dh)
-+ task->c64x_function = C64X_STRETCH_32_down | C64X_FLAG_TODO;
-+ else
-+ task->c64x_function = C64X_STRETCH_32_up | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_stretch_32( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 dw,
-+ u32 dh,
-+ u32 sw,
-+ u32 sh,
-+ const DFBRegion *clip )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = src;
-+ task->c64x_arg[2] = dpitch | (spitch << 16);
-+ task->c64x_arg[3] = dh | (dw << 16);
-+ task->c64x_arg[4] = sh | (sw << 16);
-+ task->c64x_arg[5] = clip->x2 | (clip->y2 << 16);
-+ task->c64x_arg[6] = clip->x1 | (clip->y1 << 16);
-+
-+ if (sw > dw && sh > dh)
-+ task->c64x_function = C64X_STRETCH_32_down | C64X_FLAG_TODO;
-+ else
-+ task->c64x_function = C64X_STRETCH_32_up | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_blit_blend_32__L( DavinciC64xTasks *tasks,
-+ u32 sub_func,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height,
-+ u32 argb,
-+ u8 alpha )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = dpitch;
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = spitch;
-+ task->c64x_arg[4] = width | (height << 16);
-+ task->c64x_arg[5] = argb;
-+ task->c64x_arg[6] = alpha;
-+
-+ task->c64x_function = (sub_func << 16) | C64X_BLEND_32 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_blit_blend_32( DavinciC64x *c64x,
-+ u32 sub_func,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height,
-+ u32 argb,
-+ u8 alpha )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = dpitch;
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = spitch;
-+ task->c64x_arg[4] = width | (height << 16);
-+ task->c64x_arg[5] = argb;
-+ task->c64x_arg[6] = alpha;
-+
-+ task->c64x_function = (sub_func << 16) | C64X_BLEND_32 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_blit_keyed_16__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height,
-+ u32 key,
-+ u32 mask )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff);
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = width;
-+ task->c64x_arg[4] = height;
-+ task->c64x_arg[5] = key;
-+ task->c64x_arg[6] = mask;
-+
-+ task->c64x_function = C64X_COPY_KEYED_16 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_blit_keyed_16( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height,
-+ u32 key,
-+ u32 mask )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff);
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = width;
-+ task->c64x_arg[4] = height;
-+ task->c64x_arg[5] = key;
-+ task->c64x_arg[6] = mask;
-+
-+ task->c64x_function = C64X_COPY_KEYED_16 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+static inline void
-+davinci_c64x_blit_keyed_32__L( DavinciC64xTasks *tasks,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height,
-+ u32 key,
-+ u32 mask )
-+{
-+ c64xTask *task = &tasks->tasks[tasks->num_tasks];
-+
-+ D_ASSERT( tasks->num_tasks < tasks->max_tasks );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff);
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = width;
-+ task->c64x_arg[4] = height;
-+ task->c64x_arg[5] = key;
-+ task->c64x_arg[6] = mask;
-+
-+ task->c64x_function = C64X_COPY_KEYED_32 | C64X_FLAG_TODO;
-+
-+ tasks->num_tasks++;
-+}
-+
-+static inline void
-+davinci_c64x_blit_keyed_32( DavinciC64x *c64x,
-+ unsigned long dest,
-+ u32 dpitch,
-+ unsigned long src,
-+ u32 spitch,
-+ u32 width,
-+ u32 height,
-+ u32 key,
-+ u32 mask )
-+{
-+ c64xTask *task = c64x_get_task( c64x );
-+
-+ task->c64x_arg[0] = dest;
-+ task->c64x_arg[1] = (dpitch << 16) | (spitch & 0xffff);
-+ task->c64x_arg[2] = src;
-+ task->c64x_arg[3] = width;
-+ task->c64x_arg[4] = height;
-+ task->c64x_arg[5] = key;
-+ task->c64x_arg[6] = mask;
-+
-+ task->c64x_function = C64X_COPY_KEYED_32 | C64X_FLAG_TODO;
-+
-+ c64x_submit_task( c64x, task );
-+}
-+
-+#endif
-+
-diff --git a/gfxdrivers/davinci/davinci_gfxdriver.h b/gfxdrivers/davinci/davinci_gfxdriver.h
-new file mode 100644
-index 0000000..4ca79b3
---- /dev/null
-+++ b/gfxdrivers/davinci/davinci_gfxdriver.h
-@@ -0,0 +1,169 @@
-+/*
-+ TI Davinci driver - Graphics Driver
-+
-+ (c) Copyright 2007 Telio AG
-+
-+ Written by Denis Oliver Kropp <dok@directfb.org>
-+
-+ Code is derived from VMWare driver.
-+
-+ (c) Copyright 2001-2009 The world wide DirectFB Open Source Community (directfb.org)
-+ (c) Copyright 2000-2004 Convergence (integrated media) GmbH
-+
-+ All rights reserved.
-+
-+ This library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2 of the License, or (at your option) any later version.
-+
-+ This library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with this library; if not, write to the
-+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+ Boston, MA 02111-1307, USA.
-+*/
-+
-+#ifndef __DAVINCI_GFXDRIVER_H__
-+#define __DAVINCI_GFXDRIVER_H__
-+
-+#include <sys/ioctl.h>
-+#include <davincifb.h>
-+
-+#include <core/surface_buffer.h>
-+
-+#include "davincifb.h"
-+
-+#include "davinci_c64x.h"
-+
-+
-+typedef struct {
-+ /* validation flags */
-+ int v_flags;
-+
-+ /* cached/computed values */
-+ void *dst_addr;
-+ unsigned long dst_phys;
-+ unsigned int dst_size;
-+ unsigned long dst_pitch;
-+ DFBSurfacePixelFormat dst_format;
-+ unsigned long dst_bpp;
-+
-+ void *src_addr;
-+ unsigned long src_phys;
-+ unsigned long src_pitch;
-+ DFBSurfacePixelFormat src_format;
-+ unsigned long src_bpp;
-+
-+ unsigned long source_mult;
-+
-+ unsigned long fillcolor;
-+
-+ int blit_blend_sub_function;
-+ int draw_blend_sub_function;
-+
-+ DFBColor color;
-+ unsigned long color_argb;
-+ unsigned long colorkey;
-+
-+ DFBSurfaceBlittingFlags blitting_flags;
-+
-+ DFBRegion clip;
-+
-+ /** Add shared data here... **/
-+ struct fb_fix_screeninfo fix[4];
-+
-+ CoreSurfacePool *osd_pool;
-+ CoreSurfacePool *video_pool;
-+
-+ bool synced;
-+} DavinciDeviceData;
-+
-+
-+typedef struct {
-+ int num;
-+ int fd;
-+ void *mem;
-+ int size;
-+} DavinciFB;
-+
-+typedef struct {
-+ DavinciDeviceData *ddev;
-+
-+ CoreDFB *core;
-+
-+ CoreScreen *screen;
-+ CoreLayer *osd;
-+ CoreLayer *video;
-+
-+ DavinciFB fb[4];
-+
-+ DavinciC64x c64x;
-+ bool c64x_present;
-+
-+ DavinciC64xTasks tasks;
-+} DavinciDriverData;
-+
-+
-+static inline DFBResult
-+davincifb_pan_display( const DavinciFB *fb,
-+ struct fb_var_screeninfo *var,
-+ const CoreSurfaceBufferLock *lock,
-+ DFBSurfaceFlipFlags flags,
-+ int x,
-+ int y )
-+{
-+ int ret;
-+
-+ if (lock) {
-+#ifdef FBIO_SET_START
-+ CoreSurfaceBuffer *buffer = lock->buffer;
-+ struct fb_set_start set_start;
-+
-+ /* physical mode */
-+ set_start.offset = -1;
-+ set_start.sync = (flags & DSFLIP_ONSYNC) ? 1 : 0;
-+
-+ /* life's so easy */
-+ set_start.physical = lock->phys + DFB_BYTES_PER_LINE( buffer->format, x ) + y * lock->pitch;
-+
-+ ret = ioctl( fb->fd, FBIO_SET_START, &set_start );
-+ if (ret < 0)
-+ D_DEBUG( "FBIO_SET_START (0x%08lx, sync %llu) failed!\n",
-+ set_start.physical, set_start.sync );
-+
-+ if (ret == 0) {
-+ if (flags & DSFLIP_WAIT)
-+ ioctl( fb->fd, FBIO_WAITFORVSYNC );
-+
-+ return DFB_OK;
-+ }
-+
-+ /* fallback */
-+#endif
-+ var->xoffset = x; /* poor version */
-+ var->yoffset = y + lock->offset / lock->pitch;
-+ }
-+ else {
-+ var->xoffset = x;
-+ var->yoffset = y;
-+ }
-+
-+ var->activate = /*(flags & DSFLIP_ONSYNC) ? FB_ACTIVATE_VBL :*/ FB_ACTIVATE_NOW;
-+
-+ ret = ioctl( fb->fd, FBIOPAN_DISPLAY, var );
-+ if (ret)
-+ D_PERROR( "Davinci/FB: FBIOPAN_DISPLAY (fb%d - %d,%d) failed!\n",
-+ fb->num, var->xoffset, var->yoffset );
-+
-+ if (flags & DSFLIP_WAIT)
-+ ioctl( fb->fd, FBIO_WAITFORVSYNC );
-+
-+ return DFB_OK;
-+}
-+
-+#endif
-diff --git a/gfxdrivers/davinci/davincifb.h b/gfxdrivers/davinci/davincifb.h
-new file mode 100644
-index 0000000..35eb169
---- /dev/null
-+++ b/gfxdrivers/davinci/davincifb.h
-@@ -0,0 +1,581 @@
-+/*
-+ * Copyright (C) 2006 Texas Instruments Inc
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option)any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * File: davincifb.h
-+ */
-+
-+#ifndef DAVINVI_VPBE_H
-+#define DAVINVI_VPBE_H
-+
-+/* include Linux files */
-+#include <linux/fb.h>
-+
-+/* define the custom FBIO_WAITFORVSYNC ioctl */
-+#define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t)
-+#define FBIO_SETATTRIBUTE _IOW('F', 0x21, struct fb_fillrect)
-+
-+/* Backported IOCTLS. */
-+#define FBIO_SETPOSX _IOW('F', 0x22, u_int32_t)
-+#define FBIO_SETPOSY _IOW('F', 0x23, u_int32_t)
-+#define FBIO_SETZOOM _IOW('F', 0x24, struct zoom_params)
-+#define FBIO_GETSTD _IOR('F', 0x25, u_int32_t)
-+#define FBIO_RESIZER _IOW('F', 0x26, struct vpfe_resizer_params)
-+#define FBIO_SYNC _IOW('F', 0x27, u_int32_t)
-+
-+typedef struct zoom_params {
-+ u_int32_t window_id;
-+ u_int32_t zoom_h;
-+ u_int32_t zoom_v;
-+} zoom_params_t;
-+
-+typedef struct vpfe_resizer_params
-+{
-+ u_int32_t rsz_cnt; //busy-lock
-+ u_int32_t out_size; //busy-lock
-+ u_int32_t in_start; //busy-lock
-+ u_int32_t in_size; //busy-lock
-+ u_int32_t sdr_inadd; //shadowed
-+ u_int32_t sdr_inoff; //shadowed
-+ u_int32_t sdr_outadd; //shadowed
-+ u_int32_t sdr_outoff; //shadowed
-+ u_int32_t hfilt[16]; //busy-lock
-+ u_int32_t vfilt[16]; //busy-lock
-+ u_int32_t yenh; //busy-lock
-+} vpfe_resizer_params_t;
-+
-+typedef struct fb_set_start {
-+ int offset; /* offset from smem_start */
-+ unsigned long physical; /* absolute physical address when offset < 0 */
-+
-+ u_int64_t sync; /* input: target sync counter for change or 0 for no sync at all,
-+ output: sync counter of actual change or 0 if still pending */
-+} fb_set_start_t;
-+
-+
-+#ifdef _IOC_TYPECHECK
-+#undef _IOC_TYPECHECK
-+#define _IOC_TYPECHECK(x) (sizeof(x))
-+#endif
-+
-+#define RAM_CLUT_SIZE 256*3
-+#define FBIO_ENABLE_DISABLE_WIN \
-+ _IOW('F', 0x30, unsigned char)
-+#define FBIO_SET_BITMAP_BLEND_FACTOR \
-+ _IOW('F', 0x31, vpbe_bitmap_blend_params_t)
-+#define FBIO_SET_BITMAP_WIN_RAM_CLUT \
-+ _IOW('F', 0x32, unsigned char)*RAM_CLUT_SIZE)
-+#define FBIO_ENABLE_DISABLE_ATTRIBUTE_WIN \
-+ _IOW('F', 0x33, unsigned int)
-+#define FBIO_GET_BLINK_INTERVAL \
-+ _IOR('F', 0x34, vpbe_blink_option_t)
-+#define FBIO_SET_BLINK_INTERVAL \
-+ _IOW('F', 0x35, vpbe_blink_option_t)
-+#define FBIO_GET_VIDEO_CONFIG_PARAMS \
-+ _IOR('F', 0x36, vpbe_video_config_params_t)
-+#define FBIO_SET_VIDEO_CONFIG_PARAMS \
-+ _IOW('F', 0x37, vpbe_video_config_params_t)
-+#define FBIO_GET_BITMAP_CONFIG_PARAMS \
-+ _IOR('F', 0x38, vpbe_bitmap_config_params_t)
-+#define FBIO_SET_BITMAP_CONFIG_PARAMS \
-+ _IOW('F', 0x39, vpbe_bitmap_config_params_t)
-+#define FBIO_SET_DCLK \
-+ _IOW('F', 0x40, vpbe_dclk_t)
-+#define FBIO_SET_INTERFACE \
-+ _IOW('F', 0x41, unsigned char)
-+#define FBIO_GET_INTERFACE \
-+ _IOR('F', 0x42, unsigned char)
-+#define FBIO_QUERY_TIMING \
-+ _IOWR('F', 0x43, struct vpbe_mode_info)
-+#define FBIO_SET_TIMING \
-+ _IOW('F', 0x44, struct vpbe_fb_videomode)
-+#define FBIO_GET_TIMING \
-+ _IOR('F', 0x45, struct vpbe_fb_videomode)
-+#define FBIO_SET_VENC_CLK_SOURCE \
-+ _IOW('F', 0x46, unsigned char)
-+#define FBIO_SET_BACKG_COLOR \
-+ _IOW('F', 0x47, vpbe_backg_color_t)
-+#define FBIO_ENABLE_DISPLAY \
-+ _IOW('F', 0x48, unsigned char)
-+#define FBIO_SETPOS \
-+ _IOW('F', 0x49, u_int32_t)
-+#define FBIO_SET_CURSOR \
-+ _IOW('F', 0x50, struct fb_cursor)
-+#define FBIO_SET_START \
-+ _IOW('F', 0x66, struct fb_set_start)
-+
-+/*
-+ * Defines and Constants
-+ */
-+#ifdef __KERNEL__
-+#define DAVINCIFB_DEVICE "davincifb"
-+#define DAVINCIFB_DRIVER "davincifb"
-+
-+#define MULTIPLE_BUFFERING 1
-+
-+#ifdef MULTIPLE_BUFFERING
-+#define DOUBLE_BUF 2
-+#define TRIPLE_BUF 3
-+#else
-+#define DOUBLE_BUF 1
-+#define TRIPLE_BUF 1
-+#endif
-+
-+/* usage: if (is_win(info->fix.id, OSD0)) ... */
-+#define is_win(name, x) ((strcmp(name, x ## _FBNAME) == 0) ? 1 : 0)
-+
-+/*
-+ * display controller register I/O routines
-+ */
-+u32 dispc_reg_in(u32 offset);
-+u32 dispc_reg_out(u32 offset, u32 val);
-+u32 dispc_reg_merge(u32 offset, u32 val, u32 mask);
-+
-+#endif /*__KERNEL__*/
-+
-+/* Error return codes */
-+#define VPBE_INVALID_PARA_VALUE 700
-+#define VPBE_WRONG_WINDOW_ID 701
-+#define VPBE_CURRENTLY_IN_REQUIRED_MODE 702
-+#define VPBE_INSUFFICIENT_CLUT_VALUES 703
-+#define VPBE_CLUT_WRITE_TIMEOUT 704
-+#define VPBE_VID0_BUF_ADR_NULL 705
-+#define VPBE_WINDOW_NOT_DISABLED 706
-+#define VPBE_WINDOW_NOT_ENABLED 707
-+
-+#ifndef __KERNEL__
-+/* Window ID definations */
-+#define OSD0 0
-+#define VID0 1
-+#define OSD1 2
-+#define VID1 3
-+#endif
-+
-+/* There are 4 framebuffers, each represented by an fb_info and
-+ * a dm_win_info structure */
-+#define OSD0_FBNAME "dm_osd0_fb"
-+#define OSD1_FBNAME "dm_osd1_fb"
-+#define VID0_FBNAME "dm_vid0_fb"
-+#define VID1_FBNAME "dm_vid1_fb"
-+
-+/* FIXME: Digital LCD RGB matrix coefficients */
-+#define DLCD_DGY_VAL 0
-+#define DLCD_DRV_VAL 0
-+#define DLCD_DGU_VAL 0
-+#define DLCD_DBU_VAL 0
-+
-+/* Defines for bitmap format */
-+#define VPBE_BITMAP_BIT_1 1
-+#define VPBE_BITMAP_BIT_2 2
-+#define VPBE_BITMAP_BIT_4 4
-+#define VPBE_BITMAP_BIT_8 8
-+#define VPBE_BITMAP_RGB565 16
-+#define VPBE_VIDEO_YUV422 16
-+#define VPBE_VIDEO_RGB888 24
-+
-+/* Defines foe cursor parameter validation*/
-+#define MAX_CURSOR_WIDTH 0x3FF
-+#define MAX_CURSOR_HEIGHT 0x1FF
-+#define MAX_CURSOR_LINEWIDTH 7
-+
-+#define BASEX 0x80
-+#define BASEY 0x12
-+#define BASEX_DLCD 0x59
-+#define BASEY_DLCD 0x22
-+
-+/*
-+ * Enumerations
-+ */
-+/* Enum for blending factor */
-+typedef enum vpbe_blend_factor {
-+ OSD_CONTRIBUTION_ZERO = 0,
-+ OSD_CONTRIBUTION_1_BY_8 = 1,
-+ OSD_CONTRIBUTION_2_BY_8 = 2,
-+ OSD_CONTRIBUTION_3_BY_8 = 3,
-+ OSD_CONTRIBUTION_4_BY_8 = 4,
-+ OSD_CONTRIBUTION_5_BY_8 = 5,
-+ OSD_CONTRIBUTION_6_BY_8 = 6,
-+ OSD_CONTRIBUTION_ONE = 7
-+} vpbe_blend_factor_t;
-+
-+/* Enum for Boolean variables */
-+typedef enum {
-+ SET_0 = 0,
-+ SET_1 = 1
-+} CB_CR_ORDER, ATTRIBUTE, ROM_RAM_CLUT;
-+
-+/* Defines for Display Interface */
-+#define PRGB 0
-+#define COMPOSITE 1
-+#define SVIDEO 2
-+#define COMPONENT 3
-+#define RGB 4
-+#define YCC16 5
-+#define YCC8 6
-+#define SRGB 7
-+#define EPSON 8
-+#define CASIO1G 9
-+#define UDISP 10
-+#define STN 11
-+#define VPBE_MAX_INTERFACES 12
-+
-+/* Defines for Display Mode */
-+#define LCD 0
-+#define NTSC 1
-+#define PAL 2
-+#define P525 3
-+#define P625 4
-+
-+#define DEFAULT_MODE 0
-+#define P480 0
-+#define P400 1
-+#define P350 2
-+#define NON_EXISTING_MODE 255
-+/* Enable/Disable enum */
-+typedef enum {
-+ VPBE_DISABLE = 0,
-+ VPBE_ENABLE = 1
-+} ATTENUATION, TRANSPARENCY, EXPANSION, BLINKING;
-+
-+typedef enum clk_source {
-+ CLK_SOURCE_CLK27 = 0,
-+ CLK_SOURCE_CLK54 = 1,
-+ CLK_SOURCE_VPBECLK = 2
-+} CLK_SOURCE;
-+
-+/*
-+ * Structures and Union Definitions
-+ */
-+
-+/* Structure for transparency and the blending factor for the bitmap window */
-+typedef struct vpbe_bitmap_blend_params {
-+ unsigned int colorkey; /* color key to be blend */
-+ unsigned int enable_colorkeying; /* enable color keying */
-+ unsigned int bf; /* valid range from 0 to 7 only. */
-+} vpbe_bitmap_blend_params_t;
-+
-+/* Structure for window expansion */
-+typedef struct vpbe_win_expansion {
-+ EXPANSION horizontal;
-+ EXPANSION vertical; /* 1: Enable 0:disable */
-+} vpbe_win_expansion_t;
-+
-+/* Structure for OSD window blinking options */
-+typedef struct vpbe_blink_option {
-+ BLINKING blinking; /* 1: Enable blinking 0: Disable */
-+ unsigned int interval; /* Valid only if blinking is 1 */
-+} vpbe_blink_option_t;
-+
-+/* Structure for DCLK parameters */
-+typedef struct vpbe_dclk {
-+ unsigned char dclk_pattern_width;
-+ unsigned int dclk_pattern0;
-+ unsigned int dclk_pattern1;
-+ unsigned int dclk_pattern2;
-+ unsigned int dclk_pattern3;
-+} vpbe_dclk_t;
-+
-+/* Structure for display format */
-+typedef struct vpbe_display_format {
-+ unsigned char interface; /* Output interface type */
-+ unsigned char mode; /* output mode */
-+} vpbe_display_format_t;
-+
-+/* Structure for background color */
-+typedef struct vpbe_backg_color {
-+ unsigned char clut_select; /* 2: RAM CLUT 1:ROM1 CLUT 0:ROM0 CLUT */
-+ unsigned char color_offset; /* index of color */
-+} vpbe_backg_color_t;
-+
-+/* Structure for Video window configurable parameters */
-+typedef struct vpbe_video_config_params {
-+ CB_CR_ORDER cb_cr_order; /*Cb/Cr order in input data for a pixel. */
-+ /* 0: cb cr 1: cr cb */
-+ vpbe_win_expansion_t exp_info; /* HZ/VT Expansion enable disable */
-+} vpbe_video_config_params_t;
-+
-+/*Union of structures giving the CLUT index for the 1, 2, 4 bit bitmap values.*/
-+typedef union vpbe_clut_idx {
-+ struct _for_4bit_bimap {
-+ unsigned char bitmap_val_0;
-+ unsigned char bitmap_val_1;
-+ unsigned char bitmap_val_2;
-+ unsigned char bitmap_val_3;
-+ unsigned char bitmap_val_4;
-+ unsigned char bitmap_val_5;
-+ unsigned char bitmap_val_6;
-+ unsigned char bitmap_val_7;
-+ unsigned char bitmap_val_8;
-+ unsigned char bitmap_val_9;
-+ unsigned char bitmap_val_10;
-+ unsigned char bitmap_val_11;
-+ unsigned char bitmap_val_12;
-+ unsigned char bitmap_val_13;
-+ unsigned char bitmap_val_14;
-+ unsigned char bitmap_val_15;
-+ } for_4bit_bimap;
-+ struct _for_2bit_bimap {
-+ unsigned char bitmap_val_0;
-+ unsigned char dummy0[4];
-+ unsigned char bitmap_val_1;
-+ unsigned char dummy1[4];
-+ unsigned char bitmap_val_2;
-+ unsigned char dummy2[4];
-+ unsigned char bitmap_val_3;
-+ } for_2bit_bimap;
-+ struct _for_1bit_bimap {
-+ unsigned char bitmap_val_0;
-+ unsigned char dummy0[14];
-+ unsigned char bitmap_val_1;
-+ } for_1bit_bimap;
-+} vpbe_clut_idx_t;
-+
-+/* Structure for bitmap window configurable parameters */
-+typedef struct vpbe_bitmap_config_params {
-+ /* Only for bitmap width = 1,2,4 bits */
-+ vpbe_clut_idx_t clut_idx;
-+ /* Attenuation value for YUV o/p for bitmap window */
-+ unsigned char attenuation_enable;
-+ /* 0: ROM DM270, 1:ROM DM320, 2:RAM CLUT */
-+ unsigned char clut_select;
-+} vpbe_bitmap_config_params_t;
-+
-+/* Unioun for video/OSD configuration parameters */
-+typedef union vpbe_conf_params {
-+
-+ struct vpbe_video_params {
-+ CB_CR_ORDER cb_cr_order;
-+ /* HZ/VT Expansion enable disable */
-+ vpbe_win_expansion_t exp_info;
-+ } video_params;
-+
-+ struct vpbe_bitmap_params {
-+ /* Attenuation value for YUV o/p */
-+ ATTENUATION attenuation_enable;
-+ /* 0: ROM DM270, 1: ROM DM320, 2:RAM CLUT */
-+ unsigned char clut_select;
-+ /* Only for bitmap width = 1,2,4 bits */
-+ vpbe_clut_idx_t clut_idx;
-+ /* 0: OSD window is bitmap window */
-+ /* 1: OSD window is attribute window */
-+ ATTRIBUTE enable_attribute;
-+ /* To hold bps value.
-+ Used to switch back from attribute to bitmap. */
-+ unsigned int stored_bits_per_pixel;
-+ /* Blending information */
-+ vpbe_bitmap_blend_params_t blend_info;
-+ /* OSD Blinking information */
-+ vpbe_blink_option_t blink_info;
-+ } bitmap_params;
-+
-+} vpbe_conf_params_t;
-+
-+typedef struct vpbe_video_params vpbe_video_params_t;
-+typedef struct vpbe_bitmap_params vpbe_bitmap_params_t;
-+
-+/* Structure to hold window position */
-+typedef struct vpbe_window_position {
-+ unsigned int xpos; /* X position of the window */
-+ unsigned int ypos; /* Y position of the window */
-+} vpbe_window_position_t;
-+
-+#ifdef __KERNEL__
-+/* Structure for each window */
-+typedef struct vpbe_dm_win_info {
-+ struct fb_info info;
-+ vpbe_window_position_t win_pos; /* X,Y position of window */
-+ /* Size of window is already there in var_info structure. */
-+
-+ dma_addr_t fb_base_phys; /*framebuffer area */
-+ unsigned int fb_base; /*window memory pointer */
-+ unsigned int fb_size; /*memory size */
-+ unsigned int pseudo_palette[17];
-+ int alloc_fb_mem;
-+ /*flag to identify if framebuffer area is fixed or not */
-+ unsigned long sdram_address;
-+ struct vpbe_dm_info *dm;
-+ unsigned char window_enable; /*Additions for all windows */
-+ zoom_params_t zoom; /*Zooming parameters */
-+ unsigned char field_frame_select; /*To select Field or frame */
-+ unsigned char numbufs; /*Number of buffers valid 2 or 3 */
-+ vpbe_conf_params_t conf_params;
-+ /*window configuration parameter union pointer */
-+} vpbe_dm_win_info_t;
-+#endif /*__KERNEL__*/
-+
-+/*
-+ * Videmode structure for display interface and mode settings
-+ */
-+typedef struct vpbe_fb_videomode {
-+ unsigned char name[10]; /* Mode name ( NTSC , PAL) */
-+ unsigned int vmode; /* FB_MODE_INTERLACED or FB_MODE_NON_INTERLACED */
-+ unsigned int xres; /* X Resolution of the display */
-+ unsigned int yres; /* Y Resolution of the display */
-+ unsigned int fps; /* frames per second */
-+ /* Timing Parameters applicable for std = 0 only */
-+ unsigned int left_margin;
-+ unsigned int right_margin;
-+ unsigned int upper_margin;
-+ unsigned int lower_margin;
-+ unsigned int hsync_len;
-+ unsigned int vsync_len;
-+ unsigned int sync; /* 0: hsync -ve/vsync -ve */
-+ /*1: hsync -ve/vsync +ve */
-+ /*2: hsync +ve/vsync -ve */
-+ /*3: hsync +ve/vsync +ve */
-+ unsigned int basepx; /* Display x,y start position */
-+ unsigned int basepy;
-+/* 1= Mode s available in modelist 0=Mode is not available in modelist */
-+ unsigned int std;
-+} vpbe_fb_videomode_t;
-+
-+/* Structure to interface videomode to application*/
-+typedef struct vpbe_mode_info {
-+ vpbe_fb_videomode_t vid_mode;
-+ unsigned char interface;
-+ unsigned char mode_idx;
-+} vpbe_mode_info_t;
-+
-+#ifdef __KERNEL__
-+/*
-+ * Structure for the driver holding information of windows,
-+ * memory base addresses etc.
-+ */
-+typedef struct vpbe_dm_info {
-+ vpbe_dm_win_info_t *osd0;
-+ vpbe_dm_win_info_t *osd1;
-+ vpbe_dm_win_info_t *vid0;
-+ vpbe_dm_win_info_t *vid1;
-+
-+/* to map the registers */
-+ dma_addr_t mmio_base_phys;
-+ unsigned int mmio_base;
-+ unsigned int mmio_size;
-+
-+ wait_queue_head_t vsync_wait;
-+ unsigned int vsync_cnt;
-+ int timeout;
-+
-+ /* this is the function that configures the output device (NTSC/PAL/LCD)
-+ * for the required output format (composite/s-video/component/rgb)
-+ */
-+ void (*output_device_config) (void);
-+
-+ struct device *dev;
-+
-+ vpbe_backg_color_t backg; /* background color */
-+ vpbe_dclk_t dclk; /*DCLK parameters */
-+ vpbe_display_format_t display; /*Display interface and mode */
-+ vpbe_fb_videomode_t videomode; /*Cuurent videomode */
-+ char ram_clut[256][3]; /*RAM CLUT array */
-+ struct fb_cursor cursor; /* cursor config params from fb.h */
-+/*Flag that indicates whether any of the display is enabled or not*/
-+ int display_enable;
-+} vpbe_dm_info_t;
-+
-+/*
-+ * Functions Definitions for 'davincifb' module
-+ */
-+int vpbe_mem_alloc_window_buf(vpbe_dm_win_info_t *);
-+int vpbe_mem_release_window_buf(vpbe_dm_win_info_t *);
-+void init_display_function(vpbe_display_format_t *);
-+int vpbe_mem_alloc_struct(vpbe_dm_win_info_t **);
-+void set_vid0_default_conf(void);
-+void set_vid1_default_conf(void);
-+void set_osd0_default_conf(void);
-+void set_osd1_default_conf(void);
-+void set_cursor_default_conf(void);
-+void set_dm_default_conf(void);
-+void set_win_enable(char *, unsigned int);
-+int within_vid0_limits(u32, u32, u32, u32);
-+void vpbe_set_display_default(void);
-+#ifdef __KERNEL__
-+void set_win_position(char *, u32, u32, u32, u32);
-+void change_win_param(int);
-+void set_interlaced(char *, unsigned int);
-+#endif /* __KERNEL__ */
-+
-+/*
-+ * Function definations for 'osd' module
-+ */
-+
-+int vpbe_enable_window(vpbe_dm_win_info_t *);
-+int vpbe_disable_window(vpbe_dm_win_info_t *);
-+int vpbe_vid_osd_select_field_frame(u8 *, u8);
-+int vpbe_bitmap_set_blend_factor(u8 *, vpbe_bitmap_blend_params_t *);
-+int vpbe_bitmap_set_ram_clut(void);
-+int vpbe_enable_disable_attribute_window(u32);
-+int vpbe_get_blinking(u8 *, vpbe_blink_option_t *);
-+int vpbe_set_blinking(u8 *, vpbe_blink_option_t *);
-+int vpbe_set_vid_params(u8 *, vpbe_video_config_params_t *);
-+int vpbe_get_vid_params(u8 *, vpbe_video_config_params_t *);
-+int vpbe_bitmap_get_params(u8 *, vpbe_bitmap_config_params_t *);
-+int vpbe_bitmap_set_params(u8 *, vpbe_bitmap_config_params_t *);
-+int vpbe_set_cursor_params(struct fb_cursor *);
-+int vpbe_set_vid_expansion(vpbe_win_expansion_t *);
-+int vpbe_set_dclk(vpbe_dclk_t *);
-+int vpbe_set_display_format(vpbe_display_format_t *);
-+int vpbe_set_backg_color(vpbe_backg_color_t *);
-+int vpbe_set_interface(u8);
-+int vpbe_query_mode(vpbe_mode_info_t *);
-+int vpbe_set_mode(struct vpbe_fb_videomode *);
-+int vpbe_set_venc_clk_source(u8);
-+void set_vid0_default_conf(void);
-+void set_osd0_default_conf(void);
-+void set_vid1_default_conf(void);
-+void set_osd1_default_conf(void);
-+void set_cursor_default_conf(void);
-+void set_dm_default_conf(void);
-+/*
-+ * Function definations for 'venc' module
-+ */
-+
-+void davincifb_ntsc_composite_config(void);
-+void davincifb_ntsc_svideo_config(void);
-+void davincifb_ntsc_component_config(void);
-+void davincifb_pal_composite_config(void);
-+void davincifb_pal_svideo_config(void);
-+void davincifb_pal_component_config(void);
-+
-+void vpbe_davincifb_ntsc_rgb_config(void);
-+void vpbe_davincifb_pal_rgb_config(void);
-+void vpbe_davincifb_525p_component_config(void);
-+void vpbe_davincifb_625p_component_config(void);
-+
-+void vpbe_enable_venc(int);
-+void vpbe_enable_dacs(int);
-+/*
-+ * Function definations for 'dlcd' module
-+ */
-+void vpbe_davincifb_480p_prgb_config(void);
-+void vpbe_davincifb_400p_prgb_config(void);
-+void vpbe_davincifb_350p_prgb_config(void);
-+void vpbe_set_display_timing(struct vpbe_fb_videomode *);
-+
-+void vpbe_enable_lcd(int);
-+/*
-+ * Following functions are not implemented
-+ */
-+void vpbe_davincifb_default_ycc16_config(void);
-+void vpbe_davincifb_default_ycc8_config(void);
-+void vpbe_davincifb_default_srgb_config(void);
-+void vpbe_davincifb_default_epson_config(void);
-+void vpbe_davincifb_default_casio_config(void);
-+void vpbe_davincifb_default_UDISP_config(void);
-+void vpbe_davincifb_default_STN_config(void);
-+#endif /*__KERNEL__*/
-+
-+#endif /* End of #ifndef DAVINCI_VPBE_H */