Patchwork [meta-fsl-arm,danny,2/2] xf86-video-imxfb-vivante: fix missing headers

login
register
mail settings
Submitter Eric BENARD
Date Feb. 16, 2013, 4:21 p.m.
Message ID <1361031713-11026-2-git-send-email-eric@eukrea.com>
Download mbox | patch
Permalink /patch/44717/
State Accepted
Delegated to: Otavio Salvador
Headers show

Comments

Eric BENARD - Feb. 16, 2013, 4:21 p.m.
- dri.h and sarea.h are missing during compilation (reproduced on several
build from scratch using oe-core + meta-oe) leading to a failure to build
fsl-image-gui (for example)
- These headers are provided by xf86-dri-vivante which depends on
xf86-video-imxfb-vivante.
- So we provide the headers here to fix the compilation and get
danny build again for imx6qsabrelite.
- Tested on Fedora 17 and Ubuntu 12.10 hosts, for imx6qsabrelite
target building fsl-image-gui from scratch.

Signed-off-by: Eric Bénard <eric@eukrea.com>
---
 .../xorg-driver/xf86-video-imxfb-vivante/dri.h     | 477 +++++++++++++++++++++
 .../xorg-driver/xf86-video-imxfb-vivante/sarea.h   | 110 +++++
 .../xf86-video-imxfb-vivante_12.09.01.bb           |  11 +-
 3 files changed, 596 insertions(+), 2 deletions(-)
 create mode 100644 recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/dri.h
 create mode 100644 recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/sarea.h
Otavio Salvador - Feb. 16, 2013, 5:57 p.m.
On Sat, Feb 16, 2013 at 2:21 PM, Eric Bénard <eric@eukrea.com> wrote:
> - dri.h and sarea.h are missing during compilation (reproduced on several
> build from scratch using oe-core + meta-oe) leading to a failure to build
> fsl-image-gui (for example)
> - These headers are provided by xf86-dri-vivante which depends on
> xf86-video-imxfb-vivante.
> - So we provide the headers here to fix the compilation and get
> danny build again for imx6qsabrelite.
> - Tested on Fedora 17 and Ubuntu 12.10 hosts, for imx6qsabrelite
> target building fsl-image-gui from scratch.
>
> Signed-off-by: Eric Bénard <eric@eukrea.com>

Did you try to reverse the dependency? make video driver to depends on
the dri? I think I did it in upcoming 1.1.0 patches.

Please send patches against master and once merged we can backport to
danny. Same rules as oe-core and meta-oe.
Eric BENARD - Feb. 16, 2013, 6:15 p.m.
Le Sat, 16 Feb 2013 15:57:36 -0200,
Otavio Salvador <otavio@ossystems.com.br> a écrit :

> On Sat, Feb 16, 2013 at 2:21 PM, Eric Bénard <eric@eukrea.com> wrote:
> > - dri.h and sarea.h are missing during compilation (reproduced on several
> > build from scratch using oe-core + meta-oe) leading to a failure to build
> > fsl-image-gui (for example)
> > - These headers are provided by xf86-dri-vivante which depends on
> > xf86-video-imxfb-vivante.
> > - So we provide the headers here to fix the compilation and get
> > danny build again for imx6qsabrelite.
> > - Tested on Fedora 17 and Ubuntu 12.10 hosts, for imx6qsabrelite
> > target building fsl-image-gui from scratch.
> >
> > Signed-off-by: Eric Bénard <eric@eukrea.com>
> 
> Did you try to reverse the dependency? make video driver to depends on
> the dri? I think I did it in upcoming 1.1.0 patches.
> 
I tried that and reversing the dependency doesn't work because
xf86-dri-vivante needs vivante_priv.h which is provided by
xf86-video-imxfb-vivante.

> Please send patches against master and once merged we can backport to
> danny. Same rules as oe-core and meta-oe.
> 
will do I thought master had moved to 1.1.0 but I think these patches
will directly apply to master if 12.09.01 is still in master.

