summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2009-07-28 01:28:36 +0100
committerThomas White <taw@bitwiz.org.uk>2009-07-28 01:28:36 +0100
commit839e7e06a1e24c66233b77b50e454b286caadf93 (patch)
treede24a67c80b4cbd6a65a1d5994b6db09ac0bf8d1 /src
parentcbbb356da7f4384c812c9db230657097992da1e7 (diff)
De-crashify a few things
Diffstat (limited to 'src')
-rw-r--r--src/glamo-dri2.c1
-rw-r--r--src/glamo-driver.c162
-rw-r--r--src/glamo-kms-driver.c5
-rw-r--r--src/glamo-kms-exa.c19
4 files changed, 108 insertions, 79 deletions
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");