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

Dave Airlie airlied at kemper.freedesktop.org
Wed May 23 23:41:19 PDT 2012


 src/atombios_crtc.c   |   20 ++++----
 src/atombios_output.c |   32 +++++++-------
 src/generic_bus.h     |    2 
 src/radeon_atombios.c |  113 +++++++++++++++++++++++++-------------------------
 src/radeon_atombios.h |    5 +-
 src/radeon_vip.c      |   16 +++----
 src/radeon_xvmc.c     |    2 
 src/theatre.c         |   12 ++---
 src/theatre200.c      |   90 +++++++++++++++++++--------------------
 src/theatre_detect.c  |   10 ++--
 10 files changed, 153 insertions(+), 149 deletions(-)

New commits:
commit c26e40cf60eb6a2bffb5ec7cba1f1bbffcbf1d53
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed May 23 12:12:54 2012 +0100

    radeon/atombios: rewrite atombios parser code to not use xf86Screens.
    
    Just pass the ScrnInfoPtr around instead.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c
index 8b89bcd..5472475 100644
--- a/src/atombios_crtc.c
+++ b/src/atombios_crtc.c
@@ -86,7 +86,7 @@ atombios_lock_crtc(atomBiosHandlePtr atomBIOS, int crtc, int lock)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &crtc_data;
 
-    if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(atomBIOS->pScrn, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("%s CRTC %d success\n", lock? "Lock":"Unlock", crtc);
 	return ATOM_SUCCESS ;
     }
@@ -109,7 +109,7 @@ atombios_enable_crtc(atomBiosHandlePtr atomBIOS, int crtc, int state)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &crtc_data;
 
-    if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(atomBIOS->pScrn, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("%s CRTC %d success\n", state? "Enable":"Disable", crtc);
 	return ATOM_SUCCESS ;
     }
@@ -132,7 +132,7 @@ atombios_enable_crtc_memreq(atomBiosHandlePtr atomBIOS, int crtc, int state)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &crtc_data;
 
-    if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(atomBIOS->pScrn, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("%s CRTC memreq %d success\n", state? "Enable":"Disable", crtc);
 	return ATOM_SUCCESS ;
     }
@@ -156,7 +156,7 @@ atombios_blank_crtc(atomBiosHandlePtr atomBIOS, int crtc, int state)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &crtc_data;
 
-    if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(atomBIOS->pScrn, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("%s CRTC %d success\n", state? "Blank":"Unblank", crtc);
 	return ATOM_SUCCESS ;
     }
@@ -230,7 +230,7 @@ atombios_set_crtc_timing(xf86CrtcPtr crtc, DisplayModePtr mode)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &param;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Set CRTC Timing success\n");
 	return ATOM_SUCCESS ;
     }
@@ -281,7 +281,7 @@ atombios_set_crtc_dtd_timing(xf86CrtcPtr crtc, DisplayModePtr mode)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &param;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Set DTD CRTC Timing success\n");
 	return ATOM_SUCCESS ;
     }
@@ -450,7 +450,7 @@ static uint32_t atombios_adjust_pll(xf86CrtcPtr crtc, DisplayModePtr mode, int *
 		args.v1.ucEncodeMode = atombios_get_encoder_mode(output);
 
 		ErrorF("before %d\n", args.v1.usPixelClock);
-		if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+		if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 		    adjusted_clock = le16_to_cpu(args.v1.usPixelClock) * 10;
 		}
 		ErrorF("after %d\n", args.v1.usPixelClock);
@@ -468,7 +468,7 @@ static uint32_t atombios_adjust_pll(xf86CrtcPtr crtc, DisplayModePtr mode, int *
 		//    args.v3.sInput.ucDispPllConfig |= DISPPLL_CONFIG_SS_ENABLE;
 
 		ErrorF("before %d 0x%x\n", args.v3.sInput.usPixelClock, args.v3.sInput.ucDispPllConfig);
-		if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+		if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 		    adjusted_clock = args.v3.sOutput.ulDispPllFreq * 10;
 		    if (args.v3.sOutput.ucRefDiv) {
 			pll_flags |= RADEON_PLL_USE_REF_DIV;
@@ -567,7 +567,7 @@ atombios_crtc_set_dcpll(xf86CrtcPtr crtc)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &args;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Set DCPLL success\n");
 	return;
     }
@@ -709,7 +709,7 @@ atombios_crtc_set_pll(xf86CrtcPtr crtc, DisplayModePtr mode)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &args;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Set CRTC %d PLL success\n", radeon_crtc->crtc_id);
 	return;
     }
diff --git a/src/atombios_output.c b/src/atombios_output.c
index bfaeb6b..6c90887 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -233,7 +233,7 @@ atombios_output_dac_setup(xf86OutputPtr output, int action)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Output DAC%d setup success\n", num);
 	return ATOM_SUCCESS;
     }
@@ -297,7 +297,7 @@ atombios_output_tv_setup(xf86OutputPtr output, int action)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Output TV setup success\n");
 	return ATOM_SUCCESS;
     }
@@ -332,7 +332,7 @@ atombios_external_tmds_setup(xf86OutputPtr output, int action)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("External TMDS setup success\n");
 	return ATOM_SUCCESS;
     }
@@ -363,7 +363,7 @@ atombios_output_ddia_setup(xf86OutputPtr output, int action)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("DDIA setup success\n");
 	return ATOM_SUCCESS;
     }
@@ -502,7 +502,7 @@ atombios_output_digital_setup(xf86OutputPtr output, int action)
     data.exec.index = index;
     data.exec.dataSpace = (void *)&space;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Output digital setup success\n");
 	return ATOM_SUCCESS;
     }
@@ -825,7 +825,7 @@ atombios_output_dig_encoder_setup(xf86OutputPtr output, int action)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Output DIG%d encoder setup success\n", radeon_output->dig_encoder);
 	return ATOM_SUCCESS;
     }
@@ -1010,7 +1010,7 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, int action, uint8_t
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	if (IS_DCE32_VARIANT)
 	    ErrorF("Output UNIPHY%d transmitter setup success\n", num);
 	else
@@ -1295,7 +1295,7 @@ atombios_output_yuv_setup(xf86OutputPtr output, Bool enable)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 
 	OUTREG(reg, temp);
 
@@ -1356,7 +1356,7 @@ atombios_output_overscan_setup(xf86OutputPtr output, DisplayModePtr mode, Displa
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &overscan_param;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Set CRTC %d Overscan success\n", radeon_crtc->crtc_id);
 	return ATOM_SUCCESS ;
     }
@@ -1439,7 +1439,7 @@ atombios_output_scaler_setup(xf86OutputPtr output)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &disp_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	if (radeon_output->active_device & (ATOM_DEVICE_CV_SUPPORT | ATOM_DEVICE_TV_SUPPORT)
 	    && info->ChipFamily >= CHIP_FAMILY_RV515 && info->ChipFamily <= CHIP_FAMILY_RV570) {
 	    ErrorF("forcing TV scaler\n");
@@ -1548,7 +1548,7 @@ atombios_output_dpms(xf86OutputPtr output, int mode)
 		reg = INREG(RADEON_BIOS_3_SCRATCH);
 		OUTREG(RADEON_BIOS_3_SCRATCH, reg & ~ATOM_S3_DFP2I_ACTIVE);
 	    }