Eric
Otavio Salvador - Feb. 16, 2013, 6:24 p.m.
On Sat, Feb 16, 2013 at 4:15 PM, Eric Bénard <eric@eukrea.com> wrote:
> Le Sat, 16 Feb 2013 15:57:36 -0200,
> Otavio Salvador <otavio@ossystems.com.br> a écrit :
>
>> On Sat, Feb 16, 2013 at 2:21 PM, Eric Bénard <eric@eukrea.com> wrote:
>> > - dri.h and sarea.h are missing during compilation (reproduced on several
>> > build from scratch using oe-core + meta-oe) leading to a failure to build
>> > fsl-image-gui (for example)
>> > - These headers are provided by xf86-dri-vivante which depends on
>> > xf86-video-imxfb-vivante.
>> > - So we provide the headers here to fix the compilation and get
>> > danny build again for imx6qsabrelite.
>> > - Tested on Fedora 17 and Ubuntu 12.10 hosts, for imx6qsabrelite
>> > target building fsl-image-gui from scratch.
>> >
>> > Signed-off-by: Eric Bénard <eric@eukrea.com>
>>
>> Did you try to reverse the dependency? make video driver to depends on
>> the dri? I think I did it in upcoming 1.1.0 patches.
>>
> I tried that and reversing the dependency doesn't work because
> xf86-dri-vivante needs vivante_priv.h which is provided by
> xf86-video-imxfb-vivante.

Ah I see; I workarounded it in 1.1.0 upgrade.

>> Please send patches against master and once merged we can backport to
>> danny. Same rules as oe-core and meta-oe.
>>
> will do I thought master had moved to 1.1.0 but I think these patches
> will directly apply to master if 12.09.01 is still in master.

No I am still fighting with DRI/Acceleration support in master; it is
broken at the moment.
Otavio Salvador - Feb. 16, 2013, 6:44 p.m.
On Sat, Feb 16, 2013 at 4:24 PM, Otavio Salvador
<otavio@ossystems.com.br> wrote:
> On Sat, Feb 16, 2013 at 4:15 PM, Eric Bénard <eric@eukrea.com> wrote:
>> will do I thought master had moved to 1.1.0 but I think these patches
>> will directly apply to master if 12.09.01 is still in master.
>
> No I am still fighting with DRI/Acceleration support in master; it is
> broken at the moment.

It does not apply in master; I pushed your version to danny-next but
please send it against master so we apply it there as well.
Eric BENARD - Feb. 16, 2013, 6:46 p.m.
Le Sat, 16 Feb 2013 16:24:42 -0200,
Otavio Salvador <otavio@ossystems.com.br> a écrit :

> On Sat, Feb 16, 2013 at 4:15 PM, Eric Bénard <eric@eukrea.com> wrote:
> > Le Sat, 16 Feb 2013 15:57:36 -0200,
> > Otavio Salvador <otavio@ossystems.com.br> a écrit :
> >
> >> On Sat, Feb 16, 2013 at 2:21 PM, Eric Bénard <eric@eukrea.com> wrote:
> >> > - dri.h and sarea.h are missing during compilation (reproduced on several
> >> > build from scratch using oe-core + meta-oe) leading to a failure to build
> >> > fsl-image-gui (for example)
> >> > - These headers are provided by xf86-dri-vivante which depends on
> >> > xf86-video-imxfb-vivante.
> >> > - So we provide the headers here to fix the compilation and get
> >> > danny build again for imx6qsabrelite.
> >> > - Tested on Fedora 17 and Ubuntu 12.10 hosts, for imx6qsabrelite
> >> > target building fsl-image-gui from scratch.
> >> >
> >> > Signed-off-by: Eric Bénard <eric@eukrea.com>
> >>
> >> Did you try to reverse the dependency? make video driver to depends on
> >> the dri? I think I did it in upcoming 1.1.0 patches.
> >>
> > I tried that and reversing the dependency doesn't work because
> > xf86-dri-vivante needs vivante_priv.h which is provided by
> > xf86-video-imxfb-vivante.
> 
> Ah I see; I workarounded it in 1.1.0 upgrade.
> 
I didn't saw such a workaround in 1.1.0 and xf86-dri-vivante depends
on xf86-video-imxfb-vivante also in 1.1.0.

Maybe patch 2/2 can be pushed as it fix the problem in 12.09.01 at
least in danny ?

