xf86-video-ati: Branch 'master' - 3 commits

Dave Airlie airlied at kemper.freedesktop.org
Wed May 23 03:28:35 PDT 2012


 src/Makefile.am             |    1 
 src/compat-api.h            |   71 ++++++++++++++++++++++++++++++++++++++++
 src/drmmode_display.c       |    4 +-
 src/evergreen_exa.c         |   32 +++++++++---------
 src/legacy_crtc.c           |    4 +-
 src/r600_exa.c              |   40 +++++++++++-----------
 src/radeon.h                |    9 +++--
 src/radeon_accel.c          |    8 ++--
 src/radeon_accelfuncs.c     |    2 -
 src/radeon_crtc.c           |    2 -
 src/radeon_cursor.c         |    2 -
 src/radeon_dri.c            |   40 +++++++++++-----------
 src/radeon_dri2.c           |   26 +++++++-------
 src/radeon_driver.c         |   77 +++++++++++++++++++++-----------------------
 src/radeon_exa.c            |   10 ++---
 src/radeon_exa_funcs.c      |    2 -
 src/radeon_exa_render.c     |    4 +-
 src/radeon_exa_shared.c     |    2 -
 src/radeon_kms.c            |   57 ++++++++++++++++----------------
 src/radeon_legacy_memory.c  |    4 +-
 src/radeon_probe.h          |   27 ++++++++-------
 src/radeon_textured_video.c |    2 -
 src/radeon_video.c          |    6 +--
 src/radeon_xvmc.c           |    2 -
 24 files changed, 254 insertions(+), 180 deletions(-)

New commits:
commit 2101e485480e3ffd6a17ed12f5287b8b1e4e0223
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue May 22 16:17:55 2012 +0100

    compat for new server API

diff --git a/src/compat-api.h b/src/compat-api.h
index 1bb7724..2356250 100644
--- a/src/compat-api.h
+++ b/src/compat-api.h
@@ -38,4 +38,34 @@
 #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/radeon.h b/src/radeon.h
index 4fdfca6..c7c7252 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -67,8 +67,6 @@
 				/* Xv support */
 #include "xf86xv.h"
 
-#include "compat-api.h"
-
 #include "radeon_probe.h"
 #include "radeon_tv.h"
 
@@ -104,6 +102,8 @@
 #include "picturestr.h"
 #endif
 
+#include "compat-api.h"
+
 #include "simple_list.h"
 #include "atipcirename.h"
 
@@ -515,7 +515,7 @@ struct radeon_dri {
     int               numVisualConfigs;
     __GLXvisualConfig *pVisualConfigs;
     RADEONConfigPrivPtr pVisualConfigsPriv;
-    Bool             (*DRICloseScreen)(int, ScreenPtr);
+    Bool             (*DRICloseScreen)(CLOSE_SCREEN_ARGS_DECL);
 
     drm_handle_t      fbHandle;
 
@@ -865,9 +865,9 @@ typedef struct {
 
     RADEONSavePtr     SavedReg;         /* Original (text) mode              */
     RADEONSavePtr     ModeReg;          /* Current mode                      */
-    Bool              (*CloseScreen)(int, ScreenPtr);
+    Bool              (*CloseScreen)(CLOSE_SCREEN_ARGS_DECL);
 
-    void              (*BlockHandler)(int, pointer, pointer, pointer);
+    void              (*BlockHandler)(SCREEN_ARG_TYPE, pointer, pointer, pointer);
 
     Bool              PaletteSavedOnVT; /* Palette saved on last VT switch   */
 
diff --git a/src/radeon_dri.c b/src/radeon_dri.c
index 035556d..f180f3a 100644
--- a/src/radeon_dri.c
+++ b/src/radeon_dri.c
@@ -1716,7 +1716,7 @@ Bool RADEONDRIScreenInit(ScreenPtr pScreen)
     return TRUE;
 }
 
-static Bool RADEONDRIDoCloseScreen(int scrnIndex, ScreenPtr pScreen)
+static Bool RADEONDRIDoCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
     ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
@@ -1724,7 +1724,7 @@ static Bool RADEONDRIDoCloseScreen(int scrnIndex, ScreenPtr pScreen)
     RADEONDRICloseScreen(pScreen);
 
     pScreen->CloseScreen = info->dri->DRICloseScreen;
-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
 /* Finish initializing the device-dependent DRI state, and call
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index e79ddba..611d736 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -121,7 +121,7 @@
 #include "radeon_chipinfo_gen.h"
 
 				/* Forward definitions for driver functions */
-static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen);
+static Bool RADEONCloseScreen(CLOSE_SCREEN_ARGS_DECL);
 static Bool RADEONSaveScreen(ScreenPtr pScreen, int mode);
 static void RADEONSave(ScrnInfoPtr pScrn);
 
@@ -3373,15 +3373,15 @@ static void RADEONLoadPalette(ScrnInfoPtr pScrn, int numColors,
 #endif
 }
 
-static void RADEONBlockHandler(int i, pointer blockData,
+static void RADEONBlockHandler(SCREEN_ARG_TYPE arg, pointer blockData,
 			       pointer pTimeout, pointer pReadmask)
 {
-    ScreenPtr      pScreen = screenInfo.screens[i];
-    ScrnInfoPtr    pScrn   = xf86Screens[i];
+    SCREEN_PTR(arg);
+    ScrnInfoPtr    pScrn   = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info    = RADEONPTR(pScrn);
 
     pScreen->BlockHandler = info->BlockHandler;
-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+    (*pScreen->BlockHandler) (arg, blockData, pTimeout, pReadmask);
     pScreen->BlockHandler = RADEONBlockHandler;
 
     if (info->VideoTimerCallback)
@@ -3448,8 +3448,7 @@ RADEONInitBIOSRegisters(ScrnInfoPtr pScrn)
 
 
 /* Called at the start of each server generation. */
-Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen,
-                                int argc, char **argv)
+Bool RADEONScreenInit(SCREEN_INIT_ARGS)
 {
     ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
@@ -3665,9 +3664,9 @@ Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen,
 	int  maxy        = info->FbMapSize / width_bytes;
 
 	if (maxy <= pScrn->virtualY * 3) {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "Static buffer allocation failed.  Disabling DRI.\n");
-	    xf86DrvMsg(scrnIndex, X_ERROR,
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "At least %d kB of video memory needed at this "
 		       "resolution and depth.\n",
 		       (pScrn->displayWidth * pScrn->virtualY *
@@ -3816,16 +3815,16 @@ Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen,
 	xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
 		       "Initializing Acceleration\n");
 	if (RADEONAccelInit(pScreen)) {
-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration enabled\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration enabled\n");
 	    info->accelOn = TRUE;
 	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "Acceleration initialization failed\n");
-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration disabled\n");
 	    info->accelOn = FALSE;
 	}
     } else {
-	xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration disabled\n");
 	info->accelOn = FALSE;
     }
 
@@ -3852,19 +3851,19 @@ Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen,
 
 		if (xf86QueryLargestOffscreenArea(pScreen, &width, &height,
 					      0, 0, 0)) {
-		    xf86DrvMsg(scrnIndex, X_INFO,
+		    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 			       "Largest offscreen area available: %d x %d\n",
 			       width, height);
 		}
 	    }
 #endif /* USE_XAA */
 	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "Hardware cursor initialization failed\n");
