Binary files xorg-video-imxng.orig/.git/index and xorg-video-imxng/.git/index differ diff -pruN xorg-video-imxng.orig/src/compat-api.h xorg-video-imxng/src/compat-api.h --- xorg-video-imxng.orig/src/compat-api.h 1970-01-01 01:00:00.000000000 +0100 +++ xorg-video-imxng/src/compat-api.h 2013-02-13 01:18:02.808280498 +0100 @@ -0,0 +1,106 @@ +/* + * 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 + */ + +/* 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 CLOSE_SCREEN_DECL_ScrnInfoPtr ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + +#define FBDEVHWADJUSTFRAME_ARGS(x, y) scrnIndex, (x), (y), 0 + +#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 ENABLE_DISABLE_FB_ACCESS_ARGS(pScrn, b) pScrn->scrnIndex, b + +#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 CLOSE_SCREEN_DECL_ScrnInfoPtr ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + +#define FBDEVHWADJUSTFRAME_ARGS(x, y) pScrn, (x), (y) + +#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 ENABLE_DISABLE_FB_ACCESS_ARGS(pScrn, b) pScrn, b + +#define XF86_ENABLEDISABLEFB_ARG(x) (x) + +#endif + +#endif diff -pruN xorg-video-imxng.orig/src/imx_drv.c xorg-video-imxng/src/imx_drv.c --- xorg-video-imxng.orig/src/imx_drv.c 2013-02-13 00:31:37.858284376 +0100 +++ xorg-video-imxng/src/imx_drv.c 2013-02-14 20:37:53.418271127 +0100 @@ -64,6 +64,8 @@ #include "xf86xv.h" +#include "compat-api.h" + static Bool debug = 0; #define TRACE_ENTER(str) \ @@ -80,8 +82,8 @@ static const OptionInfoRec * IMXAvailabl static void IMXIdentify(int flags); static Bool IMXProbe(DriverPtr drv, int flags); static Bool IMXPreInit(ScrnInfoPtr pScrn, int flags); -static Bool IMXScreenInit(int Index, ScreenPtr pScreen, int argc, char **argv); -static Bool IMXCloseScreen(int scrnIndex, ScreenPtr pScreen); +static Bool IMXScreenInit(SCREEN_INIT_ARGS_DECL); +static Bool IMXCloseScreen(CLOSE_SCREEN_ARGS_DECL); static Bool IMXDriverFunc(ScrnInfoPtr pScrn, xorgDriverFuncOp op, pointer ptr); /* for XV acceleration */ @@ -520,9 +522,9 @@ IMXPreInit(ScrnInfoPtr pScrn, int flags) } static Bool -IMXScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) +IMXScreenInit(SCREEN_INIT_ARGS_DECL) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); IMXPtr fPtr = IMXPTR(pScrn); VisualPtr visual; int init_picture = 0; @@ -540,28 +542,27 @@ IMXScreenInit(int scrnIndex, ScreenPtr p pScrn->mask.red,pScrn->mask.green,pScrn->mask.blue, pScrn->offset.red,pScrn->offset.green,pScrn->offset.blue); #endif - if (NULL == (fPtr->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; - } + } fPtr->fboff = fbdevHWLinearOffset(pScrn); fbdevHWSave(pScrn); if (!fbdevHWModeInit(pScrn, pScrn->currentMode)) { - xf86DrvMsg(scrnIndex,X_ERROR,"mode initialization failed\n"); + xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"mode initialization failed\n"); return FALSE; } fbdevHWSaveScreen(pScreen, SCREEN_SAVER_ON); - fbdevHWAdjustFrame(scrnIndex,0,0,0); + fbdevHWAdjustFrame(pScrn, 0, 0); /* mi layer */ miClearVisualTypes(); if (pScrn->bitsPerPixel > 8) { if (!miSetVisualTypes(pScrn->depth, TrueColorMask, pScrn->rgbBits, TrueColor)) { - xf86DrvMsg(scrnIndex,X_ERROR,"visual type setup failed" + xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"visual type setup failed" " for %d bits per pixel [1]\n", pScrn->bitsPerPixel); return FALSE; @@ -570,14 +571,14 @@ IMXScreenInit(int scrnIndex, ScreenPtr p if (!miSetVisualTypes(pScrn->depth, miGetDefaultVisualMask(pScrn->depth), pScrn->rgbBits, pScrn->defaultVisual)) { - xf86DrvMsg(scrnIndex,X_ERROR,"visual type setup failed" + xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"visual type setup failed" " for %d bits per pixel [2]\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; } @@ -587,7 +588,7 @@ IMXScreenInit(int scrnIndex, ScreenPtr p (pScrn->bitsPerPixel / 8); if (pScrn->displayWidth != pScrn->virtualX) { - xf86DrvMsg(scrnIndex, X_INFO, + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Pitch updated to %d after ModeInit\n", pScrn->displayWidth); } @@ -610,7 +611,7 @@ IMXScreenInit(int scrnIndex, ScreenPtr p init_picture = 1; break; default: - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: invalid number of bits per" " pixel (%d) encountered in" " IMXScreenInit()\n", pScrn->bitsPerPixel); @@ -621,7 +622,7 @@ IMXScreenInit(int scrnIndex, ScreenPtr p case FBDEVHW_INTERLEAVED_PLANES: /* This should never happen ... * we should check for this much much earlier ... */ - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: interleaved planes are not yet " "supported by the imx driver\n"); ret = FALSE; @@ -629,20 +630,20 @@ IMXScreenInit(int scrnIndex, ScreenPtr p case FBDEVHW_TEXT: /* This should never happen ... * we should check for this much much earlier ... */ - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: text mode is not supported by the " "imx driver\n"); ret = FALSE; break; case FBDEVHW_VGA_PLANES: /* Not supported yet */ - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: EGA/VGA Planes are not yet " "supported by the imx driver\n"); ret = FALSE; break; default: - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: unrecognised hardware type (%d) " "encountered in IMXScreenInit()\n", type); ret = FALSE; @@ -674,9 +675,9 @@ IMXScreenInit(int scrnIndex, ScreenPtr p xf86SetBlackWhitePixels(pScreen); /* INITIALIZE ACCELERATION BEFORE INIT FOR BACKING STORE AND SOFTWARE CURSOR */ - if (!IMX_EXA_ScreenInit(scrnIndex, pScreen)) { + if (!IMX_EXA_ScreenInit(pScrn->scrnIndex, pScreen)) { - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "IMX EXA failed to initialize screen.\n"); return FALSE; } @@ -708,29 +709,29 @@ IMXScreenInit(int scrnIndex, ScreenPtr p /* XXX It would be simpler to use miCreateDefColormap() in all cases. */ case FBDEVHW_PACKED_PIXELS: if (!miCreateDefColormap(pScreen)) { - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: miCreateDefColormap failed " "in IMXScreenInit()\n"); return FALSE; } break; case FBDEVHW_INTERLEAVED_PLANES: - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: interleaved planes are not yet " "supported by the imx driver\n"); return FALSE; case FBDEVHW_TEXT: - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: text mode is not supported by " "the imx driver\n"); return FALSE; case FBDEVHW_VGA_PLANES: - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: EGA/VGA planes are not yet " "supported by the imx driver\n"); return FALSE; default: - xf86DrvMsg(scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "internal error: unrecognised imx hardware type " "(%d) encountered in IMXScreenInit()\n", type); return FALSE; @@ -762,13 +763,12 @@ IMXScreenInit(int scrnIndex, ScreenPtr p } static Bool -IMXCloseScreen(int scrnIndex, ScreenPtr pScreen) +IMXCloseScreen(CLOSE_SCREEN_ARGS_DECL) { - IMX_EXA_CloseScreen(scrnIndex, pScreen); - - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + CLOSE_SCREEN_DECL_ScrnInfoPtr; IMXPtr fPtr = IMXPTR(pScrn); + IMX_EXA_CloseScreen(pScrn->scrnIndex, pScreen); fbdevHWRestore(pScrn); fbdevHWUnmapVidmem(pScrn); pScrn->vtSema = FALSE; @@ -777,7 +777,7 @@ IMXCloseScreen(int scrnIndex, ScreenPtr IMXFreeRec(pScrn); - return (*pScreen->CloseScreen)(scrnIndex, pScreen); + return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS); } Bool @@ -796,7 +796,7 @@ IMXGetPixmapProperties( } /* Access screen associated with this pixmap. */ - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen); /* Check if the screen associated with this pixmap has IMX driver. */ if (0 != strcmp(IMX_DRIVER_NAME, pScrn->driverName)) { diff -pruN xorg-video-imxng.orig/src/imx_exa_c2d.c xorg-video-imxng/src/imx_exa_c2d.c --- xorg-video-imxng.orig/src/imx_exa_c2d.c 2013-02-13 00:31:37.868285501 +0100 +++ xorg-video-imxng/src/imx_exa_c2d.c 2013-02-14 18:29:47.368267874 +0100 @@ -45,6 +45,8 @@ #include "imx_type.h" +#include "compat-api.h" + #if IMX_EXA_VERSION_COMPILED < IMX_EXA_VERSION(2, 5, 0) #error This driver can be built only against EXA version 2.5.0 or higher. #endif @@ -1204,7 +1206,7 @@ IMX_EXA_GetPixmapProperties( return FALSE; /* Access screen info associated with this pixmap. */ - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -1236,7 +1238,7 @@ IMXEXACreatePixmap2( int *pPitch) { /* Access screen info associated with this screen. */ - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -1372,7 +1374,7 @@ IMXEXADestroyPixmap( IMXEXAPixmapPtr fPixmapPtr = (IMXEXAPixmapPtr) driverPriv; /* Access screen info associated with this screen. */ - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -1468,7 +1470,7 @@ IMXEXAModifyPixmapHeader( return FALSE; /* Access screen info associated with this pixmap. */ - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -1688,7 +1690,7 @@ IMXEXAPrepareAccess( return FALSE; /* Access screen info associated with this pixmap. */ - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -1759,7 +1761,7 @@ IMXEXAFinishAccess( return; /* Access screen info associated with this pixmap. */ - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen); #if 0 /* Access driver specific data associated with the screen. */ @@ -1802,7 +1804,7 @@ IMXEXAPrepareSolid( return FALSE; /* Access screen info associated with this pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -1900,7 +1902,7 @@ IMXEXASolid( int x2, int y2) { /* Access screen info associated with this pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -1953,7 +1955,7 @@ IMXEXADoneSolid( PixmapPtr pPixmap) { /* Access screen info associated with this pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -1985,7 +1987,7 @@ IMXEXAPrepareCopy( return FALSE; /* Access the screen associated with this pixmap. */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -2083,7 +2085,7 @@ IMXEXACopy( int width, int height) { /* Access screen info associated with dst pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -2143,7 +2145,7 @@ IMXEXADoneCopy( PixmapPtr pPixmapDst) { /* Access screen info associated with this pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -2176,7 +2178,7 @@ IMXEXAUploadToScreen( return FALSE; /* Access screen info associated with this pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen); if (0 >= width || 0 >= height || 0 > dstX || 0 > dstY) { @@ -2268,7 +2270,7 @@ IMXEXADownloadFromScreen( return FALSE; /* Access screen info associated with this pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapSrc->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapSrc->drawable.pScreen); if (0 >= width || 0 >= height || 0 > srcX || 0 > srcY) { @@ -2352,7 +2354,7 @@ IMXEXAWaitMarker( int marker) { /* Access screen info associated with this screen. */ - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -2411,7 +2413,7 @@ IMXEXACheckComposite( return FALSE; /* Access screen associated with dst pixmap. */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -2679,7 +2681,7 @@ IMXEXAPrepareComposite( PixmapPtr pPixmapDst) { /* Access the screen associated with this pixmap. */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -2825,7 +2827,7 @@ IMXEXAComposite( int height) { /* Access screen info associated with dst pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -2906,7 +2908,7 @@ IMXEXADoneComposite( PixmapPtr pPixmapDst) { /* Access screen info associated with this pixmap */ - ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -2949,7 +2951,7 @@ Bool IMX_EXA_ScreenInit(int scrnIndex, ScreenPtr pScreen) { /* Access screen info associated with this screen. */ - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); @@ -3066,7 +3068,7 @@ Bool IMX_EXA_CloseScreen(int scrnIndex, ScreenPtr pScreen) { /* Access screen info associated with this screen. */ - ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); /* Access driver specific data associated with the screen. */ IMXPtr imxPtr = IMXPTR(pScrn); diff -pruN xorg-video-imxng.orig/src/imx_xv_c2d.c xorg-video-imxng/src/imx_xv_c2d.c --- xorg-video-imxng.orig/src/imx_xv_c2d.c 2013-02-13 00:31:37.858284376 +0100 +++ xorg-video-imxng/src/imx_xv_c2d.c 2013-02-14 19:54:53.408267627 +0100 @@ -1169,7 +1169,7 @@ IMXXVInitAdaptorC2D( imxxv_fill_surface(imxexaPtr->gpuContext, imxexaPtr->doubleSurf, 0U); /* This early during driver init ScrnInfoPtr does not have a valid ScreenPtr yet. */ - ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex]; + ScreenPtr pScreen = xf86ScrnToScreen(pScrn); XF86VideoAdaptorPtr *ppAdaptor = NULL; const int nAdaptor = imxxv_init_adaptor(pScreen, pScrn, &ppAdaptor);