Eric
Otavio Salvador - Feb. 16, 2013, 6:50 p.m.
On Sat, Feb 16, 2013 at 4:46 PM, Eric Bénard <eric@eukrea.com> wrote:
> Le Sat, 16 Feb 2013 16:24:42 -0200,
> Otavio Salvador <otavio@ossystems.com.br> a écrit :
>
>> On Sat, Feb 16, 2013 at 4:15 PM, Eric Bénard <eric@eukrea.com> wrote:
>> > Le Sat, 16 Feb 2013 15:57:36 -0200,
>> > Otavio Salvador <otavio@ossystems.com.br> a écrit :
>> >
>> >> On Sat, Feb 16, 2013 at 2:21 PM, Eric Bénard <eric@eukrea.com> wrote:
>> >> > - dri.h and sarea.h are missing during compilation (reproduced on several
>> >> > build from scratch using oe-core + meta-oe) leading to a failure to build
>> >> > fsl-image-gui (for example)
>> >> > - These headers are provided by xf86-dri-vivante which depends on
>> >> > xf86-video-imxfb-vivante.
>> >> > - So we provide the headers here to fix the compilation and get
>> >> > danny build again for imx6qsabrelite.
>> >> > - Tested on Fedora 17 and Ubuntu 12.10 hosts, for imx6qsabrelite
>> >> > target building fsl-image-gui from scratch.
>> >> >
>> >> > Signed-off-by: Eric Bénard <eric@eukrea.com>
>> >>
>> >> Did you try to reverse the dependency? make video driver to depends on
>> >> the dri? I think I did it in upcoming 1.1.0 patches.
>> >>
>> > I tried that and reversing the dependency doesn't work because
>> > xf86-dri-vivante needs vivante_priv.h which is provided by
>> > xf86-video-imxfb-vivante.
>>
>> Ah I see; I workarounded it in 1.1.0 upgrade.
>>
> I didn't saw such a workaround in 1.1.0 and xf86-dri-vivante depends
> on xf86-video-imxfb-vivante also in 1.1.0.
>
> Maybe patch 2/2 can be pushed as it fix the problem in 12.09.01 at
> least in danny ?

I did it in danny-next.

Patch