-	    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS)
+	    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS)
 		ErrorF("Output %s enable success\n",
 		       device_name[radeon_get_device_index(radeon_output->active_device)]);
 	    else
@@ -1580,7 +1580,7 @@ atombios_output_dpms(xf86OutputPtr output, int mode)
 		data.exec.dataSpace = (void *)&space;
 		data.exec.pspace = &disp_data;
 
-		if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data)
+		if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data)
 		    == ATOM_SUCCESS)
 		    ErrorF("Output %s disable success\n",
 			   device_name[radeon_get_device_index(radeon_output->active_device)]);
@@ -1734,7 +1734,7 @@ atombios_set_output_crtc_source(xf86OutputPtr output)
     data.exec.index = index;
     data.exec.dataSpace = (void *)&space;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Set CRTC %d Source success\n", radeon_crtc->crtc_id);
 	return;
     }
@@ -2005,7 +2005,7 @@ atom_bios_dac_load_detect(atomBiosHandlePtr atomBIOS, xf86OutputPtr output)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &dac_data;
 
-    if (RHDAtomBiosFunc(atomBIOS->scrnIndex, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(atomBIOS->pScrn, atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Dac detection success\n");
 	return ATOM_SUCCESS ;
     }
@@ -2118,7 +2118,7 @@ retry:
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &args;
 
-    RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data);
+    RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data);
     if (args.v1.ucReplyStatus && !args.v1.ucDataOutLen) {
 	if (args.v1.ucReplyStatus == 0x20 && retry_count++ < 10)
 		goto retry;
@@ -2159,7 +2159,7 @@ RADEONDPEncoderService(xf86OutputPtr output, int action, uint8_t ucconfig, uint8
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &args;
 
-    RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data);
+    RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data);
 
     ErrorF("%s: %d %d\n", __func__, action, args.ucStatus);
     return args.ucStatus;
diff --git a/src/radeon_atombios.c b/src/radeon_atombios.c
index 207783b..61ef528 100644
--- a/src/radeon_atombios.c
+++ b/src/radeon_atombios.c
@@ -228,7 +228,7 @@ CailDebug(int scrnIndex, const char *format, ...)
     va_end(ap);
 }
 #   define CAILFUNC(ptr) \
-  CailDebug(((atomBiosHandlePtr)(ptr))->scrnIndex, "CAIL: %s\n", __func__)
+  CailDebug(((atomBiosHandlePtr)(ptr))->pScrn->scrnIndex, "CAIL: %s\n", __func__)
 
 #  endif
 
