From 5216cb0f14414b5451f58df48a36c1c62c035276 Mon Sep 17 00:00:00 2001
From: Otavio Salvador <otavio@ossystems.com.br>
Date: Sat, 29 Dec 2012 18:02:11 -0200
Subject: [PATCH] Make video API forward and backward compatible

This updates the video API in a forward and backward compatible way
using the "compat-api.h" as used in Xorg maintained drivers.

Upstream-Status: Pending

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---
 src/compat-api.h        |  106 +++++++++++++++++++++++++++++++++++++++++++++++
 src/imx_display.c       |   22 +++++-----
 src/imx_display.h       |    8 ++--
 src/imx_driver.c        |   60 ++++++++++++++-------------
 src/imx_exa_offscreen.c |   12 +++---
 src/imx_exa_z160.c      |   53 ++++++++++++------------
 src/imx_xv_ipu.c        |    4 +-
 7 files changed, 188 insertions(+), 77 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..73ac8a2
--- /dev/null
+++ b/src/compat-api.h
@@ -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 <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 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 --git a/src/imx_display.c b/src/imx_display.c
index fcb8195..e2dc36a 100644
--- a/src/imx_display.c
+++ b/src/imx_display.c
@@ -42,6 +42,8 @@
 #include "imx.h"
 #include "imx_display.h"
 
+#include "compat-api.h"
+
 #include <X11/Xatom.h>
 
 #if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,7,6,0,0)
@@ -1373,19 +1375,19 @@ imxDisplayPreInit(ScrnInfoPtr pScrn)
 Bool
 imxDisplayStartScreenInit(int scrnIndex, ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	ImxPtr fPtr = IMXPTR(pScrn);
 
 	if (!xf86SetDesiredModes(pScrn)) {
 
-		xf86DrvMsg(scrnIndex, X_ERROR, "mode initialization failed\n");
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "mode initialization failed\n");
 		return FALSE;
 	}
 
 #if 0
 	if (!fbdevHWModeInit(pScrn, pScrn->currentMode)) {
 
-		xf86DrvMsg(scrnIndex, X_ERROR, "mode initialization failed\n");
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "mode initialization failed\n");
 		return FALSE;
 	}
 	pScrn->displayWidth =
@@ -1463,29 +1465,29 @@ imxDisplayFinishScreenInit(int scrnIndex, ScreenPtr pScreen)
 /* -------------------------------------------------------------------- */
 
 Bool
-imxDisplaySwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+imxDisplaySwitchMode(SWITCH_MODE_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
 
 	return xf86SetSingleMode(pScrn, mode, RR_Rotate_0);
 }
 
 void
-imxDisplayAdjustFrame(int scrnIndex, int x, int y, int flags)
+imxDisplayAdjustFrame(ADJUST_FRAME_ARGS_DECL)
 {
-//	fbdevHWAdjustFrame(scrnIndex, x, y, flags);
+//	fbdevHWAdjustFrame(pScrn->scrnIndex, x, y, flags);
 }
 
 Bool
-imxDisplayEnterVT(int scrnIndex, int flags)
+imxDisplayEnterVT(VT_FUNC_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
 
 	return xf86SetDesiredModes(pScrn);
 }
 
 void
-imxDisplayLeaveVT(int scrnIndex, int flags)
+imxDisplayLeaveVT(VT_FUNC_ARGS_DECL)
 {
 }
 
diff --git a/src/imx_display.h b/src/imx_display.h
index 4a5d5aa..3a3d43a 100644
--- a/src/imx_display.h
+++ b/src/imx_display.h
@@ -59,16 +59,16 @@ imxDisplayValidMode(int scrnIndex, DisplayModePtr mode,
 			Bool verbose, int flags);
 
 extern Bool
-imxDisplaySwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
+imxDisplaySwitchMode(SWITCH_MODE_ARGS_DECL);
 
 extern void
-imxDisplayAdjustFrame(int scrnIndex, int x, int y, int flags);
+imxDisplayAdjustFrame(ADJUST_FRAME_ARGS_DECL);
 
 extern Bool
