[pkg-fso-commits] [SCM] xf86-video-glamo, SMedia Glamo video driver for X.Org branch, master, updated. upstream/0.0.0+20090707.git98c012f7-57-g9918e08

Thomas White taw at bitwiz.org.uk
Fri Jan 8 13:24:42 UTC 2010


The following commit has been merged in the master branch:
commit 839e7e06a1e24c66233b77b50e454b286caadf93
Author: Thomas White <taw at bitwiz.org.uk>
Date:   Tue Jul 28 01:28:36 2009 +0100

    De-crashify a few things

diff --git a/src/glamo-dri2.c b/src/glamo-dri2.c
index 1a1d836..2491f82 100644
--- a/src/glamo-dri2.c
+++ b/src/glamo-dri2.c
@@ -174,7 +174,6 @@ void driScreenInit(ScreenPtr pScreen)
 	dri2info.CreateBuffers = glamoCreateBuffers;
 	dri2info.DestroyBuffers = glamoDestroyBuffers;
 	dri2info.CopyRegion = glamoCopyRegion;
-	dri2info.Wait = NULL;
 
 	if ( !DRI2ScreenInit(pScreen, &dri2info) ) return;
 }
diff --git a/src/glamo-driver.c b/src/glamo-driver.c
index f737725..002dca3 100644
--- a/src/glamo-driver.c
+++ b/src/glamo-driver.c
@@ -278,13 +278,101 @@ GlamoIdentify(int flags)
 }
 
 static Bool