@@ -414,10 +414,10 @@ rhdAtomGetFbBaseAndSize(atomBiosHandlePtr handle, unsigned int *base,
 			unsigned int *size)
 {
     AtomBiosArgRec data;
-    if (RHDAtomBiosFunc(handle->scrnIndex, handle, GET_FW_FB_SIZE, &data)
+    if (RHDAtomBiosFunc(handle->pScrn, handle, GET_FW_FB_SIZE, &data)
 	== ATOM_SUCCESS) {
 	if (data.val == 0) {
-	    xf86DrvMsg(handle->scrnIndex, X_WARNING, "%s: AtomBIOS specified VRAM "
+	    xf86DrvMsg(handle->pScrn->scrnIndex, X_WARNING, "%s: AtomBIOS specified VRAM "
 		       "scratch space size invalid\n", __func__);
 	    return FALSE;
 	}
@@ -425,7 +425,7 @@ rhdAtomGetFbBaseAndSize(atomBiosHandlePtr handle, unsigned int *base,
 	    *size = (int)data.val;
     } else
 	return FALSE;
-    if (RHDAtomBiosFunc(handle->scrnIndex, handle, GET_FW_FB_START, &data)
+    if (RHDAtomBiosFunc(handle->pScrn, handle, GET_FW_FB_START, &data)
 	== ATOM_SUCCESS) {
 	if (data.val == 0)
 	    return FALSE;
@@ -450,32 +450,32 @@ rhdAtomAllocateFbScratch(atomBiosHandlePtr handle,
     handle->fbBase = 0;
 
     if (rhdAtomGetFbBaseAndSize(handle, &fb_base, &fb_size)) {
-	xf86DrvMsg(handle->scrnIndex, X_INFO, "AtomBIOS requests %ikB"
+	xf86DrvMsg(handle->pScrn->scrnIndex, X_INFO, "AtomBIOS requests %ikB"
 		   " of VRAM scratch space\n",fb_size);
 	fb_size *= 1024; /* convert to bytes */
-	xf86DrvMsg(handle->scrnIndex, X_INFO, "AtomBIOS VRAM scratch base: 0x%x\n",
+	xf86DrvMsg(handle->pScrn->scrnIndex, X_INFO, "AtomBIOS VRAM scratch base: 0x%x\n",
 		   fb_base);
     } else {
 	    fb_size = 20 * 1024;
-	    xf86DrvMsg(handle->scrnIndex, X_INFO, " default to: %i\n",fb_size);
+	    xf86DrvMsg(handle->pScrn->scrnIndex, X_INFO, " default to: %i\n",fb_size);
     }
     if (fb_base && fb_size && size) {
 	/* 4k align */
 	fb_size = (fb_size & ~(uint32_t)0xfff) + ((fb_size & 0xfff) ? 1 : 0);
 	if ((fb_base + fb_size) > (start + size)) {
-	    xf86DrvMsg(handle->scrnIndex, X_WARNING,
+	    xf86DrvMsg(handle->pScrn->scrnIndex, X_WARNING,
 		       "%s: FW FB scratch area %i (size: %i)"
 		       " extends beyond available framebuffer size %i\n",
 		       __func__, fb_base, fb_size, size);
 	} else if ((fb_base + fb_size) < (start + size)) {
-	    xf86DrvMsg(handle->scrnIndex, X_WARNING,
+	    xf86DrvMsg(handle->pScrn->scrnIndex, X_WARNING,
 		       "%s: FW FB scratch area not located "
 		       "at the end of VRAM. Scratch End: "
 		       "0x%x VRAM End: 0x%x\n", __func__,
 		       (unsigned int)(fb_base + fb_size),
 		       size);
 	} else if (fb_base < start) {
-	    xf86DrvMsg(handle->scrnIndex, X_WARNING,
+	    xf86DrvMsg(handle->pScrn->scrnIndex, X_WARNING,
 		       "%s: FW FB scratch area extends below "
 		       "the base of the free VRAM: 0x%x Base: 0x%x\n",
 		       __func__, (unsigned int)(fb_base), start);
@@ -487,7 +487,7 @@ rhdAtomAllocateFbScratch(atomBiosHandlePtr handle,
     }
 
     if (!handle->fbBase) {
-	xf86DrvMsg(handle->scrnIndex, X_INFO,
+	xf86DrvMsg(handle->pScrn->scrnIndex, X_INFO,
 		   "Cannot get VRAM scratch space. "
 		   "Allocating in main memory instead\n");
 	handle->scratchBase = calloc(fb_size,1);
@@ -503,24 +503,24 @@ rhdAtomASICInit(atomBiosHandlePtr handle)
     ASIC_INIT_PS_ALLOCATION asicInit;
     AtomBiosArgRec data;
 
-    RHDAtomBiosFunc(handle->scrnIndex, handle,
+    RHDAtomBiosFunc(handle->pScrn, handle,
 		    GET_DEFAULT_ENGINE_CLOCK,
 		    &data);
     asicInit.sASICInitClocks.ulDefaultEngineClock = cpu_to_le32(data.val / 10);/*in 10 Khz*/
-    RHDAtomBiosFunc(handle->scrnIndex, handle,
+    RHDAtomBiosFunc(handle->pScrn, handle,
 		    GET_DEFAULT_MEMORY_CLOCK,
 		    &data);
     asicInit.sASICInitClocks.ulDefaultMemoryClock = cpu_to_le32(data.val / 10);/*in 10 Khz*/
     data.exec.dataSpace = NULL;
     data.exec.index = 0x0;
     data.exec.pspace = &asicInit;
-    xf86DrvMsg(handle->scrnIndex, X_INFO, "Calling ASIC Init\n");
-    if (RHDAtomBiosFunc(handle->scrnIndex, handle,
+    xf86DrvMsg(handle->pScrn->scrnIndex, X_INFO, "Calling ASIC Init\n");
+    if (RHDAtomBiosFunc(handle->pScrn, handle,
 			ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
-	xf86DrvMsg(handle->scrnIndex, X_INFO, "ASIC_INIT Successful\n");
+	xf86DrvMsg(handle->pScrn->scrnIndex, X_INFO, "ASIC_INIT Successful\n");
 	return TRUE;
     }
-    xf86DrvMsg(handle->scrnIndex, X_INFO, "ASIC_INIT Failed\n");
+    xf86DrvMsg(handle->pScrn->scrnIndex, X_INFO, "ASIC_INIT Failed\n");
     return FALSE;
 }
 
@@ -538,7 +538,7 @@ atombios_clk_gating_setup(ScrnInfoPtr pScrn, Bool enable)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &dynclk_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Dynamic clock gating %s success\n", enable? "enable" : "disable");
 	return ATOM_SUCCESS;
     }
@@ -568,7 +568,7 @@ atombios_static_pwrmgt_setup(ScrnInfoPtr pScrn, Bool enable)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &pwrmgt_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	ErrorF("Static power management %s success\n", enable? "enable" : "disable");
 	return ATOM_SUCCESS;
     }
@@ -595,7 +595,7 @@ atombios_set_engine_clock(ScrnInfoPtr pScrn, uint32_t engclock)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &eng_clock_ps;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	/* ErrorF("Set engine clock success\n"); */
 	return ATOM_SUCCESS;
     }
@@ -623,7 +623,7 @@ atombios_set_memory_clock(ScrnInfoPtr pScrn, uint32_t memclock)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &mem_clock_ps;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS) {
 	/* ErrorF("Set memory clock success\n"); */
 	return ATOM_SUCCESS;
     }
@@ -637,8 +637,8 @@ static AtomBiosResult
 rhdAtomInit(atomBiosHandlePtr unused1, AtomBiosRequestID unused2,
 		    AtomBiosArgPtr data)
 {
-    int scrnIndex = data->val;
-    RADEONInfoPtr  info   = RADEONPTR(xf86Screens[scrnIndex]);
+    ScrnInfoPtr pScrn = data->pScrn;
+    RADEONInfoPtr  info   = RADEONPTR(pScrn);
     atomDataTablesPtr atomDataPtr;
     unsigned int cmd_offset;
     atomBiosHandlePtr handle = NULL;
@@ -652,20 +652,20 @@ rhdAtomInit(atomBiosHandlePtr unused1, AtomBiosRequestID unused2,
 #endif
 
     if (!(atomDataPtr = calloc(1, sizeof(atomDataTables)))) {
-	xf86DrvMsg(scrnIndex,X_ERROR,"Cannot allocate memory for "
+	xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"Cannot allocate memory for "
 		   "ATOM BIOS data tabes\n");
 	goto error;
     }
-    if (!rhdAtomGetDataTable(scrnIndex, info->VBIOS, atomDataPtr, &cmd_offset, BIOSImageSize))
+    if (!rhdAtomGetDataTable(pScrn->scrnIndex, info->VBIOS, atomDataPtr, &cmd_offset, BIOSImageSize))
 	goto error1;
     if (!(handle = calloc(1, sizeof(atomBiosHandleRec)))) {
-	xf86DrvMsg(scrnIndex,X_ERROR,"Cannot allocate memory\n");
+	xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"Cannot allocate memory\n");
 	goto error1;
     }
     handle->BIOSBase = info->VBIOS;
     handle->atomDataPtr = atomDataPtr;
     handle->cmd_offset = cmd_offset;
-    handle->scrnIndex = scrnIndex;
+    handle->pScrn = pScrn;
 #if XSERVER_LIBPCIACCESS
     handle->device = info->PciInfo;
 #else
@@ -869,7 +869,7 @@ rhdAtomLvdsDDC(atomBiosHandlePtr handle, uint32_t offset, unsigned char *record)
 
 		/* for testing */
 		{
-		    xf86MonPtr mon = xf86InterpretEDID(handle->scrnIndex,EDIDBlock);
+		    xf86MonPtr mon = xf86InterpretEDID(handle->pScrn->scrnIndex,EDIDBlock);
 		    xf86PrintEDID(mon);
 		    free(mon);
 		}
@@ -882,7 +882,7 @@ rhdAtomLvdsDDC(atomBiosHandlePtr handle, uint32_t offset, unsigned char *record)
 		break;
 
 	    default:
-		xf86DrvMsg(handle->scrnIndex, X_ERROR,
+		xf86DrvMsg(handle->pScrn->scrnIndex, X_ERROR,
 			   "%s: unknown record type: %x\n",__func__,*record);
 		return NULL;
 	}
@@ -1240,7 +1240,7 @@ rhdAtomGPIOI2CInfoQuery(atomBiosHandlePtr handle,
 	case ATOM_GPIO_I2C_CLK_MASK:
 	    if ((sizeof(ATOM_COMMON_TABLE_HEADER)
 		 + (*val * sizeof(ATOM_GPIO_I2C_ASSIGMENT))) > size) {
-		xf86DrvMsg(handle->scrnIndex, X_ERROR, "%s: GPIO_I2C Device "
+		xf86DrvMsg(handle->pScrn->scrnIndex, X_ERROR, "%s: GPIO_I2C Device "
 			   "num %lu exeeds table size %u\n",__func__,
 			   (unsigned long)val,
 			   size);
@@ -1498,7 +1498,7 @@ xf86MonPtr radeon_atom_get_edid(xf86OutputPtr output)
     data.exec.dataSpace = (void *)&space;
     data.exec.pspace = &edid_data;
 
-    if (RHDAtomBiosFunc(info->atomBIOS->scrnIndex, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS)
+    if (RHDAtomBiosFunc(info->atomBIOS->pScrn, info->atomBIOS, ATOMBIOS_EXEC, &data) == ATOM_SUCCESS)
 	ErrorF("Atom Get EDID success\n");
     else
 	ErrorF("Atom Get EDID failed\n");
@@ -2651,7 +2651,7 @@ static AtomBiosResult
 rhdAtomExec (atomBiosHandlePtr handle,
 	     AtomBiosRequestID unused, AtomBiosArgPtr data)
 {
-    RADEONInfoPtr info = RADEONPTR (xf86Screens[handle->scrnIndex]);
+    RADEONInfoPtr info = RADEONPTR (handle->pScrn);
     Bool ret = FALSE;
     char *msg;
     int idx = data->exec.index;
@@ -2665,7 +2665,7 @@ rhdAtomExec (atomBiosHandlePtr handle,
 	    return ATOM_FAILED;
 	if (handle->fbBase) {
 	    if (!info->FB) {
-		xf86DrvMsg(handle->scrnIndex, X_ERROR, "%s: "
+		xf86DrvMsg(handle->pScrn->scrnIndex, X_ERROR, "%s: "
 			   "Cannot exec AtomBIOS: framebuffer not mapped\n",
 			   __func__);
 		return ATOM_FAILED;
@@ -2678,16 +2678,16 @@ rhdAtomExec (atomBiosHandlePtr handle,
 			    handle->BIOSBase,
 			    &msg);
     if (!ret)
-	xf86DrvMsg(handle->scrnIndex, X_ERROR, "%s\n",msg);
+	xf86DrvMsg(handle->pScrn->scrnIndex, X_ERROR, "%s\n",msg);
     else
-	xf86DrvMsgVerb(handle->scrnIndex, X_INFO, 5, "%s\n",msg);
+	xf86DrvMsgVerb(handle->pScrn->scrnIndex, X_INFO, 5, "%s\n",msg);
 
     return (ret) ? ATOM_SUCCESS : ATOM_FAILED;
 }
 # endif
 
 AtomBiosResult
-RHDAtomBiosFunc(int scrnIndex, atomBiosHandlePtr handle,
+RHDAtomBiosFunc(ScrnInfoPtr pScrn, atomBiosHandlePtr handle,
 		AtomBiosRequestID id, AtomBiosArgPtr data)
 {
     AtomBiosResult ret = ATOM_FAILED;
@@ -2708,12 +2708,12 @@ RHDAtomBiosFunc(int scrnIndex, atomBiosHandlePtr handle,
     }
 
     if (req_func == NULL) {
-	xf86DrvMsg(scrnIndex, X_ERROR, "Unknown AtomBIOS request: %i\n",id);
+	xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Unknown AtomBIOS request: %i\n",id);
 	return ATOM_NOT_IMPLEMENTED;
     }
     /* Hack for now */
     if (id == ATOMBIOS_INIT)
-	data->val = scrnIndex;
+	data->pScrn = pScrn;
 
     if (id == ATOMBIOS_INIT || handle)
 	ret = req_func(handle, id, data);
@@ -2722,15 +2722,15 @@ RHDAtomBiosFunc(int scrnIndex, atomBiosHandlePtr handle,
 
 	switch (msg_f) {
 	    case MSG_FORMAT_DEC:
-		xf86DrvMsg(scrnIndex,X_INFO,"%s: %li\n", msg,
+		xf86DrvMsg(pScrn->scrnIndex,X_INFO,"%s: %li\n", msg,
 			   (unsigned long) data->val);
 		break;
 	    case MSG_FORMAT_HEX:
-		xf86DrvMsg(scrnIndex,X_INFO,"%s: 0x%lx\n",msg ,
+		xf86DrvMsg(pScrn->scrnIndex,X_INFO,"%s: 0x%lx\n",msg ,
 			   (unsigned long) data->val);
 		break;
 	    case MSG_FORMAT_NONE:
-		xf86DrvMsgVerb(scrnIndex, 7, X_INFO,
+		xf86DrvMsgVerb(pScrn->scrnIndex, 7, X_INFO,
 			       "Call to %s succeeded\n", msg);
 		break;
 	}
@@ -2742,11 +2742,11 @@ RHDAtomBiosFunc(int scrnIndex, atomBiosHandlePtr handle,
 	switch (msg_f) {
 	    case MSG_FORMAT_DEC:
 	    case MSG_FORMAT_HEX:
-		xf86DrvMsgVerb(scrnIndex, 1, X_WARNING,
+		xf86DrvMsgVerb(pScrn->scrnIndex, 1, X_WARNING,
 			       "Call to %s %s\n", msg, result);
 		break;
 	    case MSG_FORMAT_NONE:
-		xf86DrvMsg(scrnIndex,X_INFO,"Query for %s: %s\n", msg, result);
+		xf86DrvMsg(pScrn->scrnIndex,X_INFO,"Query for %s: %s\n", msg, result);
 		    break;
 	}
     }
@@ -2786,7 +2786,7 @@ CailDelayMicroSeconds(VOID *CAIL, UINT32 delay)
 UINT32
 CailReadATIRegister(VOID* CAIL, UINT32 idx)
 {
-    ScrnInfoPtr pScrn = xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex];
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
     RADEONInfoPtr info = RADEONPTR(pScrn);
     RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
     unsigned char *RADEONMMIO = pRADEONEnt->MMIO;
@@ -2808,7 +2808,7 @@ CailReadATIRegister(VOID* CAIL, UINT32 idx)
 VOID
 CailWriteATIRegister(VOID *CAIL, UINT32 idx, UINT32 data)
 {
-    ScrnInfoPtr pScrn = xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex];
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
     RADEONInfoPtr info = RADEONPTR(pScrn);
     RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
     unsigned char *RADEONMMIO = pRADEONEnt->MMIO;
@@ -2828,7 +2828,7 @@ CailWriteATIRegister(VOID *CAIL, UINT32 idx, UINT32 data)
 UINT32
 CailReadFBData(VOID* CAIL, UINT32 idx)
 {
-    ScrnInfoPtr pScrn = xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex];
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
     RADEONInfoPtr  info   = RADEONPTR(pScrn);
     UINT32 ret;
 
@@ -2842,7 +2842,7 @@ CailReadFBData(VOID* CAIL, UINT32 idx)
 	ret = *(uint32_t*)((uint8_t*)(((atomBiosHandlePtr)CAIL)->scratchBase) + idx);
 	/*DEBUGP(ErrorF("%s(%x) = %x\n",__func__,idx,ret));*/
     } else {
-	xf86DrvMsg(((atomBiosHandlePtr)CAIL)->scrnIndex,X_ERROR,
+	xf86DrvMsg(pScrn->scrnIndex,X_ERROR,
 		   "%s: no fbbase set\n",__func__);
 	return 0;
     }
@@ -2852,24 +2852,25 @@ CailReadFBData(VOID* CAIL, UINT32 idx)
 VOID
 CailWriteFBData(VOID *CAIL, UINT32 idx, UINT32 data)
 {
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
     CAILFUNC(CAIL);
 
     /*DEBUGP(ErrorF("%s(%x,%x)\n",__func__,idx,data));*/
     if (((atomBiosHandlePtr)CAIL)->fbBase) {
 	uint8_t *FBBase = (uint8_t*)
-	    RADEONPTR(xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex])->FB;
+	    RADEONPTR(pScrn)->FB;
 	*((uint32_t*)(FBBase + (((atomBiosHandlePtr)CAIL)->fbBase) + idx)) = data;
     } else if (((atomBiosHandlePtr)CAIL)->scratchBase) {
 	*(uint32_t*)((uint8_t*)(((atomBiosHandlePtr)CAIL)->scratchBase) + idx) = data;
     } else
-	xf86DrvMsg(((atomBiosHandlePtr)CAIL)->scrnIndex,X_ERROR,
+	xf86DrvMsg(pScrn->scrnIndex,X_ERROR,
 		   "%s: no fbbase set\n",__func__);
 }
 
 ULONG
 CailReadMC(VOID *CAIL, ULONG Address)
 {
-    ScrnInfoPtr pScrn = xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex];
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
     ULONG ret;
 
     CAILFUNC(CAIL);
@@ -2882,7 +2883,7 @@ CailReadMC(VOID *CAIL, ULONG Address)
 VOID
 CailWriteMC(VOID *CAIL, ULONG Address, ULONG data)
 {
-    ScrnInfoPtr pScrn = xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex];
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
 
     CAILFUNC(CAIL);
     /*DEBUGP(ErrorF("%s(%x,%x)\n",__func__,Address,data));*/
@@ -2894,14 +2895,16 @@ CailWriteMC(VOID *CAIL, ULONG Address, ULONG data)
 VOID
 CailReadPCIConfigData(VOID*CAIL, VOID* ret, UINT32 idx,UINT16 size)
 {
-    pci_device_cfg_read(RADEONPTR(xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex])->PciInfo,
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
+    pci_device_cfg_read(RADEONPTR(pScrn)->PciInfo,
 				ret,idx << 2 , size >> 3, NULL);
 }
 
 VOID
 CailWritePCIConfigData(VOID*CAIL,VOID*src,UINT32 idx,UINT16 size)
 {
-    pci_device_cfg_write(RADEONPTR(xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex])->PciInfo,
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
+    pci_device_cfg_write(RADEONPTR(pScrn)->PciInfo,
 			 src, idx << 2, size >> 3, NULL);
 }
 
@@ -2963,7 +2966,7 @@ CailWritePCIConfigData(VOID*CAIL,VOID*src,UINT32 idx,UINT16 size)
 ULONG
 CailReadPLL(VOID *CAIL, ULONG Address)
 {
-    ScrnInfoPtr pScrn = xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex];
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
     ULONG ret;
 
     CAILFUNC(CAIL);
@@ -2976,7 +2979,7 @@ CailReadPLL(VOID *CAIL, ULONG Address)
 VOID
 CailWritePLL(VOID *CAIL, ULONG Address,ULONG Data)
 {
-    ScrnInfoPtr pScrn = xf86Screens[((atomBiosHandlePtr)CAIL)->scrnIndex];
+    ScrnInfoPtr pScrn = ((atomBiosHandlePtr)CAIL)->pScrn;
     CAILFUNC(CAIL);
 
     /*DEBUGP(ErrorF("%s(%x,%x)\n",__func__,Address,Data));*/
diff --git a/src/radeon_atombios.h b/src/radeon_atombios.h
index 866c4bf..0671b8d 100644
--- a/src/radeon_atombios.h
+++ b/src/radeon_atombios.h
@@ -105,10 +105,11 @@ typedef union AtomBiosArg
     DisplayModePtr		modes;
     AtomExecRec			exec;
     AtomFbRec			fb;
+    ScrnInfoPtr                 pScrn;
 } AtomBiosArgRec, *AtomBiosArgPtr;
 
 extern AtomBiosResult
-RHDAtomBiosFunc(int scrnIndex, atomBiosHandlePtr handle,
+RHDAtomBiosFunc(ScrnInfoPtr pScrn, atomBiosHandlePtr handle,
 		AtomBiosRequestID id, AtomBiosArgPtr data);
 
 extern Bool
@@ -254,7 +255,7 @@ typedef struct _atomDataTables
 } atomDataTables, *atomDataTablesPtr;
 
 typedef struct _atomBiosHandle {
-    int scrnIndex;
+    ScrnInfoPtr pScrn;
     unsigned char *BIOSBase;
     atomDataTablesPtr atomDataPtr;
     unsigned int cmd_offset;
commit 14122214edabd2a574b66577289a7c8732f4e953
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed May 23 11:57:35 2012 +0100

    radeon/generic_bus: stop passing scrnIndex
    
    Just pass a pointer to the screen, removes usage of xf86Screens lookup
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/src/generic_bus.h b/src/generic_bus.h
index a04baa1..553d3f2 100644
--- a/src/generic_bus.h
+++ b/src/generic_bus.h
@@ -19,7 +19,7 @@
 typedef struct _GENERIC_BUS_Rec *GENERIC_BUS_Ptr;
 
 typedef struct _GENERIC_BUS_Rec{
-        int scrnIndex;
+        ScrnInfoPtr pScrn;
         DevUnion  DriverPrivate;
 	Bool (*ioctl)(GENERIC_BUS_Ptr, long, long, char *);
 	Bool (*read)(GENERIC_BUS_Ptr, uint32_t,  uint32_t, uint8_t *);
diff --git a/src/radeon_vip.c b/src/radeon_vip.c
index 8457078..eacfc80 100644
--- a/src/radeon_vip.c
+++ b/src/radeon_vip.c
@@ -48,7 +48,7 @@ static Bool RADEONVIP_ioctl(GENERIC_BUS_Ptr b, long ioctl, long arg1, char *arg2
 
 static uint32_t RADEONVIP_idle(GENERIC_BUS_Ptr b)
 {
-   ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
+   ScrnInfoPtr pScrn = b->pScrn;
    RADEONInfoPtr info = RADEONPTR(pScrn);
    unsigned char *RADEONMMIO = info->MMIO;
 
@@ -69,7 +69,7 @@ static uint32_t RADEONVIP_idle(GENERIC_BUS_Ptr b)
 
 static uint32_t RADEONVIP_fifo_idle(GENERIC_BUS_Ptr b, uint8_t channel)
 {
-   ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
+   ScrnInfoPtr pScrn = b->pScrn;
    RADEONInfoPtr info = RADEONPTR(pScrn);
    unsigned char *RADEONMMIO = info->MMIO;
 
@@ -79,7 +79,7 @@ static uint32_t RADEONVIP_fifo_idle(GENERIC_BUS_Ptr b, uint8_t channel)
    timeout = INREG(VIPH_TIMEOUT_STAT);
    if((timeout & 0x0000000f) & channel) /* lockup ?? */
    {
-       xf86DrvMsg(b->scrnIndex, X_INFO, "RADEON_fifo_idle\n");
+       xf86DrvMsg(b->pScrn->scrnIndex, X_INFO, "RADEON_fifo_idle\n");
        RADEONWaitForFifo(pScrn, 2);
        OUTREG(VIPH_TIMEOUT_STAT, (timeout & 0xfffffff0) | channel);
        RADEONWaitForIdleMMIO(pScrn);
@@ -107,7 +107,7 @@ static uint32_t RADEONVIP_fifo_idle(GENERIC_BUS_Ptr b, uint8_t channel)
 
 static Bool RADEONVIP_read(GENERIC_BUS_Ptr b, uint32_t address, uint32_t count, uint8_t *buffer)
 {
-   ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
+   ScrnInfoPtr pScrn = b->pScrn;
    RADEONInfoPtr info = RADEONPTR(pScrn);
    unsigned char *RADEONMMIO = info->MMIO;
    uint32_t status,tmp;
@@ -173,7 +173,7 @@ static Bool RADEONVIP_read(GENERIC_BUS_Ptr b, uint32_t address, uint32_t count,
 
 static Bool RADEONVIP_fifo_read(GENERIC_BUS_Ptr b, uint32_t address, uint32_t count, uint8_t *buffer)
 {
-   ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
+   ScrnInfoPtr pScrn = b->pScrn;
    RADEONInfoPtr info = RADEONPTR(pScrn);
    unsigned char *RADEONMMIO = info->MMIO;
    uint32_t status,tmp;
@@ -247,7 +247,7 @@ static Bool RADEONVIP_fifo_read(GENERIC_BUS_Ptr b, uint32_t address, uint32_t co
 
 static Bool RADEONVIP_write(GENERIC_BUS_Ptr b, uint32_t address, uint32_t count, uint8_t *buffer)
 {
-    ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
+    ScrnInfoPtr pScrn = b->pScrn;
     RADEONInfoPtr info = RADEONPTR(pScrn);
     unsigned char *RADEONMMIO = info->MMIO;
     
@@ -280,7 +280,7 @@ static Bool RADEONVIP_write(GENERIC_BUS_Ptr b, uint32_t address, uint32_t count,
 
 static Bool RADEONVIP_fifo_write(GENERIC_BUS_Ptr b, uint32_t address, uint32_t count, uint8_t *buffer)
 {
-    ScrnInfoPtr pScrn = xf86Screens[b->scrnIndex];
+    ScrnInfoPtr pScrn = b->pScrn;
     RADEONInfoPtr info = RADEONPTR(pScrn);
     unsigned char *RADEONMMIO = info->MMIO;
     
@@ -350,7 +350,7 @@ void RADEONVIP_reset(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
 void RADEONVIP_init(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
 {
     pPriv->VIP=calloc(1,sizeof(GENERIC_BUS_Rec));
-    pPriv->VIP->scrnIndex=pScrn->scrnIndex;
+    pPriv->VIP->pScrn=pScrn;
     pPriv->VIP->DriverPrivate.ptr=pPriv;
     pPriv->VIP->ioctl=RADEONVIP_ioctl;
     pPriv->VIP->read=RADEONVIP_read;
diff --git a/src/radeon_xvmc.c b/src/radeon_xvmc.c
index 994891e..12ce2d3 100644
--- a/src/radeon_xvmc.c
+++ b/src/radeon_xvmc.c
@@ -29,11 +29,11 @@
 #include "config.h"
 #endif
 
+#include <xf86.h>
 #include "radeon_video.h"
 
 #include <X11/extensions/Xv.h>
 #include <X11/extensions/XvMC.h>
-#include <xf86.h>
 #include "fourcc.h"
 
 #define FOURCC_RGB	0x0000003
diff --git a/src/theatre.c b/src/theatre.c
index fc68f27..09640fa 100644
--- a/src/theatre.c
+++ b/src/theatre.c
@@ -1150,7 +1150,7 @@ _X_EXPORT void RT_SetStandard (TheatrePtr t, uint16_t wStandard)
     uint16_t   wFrameTotal = 0;
     double dbSPPeriod = 4.70;
 
-    xf86DrvMsg(t->VIP->scrnIndex,X_INFO,"Rage Theatre setting standard 0x%04x\n",
+    xf86DrvMsg(t->VIP->pScrn->scrnIndex,X_INFO,"Rage Theatre setting standard 0x%04x\n",
     		wStandard);
     t->wStandard = wStandard;
     	
@@ -1798,7 +1798,7 @@ void RT_SetConnector (TheatrePtr t, uint16_t wConnector, int tunerFlag)
     	counter++;
 	}
     dwTempContrast = ReadRT_fld (fld_LP_CONTRAST);
-    if(counter>=10000)xf86DrvMsg(t->VIP->scrnIndex, X_INFO,
+    if(counter>=10000)xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO,
 				 "Rage Theatre: timeout waiting for line count (%u)\n",
 				 (unsigned)ReadRT_fld (fld_VS_LINE_COUNT));
 
@@ -1848,14 +1848,14 @@ void RT_SetConnector (TheatrePtr t, uint16_t wConnector, int tunerFlag)
     {
       i--;
     }
-    if(i<0) xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Rage Theatre: waiting for fld_HS_GENLOCKED failed\n");
+    if(i<0) xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Rage Theatre: waiting for fld_HS_GENLOCKED failed\n");
     /* now we are waiting for a non-visible line.. and there is absolutely no point to wait too long */
     counter = 0;
     while (!((ReadRT_fld (fld_VS_LINE_COUNT)> 1) && (ReadRT_fld (fld_VS_LINE_COUNT)<20)) && (counter < 10000)){
     	counter++;
 	}
     WriteRT_fld (fld_LP_CONTRAST, dwTempContrast);
-    if(counter>=10000)xf86DrvMsg(t->VIP->scrnIndex, X_INFO,
+    if(counter>=10000)xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO,
 				 "Rage Theatre: timeout waiting for line count (%u)\n",
 				 (unsigned)ReadRT_fld (fld_VS_LINE_COUNT));
 
@@ -1948,7 +1948,7 @@ _X_EXPORT void DumpRageTheatreRegs(TheatrePtr t)
     for(i=0;i<0x900;i+=4)
     {
        RT_regr(i, &data);
-       xf86DrvMsg(t->VIP->scrnIndex, X_INFO,
+       xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO,
 		  "register 0x%04x is equal to 0x%08x\n", i, (unsigned)data);
     }   
 
@@ -2154,7 +2154,7 @@ void DumpRageTheatreRegsByName(TheatrePtr t)
 
     for(i=0; rt_reg_list[i].name!=NULL;i++){
         RT_regr(rt_reg_list[i].addr, &data);
-        xf86DrvMsg(t->VIP->scrnIndex, X_INFO,
+        xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO,
 		   "register (0x%04lx) %s is equal to 0x%08x\n",
 		   rt_reg_list[i].addr, rt_reg_list[i].name, (unsigned)data);
     	}
diff --git a/src/theatre200.c b/src/theatre200.c
index 1b2a46c..9de9299 100644
--- a/src/theatre200.c
+++ b/src/theatre200.c
@@ -346,7 +346,7 @@ static int dsp_init(TheatrePtr t, struct rt200_microc_data* microc_datap)
 {
 	uint32_t data;
 	int i = 0;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	/* Map FIFOD to DSP Port I/O port */
 	RT_regr(VIP_HOSTINTF_PORT_CNTL, &data);
@@ -375,7 +375,7 @@ static int dsp_load(TheatrePtr t, struct rt200_microc_data* microc_datap)
 	uint32_t tries = 0;
 	uint32_t result = 0;
 	uint32_t seg_id = 0;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 		  
 	DEBUG("Microcode: before everything: %x\n", data8);
 
@@ -615,7 +615,7 @@ static uint32_t dsp_set_video_input_connector(TheatrePtr t, uint32_t connector)
 {
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((connector << 8) & 0xff00) | (55 & 0xff);
 
@@ -631,7 +631,7 @@ static uint32_t dsp_reset(TheatrePtr t)
 {
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((2 << 8) & 0xff00) | (8 & 0xff);
 
@@ -647,7 +647,7 @@ static uint32_t dsp_set_lowpowerstate(TheatrePtr t, uint32_t pstate)
 {
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((pstate << 8) & 0xff00) | (82 & 0xff);
 
@@ -661,7 +661,7 @@ static uint32_t dsp_set_video_standard(TheatrePtr t, uint32_t standard)
 {
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((standard << 8) & 0xff00) | (52 & 0xff);
 
@@ -676,7 +676,7 @@ static uint32_t dsp_set_videostreamformat(TheatrePtr t, uint32_t format)
 {
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((format << 8) & 0xff00) | (65 & 0xff);
 
@@ -691,7 +691,7 @@ static uint32_t dsp_video_standard_detection(TheatrePtr t)
 {
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = 0 | (54 & 0xff);
 
@@ -708,7 +708,7 @@ static uint32_t dsp_get_signallockstatus(TheatrePtr t)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = 0 | (77 & 0xff);
 
@@ -725,7 +725,7 @@ static uint32_t dsp_get_signallinenumber(TheatrePtr t)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = 0 | (78 & 0xff);
 
@@ -743,7 +743,7 @@ static uint32_t dsp_set_brightness(TheatrePtr t, uint8_t brightness)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((brightness << 8) & 0xff00) | (67 & 0xff);
 
@@ -759,7 +759,7 @@ static uint32_t dsp_set_contrast(TheatrePtr t, uint8_t contrast)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((contrast << 8) & 0xff00) | (71 & 0xff);
 
@@ -776,7 +776,7 @@ static uint32_t dsp_set_sharpness(TheatrePtr t, int sharpness)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = 0 | (73 & 0xff);
 
@@ -793,7 +793,7 @@ static uint32_t dsp_set_tint(TheatrePtr t, uint8_t tint)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((tint << 8) & 0xff00) | (75 & 0xff);
 
@@ -809,7 +809,7 @@ static uint32_t dsp_set_saturation(TheatrePtr t, uint8_t saturation)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((saturation << 8) & 0xff00) | (69 & 0xff);
 
@@ -825,7 +825,7 @@ static uint32_t dsp_set_video_scaler_horizontal(TheatrePtr t, uint16_t output_wi
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((output_width << 8) & 0x00ffff00) | (195 & 0xff);
 	fb_scratch1 = ((horz_end << 16) & 0xffff0000) | (horz_start & 0xffff);
@@ -842,7 +842,7 @@ static uint32_t dsp_set_video_scaler_vertical(TheatrePtr t, uint16_t output_heig
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((output_height << 8) & 0x00ffff00) | (196 & 0xff);
 	fb_scratch1 = ((vert_end << 16) & 0xffff0000) | (vert_start & 0xffff);
@@ -859,7 +859,7 @@ static uint32_t dsp_audio_mute(TheatrePtr t, uint8_t left, uint8_t right)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((right << 16) & 0xff0000) | ((left << 8) & 0xff00) | (21 & 0xff);
 
@@ -875,7 +875,7 @@ static uint32_t dsp_set_audio_volume(TheatrePtr t, uint8_t left, uint8_t right,
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
   
 	fb_scratch0 = ((auto_mute << 24) & 0xff000000) | ((right << 16) & 0xff0000) | ((left << 8) & 0xff00) | (22 & 0xff);
 
@@ -892,7 +892,7 @@ static uint32_t dsp_audio_detection(TheatrePtr t, uint8_t option)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((option << 8) & 0xff00) | (16 & 0xff);
 
@@ -909,7 +909,7 @@ static uint32_t dsp_configure_i2s_port(TheatrePtr t, uint8_t tx_mode, uint8_t rx
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((clk_mode << 24) & 0xff000000) | ((rx_mode << 16) & 0xff0000) | ((tx_mode << 8) & 0xff00) | (40 & 0xff);
 
@@ -925,7 +925,7 @@ static uint32_t dsp_configure_spdif_port(TheatrePtr t, uint8_t state)
 	uint32_t fb_scratch1 = 0;
 	uint32_t fb_scratch0 = 0;
 	uint32_t result;
-	int screen = t->VIP->scrnIndex;
+	int screen = t->VIP->pScrn->scrnIndex;
 
 	fb_scratch0 = ((state << 8) & 0xff00) | (41 & 0xff);
 
@@ -1655,7 +1655,7 @@ _X_EXPORT void RT_SetInterlace (TheatrePtr t, uint8_t bInterlace)
  ****************************************************************************/
 _X_EXPORT void RT_SetStandard (TheatrePtr t, uint16_t wStandard)
 {
-	xf86DrvMsg(t->VIP->scrnIndex,X_INFO,"Rage Theatre setting standard 0x%04x\n",
+	xf86DrvMsg(t->VIP->pScrn->scrnIndex,X_INFO,"Rage Theatre setting standard 0x%04x\n",
 		wStandard);
 	
 	t->wStandard = wStandard;
@@ -1799,11 +1799,11 @@ _X_EXPORT void RT_SetConnector (TheatrePtr t, uint16_t wConnector, int tunerFlag
 	t->wConnector = wConnector;
 
 	theatre_read(t, VIP_GPIO_CNTL, &data);
-	xf86DrvMsg(t->VIP->scrnIndex,X_INFO,"VIP_GPIO_CNTL: %x\n",
+	xf86DrvMsg(t->VIP->pScrn->scrnIndex,X_INFO,"VIP_GPIO_CNTL: %x\n",
 		   (unsigned)data);
 
 	theatre_read(t, VIP_GPIO_INOUT, &data);
-	xf86DrvMsg(t->VIP->scrnIndex,X_INFO,"VIP_GPIO_INOUT: %x\n",
+	xf86DrvMsg(t->VIP->pScrn->scrnIndex,X_INFO,"VIP_GPIO_INOUT: %x\n",
 		   (unsigned)data);
 	
 	switch (wConnector)
@@ -1853,11 +1853,11 @@ _X_EXPORT void RT_SetConnector (TheatrePtr t, uint16_t wConnector, int tunerFlag
 	}
 
 	theatre_read(t, VIP_GPIO_CNTL, &data);
-	xf86DrvMsg(t->VIP->scrnIndex,X_INFO,"VIP_GPIO_CNTL: %x\n",
+	xf86DrvMsg(t->VIP->pScrn->scrnIndex,X_INFO,"VIP_GPIO_CNTL: %x\n",
 		   (unsigned)data);
 
 	theatre_read(t, VIP_GPIO_INOUT, &data);
-	xf86DrvMsg(t->VIP->scrnIndex,X_INFO,"VIP_GPIO_INOUT: %x\n",
+	xf86DrvMsg(t->VIP->pScrn->scrnIndex,X_INFO,"VIP_GPIO_INOUT: %x\n",
 		   (unsigned)data);
 
 
@@ -1917,19 +1917,19 @@ _X_EXPORT void InitTheatre(TheatrePtr t)
 	if (t->microc_path == NULL)
 	{
 		t->microc_path = DEFAULT_MICROC_PATH;
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: Use default microcode path: %s\n", DEFAULT_MICROC_PATH);
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: Use default microcode path: %s\n", DEFAULT_MICROC_PATH);
 	}
 	else
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: Use microcode path: %s\n", t->microc_path);
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: Use microcode path: %s\n", t->microc_path);
 
 
 	if (t->microc_type == NULL)
 	{
 		t->microc_type = DEFAULT_MICROC_TYPE;
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: Use default microcode type: %s\n", DEFAULT_MICROC_TYPE);
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: Use default microcode type: %s\n", DEFAULT_MICROC_TYPE);
 	}
 	else
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: Use microcode type: %s\n", t->microc_type);
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: Use microcode type: %s\n", t->microc_type);
 
 	if (DownloadMicrocode(t) < 0)
 	{
@@ -1948,45 +1948,45 @@ static int DownloadMicrocode(TheatrePtr t)
 	struct rt200_microc_data microc_data;
 	microc_data.microc_seg_list = NULL;
 
-	if (microc_load(t->microc_path, t->microc_type, &microc_data, t->VIP->scrnIndex) < 0)
+	if (microc_load(t->microc_path, t->microc_type, &microc_data, t->VIP->pScrn->scrnIndex) < 0)
 	{
-		xf86DrvMsg(t->VIP->scrnIndex, X_ERROR, "Microcode: cannot load microcode\n");
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_ERROR, "Microcode: cannot load microcode\n");
 		goto err_exit;
 	}
 	else
 	{
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: device_id: %x\n", microc_data.microc_head.device_id);
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: vendor_id: %x\n", microc_data.microc_head.vendor_id);
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: rev_id: %x\n", microc_data.microc_head.revision_id);
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: num_seg: %x\n", microc_data.microc_head.num_seg);
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: device_id: %x\n", microc_data.microc_head.device_id);
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: vendor_id: %x\n", microc_data.microc_head.vendor_id);
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: rev_id: %x\n", microc_data.microc_head.revision_id);
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: num_seg: %x\n", microc_data.microc_head.num_seg);
 	}
 	
 	if (dsp_init(t, &microc_data) < 0)
 	{
-		xf86DrvMsg(t->VIP->scrnIndex, X_ERROR, "Microcode: dsp_init failed\n");
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_ERROR, "Microcode: dsp_init failed\n");
 		goto err_exit;
 	}
 	else
 	{
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: dsp_init OK\n");
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: dsp_init OK\n");
 	}
 
 	if (dsp_load(t, &microc_data) < 0)
 	{
-		xf86DrvMsg(t->VIP->scrnIndex, X_ERROR, "Microcode: dsp_download failed\n");
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_ERROR, "Microcode: dsp_download failed\n");
 		goto err_exit;
 	}
 	else
 	{
-		xf86DrvMsg(t->VIP->scrnIndex, X_INFO, "Microcode: dsp_download OK\n");
+		xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO, "Microcode: dsp_download OK\n");
 	}
 
-	microc_clean(&microc_data, t->VIP->scrnIndex);
+	microc_clean(&microc_data, t->VIP->pScrn->scrnIndex);
 	return 0;
 
 err_exit:
 
-	microc_clean(&microc_data, t->VIP->scrnIndex);
+	microc_clean(&microc_data, t->VIP->pScrn->scrnIndex);
 	return -1;
 				
 }
@@ -2011,7 +2011,7 @@ _X_EXPORT void DumpRageTheatreRegs(TheatrePtr t)
     for(i=0;i<0x900;i+=4)
     {
        RT_regr(i, &data);
-       xf86DrvMsg(t->VIP->scrnIndex, X_INFO,
+       xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO,
 		  "register 0x%04x is equal to 0x%08x\n", i, (unsigned)data);
     }   
 
@@ -2217,7 +2217,7 @@ void DumpRageTheatreRegsByName(TheatrePtr t)
 
     for(i=0; rt_reg_list[i].name!=NULL;i++){
         RT_regr(rt_reg_list[i].addr, &data);
-        xf86DrvMsg(t->VIP->scrnIndex, X_INFO,
+        xf86DrvMsg(t->VIP->pScrn->scrnIndex, X_INFO,
 		   "register (0x%04lx) %s is equal to 0x%08x\n",
 		   rt_reg_list[i].addr, rt_reg_list[i].name, (unsigned)data);
     	}
diff --git a/src/theatre_detect.c b/src/theatre_detect.c
index 44cd9fa..0d97cc8 100644
--- a/src/theatre_detect.c
+++ b/src/theatre_detect.c
@@ -74,7 +74,7 @@ _X_EXPORT TheatrePtr DetectTheatre(GENERIC_BUS_Ptr b)
    
    b->ioctl(b,GB_IOCTL_GET_TYPE,20,s);
    if(strcmp(VIP_TYPE, s)){
-   xf86DrvMsg(b->scrnIndex, X_ERROR, "DetectTheatre must be called with bus of type \"%s\", not \"%s\"\n",
+   xf86DrvMsg(b->pScrn->scrnIndex, X_ERROR, "DetectTheatre must be called with bus of type \"%s\", not \"%s\"\n",
           VIP_TYPE, s);
    return NULL;
    }
@@ -89,7 +89,7 @@ _X_EXPORT TheatrePtr DetectTheatre(GENERIC_BUS_Ptr b)
    {
 	if(b->read(b, ((i & 0x03)<<14) | VIP_VIP_VENDOR_DEVICE_ID, 4, (uint8_t *)&val))
         {
-	  if(val)xf86DrvMsg(b->scrnIndex, X_INFO,
+	  if(val)xf86DrvMsg(b->pScrn->scrnIndex, X_INFO,
 			    "Device %d on VIP bus ids as 0x%08x\n", i,
 			    (unsigned)val);
 	  if(t->theatre_num>=0)continue; /* already found one instance */
@@ -104,10 +104,10 @@ _X_EXPORT TheatrePtr DetectTheatre(GENERIC_BUS_Ptr b)
 		   break;
                 }
 	} else {
-	  xf86DrvMsg(b->scrnIndex, X_INFO, "No response from device %d on VIP bus\n",i);	
+	  xf86DrvMsg(b->pScrn->scrnIndex, X_INFO, "No response from device %d on VIP bus\n",i);	
 	}
    }
-   if(t->theatre_num>=0)xf86DrvMsg(b->scrnIndex, X_INFO,
+   if(t->theatre_num>=0)xf86DrvMsg(b->pScrn->scrnIndex, X_INFO,
 				   "Detected Rage Theatre as device %d on VIP bus with id 0x%08x\n",
 				   t->theatre_num, (unsigned)t->theatre_id);
 
@@ -118,7 +118,7 @@ _X_EXPORT TheatrePtr DetectTheatre(GENERIC_BUS_Ptr b)
    }
 
    RT_regr(VIP_VIP_REVISION_ID, &val);
-   xf86DrvMsg(b->scrnIndex, X_INFO, "Detected Rage Theatre revision %8.8X\n",
+   xf86DrvMsg(b->pScrn->scrnIndex, X_INFO, "Detected Rage Theatre revision %8.8X\n",
 	      (unsigned)val);
 
 #if 0


More information about the xorg-commit mailing list