diff --git a/import-layers/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-glamo/0003-glamo-driver-adapt-to-xserver-0.13-video-API.patch b/import-layers/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-glamo/0003-glamo-driver-adapt-to-xserver-0.13-video-API.patch
new file mode 100644
index 0000000..cbdc6e7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-oe/recipes-graphics/xorg-driver/xf86-video-glamo/0003-glamo-driver-adapt-to-xserver-0.13-video-API.patch
@@ -0,0 +1,279 @@
+From 57e8944e3cced03b9526bd075649d74d97c24899 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Tue, 20 Nov 2012 22:18:23 +0100
+Subject: [PATCH 3/3] glamo-driver: adapt to xserver-0.13 video API
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ src/compat-api.h   | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/glamo-driver.c | 43 ++++++++++++------------
+ 2 files changed, 118 insertions(+), 21 deletions(-)
+ create mode 100644 src/compat-api.h
+
+diff --git a/src/compat-api.h b/src/compat-api.h
+new file mode 100644
+index 0000000..b1591b1
+--- /dev/null
++++ b/src/compat-api.h
+@@ -0,0 +1,96 @@
++/*
++ * Copyright 2012 Red Hat, Inc.
++ *
++ * 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, sublicense,
++ * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS 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.
++ *
++ * Author: Dave Airlie <airlied@redhat.com>
++ */
++
++/* this file provides API compat between server post 1.13 and pre it,
++   it should be reused inside as many drivers as possible */
++#ifndef COMPAT_API_H
++#define COMPAT_API_H
++
++#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR
++#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum]
++#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p
++#endif
++
++#ifndef XF86_HAS_SCRN_CONV
++#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum]
++#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex]
++#endif
++
++#ifndef XF86_SCRN_INTERFACE
++
++#define SCRN_ARG_TYPE int
++#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = xf86Screens[(arg1)]
++
++#define SCREEN_ARG_TYPE int
++#define SCREEN_PTR(arg1) ScreenPtr pScreen = screenInfo.screens[(arg1)]
++
++#define SCREEN_INIT_ARGS_DECL int index, ScreenPtr pScreen, int argc, char **argv
++
++#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer pTimeout, pointer pReadmask
++#define BLOCKHANDLER_ARGS arg, blockData, pTimeout, pReadmask
++
++#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr pScreen
++#define CLOSE_SCREEN_ARGS scrnIndex, pScreen
++
++#define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags
++
++#define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags
++
++#define FREE_SCREEN_ARGS_DECL int arg, int flags
++#define FREE_SCREEN_ARGS(x) (x)->scrnIndex, 0
++
++#define VT_FUNC_ARGS_DECL int arg, int flags
++#define VT_FUNC_ARGS(flags) pScrn->scrnIndex, (flags)
++
++#define XF86_ENABLEDISABLEFB_ARG(x) ((x)->scrnIndex)
++#else
++#define SCRN_ARG_TYPE ScrnInfoPtr
++#define SCRN_INFO_PTR(arg1) ScrnInfoPtr pScrn = (arg1)
++
++#define SCREEN_ARG_TYPE ScreenPtr
++#define SCREEN_PTR(arg1) ScreenPtr pScreen = (arg1)
++
++#define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv
++
++#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask
++#define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask
++
++#define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen
++#define CLOSE_SCREEN_ARGS pScreen
++
++#define ADJUST_FRAME_ARGS_DECL ScrnInfoPtr arg, int x, int y
++#define SWITCH_MODE_ARGS_DECL ScrnInfoPtr arg, DisplayModePtr mode
++
++#define FREE_SCREEN_ARGS_DECL ScrnInfoPtr arg
++#define FREE_SCREEN_ARGS(x) (x)
++
++#define VT_FUNC_ARGS_DECL ScrnInfoPtr arg
++#define VT_FUNC_ARGS(flags) pScrn
++
++#define XF86_ENABLEDISABLEFB_ARG(x) (x)
++
++#endif
++
++#endif
+diff --git a/src/glamo-driver.c b/src/glamo-driver.c
+index b13caae..10b7762 100644
+--- a/src/glamo-driver.c
++++ b/src/glamo-driver.c
+@@ -43,6 +43,7 @@
+ 
+ #include <sys/mman.h>
+ 
++#include "compat-api.h"
+ 
+ static Bool debug = 0;
+ 
+@@ -68,10 +69,10 @@ static Bool
+ GlamoPreInit(ScrnInfoPtr pScrn, int flags);
+ 
+ static Bool
+-GlamoScreenInit(int Index, ScreenPtr pScreen, int argc, char **argv);
++GlamoScreenInit(SCREEN_INIT_ARGS_DECL);
+ 
+ static Bool
+-GlamoCloseScreen(int scrnIndex, ScreenPtr pScreen);
++GlamoCloseScreen(CLOSE_SCREEN_ARGS_DECL);
+ 
+ static Bool
+ GlamoCrtcResize(ScrnInfoPtr scrn, int width, int height);
+@@ -86,10 +87,10 @@ static void
+ GlamoRestoreHW(ScrnInfoPtr pScren);
+ 
+ static Bool
+-GlamoEnterVT(int scrnIndex, int flags);
++GlamoEnterVT(VT_FUNC_ARGS_DECL);
+ 
+ static void
+-GlamoLeaveVT(int scrnIndex, int flags);
++GlamoLeaveVT(VT_FUNC_ARGS_DECL);
+ 
+ static void
+ GlamoLoadColormap(ScrnInfoPtr pScrn, int numColors, int *indices,
+@@ -248,8 +249,8 @@ GlamoUnmapMMIO(ScrnInfoPtr pScrn) {
+ }
+ 
+ static Bool
+-GlamoSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) {
+-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
++GlamoSwitchMode(SWITCH_MODE_ARGS_DECL) {
++    SCRN_INFO_PTR(arg);
+     xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (pScrn);
+     xf86OutputPtr output = config->output[config->compat_output];
+     Rotation rotation;
+@@ -286,7 +287,7 @@ GlamoFbdevProbe(DriverPtr drv, GDevPtr *devSections, int numDevSections)
+ 
+ 	for (i = 0; i < numDevSections; i++) {
+ 
+-		dev = xf86FindOptionValue(devSections[i]->options, "Device");
++		dev = (char *) xf86FindOptionValue(devSections[i]->options, "Device");
+ 		if (fbdevHWProbe(NULL, dev, NULL)) {
+ 			int entity;
+ 			pScrn = NULL;
+@@ -430,7 +431,7 @@ GlamoPreInit(ScrnInfoPtr pScrn, int flags)
+ 
+     pGlamo->pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
+ 
+-    fb_device = xf86FindOptionValue(pGlamo->pEnt->device->options, "Device");
++    fb_device = (char *) xf86FindOptionValue(pGlamo->pEnt->device->options, "Device");
+ 
+     /* open device */
+     if (!fbdevHWInit(pScrn, NULL, fb_device))
+@@ -523,7 +524,7 @@ GlamoPreInit(ScrnInfoPtr pScrn, int flags)
+ 
+ 
+ static Bool
+-GlamoScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
++GlamoScreenInit(SCREEN_INIT_ARGS_DECL)
+ {
+     ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+     GlamoPtr pGlamo = GlamoPTR(pScrn);
+@@ -545,7 +546,7 @@ GlamoScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+ #endif
+ 
+     if (NULL == (pGlamo->fbmem = fbdevHWMapVidmem(pScrn))) {
+-        xf86DrvMsg(scrnIndex, X_ERROR, "mapping of video memory failed\n");
++        xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "mapping of video memory failed\n");
+         return FALSE;
+     }
+ 
+@@ -556,13 +557,13 @@ GlamoScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+     /* mi layer */
+     miClearVisualTypes();
+     if (!miSetVisualTypes(pScrn->depth, TrueColorMask, pScrn->rgbBits, TrueColor)) {
+-        xf86DrvMsg(scrnIndex, X_ERROR,
++        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+                    "visual type setup failed for %d bits per pixel [1]\n",
+                    pScrn->bitsPerPixel);
+         return FALSE;
+     }
+     if (!miSetPixmapDepths()) {
+-      xf86DrvMsg(scrnIndex, X_ERROR, "pixmap depth setup failed\n");
++      xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "pixmap depth setup failed\n");
+       return FALSE;
+     }
+ 
+@@ -617,7 +618,7 @@ GlamoScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+     /* software cursor */
+     miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
+ 
+-    GlamoEnterVT(scrnIndex, 0);
++    GlamoEnterVT(VT_FUNC_ARGS(0));
+ 
+     xf86CrtcScreenInit(pScreen);
+ #if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,5,0,0,0)
+@@ -627,7 +628,7 @@ GlamoScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+     /* colormap */
+     pGlamo->colormap = NULL;
+     if (!miCreateDefColormap(pScreen)) {
+-        xf86DrvMsg(scrnIndex, X_ERROR,
++        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+                    "internal error: miCreateDefColormap failed "
+                    "in GlamoScreenInit()\n");
+         return FALSE;
+@@ -652,9 +653,9 @@ GlamoScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+ }
+ 
+ static Bool
+-GlamoCloseScreen(int scrnIndex, ScreenPtr pScreen)
++GlamoCloseScreen(CLOSE_SCREEN_ARGS_DECL)
+ {
+-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
++    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
+     GlamoPtr pGlamo = GlamoPTR(pScrn);
+ 
+     if (pGlamo->accel)
+@@ -675,7 +676,7 @@ GlamoCloseScreen(int scrnIndex, ScreenPtr pScreen)
+ 
+     pScreen->CreateScreenResources = pGlamo->CreateScreenResources;
+     pScreen->CloseScreen = pGlamo->CloseScreen;
+-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
++    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
+ }
+ 
+ static Bool
+@@ -826,8 +827,8 @@ GlamoRestoreHW(ScrnInfoPtr pScrn) {
+ }
+ 
+ static Bool
+-GlamoEnterVT(int scrnIndex, int flags) {
+-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
++GlamoEnterVT(VT_FUNC_ARGS_DECL) {
++    SCRN_INFO_PTR(arg);
+     GlamoPtr pGlamo = GlamoPTR(pScrn);
+ 
+     GlamoSaveHW(pScrn);
+@@ -842,8 +843,8 @@ GlamoEnterVT(int scrnIndex, int flags) {
+ }
+ 
+ static void
+-GlamoLeaveVT(int scrnIndex, int flags) {
+-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
++GlamoLeaveVT(VT_FUNC_ARGS_DECL) {
++    SCRN_INFO_PTR(arg);
+     GlamoPtr pGlamo = GlamoPTR(pScrn);
+ 
+     if (pGlamo->accel)
+-- 
+1.8.0
+