-imxDisplayEnterVT(int scrnIndex, int flags);
+imxDisplayEnterVT(VT_FUNC_ARGS_DECL);
 
 extern void
-imxDisplayLeaveVT(int scrnIndex, int flags);
+imxDisplayLeaveVT(VT_FUNC_ARGS_DECL);
 
 extern Bool
 imxDisplayChangeFrameBufferRotateEPDC(int scrnIndex, int fbRotate);
diff --git a/src/imx_driver.c b/src/imx_driver.c
index 178e36e..f4b3e38 100644
--- a/src/imx_driver.c
+++ b/src/imx_driver.c
@@ -46,6 +46,8 @@
 #include "fb.h"
 #include "fbdevhw.h"
 
+#include "compat-api.h"
+
 #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
 #include "xf86Resources.h"
 #include "xf86RAC.h"
@@ -435,17 +437,17 @@ errorPreInit:
 }
 
 static void
-imxFreeScreen(int scrnIndex, int flags)
+imxFreeScreen(FREE_SCREEN_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	SCRN_INFO_PTR(arg);
 
 	imxFreeRec(pScrn);
 }
 
 static Bool
-imxCloseScreen(int scrnIndex, ScreenPtr pScreen)
+imxCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	CLOSE_SCREEN_DECL_ScrnInfoPtr;
 	ImxPtr fPtr = IMXPTR(pScrn);
 
 	fbdevHWRestore(pScrn);
@@ -453,7 +455,7 @@ imxCloseScreen(int scrnIndex, ScreenPtr pScreen)
 	pScrn->vtSema = FALSE;
 
 	pScreen->CloseScreen = fPtr->saveCloseScreen;
-	return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+	return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
 static int
@@ -488,9 +490,9 @@ LCM(a, b)
 }
 
 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;
@@ -514,7 +516,7 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	/* Map frame buffer memory */
 	fPtr->fbMemoryBase = fbdevHWMapVidmem(pScrn);
 	if (NULL == fPtr->fbMemoryBase) {
-	        xf86DrvMsg(scrnIndex,X_ERROR,"mapping of video memory"
+	        xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"mapping of video memory"
 			   " failed\n");
 		return FALSE;
 	}
@@ -558,7 +560,7 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	const int fbOffsetScreen2 =
 		IMX_ALIGN(fbMaxScreenSize, fbMaxAlignOffset);
 	fPtr->fbMemoryScreenReserve = fbMaxScreenSize;
-	xf86DrvMsg(scrnIndex, X_INFO,
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 		"reserve %d bytes of frame buffer for screen\n",
 		fPtr->fbMemoryScreenReserve);
 	fPtr->fbMemoryStart2 = NULL;
@@ -568,12 +570,12 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 
 		fPtr->fbMemoryScreenReserve += fbOffsetScreen2;
 
-		xf86DrvMsg(scrnIndex, X_INFO,
+		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 			"reserve same number of bytes for XRandR rotated screen at offset %d\n",
 			fbOffsetScreen2);
 	}
 
-	if (!imxDisplayStartScreenInit(scrnIndex, pScreen)) {
+	if (!imxDisplayStartScreenInit(pScrn->scrnIndex, pScreen)) {
 
 		return FALSE;
 	}
@@ -582,7 +584,7 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	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;
@@ -591,14 +593,14 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 		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;
 	}
 
@@ -607,10 +609,10 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 		has a padding which is independent from the depth (controlfb) */
 	pScrn->displayWidth = fbdevHWGetLineLength(pScrn) /
 			      (pScrn->bitsPerPixel / 8);
-	xf86DrvMsg(scrnIndex, X_INFO, "displayWidth = %d\n", pScrn->displayWidth);
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "displayWidth = %d\n", pScrn->displayWidth);
 
 	if (pScrn->displayWidth != pScrn->virtualX) {
-		xf86DrvMsg(scrnIndex, X_INFO,
+		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 			   "Pitch updated to %d after ModeInit\n",
 			   pScrn->displayWidth);
 	}
