xf86-video-modesetting: Branch 'compat' - src/compat-api.h src/driver.c

Dave Airlie airlied at kemper.freedesktop.org
Tue May 8 07:20:37 PDT 2012


Rebased ref, commits from common ancestor:
commit d1abd98e1f99d55d44aa5c687bb8e21bd99bd3cb
Author: Dave Airlie <airlied at redhat.com>
Date:   Sat May 5 12:12:14 2012 +0100

    compat: add api compat layer
    
    This adds a layer of compat around the new proposed api/abis.
    
    1. glyph picture accessor
    2. screen->scrn and scrn->screen conversion
    3. non-index taking APIs.

diff --git a/src/compat-api.h b/src/compat-api.h
new file mode 100644
index 0000000..f225e75
--- /dev/null
+++ b/src/compat-api.h
@@ -0,0 +1,42 @@
+#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 int i, ScreenPtr pScreen, int argc, char **argv
+
+#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr pScreen
+#define CLOSE_SCREEN_ARGS scrnIndex, pScreen
+
+#define VTFUNC_ARGS(flags) pScrn->scrnIndex, (flags)
+#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 ScreenPtr pScreen, int argc, char **argv
+
+#define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen
+#define CLOSE_SCREEN_ARGS pScreen
+
+#define VTFUNC_ARGS(flags) pScrn, (flags)
+#endif
+#endif
diff --git a/src/driver.c b/src/driver.c
index 2c9878c..e5c9d63 100644
--- a/src/driver.c
+++ b/src/driver.c
@@ -57,20 +57,22 @@
 #include <pciaccess.h>
 #endif
 
+#include "compat-api.h"
+
 #include "driver.h"
 
-static void AdjustFrame(int scrnIndex, int x, int y, int flags);
-static Bool CloseScreen(int scrnIndex, ScreenPtr pScreen);
-static Bool EnterVT(int scrnIndex, int flags);
+static Bool CloseScreen(CLOSE_SCREEN_ARGS_DECL);
+static ModeStatus ValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose,
+			    int flags);
+static void AdjustFrame(SCRN_ARG_TYPE arg, int x, int y, int flags);
+static void FreeScreen(SCRN_ARG_TYPE arg, int flags);
+static Bool EnterVT(SCRN_ARG_TYPE arg, int flags);
+static void LeaveVT(SCRN_ARG_TYPE arg, int flags);
+static Bool SwitchMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, int flags);
+static Bool ScreenInit(SCREEN_INIT_ARGS);
+
 static void Identify(int flags);
 static const OptionInfoRec *AvailableOptions(int chipid, int busid);
-static ModeStatus ValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose,
-			    int flags);
-static void FreeScreen(int scrnIndex, int flags);
-static void LeaveVT(int scrnIndex, int flags);
-static Bool SwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
-static Bool ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
-		       char **argv);
 static Bool PreInit(ScrnInfoPtr pScrn, int flags);
 
 static Bool Probe(DriverPtr drv, int flags);
@@ -204,6 +206,21 @@ AvailableOptions(int chipid, int busid)
     return Options;
 }
 