-	    xf86DrvMsg(scrnIndex, X_INFO, "Using software cursor\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
 	}
     } else {
-	xf86DrvMsg(scrnIndex, X_INFO, "Using software cursor\n");
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
     }
 
     /* DGA setup */
@@ -5954,9 +5953,9 @@ static Bool RADEONSaveScreen(ScreenPtr pScreen, int mode)
     return TRUE;
 }
 
-Bool RADEONSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+Bool RADEONSwitchMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, int flags)
 {
-    ScrnInfoPtr    pScrn       = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info        = RADEONPTR(pScrn);
     Bool           tilingOld   = info->tilingEnabled;
     Bool           ret;
@@ -5993,9 +5992,9 @@ Bool RADEONSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
 
     if (info->tilingEnabled != tilingOld) {
 	/* need to redraw front buffer, I guess this can be considered a hack ? */
-	xf86EnableDisableFBAccess(scrnIndex, FALSE);
+	xf86EnableDisableFBAccess(arg, FALSE);
 	RADEONChangeSurfaces(pScrn);
-	xf86EnableDisableFBAccess(scrnIndex, TRUE);
+	xf86EnableDisableFBAccess(arg, TRUE);
 	/* xf86SetRootClip would do, but can't access that here */
     }
 
@@ -6050,10 +6049,10 @@ xf86ModeBandwidth(DisplayModePtr mode, int depth)
 #endif
 
 /* Used to disallow modes that are not supported by the hardware */
-ModeStatus RADEONValidMode(int scrnIndex, DisplayModePtr mode,
+ModeStatus RADEONValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
                                      Bool verbose, int flag)
 {
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
 
@@ -6188,9 +6187,9 @@ void RADEONDoAdjustFrame(ScrnInfoPtr pScrn, int x, int y, Bool crtc2)
     OUTREG(reg, Base);
 }
 
-void RADEONAdjustFrame(int scrnIndex, int x, int y, int flags)
+void RADEONAdjustFrame(SCRN_ARG_TYPE arg, int x, int y, int flags)
 {
-    ScrnInfoPtr    pScrn      = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info       = RADEONPTR(pScrn);
     RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
     xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(pScrn);
@@ -6226,9 +6225,9 @@ void RADEONAdjustFrame(int scrnIndex, int x, int y, int flags)
 /* Called when VT switching back to the X server.  Reinitialize the
  * video mode.
  */
-Bool RADEONEnterVT(int scrnIndex, int flags)
+Bool RADEONEnterVT(SCRN_ARG_TYPE arg, int flags)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
     int i;
@@ -6326,9 +6325,9 @@ Bool RADEONEnterVT(int scrnIndex, int flags)
 /* Called when VT switching away from the X server.  Restore the
  * original text mode.
  */
-void RADEONLeaveVT(int scrnIndex, int flags)
+void RADEONLeaveVT(SCRN_ARG_TYPE arg, int flags)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
     int i;
@@ -6413,9 +6412,9 @@ void RADEONLeaveVT(int scrnIndex, int flags)
  * text mode, unmap video memory, and unwrap and call the saved
  * CloseScreen function.
  */
-static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
+static Bool RADEONCloseScreen(CLOSE_SCREEN_ARGS_DECL)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
     int i;
@@ -6498,12 +6497,12 @@ static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
 
     pScreen->BlockHandler = info->BlockHandler;
     pScreen->CloseScreen = info->CloseScreen;
-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
-void RADEONFreeScreen(int scrnIndex, int flags)
+void RADEONFreeScreen(SCRN_ARG_TYPE arg, int flags)
 {
-    ScrnInfoPtr  pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     
     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index cf446ab..2df2d25 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -192,15 +192,15 @@ static Bool RADEONCreateScreenResources_KMS(ScreenPtr pScreen)
     return TRUE;
 }
 
-static void RADEONBlockHandler_KMS(int i, pointer blockData,
+static void RADEONBlockHandler_KMS(SCREEN_ARG_TYPE arg, pointer blockData,
 				   pointer pTimeout, pointer pReadmask)
 {
-    ScreenPtr      pScreen = screenInfo.screens[i];
-    ScrnInfoPtr    pScrn   = xf86Screens[i];
+    SCREEN_PTR(arg);
+    ScrnInfoPtr    pScrn   = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info    = RADEONPTR(pScrn);
 
     pScreen->BlockHandler = info->BlockHandler;
-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+    (*pScreen->BlockHandler) (arg, blockData, pTimeout, pReadmask);
     pScreen->BlockHandler = RADEONBlockHandler_KMS;
 
     if (info->VideoTimerCallback)
@@ -863,9 +863,9 @@ static Bool RADEONSaveScreen_KMS(ScreenPtr pScreen, int mode)
  * text mode, unmap video memory, and unwrap and call the saved
  * CloseScreen function.
  */
-static Bool RADEONCloseScreen_KMS(int scrnIndex, ScreenPtr pScreen)
+static Bool RADEONCloseScreen_KMS(CLOSE_SCREEN_ARGS_DECL)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
 
     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
@@ -898,13 +898,13 @@ static Bool RADEONCloseScreen_KMS(int scrnIndex, ScreenPtr pScreen)
     xf86ClearPrimInitDone(info->pEnt->index);
     pScreen->BlockHandler = info->BlockHandler;
     pScreen->CloseScreen = info->CloseScreen;
-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
 }
 
 
-void RADEONFreeScreen_KMS(int scrnIndex, int flags)
+void RADEONFreeScreen_KMS(SCRN_ARG_TYPE arg, int flags)
 {
-    ScrnInfoPtr  pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
 
     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
@@ -916,8 +916,7 @@ void RADEONFreeScreen_KMS(int scrnIndex, int flags)
     RADEONFreeRec(pScrn);
 }
 
-Bool RADEONScreenInit_KMS(int scrnIndex, ScreenPtr pScreen,
-			  int argc, char **argv)
+Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS)
 {
     ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
@@ -1053,18 +1052,18 @@ Bool RADEONScreenInit_KMS(int scrnIndex, ScreenPtr pScreen,
     }
 
     if (info->r600_shadow_fb) {
-	xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
+	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration disabled\n");
 	info->accelOn = FALSE;
     } else {
 	xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
 		       "Initializing Acceleration\n");
 	if (RADEONAccelInit(pScreen)) {
-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration enabled\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration enabled\n");
 	    info->accelOn = TRUE;
 	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "Acceleration initialization failed\n");
-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
+	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration disabled\n");
 	    info->accelOn = FALSE;
 	}
     }
@@ -1104,7 +1103,7 @@ Bool RADEONScreenInit_KMS(int scrnIndex, ScreenPtr pScreen,
 
     if (info->r600_shadow_fb == TRUE) {
         if (!shadowSetup(pScreen)) {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
+	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "Shadowfb initialization failed\n");
             return FALSE;
         }
@@ -1150,9 +1149,9 @@ Bool RADEONScreenInit_KMS(int scrnIndex, ScreenPtr pScreen,
     return TRUE;
 }
 
-Bool RADEONEnterVT_KMS(int scrnIndex, int flags)
+Bool RADEONEnterVT_KMS(SCRN_ARG_TYPE arg, int flags)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     int ret;
 
@@ -1178,9 +1177,9 @@ Bool RADEONEnterVT_KMS(int scrnIndex, int flags)
 }
 
 
-void RADEONLeaveVT_KMS(int scrnIndex, int flags)
+void RADEONLeaveVT_KMS(SCRN_ARG_TYPE arg, int flags)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
 
     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
@@ -1201,18 +1200,18 @@ void RADEONLeaveVT_KMS(int scrnIndex, int flags)
 }
 
 