@@ -633,7 +635,7 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 			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);
@@ -644,7 +646,7 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	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;
@@ -652,20 +654,20 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	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;
@@ -699,7 +701,7 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	/* INIT ACCELERATION BEFORE INIT FOR BACKING STORE & SOFTWARE CURSOR */ 
 	if (fPtr->useAccel) {
 
-		if (!imxExaZ160Setup(scrnIndex, pScreen)) {
+		if (!imxExaZ160Setup(pScrn->scrnIndex, pScreen)) {
 
 			fPtr->useAccel = FALSE;
 		}
@@ -731,29 +733,29 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	/* 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;
@@ -782,7 +784,7 @@ imxScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	}
 #endif
 
-	if (!imxDisplayFinishScreenInit(scrnIndex, pScreen)) {
+	if (!imxDisplayFinishScreenInit(pScrn->scrnIndex, pScreen)) {
 		return FALSE;
 	}
 
@@ -810,7 +812,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 --git a/src/imx_exa_offscreen.c b/src/imx_exa_offscreen.c
index 3a5c24d..0fbe2fc 100644
--- a/src/imx_exa_offscreen.c
+++ b/src/imx_exa_offscreen.c
@@ -79,7 +79,7 @@ static void
 imxExaOffscreenValidate (ScreenPtr pScreen)
 {
     /* Access the driver specific data. */
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     ImxPtr imxPtr = IMXPTR(pScrn);
     ImxExaPtr imxExaPtr = IMXEXAPTR(imxPtr);
     ExaOffscreenArea *prev = 0, *area;
@@ -135,7 +135,7 @@ imxExaOffscreenMerge (ImxExaPtr imxExaPtr, ExaOffscreenArea *area)
 ExaOffscreenArea *
 imxExaOffscreenFree (ScreenPtr pScreen, ExaOffscreenArea *area)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     ImxPtr imxPtr = IMXPTR(pScrn);
     ImxExaPtr imxExaPtr = IMXEXAPTR(imxPtr);
     ExaOffscreenArea	*next = area->next;
@@ -281,7 +281,7 @@ imxExaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
                    pointer privData)
 {
     ExaOffscreenArea *area;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     ImxPtr imxPtr = IMXPTR(pScrn);
     ImxExaPtr imxExaPtr = IMXEXAPTR(imxPtr);
     int real_size = 0, largest_avail = 0;
@@ -418,7 +418,7 @@ imxExaOffscreenSwapIn (ScreenPtr pScreen)
 Bool
 imxExaOffscreenInit (ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     ImxPtr imxPtr = IMXPTR(pScrn);
     ImxExaPtr imxExaPtr = IMXEXAPTR(imxPtr);
     ExaOffscreenArea *area;
@@ -453,7 +453,7 @@ imxExaOffscreenInit (ScreenPtr pScreen)
 void
 imxExaOffscreenFini (ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     ImxPtr imxPtr = IMXPTR(pScrn);
     ImxExaPtr imxExaPtr = IMXEXAPTR(imxPtr);
     ExaOffscreenArea *area;
@@ -472,7 +472,7 @@ imxExaOffscreenFini (ScreenPtr pScreen)
 void
 imxExaOffscreenSwapOut (ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     ImxPtr imxPtr = IMXPTR(pScrn);
     ImxExaPtr imxExaPtr = IMXEXAPTR(imxPtr);
 
diff --git a/src/imx_exa_z160.c b/src/imx_exa_z160.c
index fb718e0..3d0bc96 100644
--- a/src/imx_exa_z160.c
+++ b/src/imx_exa_z160.c
@@ -32,6 +32,7 @@
 #include <errno.h>
 #include <fcntl.h>
 
+#include "compat-api.h"
 
 /* Set if handles pixmap allocation and migration, i.e, EXA_HANDLES_PIXMAPS */
 #define	IMX_EXA_ENABLE_HANDLES_PIXMAPS	\
@@ -299,7 +300,7 @@ imxExaZ160GetPixmapAddress(PixmapPtr pPixmap)
 	return fPixmapPtr->ptr;
 #else
 	/* Access screen associated with this pixmap. */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -344,7 +345,7 @@ imxExaZ160GetPixmapProperties(
 #else
 
 	/* Access screen associated with this pixmap. */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 
 	/* Make sure pixmap is in framebuffer */
 	if (!exaDrawableIsOffscreen(&(pPixmap->drawable))) {
@@ -856,7 +857,7 @@ imxExaZ160SyncIfBusyPixmap(PixmapPtr pPixmap)
 {
 	/* Access screen associated with this pixmap. */
 	ScreenPtr pScreen = pPixmap->drawable.pScreen;
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 
 	/* Access driver specific data for screen. */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -924,7 +925,7 @@ imxExaZ160CreatePixmap2(ScreenPtr pScreen, int width, int height,
 	}
 
 	/* Access the driver specific data. */
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	ImxPtr imxPtr = IMXPTR(pScrn);
 	ImxExaZ160Ptr fPtr = IMXEXAZ160PTR(imxPtr);
 	
@@ -1028,7 +1029,7 @@ imxExaZ160DestroyPixmap(ScreenPtr pScreen, void *driverPriv)
 	ImxExaPixmapPtr fPixmapPtr = (ImxExaPixmapPtr)driverPriv;
 
 	/* Access the driver specific data. */
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	ImxPtr imxPtr = IMXPTR(pScrn);
 	ImxExaZ160Ptr fPtr = IMXEXAZ160PTR(imxPtr);
 
@@ -1068,7 +1069,7 @@ imxExaZ160ModifyPixmapHeader(PixmapPtr pPixmap, int width, int height,
 	}
 
 	/* Access screen associated with this pixmap */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -1194,7 +1195,7 @@ imxExaZ160TrackBusyPixmap(ImxExaZ160Ptr fPtr, PixmapPtr pPixmap)
 static void
 imxExaZ160WaitMarker(ScreenPtr pScreen, int marker)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 
 	/* Access driver specific data associated with the screen. */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -1249,7 +1250,7 @@ imxExaZ160PrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg)
 	}
 
 	/* Access screen associated with this pixmap */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -1352,7 +1353,7 @@ static void
 imxExaZ160Solid(PixmapPtr pPixmap, int x1, int y1, int x2, int y2)
 {
 	/* Access screen associated with this pixmap */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -1423,7 +1424,7 @@ static void
 imxExaZ160DoneSolid(PixmapPtr pPixmap)
 {
 	/* Access screen associated with this pixmap */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -1485,7 +1486,7 @@ imxExaZ160PrepareCopy(
 	}
 
 	/* Access the screen associated with this pixmap. */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -1599,7 +1600,7 @@ static void
 imxExaZ160Copy(PixmapPtr pPixmapDst, int srcX, int srcY, int dstX, int dstY, int width, int height)
 {
 	/* Access screen associated with dst pixmap */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -1661,7 +1662,7 @@ static void
 imxExaZ160DoneCopy(PixmapPtr pPixmapDst)
 {
 	/* Access screen associated with this pixmap */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -1770,7 +1771,7 @@ imxExaZ160CheckComposite(int op, PicturePtr pPictureSrc, PicturePtr pPictureMask
 	}
 
 	/* Access screen associated with dst pixmap (same screen as for src pixmap). */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen);
 
 	/* Check the number of entities, and fail if it isn't one. */
 	if (pScrn->numEntities != 1) {
@@ -1987,7 +1988,7 @@ imxExaZ160PrepareComposite(
 {
 	/* Access screen associated with dst pixmap. */
 	/* Should be same screen as for src pixmap. */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen);
 
 	/* NOTE - many preconditions already verified in CheckComposite. */
 
@@ -2196,7 +2197,7 @@ imxExaZ160Composite(
 	int height)
 {
 	/* Access screen associated with dst pixmap */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -2275,7 +2276,7 @@ static void
 imxExaZ160DoneComposite(PixmapPtr pPixmapDst)
 {
 	/* Access screen associated with this pixmap */
-	ScrnInfoPtr pScrn = xf86Screens[pPixmapDst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmapDst->drawable.pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -2323,7 +2324,7 @@ imxExaZ160UploadToScreen(
 
 	/* Access screen associated with this pixmap */
 	ScreenPtr pScreen = pPixmapDst->drawable.pScreen;
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -2381,7 +2382,7 @@ imxExaZ160DownloadFromScreen(
 
 	/* Access screen associated with this pixmap */
 	ScreenPtr pScreen = pPixmapSrc->drawable.pScreen;
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 
 	/* Access driver specific data */
 	ImxPtr imxPtr = IMXPTR(pScrn);
@@ -2412,9 +2413,9 @@ imxExaZ160DownloadFromScreen(
 }
 
 Bool
-imxExaZ160CloseScreen(int scrnIndex, ScreenPtr pScreen)
+imxExaZ160CloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+	CLOSE_SCREEN_DECL_ScrnInfoPtr;
 	ImxPtr imxPtr = IMXPTR(pScrn);
 
 	ImxExaZ160Ptr fPtr = IMXEXAZ160PTR(imxPtr);
@@ -2504,7 +2505,7 @@ imxExaZ160CloseScreen(int scrnIndex, ScreenPtr pScreen)
 	/* Install our CloseScreen function so that it gets called. */
 	if (NULL != pScreen->CloseScreen) {
 
-		return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+		return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 	}
 
 	return TRUE;
@@ -2514,7 +2515,7 @@ Bool
 imxExaZ160Setup(int scrnIndex, ScreenPtr pScreen)
 {
 	/* Access the screen info and then private data structures. */
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	ImxPtr imxPtr = IMXPTR(pScrn);
 
 	/* Private data structure must not already be in use. */
@@ -2582,7 +2583,7 @@ imxExaZ160Setup(int scrnIndex, ScreenPtr pScreen)
 
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 			"Initialize Z160 interfaces failed.\n");
-		imxExaZ160CloseScreen(scrnIndex, pScreen);
+		imxExaZ160CloseScreen(CLOSE_SCREEN_ARGS);
 		return FALSE;
 	}
 
@@ -2592,7 +2593,7 @@ imxExaZ160Setup(int scrnIndex, ScreenPtr pScreen)
 
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 			"Allocate EXA driver structure.\n");
-		imxExaZ160CloseScreen(scrnIndex, pScreen);
+		imxExaZ160CloseScreen(CLOSE_SCREEN_ARGS);
 		return FALSE;
 	}
 
@@ -2657,7 +2658,7 @@ imxExaZ160Setup(int scrnIndex, ScreenPtr pScreen)
 	if (!exaDriverInit(pScreen, exaDriverPtr)) {
 
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "EXA initialization failed.\n");
-		imxExaZ160CloseScreen(scrnIndex, pScreen);
+		imxExaZ160CloseScreen(CLOSE_SCREEN_ARGS);
 		return FALSE;
 	}
 	fPtr->imxExaRec.exaDriverPtr = exaDriverPtr;
diff --git a/src/imx_xv_ipu.c b/src/imx_xv_ipu.c
index a517742..fc8a827 100644
--- a/src/imx_xv_ipu.c
+++ b/src/imx_xv_ipu.c
@@ -398,7 +398,7 @@ xf86XVFillKeyHelper1 (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes)
 	xRectangle *rects;
 	GCPtr gc;
 
-	if(!xf86Screens[pScreen->myNum]->vtSema) return;
+	if(!xf86ScreenToScrn(pScreen)->vtSema) return;
 
 	gc = GetScratchGC(root->depth, pScreen);
 	pval[0] = key;
@@ -771,7 +771,7 @@ MXXVInitializeAdaptor
 	XF86VideoAdaptorPtr **pppAdaptor
 )
 {
-	ScreenPtr           pScreen    = screenInfo.screens[pScreenInfo->scrnIndex];
+	ScreenPtr           pScreen    = xf86ScrnToScreen(pScreenInfo);
 	XF86VideoAdaptorPtr *ppAdaptor = NULL;
 	IMXPtr fPtr = IMXPTR(pScreenInfo);
 	int                 nAdaptor;
-- 
1.7.10.4