diff --git a/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/dri.h b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/dri.h
new file mode 100644
index 0000000..2d080c9
--- /dev/null
+++ b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/dri.h
@@ -0,0 +1,477 @@ 
+/****************************************************************************
+*
+*    Copyright (c) 2005 - 2012 by Vivante Corp.  All rights reserved.
+*
+*    The material in this file is confidential and contains trade secrets
+*    of Vivante Corporation. This is proprietary information owned by
+*    Vivante Corporation. No part of this work may be disclosed,
+*    reproduced, copied, transmitted, or used in any way for any purpose,
+*    without the express written permission of Vivante Corporation.
+*
+*****************************************************************************/
+
+
+/**************************************************************************
+
+Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+/*
+ * Authors:
+ *   Jens Owen <jens@tungstengraphics.com>
+ *
+ */
+
+/* Prototypes for DRI functions */
+
+#ifndef _DRI_H_
+
+#include <pciaccess.h>
+
+#include "scrnintstr.h"
+#include "xf86dri.h"
+
+typedef int DRISyncType;
+
+#define DRI_NO_SYNC 0
+#define DRI_2D_SYNC 1
+#define DRI_3D_SYNC 2
+
+typedef int DRIContextType;
+
+typedef struct _DRIContextPrivRec DRIContextPrivRec, *DRIContextPrivPtr;
+
+typedef enum _DRIContextFlags
+{
+    DRI_CONTEXT_2DONLY    = 0x01,
+    DRI_CONTEXT_PRESERVED = 0x02,
+    DRI_CONTEXT_RESERVED  = 0x04 /* DRI Only -- no kernel equivalent */
+} DRIContextFlags;
+
+#define DRI_NO_CONTEXT 0
+#define DRI_2D_CONTEXT 1
+#define DRI_3D_CONTEXT 2
+
+typedef int DRISwapMethod;
+
+#define DRI_HIDE_X_CONTEXT 0
+#define DRI_SERVER_SWAP    1
+#define DRI_KERNEL_SWAP    2
+
+typedef int DRIWindowRequests;
+
+#define DRI_NO_WINDOWS       0
+#define DRI_3D_WINDOWS_ONLY  1
+#define DRI_ALL_WINDOWS      2
+
+
+typedef void (*ClipNotifyPtr)( WindowPtr, int, int );
+typedef void (*AdjustFramePtr)(int scrnIndex, int x, int y, int flags);
+
+
+/*
+ * These functions can be wrapped by the DRI.  Each of these have
+ * generic default funcs (initialized in DRICreateInfoRec) and can be
+ * overridden by the driver in its [driver]DRIScreenInit function.
+ */
+typedef struct {
+    ScreenWakeupHandlerProcPtr   WakeupHandler;
+    ScreenBlockHandlerProcPtr    BlockHandler;
+    WindowExposuresProcPtr       WindowExposures;
+    CopyWindowProcPtr            CopyWindow;
+    ValidateTreeProcPtr          ValidateTree;
+    PostValidateTreeProcPtr      PostValidateTree;
+    ClipNotifyProcPtr            ClipNotify;
+    AdjustFramePtr               AdjustFrame;
+} DRIWrappedFuncsRec, *DRIWrappedFuncsPtr;
+
+
+/*
+ * Prior to Xorg 6.8.99.8, the DRIInfoRec structure was implicitly versioned
+ * by the XF86DRI_*_VERSION defines in xf86dristr.h.  These numbers were also
+ * being used to version the XFree86-DRI protocol.  Bugs #3066 and #3163
+ * showed that this was inadequate.  The DRIInfoRec structure is now versioned
+ * by the DRIINFO_*_VERSION defines in this file. - ajax, 2005-05-18.
+ *
+ * Revision history:
+ * 4.1.0 and earlier: DRIQueryVersion returns XF86DRI_*_VERSION.
+ * 4.2.0: DRIQueryVersion begins returning DRIINFO_*_VERSION.
+ * 5.0.0: frameBufferPhysicalAddress changed from CARD32 to pointer.
+ */
+
+#define DRIINFO_MAJOR_VERSION   5
+#define DRIINFO_MINOR_VERSION   4
+#define DRIINFO_PATCH_VERSION   0
+
+typedef unsigned long long (*DRITexOffsetStartProcPtr)(PixmapPtr pPix);
+typedef void (*DRITexOffsetFinishProcPtr)(PixmapPtr pPix);
+
+typedef struct {
+    /* driver call back functions
+     *
+     * New fields should be added at the end for backwards compatibility.
+     * Bump the DRIINFO patch number to indicate bugfixes.
+     * Bump the DRIINFO minor number to indicate new fields.
+     * Bump the DRIINFO major number to indicate binary-incompatible changes.
+     */
+    Bool    (*CreateContext)(ScreenPtr pScreen,
+                 VisualPtr visual,
+                 drm_context_t hHWContext,
+                 void* pVisualConfigPriv,
+                 DRIContextType context);
+    void        (*DestroyContext)(ScreenPtr pScreen,
+                  drm_context_t hHWContext,
+                                  DRIContextType context);
+    void    (*SwapContext)(ScreenPtr pScreen,
+                   DRISyncType syncType,
+                   DRIContextType readContextType,
+                   void* readContextStore,
+                   DRIContextType writeContextType,
+                   void* writeContextStore);
+    void    (*InitBuffers)(WindowPtr pWin,
+                   RegionPtr prgn,
+                   CARD32 indx);
+    void    (*MoveBuffers)(WindowPtr pWin,
+                   DDXPointRec ptOldOrg,
+                   RegionPtr prgnSrc,
+                   CARD32 indx);
+    void        (*TransitionTo3d)(ScreenPtr pScreen);
+    void        (*TransitionTo2d)(ScreenPtr pScreen);
+
+    void    (*SetDrawableIndex)(WindowPtr pWin, CARD32 indx);
+    Bool        (*OpenFullScreen)(ScreenPtr pScreen);
+    Bool        (*CloseFullScreen)(ScreenPtr pScreen);
+
+    /* wrapped functions */
+    DRIWrappedFuncsRec  wrap;
+
+    /* device info */
+    char*       drmDriverName;
+    char*       clientDriverName;
+    char*       busIdString;
+    int         ddxDriverMajorVersion;
+    int         ddxDriverMinorVersion;
+    int         ddxDriverPatchVersion;
+    pointer     frameBufferPhysicalAddress;
+    long        frameBufferSize;
+    long        frameBufferStride;
+    long        SAREASize;
+    int         maxDrawableTableEntry;
+    int         ddxDrawableTableEntry;
+    long        contextSize;
+    DRISwapMethod       driverSwapMethod;
+    DRIWindowRequests   bufferRequests;
+    int         devPrivateSize;
+    void*       devPrivate;
+    Bool        createDummyCtx;
+    Bool        createDummyCtxPriv;
+
+    /* New with DRI version 4.1.0 */
+    void        (*TransitionSingleToMulti3D)(ScreenPtr pScreen);
+    void        (*TransitionMultiToSingle3D)(ScreenPtr pScreen);
+
+    /* New with DRI version 5.1.0 */
+    void        (*ClipNotify)(ScreenPtr pScreen, WindowPtr *ppWin, int num);
+
+    /* New with DRI version 5.2.0 */
+    Bool                allocSarea;
+    Bool                keepFDOpen;
+
+    /* New with DRI version 5.3.0 */
+    DRITexOffsetStartProcPtr  texOffsetStart;
+    DRITexOffsetFinishProcPtr texOffsetFinish;
+
+    /* New with DRI version 5.4.0 */
+    int             dontMapFrameBuffer;
+    drm_handle_t    hFrameBuffer; /* Handle to framebuffer, either
+                   * mapped by DDX driver or DRI */
+
+} DRIInfoRec, *DRIInfoPtr;
+
+
+#define DRM_CAS_VIV(lock,old,new,__ret)             \
+    do {                                            \
+        __asm__ __volatile__ (                      \
+        "1: ldrex %0, [%1]\n"                       \
+        "   teq %0, %2\n"                           \
+        "   strexeq %0, %3, [%1]\n"                 \
+        : "=&r" (__ret)                             \
+        : "r" (lock), "r" (old), "r" (new)          \
+        : "cc");                                    \
+    } while (0)
+
+#define DRM_LIGHT_LOCK_VIV(fd,lock,context)                        \
+    do {                                                           \
+        DRM_CAS_RESULT(__ret);                                     \
+        DRM_CAS_VIV(lock,context,DRM_LOCK_HELD|context,__ret);     \
+        if (__ret) drmGetLock(fd,context,0);                       \
+    } while(0)
+
+/* This one counts fast locks -- for benchmarking only. */
+#define DRM_LIGHT_LOCK_COUNT_VIV(fd,lock,context,count)            \
+    do {                                                           \
+        DRM_CAS_RESULT(__ret);                                     \
+        DRM_CAS_VIV(lock,context,DRM_LOCK_HELD|context,__ret);     \
+        if (__ret) drmGetLock(fd,context,0);                       \
+        else       ++count;                                        \
+    } while(0)
+
+#define DRM_LOCK_VIV(fd,lock,context,flags)                        \
+    do {                                                           \
+        if (flags) drmGetLock(fd,context,flags);                   \
+        else       DRM_LIGHT_LOCK_VIV(fd,lock,context);            \
+    } while(0)
+
+#define DRM_UNLOCK_VIV(fd,lock,context)                            \
+    do {                                                           \
+        DRM_CAS_RESULT(__ret);                                     \
+        DRM_CAS_VIV(lock,DRM_LOCK_HELD|context,context,__ret);     \
+        if (__ret) drmUnlock(fd,context);                          \
+    } while(0)
+
+#define DRM_SPINLOCK_VIV(spin,val)                                 \
+    do {                                                           \
+        DRM_CAS_RESULT(__ret);                                     \
+        do {                                                       \
+            DRM_CAS_VIV(spin,0,val,__ret);                         \
+            if (__ret) while ((spin)->lock);                       \
+        } while (__ret);                                           \
+    } while(0)
+
+#define DRM_SPINLOCK_TAKE_VIV(spin,val)                            \
+    do {                                                           \
+        DRM_CAS_RESULT(__ret);                                     \
+        int  cur;                                                  \
+        do {                                                       \
+            cur = (*spin).lock;                                    \
+            DRM_CAS_VIV(spin,cur,val,__ret);                       \
+        } while (__ret);                                           \
+    } while(0)
+
+#define DRM_SPINLOCK_COUNT_VIV(spin,val,count,__ret)               \
+    do {                                                           \
+        int  __i;                                                  \
+        __ret = 1;                                                 \
+        for (__i = 0; __ret && __i < count; __i++) {               \
+            DRM_CAS_VIV(spin,0,val,__ret);                         \
+            if (__ret) for (;__i < count && (spin)->lock; __i++);  \
+        }                                                          \
+    } while(0)
+
+#define DRM_SPINUNLOCK_VIV(spin,val)                               \
+    do {                                                           \
+        DRM_CAS_RESULT(__ret);                                     \
+        if ((*spin).lock == val) { /* else server stole lock */    \
+            do {                                                   \
+                DRM_CAS_VIV(spin,val,0,__ret);                     \
+            } while (__ret);                                       \
+        }                                                          \
+    } while(0)
+
+
+extern _X_EXPORT Bool DRIOpenDRMMaster(ScrnInfoPtr pScrn, unsigned long sAreaSize,
+                 const char *busID,
+                 const char *drmDriverName);
+
+extern _X_EXPORT Bool DRIScreenInit(ScreenPtr pScreen,
+                          DRIInfoPtr pDRIInfo,
+                          int *pDRMFD);
+
+extern _X_EXPORT void DRICloseScreen(ScreenPtr pScreen);
+
+extern _X_EXPORT Bool DRIExtensionInit(void);
+
+extern _X_EXPORT void DRIReset(void);
+
+extern _X_EXPORT Bool DRIQueryDirectRenderingCapable(ScreenPtr pScreen,
+                                           Bool *isCapable);
+
+extern _X_EXPORT Bool DRIOpenConnection(ScreenPtr pScreen,
+                              drm_handle_t * hSAREA,
+                              char **busIdString);
+
+extern _X_EXPORT Bool DRIAuthConnection(ScreenPtr pScreen, drm_magic_t magic);
+
+extern _X_EXPORT Bool DRICloseConnection(ScreenPtr pScreen);
+
+extern _X_EXPORT Bool DRIGetClientDriverName(ScreenPtr pScreen,
+                                   int* ddxDriverMajorVersion,
+                                   int* ddxDriverMinorVersion,
+                                   int* ddxDriverPatchVersion,
+                                   char** clientDriverName);
+
+extern _X_EXPORT Bool DRICreateContext(ScreenPtr pScreen,
+                             VisualPtr visual,
+                             XID context,
+                             drm_context_t * pHWContext);
+
+extern _X_EXPORT Bool DRIDestroyContext(ScreenPtr pScreen, XID context);
+
+extern _X_EXPORT Bool DRIContextPrivDelete(pointer pResource, XID id);
+
+extern _X_EXPORT Bool DRICreateDrawable(ScreenPtr pScreen,
+                              ClientPtr client,
+                              DrawablePtr pDrawable,
+                              drm_drawable_t * hHWDrawable);
+
+extern _X_EXPORT Bool DRIDestroyDrawable(ScreenPtr pScreen,
+                                         ClientPtr client,
+                                         DrawablePtr pDrawable);
+
+extern _X_EXPORT Bool DRIDrawablePrivDelete(pointer pResource,
+                                  XID id);
+
+extern _X_EXPORT Bool DRIGetDrawableInfo(ScreenPtr pScreen,
+                               DrawablePtr pDrawable,
+                               unsigned int* indx,
+                               unsigned int* stamp,
+                               int* X,
+                               int* Y,
+                               int* W,
+                               int* H,
+                               int* numClipRects,
+                               drm_clip_rect_t ** pClipRects,
+                               int* backX,
+                               int* backY,
+                               int* numBackClipRects,
+                               drm_clip_rect_t ** pBackClipRects);
+
+extern _X_EXPORT Bool DRIGetDeviceInfo(ScreenPtr pScreen,
+                             drm_handle_t * hFrameBuffer,
+                             int* fbOrigin,
+                             int* fbSize,
+                             int* fbStride,
+                             int* devPrivateSize,
+                             void** pDevPrivate);
+
+extern _X_EXPORT DRIInfoPtr DRICreateInfoRec(void);
+
+extern _X_EXPORT void DRIDestroyInfoRec(DRIInfoPtr DRIInfo);
+
+extern _X_EXPORT Bool DRIFinishScreenInit(ScreenPtr pScreen);
+
+extern _X_EXPORT void DRIWakeupHandler(pointer wakeupData,
+                             int result,
+                             pointer pReadmask);
+
+extern _X_EXPORT void DRIBlockHandler(pointer blockData,
+                            OSTimePtr pTimeout,
+                            pointer pReadmask);
+
+extern _X_EXPORT void DRIDoWakeupHandler(int screenNum,
+                               pointer wakeupData,
+                               unsigned long result,
+                               pointer pReadmask);
+
+extern _X_EXPORT void DRIDoBlockHandler(int screenNum,
+                              pointer blockData,
+                              pointer pTimeout,
+                              pointer pReadmask);
+
+extern _X_EXPORT void DRISwapContext(int drmFD,
+                           void *oldctx,
+                           void *newctx);
+
+extern _X_EXPORT void *DRIGetContextStore(DRIContextPrivPtr context);
+
+extern _X_EXPORT void DRIWindowExposures(WindowPtr pWin,
+                              RegionPtr prgn,
+                              RegionPtr bsreg);
+
+extern _X_EXPORT Bool DRIDestroyWindow(WindowPtr pWin);
+
+extern _X_EXPORT void DRICopyWindow(WindowPtr pWin,
+                          DDXPointRec ptOldOrg,
+                          RegionPtr prgnSrc);
+
+extern _X_EXPORT int DRIValidateTree(WindowPtr pParent,
+                           WindowPtr pChild,
+                           VTKind    kind);
+
+extern _X_EXPORT void DRIPostValidateTree(WindowPtr pParent,
+                                WindowPtr pChild,
+                                VTKind    kind);
+
+extern _X_EXPORT void DRIClipNotify(WindowPtr pWin,
+                          int dx,
+                          int dy);
+
+extern _X_EXPORT CARD32 DRIGetDrawableIndex(WindowPtr pWin);
+
+extern _X_EXPORT void DRIPrintDrawableLock(ScreenPtr pScreen, char *msg);
+
+extern _X_EXPORT void DRILock(ScreenPtr pScreen, int flags);
+
+extern _X_EXPORT void DRIUnlock(ScreenPtr pScreen);
+
+extern _X_EXPORT DRIWrappedFuncsRec *DRIGetWrappedFuncs(ScreenPtr pScreen);
+
+extern _X_EXPORT void *DRIGetSAREAPrivate(ScreenPtr pScreen);
+
+extern _X_EXPORT unsigned int DRIGetDrawableStamp(ScreenPtr pScreen,
+                                        CARD32 drawable_index);
+
+extern _X_EXPORT DRIContextPrivPtr DRICreateContextPriv(ScreenPtr pScreen,
+                                              drm_context_t * pHWContext,
+                                              DRIContextFlags flags);
+
+extern _X_EXPORT DRIContextPrivPtr DRICreateContextPrivFromHandle(ScreenPtr pScreen,
+                                                        drm_context_t hHWContext,
+                                                        DRIContextFlags flags);
+
+extern _X_EXPORT Bool DRIDestroyContextPriv(DRIContextPrivPtr pDRIContextPriv);
+
+extern _X_EXPORT drm_context_t DRIGetContext(ScreenPtr pScreen);
+
+extern _X_EXPORT void DRIQueryVersion(int *majorVersion,
+                            int *minorVersion,
+                            int *patchVersion);
+
+extern _X_EXPORT void DRIAdjustFrame(int scrnIndex, int x, int y, int flags);
+
+extern _X_EXPORT void DRIMoveBuffersHelper(ScreenPtr pScreen,
+                                 int dx,
+                                 int dy,
+                                 int *xdir,
+                                 int *ydir,
+                                 RegionPtr reg);
+
+extern _X_EXPORT char *DRICreatePCIBusID(const struct pci_device *PciInfo);
+
+extern _X_EXPORT int drmInstallSIGIOHandler(int fd, void (*f)(int, void *, void *));
+extern _X_EXPORT int drmRemoveSIGIOHandler(int fd);
+extern _X_EXPORT int DRIMasterFD(ScrnInfoPtr pScrn);
+
+extern _X_EXPORT void *DRIMasterSareaPointer(ScrnInfoPtr pScrn);
+
+extern _X_EXPORT drm_handle_t DRIMasterSareaHandle(ScrnInfoPtr pScrn);
+
+extern _X_EXPORT void DRIGetTexOffsetFuncs(ScreenPtr pScreen,
+                 DRITexOffsetStartProcPtr *texOffsetStartFunc,
+                 DRITexOffsetFinishProcPtr *texOffsetFinishFunc);
+
+#define _DRI_H_
+
+#endif
diff --git a/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/sarea.h b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/sarea.h
new file mode 100644
index 0000000..b05d436
--- /dev/null
+++ b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante/sarea.h
@@ -0,0 +1,110 @@ 
+/****************************************************************************
+*
+*    Copyright (c) 2005 - 2012 by Vivante Corp.  All rights reserved.
+*
+*    The material in this file is confidential and contains trade secrets
+*    of Vivante Corporation. This is proprietary information owned by
+*    Vivante Corporation. No part of this work may be disclosed,
+*    reproduced, copied, transmitted, or used in any way for any purpose,
+*    without the express written permission of Vivante Corporation.
+*
+*****************************************************************************/
+
+
+/**
+ * \file sarea.h
+ * SAREA definitions.
+ *
+ * \author Kevin E. Martin <kevin@precisioninsight.com>
+ * \author Jens Owen <jens@tungstengraphics.com>
+ * \author Rickard E. (Rik) Faith <faith@valinux.com>
+ */
+
+/*
+ * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+#ifndef _SAREA_H_
+#define _SAREA_H_
+
+#include "xf86drm.h"
+
+/* SAREA area needs to be at least a page */
+#if defined(__alpha__)
+#define SAREA_MAX 			0x2000
+#elif defined(__ia64__)
+#define SAREA_MAX			0x10000		/* 64kB */
+#else
+/* Intel 830M driver needs at least 8k SAREA */
+#define SAREA_MAX			0x2000
+#endif
+
+#define SAREA_MAX_DRAWABLES 		256
+
+#define SAREA_DRAWABLE_CLAIMED_ENTRY	0x80000000
+
+/**
+ * SAREA per drawable information.
+ *
+ * \sa _XF86DRISAREA.
+ */
+typedef struct _XF86DRISAREADrawable {
+    unsigned int	stamp;
+    unsigned int	flags;
+} XF86DRISAREADrawableRec, *XF86DRISAREADrawablePtr;
+
+/**
+ * SAREA frame information.
+ *
+ * \sa  _XF86DRISAREA.
+ */
+typedef struct _XF86DRISAREAFrame {
+    unsigned int        x;
+    unsigned int        y;
+    unsigned int        width;
+    unsigned int        height;
+    unsigned int        fullscreen;
+} XF86DRISAREAFrameRec, *XF86DRISAREAFramePtr;
+
+/**
+ * SAREA definition.
+ */
+typedef struct _XF86DRISAREA {
+    /** first thing is always the DRM locking structure */
+    drmLock			lock;
+    /** \todo Use readers/writer lock for drawable_lock */
+    drmLock			drawable_lock;
+    XF86DRISAREADrawableRec	drawableTable[SAREA_MAX_DRAWABLES];
+    XF86DRISAREAFrameRec        frame;
+    drm_context_t			dummy_context;
+} XF86DRISAREARec, *XF86DRISAREAPtr;
+
+typedef struct _XF86DRILSAREA  {
+    drmLock                     lock;
+    drmLock                     otherLocks[31];
+} XF86DRILSAREARec, *XF86DRILSAREAPtr;
+
+#endif
diff --git a/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante_12.09.01.bb b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante_12.09.01.bb
index 2ecd9f4..259f53b 100644
--- a/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante_12.09.01.bb
+++ b/recipes-graphics/xorg-driver/xf86-video-imxfb-vivante_12.09.01.bb
@@ -3,14 +3,16 @@ 
 
 require recipes-graphics/xorg-driver/xorg-driver-video.inc
 
