From 803ecf2909949e6152f4a81b6cbb92a4430679ac Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Fri, 23 Nov 2012 00:31:06 +0100
Subject: [PATCH 6/6] omapfb: port to new xserver video API

Upstream-Status: Pending

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 src/compat-api.h    | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/omapfb-driver.c | 41 ++++++++++++-----------
 2 files changed, 118 insertions(+), 19 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/omapfb-driver.c b/src/omapfb-driver.c
index 07989f5..486ffa4 100644
--- a/src/omapfb-driver.c
+++ b/src/omapfb-driver.c
@@ -44,6 +44,8 @@
 
 #include "exa.h"
 
+#include "compat-api.h"
+
 #ifdef HAVE_XEXTPROTO_71
 #include <X11/extensions/dpmsconst.h>
 #else
@@ -70,10 +72,10 @@
 
 static Bool OMAPFBProbe(DriverPtr drv, int flags);
 static Bool OMAPFBPreInit(ScrnInfoPtr pScrn, int flags);
-static Bool OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv);
-static Bool OMAPFBEnterVT(int scrnIndex, int flags);
-static void OMAPFBLeaveVT(int scrnIndex, int flags);
-static Bool OMAPFBSwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
+static Bool OMAPFBScreenInit(SCREEN_INIT_ARGS_DECL);
+static Bool OMAPFBEnterVT(VT_FUNC_ARGS_DECL);
+static void OMAPFBLeaveVT(VT_FUNC_ARGS_DECL);
+static Bool OMAPFBSwitchMode(SWITCH_MODE_ARGS_DECL);
 
 static Bool
 OMAPFBEnsureRec(ScrnInfoPtr pScrn)
@@ -481,7 +483,7 @@ OMAPFBXvScreenInit(ScreenPtr pScreen)
 }
 
 static Bool
-OMAPFBCloseScreen(int scrnIndex, ScreenPtr pScreen)
+OMAPFBCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
 	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
 	OMAPFBPtr ofb = OMAPFB(pScrn);
@@ -490,11 +492,11 @@ OMAPFBCloseScreen(int scrnIndex, ScreenPtr pScreen)
 
 	pScreen->CloseScreen = ofb->CloseScreen;
 	
-	return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+	return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
 static Bool
-OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+OMAPFBScreenInit(SCREEN_INIT_ARGS_DECL)
 {
 	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
 	OMAPFBPtr ofb = OMAPFB(pScrn);
@@ -516,7 +518,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	                PROT_READ | PROT_WRITE, MAP_SHARED,
 	                ofb->fd, 0);
 	if (ofb->fb == MAP_FAILED) {
-		xf86DrvMsg(scrnIndex, X_ERROR, "Mapping framebuffer memory failed, wanted %d bytes.\n", ofb->mem_info.size);
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Mapping framebuffer memory failed, wanted %d bytes.\n", ofb->mem_info.size);
 		return FALSE;
 	}
 
@@ -526,7 +528,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	/* Only support TrueColor for now */
 	if (!miSetVisualTypes(pScrn->depth, TrueColorMask,
 		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 [1]\n",
 		           pScrn->bitsPerPixel);
 		return FALSE;
@@ -534,7 +536,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 
 	/* Set up pixmap depth information */
 	if (!miSetPixmapDepths()) {
-		xf86DrvMsg(scrnIndex,X_ERROR,"pixmap depth setup failed\n");
+		xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"pixmap depth setup failed\n");
 		return FALSE;
 	}
 
@@ -546,7 +548,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	                  pScrn->virtualY, pScrn->xDpi,
 	                  pScrn->yDpi, pScrn->displayWidth,
 	                  pScrn->bitsPerPixel)) {
-		xf86DrvMsg(scrnIndex, X_ERROR, "fbScreenInit failed\n");
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "fbScreenInit failed\n");
 		return FALSE;
 	}
 
@@ -567,7 +569,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 
 	/* Initialize XRender fallbacks */
 	if (!fbPictureInit(pScreen, NULL, 0)) {
-		xf86DrvMsg(scrnIndex, X_ERROR, "fbPictureInit failed\n");
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "fbPictureInit failed\n");
 		return FALSE;
 	}
 	
@@ -579,7 +581,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 
 	/* Initialize default colormap */
 	if (!miCreateDefColormap(pScreen)) {
-		xf86DrvMsg(scrnIndex, X_ERROR,
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		           "creating default colormap failed\n");
 		return FALSE;
 	}
@@ -589,7 +591,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 		/* This is non-fatal since we might be running against older
 		 * kernel driver in which case we only do basic 2D stuff...
 		 */
-		xf86DrvMsg(scrnIndex, X_ERROR, "Reading plane info failed\n");
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Reading plane info failed\n");
 	} else if (!ofb->dss) {
 
 		ofb->plane_info.enabled = 1;
@@ -602,7 +604,7 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 		}
 
 		if (ioctl (ofb->fd, OMAPFB_SETUP_PLANE, &ofb->plane_info)) {
-			xf86DrvMsg(scrnIndex, X_ERROR,
+			xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 			            "%s: Plane setup failed: %s\n",
 			            __FUNCTION__, strerror(errno));
 			return FALSE;
@@ -645,9 +647,10 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 	return TRUE;
 }
 
-static Bool OMAPFBSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+static Bool OMAPFBSwitchMode(SWITCH_MODE_ARGS_DECL)
 {
-	return xf86SetSingleMode (xf86Screens[scrnIndex], mode, RR_Rotate_0);
+	SCRN_INFO_PTR(arg);
+	return xf86SetSingleMode (pScrn, mode, RR_Rotate_0);
 }
 
 void
@@ -699,14 +702,14 @@ OMAPFBPrintCapabilities(ScrnInfoPtr pScrn,
 /*** Unimplemented: */
 
 static Bool
-OMAPFBEnterVT(int scrnIndex, int flags)
+OMAPFBEnterVT(VT_FUNC_ARGS_DECL)
 {
 	xf86Msg(X_NOT_IMPLEMENTED, "%s\n", __FUNCTION__);
 	return TRUE;
 }
 
 static void
-OMAPFBLeaveVT(int scrnIndex, int flags)
+OMAPFBLeaveVT(VT_FUNC_ARGS_DECL)
 {
 	xf86Msg(X_NOT_IMPLEMENTED, "%s\n", __FUNCTION__);
 }
-- 
1.8.0