-GlamoProbe(DriverPtr drv, int flags)
+GlamoFbdevProbe(DriverPtr drv, GDevPtr *devSections, int numDevSections)
 {
+	char *dev;
+	Bool foundScreen = FALSE;
 	int i;
 	ScrnInfoPtr pScrn;
+
+	if (!xf86LoadDrvSubModule(drv, "fbdevhw")) return FALSE;
+
+	for (i = 0; i < numDevSections; i++) {
+
+		dev = xf86FindOptionValue(devSections[i]->options, "Device");
+		if (fbdevHWProbe(NULL, dev, NULL)) {
+			int entity;
+			pScrn = NULL;
+
+			entity = xf86ClaimFbSlot(drv, 0, devSections[i], TRUE);
+			pScrn = xf86ConfigFbEntity(pScrn,0,entity, NULL, NULL,
+				                   NULL, NULL);
+
+			if (pScrn) {
+
+				foundScreen = TRUE;
+
+				pScrn->driverVersion = GLAMO_VERSION;
+				pScrn->driverName    = GLAMO_DRIVER_NAME;
+				pScrn->name          = GLAMO_NAME;
+				pScrn->Probe         = GlamoProbe;
+				pScrn->PreInit       = GlamoPreInit;
+				pScrn->ScreenInit    = GlamoScreenInit;
+				pScrn->SwitchMode    = GlamoSwitchMode;
+				pScrn->AdjustFrame   = fbdevHWAdjustFrameWeak();
+				pScrn->EnterVT       = GlamoEnterVT;
+				pScrn->LeaveVT       = GlamoLeaveVT;
+				pScrn->ValidMode     = fbdevHWValidModeWeak();
+
+				xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+					   "using %s\n",
+					   dev ? dev : "default device\n");
+
+			}
+		}
+
+	}
+
+	return foundScreen;
+}
+
+static Bool
+GlamoKMSProbe(DriverPtr drv, GDevPtr *devSections, int numDevSections)
+{
+	ScrnInfoPtr pScrn = NULL;
+	int entity;
+	Bool foundScreen = FALSE;
+	int i;
+
+	for ( i = 0; i < numDevSections; i++ ) {
+
+		/* This is a little dodgy.  We aren't really using fbdevhw
+		 * (/dev/fb0 is irrelevant), but we need a device entity to make
+		 * the later stages of initialisation work.  xf86ClaimFbSlot()
+		 * does the minimum required to make this work, so we use it
+		 * despite the above. */
+		entity = xf86ClaimFbSlot(drv, 0, devSections[i], TRUE);
+		pScrn = xf86ConfigFbEntity(pScrn, 0, entity, NULL, NULL, NULL,
+		                           NULL);
+
+		if ( pScrn ) {
+
+			foundScreen = TRUE;
+
+			/* Plug in KMS functions */
+			pScrn->driverVersion = GLAMO_VERSION;
+			pScrn->driverName    = GLAMO_DRIVER_NAME;
+			pScrn->name          = GLAMO_NAME;
+			pScrn->PreInit       = GlamoKMSPreInit;
+			pScrn->ScreenInit    = GlamoKMSScreenInit;
+			pScrn->SwitchMode    = GlamoKMSSwitchMode;
+			pScrn->AdjustFrame   = GlamoKMSAdjustFrame;
+			pScrn->EnterVT       = GlamoKMSEnterVT;
+			pScrn->LeaveVT       = GlamoKMSLeaveVT;
+			pScrn->ValidMode     = GlamoKMSValidMode;
+
+		}
+	}
+
+	return foundScreen;
+}
+
+static Bool
+GlamoProbe(DriverPtr drv, int flags)
+{
+	ScrnInfoPtr pScrn;
 	GDevPtr *devSections;
 	int numDevSections;
-	char *dev;
 	Bool foundScreen = FALSE;
 
 	TRACE("probe start");
@@ -294,75 +382,15 @@ GlamoProbe(DriverPtr drv, int flags)
 		return FALSE;
 
 	numDevSections = xf86MatchDevice(GLAMO_DRIVER_NAME, &devSections);
-	if (numDevSections <= 0)
-		return FALSE;
+	if (numDevSections <= 0) return FALSE;
 
 	/* Is today a good day to use KMS? */
 	if ( GlamoKernelModesettingAvailable() ) {
-
-		foundScreen = TRUE;
-
-		pScrn = xf86AllocateScreen(drv, 0);
-
-		/* Plug in KMS functions instead of the conventional ones */
-		pScrn->driverVersion = GLAMO_VERSION;
-		pScrn->driverName    = GLAMO_DRIVER_NAME;
-		pScrn->name          = GLAMO_NAME;
-		pScrn->PreInit       = GlamoKMSPreInit;
-		pScrn->ScreenInit    = GlamoKMSScreenInit;
-		pScrn->SwitchMode    = GlamoKMSSwitchMode;
-		pScrn->AdjustFrame   = GlamoKMSAdjustFrame;
-		pScrn->EnterVT       = GlamoKMSEnterVT;
-		pScrn->LeaveVT       = GlamoKMSLeaveVT;
-		pScrn->ValidMode     = GlamoKMSValidMode;
-
-		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using KMS!");
-
+		foundScreen = GlamoKMSProbe(drv, devSections, numDevSections);
+		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using KMS!\n");
 	} else {
-
-		if (!xf86LoadDrvSubModule(drv, "fbdevhw"))
-			return FALSE;
-
-		for (i = 0; i < numDevSections; i++) {
-			dev = xf86FindOptionValue(devSections[i]->options,
-			                          "Device");
-			if (fbdevHWProbe(NULL, dev, NULL)) {
-				int entity;
-				pScrn = NULL;
-
-				entity = xf86ClaimFbSlot(drv, 0, devSections[i],
-				                         TRUE);
-				pScrn = xf86ConfigFbEntity(pScrn,0,entity, NULL,
-					                   NULL, NULL, NULL);
-
-				if (pScrn) {
-					foundScreen = TRUE;
-
-					pScrn->driverVersion = GLAMO_VERSION;
-					pScrn->driverName    = GLAMO_DRIVER_NAME;
-					pScrn->name          = GLAMO_NAME;
-					pScrn->Probe         = GlamoProbe;
-					pScrn->PreInit       = GlamoPreInit;
-					pScrn->ScreenInit    = GlamoScreenInit;
-					pScrn->SwitchMode    = GlamoSwitchMode;
-					pScrn->AdjustFrame
-					             = fbdevHWAdjustFrameWeak();
-					pScrn->EnterVT       = GlamoEnterVT;
-					pScrn->LeaveVT       = GlamoLeaveVT;
-					pScrn->ValidMode
-					             = fbdevHWValidModeWeak();
-
-					xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-						   "using %s\n",
-						   dev ? dev : "default device");
-
-					xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-					           "Not using KMS");
-
-				}
-			}
-		}
-
+		foundScreen = GlamoFbdevProbe(drv, devSections, numDevSections);
+		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Not using KMS\n");
 	}
 
 	xfree(devSections);