+static void ms_init_scrn(ScrnInfoPtr scrn)
+{
+    scrn->driverName = "modesetting";
+    scrn->name = "modeset";
+    scrn->Probe = NULL;
+    scrn->PreInit = PreInit;
+    scrn->AdjustFrame = AdjustFrame;
+    scrn->SwitchMode = SwitchMode;
+    scrn->EnterVT = EnterVT;
+    scrn->LeaveVT = LeaveVT;
+    scrn->ValidMode = ValidMode;
+    scrn->FreeScreen = FreeScreen;
+    scrn->ScreenInit = ScreenInit;
+}
+
 #if XSERVER_LIBPCIACCESS
 static Bool
 ms_pci_probe(DriverPtr driver,
@@ -221,18 +238,8 @@ ms_pci_probe(DriverPtr driver,
 	devpath = xf86FindOptionValue(devSection->options, "kmsdev");
 	if (probe_hw(devpath)) {
 	    scrn->driverVersion = 1;
-	    scrn->driverName = "modesetting";
-	    scrn->name = "modeset";
-	    scrn->Probe = NULL;
-	    scrn->PreInit = PreInit;
-	    scrn->ScreenInit = ScreenInit;
-	    scrn->SwitchMode = SwitchMode;
-	    scrn->AdjustFrame = AdjustFrame;
-	    scrn->EnterVT = EnterVT;
-	    scrn->LeaveVT = LeaveVT;
-	    scrn->FreeScreen = FreeScreen;
-	    scrn->ValidMode = ValidMode;
 
+            ms_init_scrn(scrn);
 	    xf86DrvMsg(scrn->scrnIndex, X_CONFIG,
 		       "claimed PCI slot %d@%d:%d:%d\n", 
 		       dev->bus, dev->domain, dev->dev, dev->func);
@@ -279,17 +286,7 @@ Probe(DriverPtr drv, int flags)
 	if (scrn) {
 	    foundScreen = TRUE;
 	    scrn->driverVersion = 1;
-	    scrn->driverName = "modesetting";
-	    scrn->name = "modesetting";
-	    scrn->Probe = Probe;
-	    scrn->PreInit = PreInit;
-	    scrn->ScreenInit = ScreenInit;
-	    scrn->SwitchMode = SwitchMode;
-	    scrn->AdjustFrame = AdjustFrame;
-	    scrn->EnterVT = EnterVT;
-	    scrn->LeaveVT = LeaveVT;
-	    scrn->FreeScreen = FreeScreen;
-	    scrn->ValidMode = ValidMode;
+            ms_init_scrn(scrn);
 
 	    xf86DrvMsg(scrn->scrnIndex, X_INFO,
 			   "using %s\n", dev ? dev : "default device");
@@ -314,7 +311,7 @@ GetRec(ScrnInfoPtr pScrn)
 
 static void dispatch_dirty(ScreenPtr pScreen)
 {
-    ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
     modesettingPtr ms = modesettingPTR(scrn);
     RegionPtr dirty = DamageRegion(ms->damage);
     unsigned num_cliprects = REGION_NUM_RECTS(dirty);
@@ -355,14 +352,16 @@ static void dispatch_dirty(ScreenPtr pScreen)
     }
 }
 
-static void msBlockHandler(int i, pointer blockData, pointer pTimeout,
+static void msBlockHandler(SCREEN_ARG_TYPE arg,
+			   pointer blockData, pointer pTimeout,
 			   pointer pReadmask)
 {
-    ScreenPtr pScreen = screenInfo.screens[i];
-    modesettingPtr ms = modesettingPTR(xf86Screens[pScreen->myNum]);
+    SCREEN_PTR(arg);
+    modesettingPtr ms = modesettingPTR(xf86ScreenToScrn(pScreen));
 
     pScreen->BlockHandler = ms->BlockHandler;
-    pScreen->BlockHandler(i, blockData, pTimeout, pReadmask);
+    pScreen->BlockHandler(arg,
+			  blockData, pTimeout, pReadmask);
     pScreen->BlockHandler = msBlockHandler;
     if (ms->dirty_enabled)
 	dispatch_dirty(pScreen);
@@ -552,7 +551,7 @@ static void *
 msShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset, int mode,
 	       CARD32 *size, void *closure)
 {
-    ScrnInfoPtr pScrn = xf86Screens[screen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(screen);
     modesettingPtr ms = modesettingPTR(pScrn);
     int stride;
 
@@ -565,7 +564,7 @@ msShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset, int mode,
 static Bool
 CreateScreenResources(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     modesettingPtr ms = modesettingPTR(pScrn);
     PixmapPtr rootPixmap;
     Bool ret;
@@ -624,9 +623,9 @@ msShadowInit(ScreenPtr pScreen)
 }
 
 static Bool
-ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+ScreenInit(SCREEN_INIT_ARGS)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     modesettingPtr ms = modesettingPTR(pScrn);
     VisualPtr visual;
     int ret;
@@ -688,7 +687,7 @@ ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     fbPictureInit(pScreen, NULL, 0);
 
     if (ms->drmmode.shadow_enable && !msShadowInit(pScreen)) {
-	xf86DrvMsg(scrnIndex, X_ERROR,
+	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		   "shadow fb init failed\n");
 	return FALSE;
     }
@@ -731,13 +730,14 @@ ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     if (serverGeneration == 1)
 	xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
 
-    return EnterVT(scrnIndex, 1);
+    return EnterVT(VTFUNC_ARGS(1));
 }
 
+
 static void
-AdjustFrame(int scrnIndex, int x, int y, int flags)
+AdjustFrame(SCRN_ARG_TYPE arg, int x, int y, int flags)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
     xf86OutputPtr output = config->output[config->compat_output];
     xf86CrtcPtr crtc = output->crtc;
@@ -751,15 +751,16 @@ AdjustFrame(int scrnIndex, int x, int y, int flags)
 }
 
 static void
-FreeScreen(int scrnIndex, int flags)
+FreeScreen(SCRN_ARG_TYPE arg, int flags)
 {
-    FreeRec(xf86Screens[scrnIndex]);
+    SCRN_INFO_PTR(arg);
+    FreeRec(pScrn);
 }
 
 static void
-LeaveVT(int scrnIndex, int flags)
+LeaveVT(SCRN_ARG_TYPE arg, int flags)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     modesettingPtr ms = modesettingPTR(pScrn);
     xf86_hide_cursors(pScrn);
 
@@ -772,9 +773,9 @@ LeaveVT(int scrnIndex, int flags)
  * This gets called when gaining control of the VT, and from ScreenInit().
  */
 static Bool
-EnterVT(int scrnIndex, int flags)
+EnterVT(SCRN_ARG_TYPE arg, int flags)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     modesettingPtr ms = modesettingPTR(pScrn);
 
     pScrn->vtSema = TRUE;
@@ -790,18 +791,18 @@ EnterVT(int scrnIndex, int flags)
     return TRUE;
 }
 
+
 static Bool
-SwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+SwitchMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, int flags)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-
+    SCRN_INFO_PTR(arg);
     return xf86SetSingleMode(pScrn, mode, RR_Rotate_0);
 }
 
 static Bool
-CloseScreen(int scrnIndex, ScreenPtr pScreen)
+CloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     modesettingPtr ms = modesettingPTR(pScrn);
 
     if (ms->damage) {
@@ -820,7 +821,7 @@ CloseScreen(int scrnIndex, ScreenPtr pScreen)
     drmmode_free_bos(pScrn, &ms->drmmode);
 
     if (pScrn->vtSema) {
-	LeaveVT(scrnIndex, 0);
+	LeaveVT(VTFUNC_ARGS(0));
     }
 
     pScreen->CreateScreenResources = ms->createScreenResources;
@@ -828,11 +829,12 @@ CloseScreen(int scrnIndex, ScreenPtr pScreen)
 
     pScrn->vtSema = FALSE;
     pScreen->CloseScreen = ms->CloseScreen;
-    return (*pScreen->CloseScreen) (scrnIndex, pScreen);
+    return (*pScreen->CloseScreen) (CLOSE_SCREEN_ARGS);
 }
 
 static ModeStatus
-ValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
+ValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags)
 {
     return MODE_OK;
 }
+


More information about the xorg-commit mailing list