-Bool RADEONSwitchMode_KMS(int scrnIndex, DisplayModePtr mode, int flags)
+Bool RADEONSwitchMode_KMS(SCRN_ARG_TYPE arg, DisplayModePtr mode, int flags)
 {
-    ScrnInfoPtr    pScrn       = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     Bool ret;
     ret = xf86SetSingleMode (pScrn, mode, RR_Rotate_0);
     return ret;
 
 }
 
-void RADEONAdjustFrame_KMS(int scrnIndex, int x, int y, int flags)
+void RADEONAdjustFrame_KMS(SCRN_ARG_TYPE arg, int x, int y, int flags)
 {
-    ScrnInfoPtr    pScrn       = xf86Screens[scrnIndex];
+    SCRN_INFO_PTR(arg);
     RADEONInfoPtr  info        = RADEONPTR(pScrn);
     drmmode_adjust_frame(pScrn, &info->drmmode, x, y, flags);
     return;
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index 6690502..40dc543 100644
--- a/src/radeon_probe.h
+++ b/src/radeon_probe.h
@@ -43,6 +43,7 @@
 
 #include "xf86Crtc.h"
 
+#include "compat-api.h"
 #ifdef USE_EXA
 #include "exa.h"
 #endif
@@ -760,28 +761,28 @@ extern PciChipsets          RADEONPciChipsets[];
 
 /* radeon_driver.c */
 extern Bool                 RADEONPreInit(ScrnInfoPtr, int);
-extern Bool                 RADEONScreenInit(int, ScreenPtr, int, char **);
-extern Bool                 RADEONSwitchMode(int, DisplayModePtr, int);
+extern Bool                 RADEONScreenInit(SCREEN_INIT_ARGS);
+extern Bool                 RADEONSwitchMode(SCRN_ARG_TYPE, DisplayModePtr, int);
 #ifdef X_XF86MiscPassMessage
 extern Bool                 RADEONHandleMessage(int, const char*, const char*,
 					        char**);
 #endif
-extern void                 RADEONAdjustFrame(int, int, int, int);
-extern Bool                 RADEONEnterVT(int, int);
-extern void                 RADEONLeaveVT(int, int);
-extern void                 RADEONFreeScreen(int, int);
-extern ModeStatus           RADEONValidMode(int, DisplayModePtr, Bool, int);
+extern void                 RADEONAdjustFrame(SCRN_ARG_TYPE, int, int, int);
+extern Bool                 RADEONEnterVT(SCRN_ARG_TYPE, int);
+extern void                 RADEONLeaveVT(SCRN_ARG_TYPE, int);
+extern void                 RADEONFreeScreen(SCRN_ARG_TYPE, int);
+extern ModeStatus           RADEONValidMode(SCRN_ARG_TYPE, DisplayModePtr, Bool, int);
 
 extern const OptionInfoRec *RADEONOptionsWeak(void);
 
 #ifdef XF86DRM_MODE
 extern Bool                 RADEONPreInit_KMS(ScrnInfoPtr, int);
-extern Bool                 RADEONScreenInit_KMS(int, ScreenPtr, int, char **);
-extern Bool                 RADEONSwitchMode_KMS(int, DisplayModePtr, int);
-extern void                 RADEONAdjustFrame_KMS(int, int, int, int);
-extern Bool                 RADEONEnterVT_KMS(int, int);
-extern void                 RADEONLeaveVT_KMS(int, int);
-extern void RADEONFreeScreen_KMS(int scrnIndex, int flags);
+extern Bool                 RADEONScreenInit_KMS(SCREEN_INIT_ARGS);
+extern Bool                 RADEONSwitchMode_KMS(SCRN_ARG_TYPE, DisplayModePtr, int);
+extern void                 RADEONAdjustFrame_KMS(SCRN_ARG_TYPE, int, int, int);
+extern Bool                 RADEONEnterVT_KMS(SCRN_ARG_TYPE, int);
+extern void                 RADEONLeaveVT_KMS(SCRN_ARG_TYPE, int);
+extern void RADEONFreeScreen_KMS(SCRN_ARG_TYPE, int flags);
 #endif
 
 #endif /* _RADEON_PROBE_H_ */
commit 9d2549057ffced996bfaeb8df4901ef57da636c7
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed May 16 15:45:53 2012 +0100

    ati: convert to new screen conversion APIs
    
    The compat header takes care of the old server vs new server.
    
    this commit was autogenerated from util/modular/x-driver-screen-scrn-conv.sh
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 38f9940..fb437cd 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1243,7 +1243,7 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height)
 	RADEONInfoPtr info = RADEONPTR(scrn);
 	struct radeon_bo *old_front = NULL;
 	Bool	    ret;
-	ScreenPtr   screen = screenInfo.screens[scrn->scrnIndex];
+	ScreenPtr   screen = xf86ScrnToScreen(scrn);
 	uint32_t    old_fb_id;
 	int	    i, pitch, old_width, old_height, old_pitch;
 	int screen_size;
@@ -1704,7 +1704,7 @@ drmmode_handle_uevents(int fd, void *closure)
 	if (!dev)
 		return;
 
-	RRGetInfo(screenInfo.screens[scrn->scrnIndex], TRUE);
+	RRGetInfo(xf86ScrnToScreen(scrn), TRUE);
 	udev_device_unref(dev);
 }
 #endif
diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c
index 61b47a4..1e829bf 100644
--- a/src/evergreen_exa.c
+++ b/src/evergreen_exa.c
@@ -58,7 +58,7 @@ extern int cayman_comp_ps(RADEONChipFamily ChipSet, uint32_t* ps);
 static Bool
 EVERGREENPrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     cb_config_t     cb_conf;
@@ -214,7 +214,7 @@ EVERGREENPrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
 static void
 EVERGREENDoneSolid(PixmapPtr pPix)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -230,7 +230,7 @@ EVERGREENDoneSolid(PixmapPtr pPix)
 static void
 EVERGREENSolid(PixmapPtr pPix, int x1, int y1, int x2, int y2)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     float *vb;
@@ -401,7 +401,7 @@ EVERGREENDoCopy(ScrnInfoPtr pScrn)
 static void
 EVERGREENDoCopyVline(PixmapPtr pPix)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -450,7 +450,7 @@ EVERGREENPrepareCopy(PixmapPtr pSrc,   PixmapPtr pDst,
 		     int rop,
 		     Pixel planemask)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     struct r600_accel_object src_obj, dst_obj;
@@ -539,7 +539,7 @@ EVERGREENPrepareCopy(PixmapPtr pSrc,   PixmapPtr pDst,
 static void
 EVERGREENDoneCopy(PixmapPtr pDst)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -557,7 +557,7 @@ EVERGREENCopy(PixmapPtr pDst,
 	      int dstX, int dstY,
 	      int w, int h)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -786,7 +786,7 @@ static Bool EVERGREENCheckCompositeTexture(PicturePtr pPict,
 static void EVERGREENXFormSetup(PicturePtr pPict, PixmapPtr pPix,
 				int unit, float *vs_alu_consts)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     int const_offset = unit * 8;
@@ -832,7 +832,7 @@ static void EVERGREENXFormSetup(PicturePtr pPict, PixmapPtr pPix,
 static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix,
 				  int unit)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     unsigned int repeatType;
@@ -1131,7 +1131,7 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture,
 				      PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
 {
     ScreenPtr pScreen = pDst->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     uint32_t dst_format;
@@ -1395,7 +1395,7 @@ static void EVERGREENFinishComposite(ScrnInfoPtr pScrn, PixmapPtr pDst,
 static void EVERGREENDoneComposite(PixmapPtr pDst)
 {
     ScreenPtr pScreen = pDst->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -1414,7 +1414,7 @@ static void EVERGREENComposite(PixmapPtr pDst,
 			       int dstX, int dstY,
 			       int w, int h)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     float *vb;
@@ -1490,7 +1490,7 @@ static Bool
 EVERGREENUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h,
 			char *src, int src_pitch)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     struct radeon_exa_pixmap_priv *driver_priv;
@@ -1609,7 +1609,7 @@ static Bool
 EVERGREENDownloadFromScreen(PixmapPtr pSrc, int x, int y, int w,
 			    int h, char *dst, int dst_pitch)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     struct radeon_exa_pixmap_priv *driver_priv;
@@ -1746,7 +1746,7 @@ out:
 static int
 EVERGREENMarkSync(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -1889,7 +1889,7 @@ CAYMANLoadShaders(ScrnInfoPtr pScrn)
 Bool
 EVERGREENDrawInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn =  xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn =  xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info   = RADEONPTR(pScrn);
 
     if (info->accel_state->exa == NULL) {
diff --git a/src/legacy_crtc.c b/src/legacy_crtc.c
index 0beb54d..8949c29 100644
--- a/src/legacy_crtc.c
+++ b/src/legacy_crtc.c
@@ -853,7 +853,7 @@ RADEONInitCrtcBase(xf86CrtcPtr crtc, RADEONSavePtr save,
         /*** NOTE: r3/4xx will need sarea and drm pageflip updates to handle the xytile regs for
 	 *** pageflipping!
 	 ***/
-	pSAREAPriv = DRIGetSAREAPrivate(screenInfo.screens[pScrn->scrnIndex]);
+	pSAREAPriv = DRIGetSAREAPrivate(xf86ScrnToScreen(pScrn));
 	/* can't get at sarea in a semi-sane way? */
 	pSAREA = (void *)((char*)pSAREAPriv - sizeof(XF86DRISAREARec));
 
@@ -1074,7 +1074,7 @@ RADEONInitCrtc2Base(xf86CrtcPtr crtc, RADEONSavePtr save,
         /*** NOTE: r3/4xx will need sarea and drm pageflip updates to handle the xytile regs for
 	 *** pageflipping!
 	 ***/
-	pSAREAPriv = DRIGetSAREAPrivate(screenInfo.screens[pScrn->scrnIndex]);
+	pSAREAPriv = DRIGetSAREAPrivate(xf86ScrnToScreen(pScrn));
 	/* can't get at sarea in a semi-sane way? */
 	pSAREA = (void *)((char*)pSAREAPriv - sizeof(XF86DRISAREARec));
 
diff --git a/src/r600_exa.c b/src/r600_exa.c
index c3ae553..470de01 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -168,7 +168,7 @@ R600SetAccelState(ScrnInfoPtr pScrn,
 static Bool
 R600PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     cb_config_t     cb_conf;
@@ -323,7 +323,7 @@ R600PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
 static void
 R600DoneSolid(PixmapPtr pPix)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -339,7 +339,7 @@ R600DoneSolid(PixmapPtr pPix)
 static void
 R600Solid(PixmapPtr pPix, int x1, int y1, int x2, int y2)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     float *vb;
@@ -517,7 +517,7 @@ R600DoCopy(ScrnInfoPtr pScrn)
 static void
 R600DoCopyVline(PixmapPtr pPix)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -566,7 +566,7 @@ R600PrepareCopy(PixmapPtr pSrc,   PixmapPtr pDst,
 		int rop,
 		Pixel planemask)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     struct r600_accel_object src_obj, dst_obj;
@@ -681,7 +681,7 @@ R600PrepareCopy(PixmapPtr pSrc,   PixmapPtr pDst,
 static void
 R600DoneCopy(PixmapPtr pDst)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -702,7 +702,7 @@ R600Copy(PixmapPtr pDst,
 	 int dstX, int dstY,
 	 int w, int h)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -939,7 +939,7 @@ static Bool R600CheckCompositeTexture(PicturePtr pPict,
 static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix,
 					int unit)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     unsigned int repeatType;
@@ -1271,7 +1271,7 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
 				 PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
 {
     ScreenPtr pScreen = pDst->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     uint32_t dst_format;
@@ -1534,7 +1534,7 @@ static void R600FinishComposite(ScrnInfoPtr pScrn, PixmapPtr pDst,
 static void R600DoneComposite(PixmapPtr pDst)
 {
     ScreenPtr pScreen = pDst->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -1553,7 +1553,7 @@ static void R600Composite(PixmapPtr pDst,
 			  int dstX, int dstY,
 			  int w, int h)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     float *vb;
@@ -1728,7 +1728,7 @@ static Bool
 R600UploadToScreen(PixmapPtr pDst, int x, int y, int w, int h,
 		   char *src, int src_pitch)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     uint32_t dst_pitch = exaGetPixmapPitch(pDst) / (pDst->drawable.bitsPerPixel / 8);
     uint32_t dst_mc_addr = exaGetPixmapOffset(pDst) + info->fbLocation + pScrn->fbOffset;
@@ -1744,7 +1744,7 @@ static Bool
 R600DownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h,
 		       char *dst, int dst_pitch)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     uint32_t src_pitch = exaGetPixmapPitch(pSrc) / (pSrc->drawable.bitsPerPixel / 8);
@@ -1844,7 +1844,7 @@ static Bool
 R600UploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h,
 		     char *src, int src_pitch)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     struct radeon_exa_pixmap_priv *driver_priv;
@@ -1967,7 +1967,7 @@ static Bool
 R600DownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
 			 int h, char *dst, int dst_pitch)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
     struct radeon_exa_pixmap_priv *driver_priv;
@@ -2105,7 +2105,7 @@ out:
 static int
 R600MarkSync(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -2116,7 +2116,7 @@ R600MarkSync(ScreenPtr pScreen)
 static void
 R600Sync(ScreenPtr pScreen, int marker)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_accel_state *accel_state = info->accel_state;
 
@@ -2236,7 +2236,7 @@ R600LoadShaders(ScrnInfoPtr pScrn)
 static Bool
 R600PrepareAccess(PixmapPtr pPix, int index)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     unsigned char *RADEONMMIO = info->MMIO;
 
@@ -2249,7 +2249,7 @@ R600PrepareAccess(PixmapPtr pPix, int index)
 static void
 R600FinishAccess(PixmapPtr pPix, int index)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     unsigned char *RADEONMMIO = info->MMIO;
 
@@ -2261,7 +2261,7 @@ R600FinishAccess(PixmapPtr pPix, int index)
 Bool
 R600DrawInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn =  xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn =  xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info   = RADEONPTR(pScrn);
 
     if (info->accel_state->exa == NULL) {
diff --git a/src/radeon.h b/src/radeon.h
index 90bcf8a..4fdfca6 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -42,6 +42,7 @@
 #include <sys/time.h>		/* For gettimeofday() */
 
 #include "config.h"
+
 #include "xf86str.h"
 #include "compiler.h"
 #include "xf86fbman.h"
diff --git a/src/radeon_accel.c b/src/radeon_accel.c
index 44d797c..89673a7 100644
--- a/src/radeon_accel.c
+++ b/src/radeon_accel.c
@@ -555,7 +555,7 @@ void RADEONEngineInit(ScrnInfoPtr pScrn)
 
 uint32_t radeonGetPixmapOffset(PixmapPtr pPix)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     uint32_t offset = 0;
     if (info->cs)
@@ -1065,7 +1065,7 @@ RADEONHostDataBlitCopyPass(
 
 Bool RADEONAccelInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
 
 #ifdef USE_EXA
@@ -1152,7 +1152,7 @@ void RADEONInit3DEngine(ScrnInfoPtr pScrn)
 Bool
 RADEONSetupMemXAA_DRI(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     int            cpp = info->CurrentLayout.pixel_bytes;
     int            depthCpp = (info->dri->depthBits - 8) / 4;
@@ -1410,7 +1410,7 @@ RADEONSetupMemXAA_DRI(ScreenPtr pScreen)
 Bool
 RADEONSetupMemXAA(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     BoxRec         MemBox;
     int            y2;
diff --git a/src/radeon_accelfuncs.c b/src/radeon_accelfuncs.c
index d0bead3..fe892ad 100644
--- a/src/radeon_accelfuncs.c
+++ b/src/radeon_accelfuncs.c
@@ -1152,7 +1152,7 @@ FUNC_NAME(RADEONDisableClipping)(ScrnInfoPtr pScrn)
 void
 FUNC_NAME(RADEONAccelInit)(ScreenPtr pScreen, XAAInfoRecPtr a)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
 
     a->Flags                            = (PIXMAP_CACHE
diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c
index d48cbc1..18b0155 100644
--- a/src/radeon_crtc.c
+++ b/src/radeon_crtc.c
@@ -1119,7 +1119,7 @@ RADEONSetTiling(ScrnInfoPtr pScrn)
 	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
 		       "[drm] failed changing tiling status\n");
 	/* if this is called during ScreenInit() we don't have pScrn->pScreen yet */
-	pSAREAPriv = DRIGetSAREAPrivate(screenInfo.screens[pScrn->scrnIndex]);
+	pSAREAPriv = DRIGetSAREAPrivate(xf86ScrnToScreen(pScrn));
 	info->tilingEnabled = pSAREAPriv->tiling_enabled ? TRUE : FALSE;
     }
 #endif
diff --git a/src/radeon_cursor.c b/src/radeon_cursor.c
index 6c2b9e8..faf71ae 100644
--- a/src/radeon_cursor.c
+++ b/src/radeon_cursor.c
@@ -407,7 +407,7 @@ radeon_crtc_load_cursor_argb (xf86CrtcPtr crtc, CARD32 *image)
 /* Initialize hardware cursor support. */
 Bool RADEONCursorInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr        pScrn   = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr        pScrn   = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr      info    = RADEONPTR(pScrn);
     unsigned char     *RADEONMMIO = info->MMIO;
     xf86CrtcConfigPtr  xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
diff --git a/src/radeon_dri.c b/src/radeon_dri.c
index 81dc08b..035556d 100644
--- a/src/radeon_dri.c
+++ b/src/radeon_dri.c
@@ -91,7 +91,7 @@ static void RADEONDRIClipNotify(ScreenPtr pScreen, WindowPtr *ppWin, int num);
  */
 static Bool RADEONInitVisualConfigs(ScreenPtr pScreen)
 {
-    ScrnInfoPtr          pScrn             = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr          pScrn             = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr        info              = RADEONPTR(pScrn);
     int                  numConfigs        = 0;
     __GLXvisualConfig   *pConfigs          = 0;
@@ -317,7 +317,7 @@ static void RADEONDestroyContext(ScreenPtr pScreen, drm_context_t hwContext,
  */
 static void RADEONEnterServer(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     drm_radeon_sarea_t *pSAREAPriv;
 
@@ -359,7 +359,7 @@ static void RADEONEnterServer(ScreenPtr pScreen)
  */
 static void RADEONLeaveServer(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     RING_LOCALS;
 
@@ -490,7 +490,7 @@ static void RADEONDRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
 {
 #ifdef USE_XAA
     ScreenPtr      pScreen  = pParent->drawable.pScreen;
-    ScrnInfoPtr    pScrn    = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn    = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info     = RADEONPTR(pScrn);
 
     BoxPtr         pboxTmp, pboxNext, pboxBase;
@@ -900,7 +900,7 @@ static Bool RADEONSetAgpMode(RADEONInfoPtr info, ScreenPtr pScreen)
 /* Initialize Radeon's AGP registers */
 static void RADEONSetAgpBase(RADEONInfoPtr info, ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     unsigned char *RADEONMMIO = info->MMIO;
 
     if (info->ChipFamily >= CHIP_FAMILY_R600)
@@ -1174,7 +1174,7 @@ static Bool RADEONDRIMapInit(RADEONInfoPtr info, ScreenPtr pScreen)
 /* Initialize the kernel data structures */
 static int RADEONDRIKernelInit(RADEONInfoPtr info, ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     int            cpp   = info->CurrentLayout.pixel_bytes;
     drm_radeon_init_t  drmInfo;
 
@@ -1281,7 +1281,7 @@ static Bool RADEONDRIBufInit(RADEONInfoPtr info, ScreenPtr pScreen)
 
 static void RADEONDRIIrqInit(RADEONInfoPtr info, ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 
     if (!info->dri->irq) {
 	info->dri->irq = drmGetInterruptFromBusID(
@@ -1525,7 +1525,7 @@ Bool RADEONDRISetVBlankInterrupt(ScrnInfoPtr pScrn, Bool on)
  */
 Bool RADEONDRIScreenInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn   = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn   = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info    = RADEONPTR(pScrn);
     DRIInfoPtr     pDRIInfo;
     RADEONDRIPtr   pRADEONDRI;
@@ -1718,7 +1718,7 @@ Bool RADEONDRIScreenInit(ScreenPtr pScreen)
 
 static Bool RADEONDRIDoCloseScreen(int scrnIndex, ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
 
     RADEONDRICloseScreen(pScreen);
@@ -1733,7 +1733,7 @@ static Bool RADEONDRIDoCloseScreen(int scrnIndex, ScreenPtr pScreen)
  */
 Bool RADEONDRIFinishScreenInit(ScreenPtr pScreen)
 {
-    ScrnInfoPtr         pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr         pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr       info  = RADEONPTR(pScrn);
     drm_radeon_sarea_t  *pSAREAPriv;
     RADEONDRIPtr        pRADEONDRI;
@@ -1831,7 +1831,7 @@ Bool RADEONDRIFinishScreenInit(ScreenPtr pScreen)
 void RADEONDRIResume(ScreenPtr pScreen)
 {
     int _ret;
-    ScrnInfoPtr   pScrn   = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr   pScrn   = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info    = RADEONPTR(pScrn);
 
     if (info->dri->pKernelDRMVersion->version_minor >= 9) {
@@ -1866,7 +1866,7 @@ void RADEONDRIResume(ScreenPtr pScreen)
 
 void RADEONDRIStop(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     RING_LOCALS;
 
@@ -1889,7 +1889,7 @@ void RADEONDRIStop(ScreenPtr pScreen)
  */
 void RADEONDRICloseScreen(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     drm_radeon_init_t  drmInfo;
 
@@ -2093,7 +2093,7 @@ out:
 static void RADEONEnablePageFlip(ScreenPtr pScreen)
 {
 #ifdef DAMAGE
-    ScrnInfoPtr         pScrn      = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr         pScrn      = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr       info       = RADEONPTR(pScrn);
 
     if (info->dri->allowPageFlip) {
@@ -2133,7 +2133,7 @@ static void RADEONDRITransitionMultiToSingle3d(ScreenPtr pScreen)
 
 static void RADEONDRITransitionTo3d(ScreenPtr pScreen)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
 #ifdef USE_XAA
     FBAreaPtr      fbarea;
@@ -2221,7 +2221,7 @@ static void RADEONDRITransitionTo3d(ScreenPtr pScreen)
 
 static void RADEONDRITransitionTo2d(ScreenPtr pScreen)
 {
-    ScrnInfoPtr         pScrn      = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr         pScrn      = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr       info       = RADEONPTR(pScrn);
     drm_radeon_sarea_t  *pSAREAPriv = DRIGetSAREAPrivate(pScreen);
 
@@ -2266,7 +2266,7 @@ static void RADEONDRITransitionTo2d(ScreenPtr pScreen)
 static void
 RADEONDRIClipNotify(ScreenPtr pScreen, WindowPtr *ppWin, int num)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
 
     REGION_UNINIT(pScreen, &info->dri->driRegion);
@@ -2289,7 +2289,7 @@ RADEONDRIClipNotify(ScreenPtr pScreen, WindowPtr *ppWin, int num)
 
 void RADEONDRIAllocatePCIGARTTable(ScreenPtr pScreen)
 {
-    ScrnInfoPtr        pScrn   = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr        pScrn   = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr      info    = RADEONPTR(pScrn);
 
     if (info->cardType != CARD_PCIE ||
diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
index 8bd3f66..7a9b625 100644
--- a/src/radeon_dri2.c
+++ b/src/radeon_dri2.c
@@ -81,7 +81,7 @@ radeon_dri2_create_buffers(DrawablePtr drawable,
                            int count)
 {
     ScreenPtr pScreen = drawable->pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     BufferPtr buffers;
     struct dri2_buffer_priv *privates;
@@ -245,7 +245,7 @@ radeon_dri2_create_buffer(DrawablePtr drawable,
                           unsigned int format)
 {
     ScreenPtr pScreen = drawable->pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     BufferPtr buffers;
     struct dri2_buffer_priv *privates;
@@ -414,7 +414,7 @@ radeon_dri2_destroy_buffer(DrawablePtr drawable, BufferPtr buffers)
 
         /* Trying to free an already freed buffer is unlikely to end well */
         if (private->refcnt == 0) {
-            ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
+            ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
 
             xf86DrvMsg(scrn->scrnIndex, X_WARNING, 
                        "Attempted to destroy previously destroyed buffer.\
@@ -443,7 +443,7 @@ radeon_dri2_copy_region(DrawablePtr drawable,
     struct dri2_buffer_priv *src_private = src_buffer->driverPrivate;
     struct dri2_buffer_priv *dst_private = dest_buffer->driverPrivate;
     ScreenPtr pScreen = drawable->pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     DrawablePtr src_drawable;
     DrawablePtr dst_drawable;
     RegionPtr copy_clip;
@@ -620,7 +620,7 @@ radeon_dri2_client_state_changed(CallbackListPtr *ClientStateCallback, pointer d
 static int radeon_dri2_drawable_crtc(DrawablePtr pDraw)
 {
     ScreenPtr pScreen = pDraw->pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     xf86CrtcPtr crtc;
     int crtc_id = -1;
 
@@ -773,7 +773,7 @@ radeon_dri2_exchange_buffers(DrawablePtr draw, DRI2BufferPtr front, DRI2BufferPt
 
     /* Do we need to update the Screen? */
     screen = draw->pScreen;
-    info = RADEONPTR(xf86Screens[screen->myNum]);
+    info = RADEONPTR(xf86ScreenToScrn(screen));
     if (front_radeon->bo == info->front_bo) {
 	radeon_bo_unref(info->front_bo);
 	info->front_bo = back_radeon->bo;
@@ -804,7 +804,7 @@ void radeon_dri2_frame_event_handler(unsigned int frame, unsigned int tv_sec,
         goto cleanup;
 
     screen = drawable->pScreen;
-    scrn = xf86Screens[screen->myNum];
+    scrn = xf86ScreenToScrn(screen);
 
     switch (event->type) {
     case DRI2_FLIP:
@@ -885,7 +885,7 @@ static drmVBlankSeqType populate_vbl_request_type(RADEONInfoPtr info, int crtc)
 static int radeon_dri2_get_msc(DrawablePtr draw, CARD64 *ust, CARD64 *msc)
 {
     ScreenPtr screen = draw->pScreen;
-    ScrnInfoPtr scrn = xf86Screens[screen->myNum];
+    ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
     RADEONInfoPtr info = RADEONPTR(scrn);
     drmVBlank vbl;
     int ret;
@@ -925,7 +925,7 @@ static int radeon_dri2_schedule_wait_msc(ClientPtr client, DrawablePtr draw,
                                          CARD64 remainder)
 {
     ScreenPtr screen = draw->pScreen;
-    ScrnInfoPtr scrn = xf86Screens[screen->myNum];
+    ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
     RADEONInfoPtr info = RADEONPTR(scrn);
     DRI2FrameEventPtr wait_info = NULL;
     drmVBlank vbl;
@@ -1061,7 +1061,7 @@ void radeon_dri2_flip_event_handler(unsigned int frame, unsigned int tv_sec,
     }
 
     screen = drawable->pScreen;
-    scrn = xf86Screens[screen->myNum];
+    scrn = xf86ScreenToScrn(screen);
 
     pixmap = screen->GetScreenPixmap(screen);
     xf86DrvMsgVerb(scrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
@@ -1123,7 +1123,7 @@ static int radeon_dri2_schedule_swap(ClientPtr client, DrawablePtr draw,
                                      void *data)
 {
     ScreenPtr screen = draw->pScreen;
-    ScrnInfoPtr scrn = xf86Screens[screen->myNum];
+    ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
     RADEONInfoPtr info = RADEONPTR(scrn);
     drmVBlank vbl;
     int ret, crtc= radeon_dri2_drawable_crtc(draw), flip = 0;
@@ -1309,7 +1309,7 @@ blit_fallback:
 Bool
 radeon_dri2_screen_init(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     DRI2InfoRec dri2_info = { 0 };
 #ifdef USE_DRI2_SCHEDULING
@@ -1413,7 +1413,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
 
 void radeon_dri2_close_screen(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
 #ifdef USE_DRI2_SCHEDULING
     RADEONEntPtr pRADEONEnt   = RADEONEntPriv(pScrn);
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 5681f02..e79ddba 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -231,7 +231,7 @@ static void *
 radeonShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset, int mode,
 		   CARD32 *size, void *closure)
 {
-    ScrnInfoPtr pScrn = xf86Screens[screen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(screen);
     RADEONInfoPtr  info   = RADEONPTR(pScrn);
     int stride;
 
@@ -243,7 +243,7 @@ radeonShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset, int mode,
 static Bool
 RADEONCreateScreenResources (ScreenPtr pScreen)
 {
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+   ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    RADEONInfoPtr  info   = RADEONPTR(pScrn);
    PixmapPtr pixmap;
 
@@ -3451,7 +3451,7 @@ RADEONInitBIOSRegisters(ScrnInfoPtr pScrn)
 Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen,
                                 int argc, char **argv)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     int            hasDRI = 0;
 #ifdef RENDER
@@ -5936,7 +5936,7 @@ static void RADEONRestore(ScrnInfoPtr pScrn)
 
 static Bool RADEONSaveScreen(ScreenPtr pScreen, int mode)
 {
-    ScrnInfoPtr  pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr  pScrn = xf86ScreenToScrn(pScreen);
     Bool         unblank;
 
     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
@@ -6157,7 +6157,7 @@ void RADEONDoAdjustFrame(ScrnInfoPtr pScrn, int x, int y, Bool crtc2)
         /*** NOTE: r3/4xx will need sarea and drm pageflip updates to handle the xytile regs for
 	 *** pageflipping!
 	 ***/
-	pSAREAPriv = DRIGetSAREAPrivate(screenInfo.screens[pScrn->scrnIndex]);
+	pSAREAPriv = DRIGetSAREAPrivate(xf86ScrnToScreen(pScrn));
 	/* can't get at sarea in a semi-sane way? */
 	pSAREA = (void *)((char*)pSAREAPriv - sizeof(XF86DRISAREARec));
 
diff --git a/src/radeon_exa.c b/src/radeon_exa.c
index 270dad4..e6d9eaf 100644
--- a/src/radeon_exa.c
+++ b/src/radeon_exa.c
@@ -48,7 +48,7 @@
 
 
 /***********************************************************************/
-#define RINFO_FROM_SCREEN(pScr) ScrnInfoPtr pScrn =  xf86Screens[pScr->myNum]; \
+#define RINFO_FROM_SCREEN(pScr) ScrnInfoPtr pScrn =  xf86ScreenToScrn(pScr); \
     RADEONInfoPtr info   = RADEONPTR(pScrn)
 
 static struct {
@@ -301,7 +301,7 @@ static void RADEONFinishAccess_BE(PixmapPtr pPix, int index)
 Bool RADEONPrepareAccess_CS(PixmapPtr pPix, int index)
 {
     ScreenPtr pScreen = pPix->drawable.pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_exa_pixmap_priv *driver_priv;
     uint32_t possible_domains = ~0U;
@@ -384,7 +384,7 @@ void RADEONFinishAccess_CS(PixmapPtr pPix, int index)
 
 void *RADEONEXACreatePixmap(ScreenPtr pScreen, int size, int align)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_exa_pixmap_priv *new_priv;
 
@@ -450,7 +450,7 @@ void *RADEONEXACreatePixmap2(ScreenPtr pScreen, int width, int height,
 			     int depth, int usage_hint, int bitsPerPixel,
 			     int *new_pitch)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     struct radeon_exa_pixmap_priv *new_priv;
     int pitch, base_align;
@@ -713,7 +713,7 @@ Bool RADEONEXAPixmapIsOffscreen(PixmapPtr pPix)
  */
 Bool RADEONSetupMemEXA (ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
     int cpp = info->CurrentLayout.pixel_bytes;
diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
index 058a547..9382e2d 100644
--- a/src/radeon_exa_funcs.c
+++ b/src/radeon_exa_funcs.c
@@ -71,7 +71,7 @@ FUNC_NAME(RADEONMarkSync)(ScreenPtr pScreen)
 static void
 FUNC_NAME(RADEONSync)(ScreenPtr pScreen, int marker)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
 
     if (info->cs)
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index 7f1a3ff..c42ae28 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -1140,7 +1140,7 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
 				      Bool is_r500)
 {
     ScreenPtr pScreen = pDstPict->pDrawable->pScreen;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
     int i;
@@ -1407,7 +1407,7 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
     uint32_t tmp1;
     ScreenPtr pScreen = pDstPicture->pDrawable->pScreen;
     PixmapPtr pSrcPixmap, pDstPixmap;
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     int max_tex_w, max_tex_h, max_dst_w, max_dst_h;
 
diff --git a/src/radeon_exa_shared.c b/src/radeon_exa_shared.c
index 7af8a52..b83eb81 100644
--- a/src/radeon_exa_shared.c
+++ b/src/radeon_exa_shared.c
@@ -128,7 +128,7 @@ Bool RADEONCheckBPP(int bpp)
 
 PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     PixmapPtr pPix = pScreen->CreatePixmap(pScreen, 1, 1, 32, 0);
 
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index ae4953e..cf446ab 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -144,7 +144,7 @@ static void *
 radeonShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset, int mode,
 		   CARD32 *size, void *closure)
 {
-    ScrnInfoPtr pScrn = xf86Screens[screen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(screen);
     RADEONInfoPtr  info   = RADEONPTR(pScrn);
     int stride;
 
@@ -156,7 +156,7 @@ radeonShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset, int mode,
 
 static Bool RADEONCreateScreenResources_KMS(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info   = RADEONPTR(pScrn);
     PixmapPtr pixmap;
     struct radeon_surface *surface;
@@ -841,7 +841,7 @@ static Bool RADEONCursorInit_KMS(ScreenPtr pScreen)
 
 static Bool RADEONSaveScreen_KMS(ScreenPtr pScreen, int mode)
 {
-    ScrnInfoPtr  pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr  pScrn = xf86ScreenToScrn(pScreen);
     Bool         unblank;
 
     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
@@ -919,7 +919,7 @@ void RADEONFreeScreen_KMS(int scrnIndex, int flags)
 Bool RADEONScreenInit_KMS(int scrnIndex, ScreenPtr pScreen,
 			  int argc, char **argv)
 {
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info  = RADEONPTR(pScrn);
     int            subPixelOrder = SubPixelUnknown;
     char*          s;
@@ -1220,7 +1220,7 @@ void RADEONAdjustFrame_KMS(int scrnIndex, int x, int y, int flags)
 
 static Bool radeon_setup_kernel_mem(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
     int cpp = info->CurrentLayout.pixel_bytes;
diff --git a/src/radeon_legacy_memory.c b/src/radeon_legacy_memory.c
index 5d66c92..b01ba8c 100644
--- a/src/radeon_legacy_memory.c
+++ b/src/radeon_legacy_memory.c
@@ -18,7 +18,7 @@ radeon_legacy_allocate_memory(ScrnInfoPtr pScrn,
 		       int align,
 		       int domain)
 {
-    ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
+    ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
     RADEONInfoPtr info = RADEONPTR(pScrn);
     uint32_t offset = 0;
 
@@ -121,7 +121,7 @@ radeon_legacy_free_memory(ScrnInfoPtr pScrn,
     }
 #endif
 #ifdef USE_EXA
-    ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
+    ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
 
     if (info->useEXA) {
 	ExaOffscreenArea *area = mem_struct;
diff --git a/src/radeon_textured_video.c b/src/radeon_textured_video.c
index ff2bb9f..48564f8 100644
--- a/src/radeon_textured_video.c
+++ b/src/radeon_textured_video.c
@@ -811,7 +811,7 @@ static void radeon_unload_bicubic_texture(ScrnInfoPtr pScrn)
 XF86VideoAdaptorPtr
 RADEONSetupImageTexturedVideo(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr    info = RADEONPTR(pScrn);
     RADEONPortPrivPtr pPortPriv;
     XF86VideoAdaptorPtr adapt;
diff --git a/src/radeon_video.c b/src/radeon_video.c
index 0e2c127..4eb01dc 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -279,7 +279,7 @@ radeon_crtc_clip_video(ScrnInfoPtr pScrn,
 
 void RADEONInitVideo(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr    info = RADEONPTR(pScrn);
     RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
     XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
@@ -1616,7 +1616,7 @@ skip_theatre:
 static XF86VideoAdaptorPtr
 RADEONSetupImageVideo(ScreenPtr pScreen)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONPortPrivPtr pPriv;
     XF86VideoAdaptorPtr adapt;
 
@@ -3391,7 +3391,7 @@ RADEONDisplaySurface(
 static void
 RADEONInitOffscreenImages(ScreenPtr pScreen)
 {
-/*  ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+/*  ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr info = RADEONPTR(pScrn); */
     XF86OffscreenImagePtr offscreenImages;
     /* need to free this someplace */
diff --git a/src/radeon_xvmc.c b/src/radeon_xvmc.c
index 0f54318..994891e 100644
--- a/src/radeon_xvmc.c
+++ b/src/radeon_xvmc.c
@@ -126,7 +126,7 @@ RADEONCreateAdaptorXvMC(ScreenPtr pScreen, char *xv_adaptor_name)
 
 	assert(pScreen);
 
-	pScrn = xf86Screens[pScreen->myNum];
+	pScrn = xf86ScreenToScrn(pScreen);
 	adaptor = xf86XvMCCreateAdaptorRec();
 
 	if (!adaptor)
commit 80a45bfc26e20d1d481f13cb15c0720d165a8306
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed May 16 15:42:59 2012 +0100

    radeon: add compat-api.h

diff --git a/src/Makefile.am b/src/Makefile.am
index dc77c02..26ceda7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -137,6 +137,7 @@ EXTRA_DIST = \
 	cayman_reg.h \
 	cayman_reg_auto.h \
 	cayman_shader.h \
+	compat-api.h \
 	ati.h \
 	ativersion.h \
 	bicubic_table.h \
diff --git a/src/compat-api.h b/src/compat-api.h
new file mode 100644
index 0000000..1bb7724
--- /dev/null
+++ b/src/compat-api.h
@@ -0,0 +1,41 @@
+/*
+ * 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 at 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
+
+#endif
diff --git a/src/radeon.h b/src/radeon.h
index cef09a2..90bcf8a 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -66,6 +66,8 @@
 				/* Xv support */
 #include "xf86xv.h"
 
+#include "compat-api.h"
+
 #include "radeon_probe.h"
 #include "radeon_tv.h"
 


More information about the xorg-commit mailing list