diff --git a/src/glamo-kms-driver.c b/src/glamo-kms-driver.c
index c92e4d6..bc4d933 100644
--- a/src/glamo-kms-driver.c
+++ b/src/glamo-kms-driver.c
@@ -212,8 +212,8 @@ Bool GlamoKMSPreInit(ScrnInfoPtr pScrn, int flags)
 	pScrn->progClock = TRUE;
 	pScrn->rgbBits = 8;
 
-	if ( !xf86SetDepthBpp(pScrn, 0, 0, 0, PreferConvert24to32
-	                       | SupportConvert24to32 | Support32bppFb) ) {
+	/* Prefer 16bpp for everything */
+	if ( !xf86SetDepthBpp(pScrn, 16, 16, 16, NoDepth24Support) ) {
 		return FALSE;
 	}
 
@@ -341,6 +341,7 @@ Bool GlamoKMSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
 	}
 
 	pScrn->pScreen = pScreen;
+	pGlamo->pScreen = pScreen;
 
 	/* HW dependent - FIXME */
 	pScrn->displayWidth = pScrn->virtualX;
diff --git a/src/glamo-kms-exa.c b/src/glamo-kms-exa.c
index 8e31a22..f46a0b1 100644
--- a/src/glamo-kms-exa.c
+++ b/src/glamo-kms-exa.c
@@ -518,12 +518,15 @@ void GlamoKMSExaInit(ScrnInfoPtr pScrn)
 	if ( !exa ) return;
 	pGlamo->exa = exa;
 
+	exa->exa_major = EXA_VERSION_MAJOR;
+	exa->exa_minor = EXA_VERSION_MINOR;
 	exa->memoryBase = 0;
 	exa->memorySize = 0;
 	exa->offScreenBase = 0;
-
-	exa->exa_major = EXA_VERSION_MAJOR;
-	exa->exa_minor = EXA_VERSION_MINOR;
+	exa->pixmapOffsetAlign = 2;
+	exa->pixmapPitchAlign = 2;
+	exa->maxX = 640;
+	exa->maxY = 640;
 
 	/* Solid fills */
 	exa->PrepareSolid = GlamoKMSExaPrepareSolid;
@@ -548,11 +551,6 @@ void GlamoKMSExaInit(ScrnInfoPtr pScrn)
 //	exa->MarkSync = GlamoKMSExaMarkSync;
 	exa->WaitMarker = GlamoKMSExaWaitMarker;
 
-	exa->pixmapOffsetAlign = 2;
-	exa->pixmapPitchAlign = 2;
-
-	exa->maxX = 640;
-	exa->maxY = 640;
 
 	pGlamo->cmdq_objs = malloc(1024);
 	pGlamo->cmdq_obj_pos = malloc(1024);
@@ -568,7 +566,10 @@ void GlamoKMSExaInit(ScrnInfoPtr pScrn)
 	exa->PixmapIsOffscreen = GlamoKMSExaPixmapIsOffscreen;
 	exa->ModifyPixmapHeader = GlamoKMSExaModifyPixmapHeader;
 
-	success = exaDriverInit(pGlamo->pScreen, exa);
+	/* Hook up with libdrm */
+	pGlamo->bufmgr = glamo_bo_manager_gem_ctor(pGlamo->drm_fd);
+
+	success = exaDriverInit(pScrn->pScreen, exa);
 	if (success) {
 		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
 			"Initialized EXA acceleration\n");

-- 
xf86-video-glamo, SMedia Glamo video driver for X.Org



More information about the pkg-fso-commits mailing list