st/xorg: Move drm init to own function
authorJakob Bornecrantz <jakob@vmware.com>
Tue, 20 Oct 2009 15:52:33 +0000 (17:52 +0200)
committerJakob Bornecrantz <jakob@vmware.com>
Tue, 20 Oct 2009 16:11:51 +0000 (18:11 +0200)
src/gallium/state_trackers/xorg/xorg_driver.c

index 7da10427eca44002b93f021b955b0b2e4044fef7..847647c1e4da5a97f48054faa02a556ef93d212b 100644 (file)
@@ -260,6 +260,37 @@ static const xf86CrtcConfigFuncsRec crtc_config_funcs = {
     crtc_resize
 };
 
+static Bool
+InitDRM(ScrnInfoPtr pScrn)
+{
+    modesettingPtr ms = modesettingPTR(pScrn);
+
+    /* deal with server regeneration */
+    if (ms->fd < 0) {
+       char *BusID;
+
+       BusID = xalloc(64);
+       sprintf(BusID, "PCI:%d:%d:%d",
+               ((ms->PciInfo->domain << 8) | ms->PciInfo->bus),
+               ms->PciInfo->dev, ms->PciInfo->func
+           );
+
+       ms->fd = drmOpen(NULL, BusID);
+
+       if (ms->fd < 0)
+           return FALSE;
+    }
+
+    if (!ms->api) {
+       ms->api = drm_api_create();
+
+       if (!ms->api)
+           return FALSE;
+    }
+
+    return TRUE;
+}
+
 static Bool
 PreInit(ScrnInfoPtr pScrn, int flags)
 {
@@ -268,7 +299,6 @@ PreInit(ScrnInfoPtr pScrn, int flags)
     rgb defaultWeight = { 0, 0, 0 };
     EntityInfoPtr pEnt;
     EntPtr msEnt = NULL;
-    char *BusID;
     int max_width, max_height;
 
     if (pScrn->numEntities != 1)
@@ -317,16 +347,9 @@ PreInit(ScrnInfoPtr pScrn, int flags)
        }
     }
 
-    BusID = xalloc(64);
-    sprintf(BusID, "PCI:%d:%d:%d",
-           ((ms->PciInfo->domain << 8) | ms->PciInfo->bus),
-           ms->PciInfo->dev, ms->PciInfo->func
-       );
-
-    ms->api = drm_api_create();
-    ms->fd = drmOpen(NULL, BusID);
-
-    if (ms->fd < 0)
+    ms->fd = -1;
+    ms->api = NULL;
+    if (!InitDRM(pScrn))
        return FALSE;
 
     pScrn->monitor = pScrn->confScreen->monitor;
@@ -525,24 +548,8 @@ ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     modesettingPtr ms = modesettingPTR(pScrn);
     VisualPtr visual;
 
-    /* deal with server regeneration */
-    if (ms->fd < 0) {
-       char *BusID;
-
-       BusID = xalloc(64);
-       sprintf(BusID, "PCI:%d:%d:%d",
-               ((ms->PciInfo->domain << 8) | ms->PciInfo->bus),
-               ms->PciInfo->dev, ms->PciInfo->func
-           );
-
-       ms->fd = drmOpen(NULL, BusID);
-
-       if (ms->fd < 0)
-           return FALSE;
-    }
-
-    if (!ms->api)
-       ms->api = drm_api_create();
+    if (!InitDRM(pScrn))
+       return FALSE;
 
     if (!ms->screen) {
        ms->screen = ms->api->create_screen(ms->api, ms->fd, NULL);