-PR = "${INC_PR}.2"
+PR = "${INC_PR}.3"
 
 DEPENDS += "virtual/libx11 virtual/libgal-x11 gpu-viv-bin-mx6q"
 
 LIC_FILES_CHKSUM = "file://src/vivante_fbdev/vivante.h;endline=19;md5=93a322f91ec495569dcbcfbb2a95454a"
 
 SRC_URI = "${FSL_MIRROR}/xserver-xorg-video-imx-viv-${PV}.tar.gz \
-           file://Makefile.am-remove-prefixed-include-path.patch"
+           file://Makefile.am-remove-prefixed-include-path.patch \
+           file://dri.h \
+           file://sarea.h "
 SRC_URI[md5sum] = "1948119717aa01bed1f630be9ee7a708"
 SRC_URI[sha256sum] = "5b3be4b426d2d2803554df9e4d8919d1f9d17659c3153c71c6529f43c37e6ed1"
 
@@ -20,6 +22,11 @@  LDFLAGS += "-lm -ldl -lX11 -lGAL-x11"
 
 S = "${WORKDIR}/xserver-xorg-video-imx-viv-${PV}"
 
+do_configure_prepend () {
+	cp ${WORKDIR}/dri.h ${S}/src
+	cp ${WORKDIR}/sarea.h ${S}/src
+}
+
 do_install_append () {
 	install -d ${D}${includedir}
 	cp -axr ${S}/src/vivante_gal/vivante_priv.h ${D}${includedir}