configure.ac      |    2 
 src/Makefile.am   |    1 
 src/via_driver.c  |  436 ----------------------------------------
 src/via_driver.h  |    4 
 src/via_options.c |  582 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 597 insertions(+), 428 deletions(-)

New commits:
commit e83086a7bdc5bc03e990df384d166fb4c21948aa
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 23 11:57:33 2019 -0600

    Version bumped to 0.6.198
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/configure.ac b/configure.ac
index ad241a9..3feaedc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-openchrome],
-        [0.6.197],
+        [0.6.198],
         
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome],
         [xf86-video-openchrome])
 
commit dc683fc67b7ef13533f2c2c39c96e538c1522b6a
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 23 11:51:05 2019 -0600

    Move UMS option processing into viaProcessUMSOptions()
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/src/via_options.c b/src/via_options.c
index 8a17eae..755b776 100644
--- a/src/via_options.c
+++ b/src/via_options.c
@@ -185,8 +185,8 @@ viaSetupDefaultOptions(ScrnInfoPtr pScrn)
                         "Exiting %s.\n", __func__));
 }
 
-void
-viaProcessOptions(ScrnInfoPtr pScrn)
+static void
+viaProcessUMSOptions(ScrnInfoPtr pScrn)
 {
     VIAPtr pVia = VIAPTR(pScrn);
     VIADisplayPtr pVIADisplay = pVia->pVIADisplay;
@@ -196,162 +196,6 @@ viaProcessOptions(ScrnInfoPtr pScrn)
     DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                         "Entered %s.\n", __func__));
 
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                "Processing DDX options . . .\n");
-
-    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, VIAOptions);
-
-    /*
-     * When rotating, switch shadow frame buffer on and acceleration
-     * off.
-     */
-    if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATION_TYPE))) {
-        if (!xf86NameCmp(s, "SWRandR")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_0;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                        "Rotating screen RandR enabled, "
-                        "acceleration disabled\n");
-        } else if (!xf86NameCmp(s, "HWRandR")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_0;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                        "Hardware accelerated rotating screen is not "
-                        "implemented. Using SW RandR.\n");
-        } else {
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                        "\"%s\" is not a valid"
-                        "value for Option \"RotationType\".\n", s);
-            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Valid options are \"SWRandR\" and "
-                        "\"HWRandR\".\n");
-        }
-    }
-
-    /*
-     * When rotating, switch shadow frame buffer on and acceleration
-     * off.
-     */
-    if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATE))) {
-        if (!xf86NameCmp(s, "CW")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_270;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                        "Rotating screen clockwise -- "
-                        "acceleration is disabled.\n");
-        } else if (!xf86NameCmp(s, "CCW")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_90;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                        "Rotating screen counterclockwise -- "
-                        "acceleration is disabled.\n");
-        } else if (!xf86NameCmp(s, "UD")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_180;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                        "Rotating screen upside-down -- "
-                        "acceleration is disabled.\n");
-        } else {
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                        "\"%s\" is not a valid value for "
-                        "Option \"Rotate\".\n", s);
-            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "Valid options are \"CW\", \"CCW\" "
-                        "or \"UD\".\n");
-        }
-    }
-
-    from = (xf86GetOptValBool(VIAOptions,
-                                OPTION_SHADOW_FB, &pVia->shadowFB)
-            ? X_CONFIG : X_DEFAULT);
-    xf86DrvMsg(pScrn->scrnIndex, from,
-                "Shadow framebuffer is %s.\n",
-                pVia->shadowFB ? "enabled" : "disabled");
-
-    /*
-     * Use hardware acceleration, unless on shadow frame buffer.
-     */
-    from = (xf86GetOptValBool(VIAOptions,
-                                OPTION_NOACCEL, &pVia->NoAccel) ?
-            X_CONFIG : X_DEFAULT);
-    if (!pVia->NoAccel && pVia->shadowFB) {
-        xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-                    "Acceleration is not supported when using shadow "
-                    "frame buffer.\n");
-        pVia->NoAccel = TRUE;
-        from = X_DEFAULT;
-    }
-
-    /*
-     * Disable EXA for KMS case
-     */
-    if (pVia->KMS)
-        pVia->NoAccel = TRUE;
-
-    xf86DrvMsg(pScrn->scrnIndex, from,
-                "Hardware acceleration is %s.\n",
-                !pVia->NoAccel ? "enabled" : "disabled");
-
-    if (!pVia->NoAccel) {
-        from = X_DEFAULT;
-        xf86DrvMsg(pScrn->scrnIndex, from,
-                    "Using EXA acceleration architecture.\n");
-/*
-        pVia->noComposite = FALSE;
-*/
-        if (pVia->useEXA) {
-            from = xf86GetOptValBool(VIAOptions,
-                                        OPTION_EXA_NOCOMPOSITE,
-                                        &pVia->noComposite) ?
-                    X_CONFIG : X_DEFAULT;
-            xf86DrvMsg(pScrn->scrnIndex, from,
-                        "EXA composite acceleration %s.\n",
-                        !pVia->noComposite ? "enabled" : "disabled");
-
-/*
-            pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024;
-*/
-            from = xf86GetOptValInteger(VIAOptions,
-                                            OPTION_EXA_SCRATCH_SIZE,
-                                            &pVia->exaScratchSize) ?
-                    X_CONFIG : X_DEFAULT;
-            xf86DrvMsg(pScrn->scrnIndex, from,
-                        "EXA scratch area size is %d KB.\n",
-                        pVia->exaScratchSize);
-        }
-    }
-
-    /*
-     * Use a hardware cursor, unless on secondary or on shadow
-     * frame buffer.
-     */
-    from = X_DEFAULT;
-    if (pVia->IsSecondary || pVia->shadowFB)
-        pVia->drmmode.hwcursor = FALSE;
-    else if (xf86GetOptValBool(VIAOptions, OPTION_SWCURSOR,
-                                &pVia->drmmode.hwcursor)) {
-        pVia->drmmode.hwcursor = !pVia->drmmode.hwcursor;
-        from = X_CONFIG;
-    }
-
-    if (pVia->drmmode.hwcursor)
-        xf86DrvMsg(pScrn->scrnIndex, from,
-                    "Using hardware two-color cursors and software "
-                    "full-color cursors.\n");
-    else
-        xf86DrvMsg(pScrn->scrnIndex, from,
-                    "Using software cursors.\n");
-
 /*
     pVia->VQEnable = TRUE;
 */
@@ -458,7 +302,24 @@ viaProcessOptions(ScrnInfoPtr pScrn)
                 "Will try to allocate %d KB of AGP memory.\n",
                 pVia->agpMem);
 
-    pVIADisplay = pVia->pVIADisplay;
+#ifdef HAVE_DEBUG
+/*
+    pVia->PrintVGARegs = FALSE;
+*/
+    from = xf86GetOptValBool(VIAOptions,
+                                OPTION_PRINTVGAREGS,
+                                &pVia->PrintVGARegs) ?
+            X_CONFIG : X_DEFAULT;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "Will %sprint VGA registers.\n",
+                pVia->PrintVGARegs ? "" : "not ");
+    if (pVia->PrintVGARegs)
+        /*
+         * Do this as early as possible.
+         */
+        ViaVgahwPrint(VGAHWPTR(pScrn));
+#endif /* HAVE_DEBUG */
+
     pVIADisplay->TVDotCrawl = FALSE;
     from = xf86GetOptValBool(VIAOptions,
                                 OPTION_TVDOTCRAWL,
@@ -542,23 +403,179 @@ viaProcessOptions(ScrnInfoPtr pScrn)
                     "No default TV output signal type is set.\n");
     }
 
-#ifdef HAVE_DEBUG
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting %s.\n", __func__));
+}
+
+void
+viaProcessOptions(ScrnInfoPtr pScrn)
+{
+    VIAPtr pVia = VIAPTR(pScrn);
+    MessageType from = X_DEFAULT;
+    const char *s = NULL;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Entered %s.\n", __func__));
+
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                "Processing DDX options . . .\n");
+
+    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, VIAOptions);
+
+    /*
+     * When rotating, switch shadow frame buffer on and acceleration
+     * off.
+     */
+    if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATION_TYPE))) {
+        if (!xf86NameCmp(s, "SWRandR")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_0;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Rotating screen RandR enabled, "
+                        "acceleration disabled\n");
+        } else if (!xf86NameCmp(s, "HWRandR")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_0;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Hardware accelerated rotating screen is not "
+                        "implemented. Using SW RandR.\n");
+        } else {
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "\"%s\" is not a valid"
+                        "value for Option \"RotationType\".\n", s);
+            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Valid options are \"SWRandR\" and "
+                        "\"HWRandR\".\n");
+        }
+    }
+
+    /*
+     * When rotating, switch shadow frame buffer on and acceleration
+     * off.
+     */
+    if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATE))) {
+        if (!xf86NameCmp(s, "CW")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_270;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Rotating screen clockwise -- "
+                        "acceleration is disabled.\n");
+        } else if (!xf86NameCmp(s, "CCW")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_90;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Rotating screen counterclockwise -- "
+                        "acceleration is disabled.\n");
+        } else if (!xf86NameCmp(s, "UD")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_180;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Rotating screen upside-down -- "
+                        "acceleration is disabled.\n");
+        } else {
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "\"%s\" is not a valid value for "
+                        "Option \"Rotate\".\n", s);
+            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Valid options are \"CW\", \"CCW\" "
+                        "or \"UD\".\n");
+        }
+    }
+
+    from = (xf86GetOptValBool(VIAOptions,
+                                OPTION_SHADOW_FB, &pVia->shadowFB)
+            ? X_CONFIG : X_DEFAULT);
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "Shadow framebuffer is %s.\n",
+                pVia->shadowFB ? "enabled" : "disabled");
+
+    /*
+     * Use hardware acceleration, unless on shadow frame buffer.
+     */
+    from = (xf86GetOptValBool(VIAOptions,
+                                OPTION_NOACCEL, &pVia->NoAccel) ?
+            X_CONFIG : X_DEFAULT);
+    if (!pVia->NoAccel && pVia->shadowFB) {
+        xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                    "Acceleration is not supported when using shadow "
+                    "frame buffer.\n");
+        pVia->NoAccel = TRUE;
+        from = X_DEFAULT;
+    }
+
+    /*
+     * Disable EXA for KMS case
+     */
+    if (pVia->KMS)
+        pVia->NoAccel = TRUE;
+
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "Hardware acceleration is %s.\n",
+                !pVia->NoAccel ? "enabled" : "disabled");
+
+    if (!pVia->NoAccel) {
+        from = X_DEFAULT;
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "Using EXA acceleration architecture.\n");
 /*
-    pVia->PrintVGARegs = FALSE;
+        pVia->noComposite = FALSE;
 */
-    from = xf86GetOptValBool(VIAOptions,
-                                OPTION_PRINTVGAREGS,
-                                &pVia->PrintVGARegs) ?
-            X_CONFIG : X_DEFAULT;
-    xf86DrvMsg(pScrn->scrnIndex, from,
-                "Will %sprint VGA registers.\n",
-                pVia->PrintVGARegs ? "" : "not ");
-    if (pVia->PrintVGARegs)
-        /*
-         * Do this as early as possible.
-         */
-        ViaVgahwPrint(VGAHWPTR(pScrn));
-#endif /* HAVE_DEBUG */
+        if (pVia->useEXA) {
+            from = xf86GetOptValBool(VIAOptions,
+                                        OPTION_EXA_NOCOMPOSITE,
+                                        &pVia->noComposite) ?
+                    X_CONFIG : X_DEFAULT;
+            xf86DrvMsg(pScrn->scrnIndex, from,
+                        "EXA composite acceleration %s.\n",
+                        !pVia->noComposite ? "enabled" : "disabled");
+
+/*
+            pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024;
+*/
+            from = xf86GetOptValInteger(VIAOptions,
+                                            OPTION_EXA_SCRATCH_SIZE,
+                                            &pVia->exaScratchSize) ?
+                    X_CONFIG : X_DEFAULT;
+            xf86DrvMsg(pScrn->scrnIndex, from,
+                        "EXA scratch area size is %d KB.\n",
+                        pVia->exaScratchSize);
+        }
+    }
+
+    /*
+     * Use a hardware cursor, unless on secondary or on shadow
+     * frame buffer.
+     */
+    from = X_DEFAULT;
+    if (pVia->IsSecondary || pVia->shadowFB)
+        pVia->drmmode.hwcursor = FALSE;
+    else if (xf86GetOptValBool(VIAOptions, OPTION_SWCURSOR,
+                                &pVia->drmmode.hwcursor)) {
+        pVia->drmmode.hwcursor = !pVia->drmmode.hwcursor;
+        from = X_CONFIG;
+    }
+
+    if (pVia->drmmode.hwcursor)
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "Using hardware two-color cursors and software "
+                    "full-color cursors.\n");
+    else
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "Using software cursors.\n");
+
+    if (!pVia->KMS) {
+        viaProcessUMSOptions(pScrn);
+    }
 
     DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                         "Exiting %s.\n", __func__));
commit 3838058ae1409bc698ccdb69380c01a20cd1746a
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 23 11:00:34 2019 -0600

    Tweak how DDX options are processed
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/src/via_driver.c b/src/via_driver.c
index 34f4130..da93ddb 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -1110,6 +1110,8 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
     option = xf86NewOption(strEXAOptionName, strEXAValue);
     xf86CollectOptions(pScrn, option);
 
+    viaSetupDefaultOptions(pScrn);
+
     viaProcessOptions(pScrn);
 
     VIAVidHWDiffInit(pScrn);
diff --git a/src/via_driver.h b/src/via_driver.h
index 920d9e2..6da2f59 100644
--- a/src/via_driver.h
+++ b/src/via_driver.h
@@ -357,6 +357,7 @@ typedef struct
 
 
 const OptionInfoRec *VIAAvailableOptions(int chipid, int busid);
+void viaSetupDefaultOptions(ScrnInfoPtr pScrn);
 void viaProcessOptions(ScrnInfoPtr pScrn);
 
 /* In via_display.c. */
diff --git a/src/via_options.c b/src/via_options.c
index f0bdd39..8a17eae 100644
--- a/src/via_options.c
+++ b/src/via_options.c
@@ -97,14 +97,13 @@ VIAAvailableOptions(int chipid, int busid)
 }
 
 
-static void
+void
 viaSetupDefaultOptions(ScrnInfoPtr pScrn)
 {
     VIAPtr pVia = VIAPTR(pScrn);
 
     DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "%s - Setting up default chipset options.\n",
-                        __func__));
+                        "Entered %s.\n", __func__));
 
     pVia->shadowFB = FALSE;
     pVia->NoAccel = FALSE;
@@ -181,6 +180,9 @@ viaSetupDefaultOptions(ScrnInfoPtr pScrn)
         pVia->dmaXV = FALSE;
         break;
     }
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting %s.\n", __func__));
 }
 
 void
@@ -194,7 +196,8 @@ viaProcessOptions(ScrnInfoPtr pScrn)
     DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                         "Entered %s.\n", __func__));
 
-    viaSetupDefaultOptions(pScrn);
+    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                "Processing DDX options . . .\n");
 
     xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, VIAOptions);
 
commit 9bb3ef1493621dfb879bebf9bdee05e21d17d986
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 23 10:25:15 2019 -0600

    Move up configuration setup before calling umsPreInit()
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/src/via_driver.c b/src/via_driver.c
index a4fade4..34f4130 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -1107,6 +1107,13 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
     }
 #endif
 
+    option = xf86NewOption(strEXAOptionName, strEXAValue);
+    xf86CollectOptions(pScrn, option);
+
+    viaProcessOptions(pScrn);
+
+    VIAVidHWDiffInit(pScrn);
+
     /* After umsPreInit function succeeds, PCI hardware resources are
      * memory mapped. If there is an error from this point on, they will
      * need to be explicitly relinquished. */
@@ -1117,13 +1124,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
         }
     }
 
-    option = xf86NewOption(strEXAOptionName, strEXAValue);
-    xf86CollectOptions(pScrn, option);
-
-    viaProcessOptions(pScrn);
-
-    VIAVidHWDiffInit(pScrn);
-
     /* CRTC handling */
     xf86CrtcConfigInit(pScrn, &via_xf86crtc_config_funcs);
 
commit cbd54a975d9c53fe11c5ce3810a0ceb5d7a8cf33
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 23 10:25:03 2019 -0600

    Move DDX option processing code into via_options.c
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/src/Makefile.am b/src/Makefile.am
index 21e43c7..553b9ab 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -58,6 +58,7 @@ openchrome_drv_la_SOURCES = \
          via_memcpy.c \
          via_memmgr.h \
          via_memmgr.c \
+         via_options.c \
          via_outputs.c \
          via_priv.h \
          via_regs.h \
diff --git a/src/via_driver.c b/src/via_driver.c
index a1a46b8..a4fade4 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -79,10 +79,8 @@ static Bool via_pci_probe(DriverPtr drv, int entity_num,
 static Bool VIAProbe(DriverPtr drv, int flags);
 #endif
 
-static Bool VIASetupDefaultOptions(ScrnInfoPtr pScrn);
 static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags);
 static Bool VIAScreenInit(SCREEN_INIT_ARGS_DECL);
-static const OptionInfoRec *VIAAvailableOptions(int chipid, int busid);
 
 
 int gVIAEntityIndex = -1;
@@ -166,61 +164,6 @@ static PciChipsets VIAPciChipsets[] = {
 static char strEXAOptionName[] = "MigrationHeuristic";
 static char strEXAValue[] = "greedy";
 
-typedef enum
-{
-#ifdef HAVE_DEBUG
-    OPTION_PRINTVGAREGS,
-    OPTION_PRINTTVREGS,
-#endif
-    OPTION_NOACCEL,
-    OPTION_EXA_NOCOMPOSITE,
-    OPTION_EXA_SCRATCH_SIZE,
-    OPTION_SWCURSOR,
-    OPTION_SHADOW_FB,
-    OPTION_ROTATION_TYPE,
-    OPTION_ROTATE,
-    OPTION_CENTER,
-    OPTION_TVDOTCRAWL,
-    OPTION_TVTYPE,
-    OPTION_TVOUTPUT,
-    OPTION_DISABLEVQ,
-    OPTION_DISABLEIRQ,
-    OPTION_TVDEFLICKER,
-    OPTION_AGP_DMA,
-    OPTION_2D_DMA,
-    OPTION_XV_DMA,
-    OPTION_MAX_DRIMEM,
-    OPTION_AGPMEM,
-    OPTION_DISABLE_XV_BW_CHECK
-} VIAOpts;
-
-static OptionInfoRec VIAOptions[] = {
-#ifdef HAVE_DEBUG /* Don't document these three. */
-    {OPTION_PRINTVGAREGS,        "PrintVGARegs",     OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_PRINTTVREGS,         "PrintTVRegs",      OPTV_BOOLEAN, {0}, FALSE},
-#endif
-    {OPTION_NOACCEL,             "NoAccel",          OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_EXA_NOCOMPOSITE,     "ExaNoComposite",   OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_EXA_SCRATCH_SIZE,    "ExaScratchSize",   OPTV_INTEGER, {0}, FALSE},
-    {OPTION_SWCURSOR,            "SWCursor",         OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_SHADOW_FB,           "ShadowFB",         OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_ROTATION_TYPE,       "RotationType",     OPTV_ANYSTR,  {0}, FALSE},
-    {OPTION_ROTATE,              "Rotate",           OPTV_ANYSTR,  {0}, FALSE},
-    {OPTION_TVDOTCRAWL,          "TVDotCrawl",       OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_TVDEFLICKER,         "TVDeflicker",      OPTV_INTEGER, {0}, FALSE},
-    {OPTION_TVTYPE,              "TVType",           OPTV_ANYSTR,  {0}, FALSE},
-    {OPTION_TVOUTPUT,            "TVOutput",         OPTV_ANYSTR,  {0}, FALSE},
-    {OPTION_DISABLEVQ,           "DisableVQ",        OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_DISABLEIRQ,          "DisableIRQ",       OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_AGP_DMA,             "EnableAGPDMA",     OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_2D_DMA,              "NoAGPFor2D",       OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_XV_DMA,              "NoXVDMA",          OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_DISABLE_XV_BW_CHECK, "DisableXvBWCheck", OPTV_BOOLEAN, {0}, FALSE},
-    {OPTION_MAX_DRIMEM,          "MaxDRIMem",        OPTV_INTEGER, {0}, FALSE},
-    {OPTION_AGPMEM,              "AGPMem",           OPTV_INTEGER, {0}, FALSE},
-    {-1,                         NULL,               OPTV_NONE,    {0}, FALSE}
-};
-
 #ifdef XFree86LOADER
 static MODULESETUPPROTO(VIASetup);
 
@@ -270,12 +213,6 @@ VIASetup(pointer module, pointer opts, int *errmaj, int 
*errmin)
 
 #endif /* XFree86LOADER */
 
-static const OptionInfoRec *
-VIAAvailableOptions(int chipid, int busid)
-{
-    return VIAOptions;
-}
-
 static Bool
 VIASwitchMode(SWITCH_MODE_ARGS_DECL)
 {
@@ -649,87 +586,6 @@ LookupChipID(PciChipsets *pset, int ChipID)
     return -1;
 }
 
-static Bool
-VIASetupDefaultOptions(ScrnInfoPtr pScrn)
-{
-    VIAPtr pVia = VIAPTR(pScrn);
-
-    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASetupDefaultOptions - 
Setting up default chipset options.\n"));
-
-    pVia->shadowFB = FALSE;
-    pVia->NoAccel = FALSE;
-    pVia->noComposite = FALSE;
-    pVia->useEXA = TRUE;
-    pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024;
-    pVia->drmmode.hwcursor = TRUE;
-    pVia->VQEnable = TRUE;
-    pVia->DRIIrqEnable = TRUE;
-    pVia->agpEnable = TRUE;
-    pVia->dma2d = TRUE;
-    pVia->dmaXV = TRUE;
-#ifdef HAVE_DEBUG
-    pVia->disableXvBWCheck = FALSE;
-#endif
-    pVia->maxDriSize = 0;
-    pVia->agpMem = AGP_SIZE / 1024;
-    pVia->VideoEngine = VIDEO_ENGINE_CLE;
-#ifdef HAVE_DEBUG
-    pVia->PrintVGARegs = FALSE;
-#endif
-
-    /* Disable vertical interpolation because the size of */
-    /* line buffer (limited to 800) is too small to do interpolation. */
-    pVia->swov.maxWInterp = 800;
-    pVia->swov.maxHInterp = 600;
-
-    switch (pVia->Chipset) {
-        case VIA_CLE266:
-            break;
-        case VIA_KM400:
-            /* IRQ is not broken on KM400A, but testing (pVia->ChipRev < 0x80)
-             * is not enough to make sure we have an older, broken KM400. */
-            pVia->DRIIrqEnable = FALSE;
-            break;
-        case VIA_K8M800:
-            pVia->DRIIrqEnable = FALSE;
-            break;
-        case VIA_PM800:
-            pVia->VideoEngine = VIDEO_ENGINE_CME;
-            break;
-        case VIA_P4M800PRO:
-            break;
-        case VIA_CX700:
-            pVia->VideoEngine = VIDEO_ENGINE_CME;
-            pVia->swov.maxWInterp = 1920;
-            pVia->swov.maxHInterp = 1080;
-            break;
-        case VIA_P4M890:
-            pVia->VideoEngine = VIDEO_ENGINE_CME;
-            pVia->dmaXV = FALSE;
-            break;
-        case VIA_K8M890:
-            pVia->VideoEngine = VIDEO_ENGINE_CME;
-            pVia->agpEnable = FALSE;
-            pVia->dmaXV = FALSE;
-            break;
-        case VIA_P4M900:
-            pVia->VideoEngine = VIDEO_ENGINE_CME;
-            pVia->agpEnable = FALSE;
-            /* FIXME: this needs to be tested */
-            pVia->dmaXV = FALSE;
-            break;
-        case VIA_VX800:
-        case VIA_VX855:
-        case VIA_VX900:
-            pVia->VideoEngine = VIDEO_ENGINE_CME;
-            pVia->agpEnable = FALSE;
-            pVia->dmaXV = FALSE;
-            break;
-    }
-
-    return TRUE;
-}
-
 static Bool
 VIAGetRec(ScrnInfoPtr pScrn)
 {
@@ -953,9 +809,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
 {
     EntityInfoPtr pEnt;
     VIAPtr pVia;
-    VIADisplayPtr pVIADisplay;
     MessageType from = X_DEFAULT;
-    const char *s = NULL;
 #ifdef HAVE_DRI
     char *busId = NULL;
     drmVersionPtr drmVer;
@@ -1266,284 +1120,10 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
     option = xf86NewOption(strEXAOptionName, strEXAValue);
     xf86CollectOptions(pScrn, option);
 
-    if (!VIASetupDefaultOptions(pScrn)) {
-        goto fail;
-    }
-
-    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, VIAOptions);
-
-    /* When rotating, switch shadow framebuffer on and acceleration off. */
-    if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATION_TYPE))) {
-        if (!xf86NameCmp(s, "SWRandR")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_0;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen "
-                       "RandR enabled, acceleration disabled\n");
-        } else if (!xf86NameCmp(s, "HWRandR")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_0;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Hardware accelerated "
-                       "rotating screen is not implemented. Using SW 
RandR.\n");
-        } else {
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "\"%s\" is not a valid"
-                       "value for Option \"RotationType\".\n", s);
-            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                       "Valid options are \"SWRandR\" and \"HWRandR\".\n");
-        }
-    }
-
-    /* When rotating, switch shadow framebuffer on and acceleration off. */
-    if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATE))) {
-        if (!xf86NameCmp(s, "CW")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_270;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen "
-                       "clockwise -- acceleration is disabled.\n");
-        } else if (!xf86NameCmp(s, "CCW")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_90;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen "
-                       "counterclockwise -- acceleration is disabled.\n");
-        } else if (!xf86NameCmp(s, "UD")) {
-            pVia->shadowFB = TRUE;
-            pVia->NoAccel = TRUE;
-            pVia->RandRRotation = TRUE;
-            pVia->rotate = RR_Rotate_180;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen "
-                       "upside-down -- acceleration is disabled.\n");
-        } else {
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "\"%s\" is not a valid"
-                       "value for Option \"Rotate\".\n", s);
-            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                       "Valid options are \"CW\", \"CCW\" or  \"UD\".\n");
-        }
-    }
-
-    from = (xf86GetOptValBool(VIAOptions, OPTION_SHADOW_FB, &pVia->shadowFB)
-            ? X_CONFIG : X_DEFAULT);
-    xf86DrvMsg(pScrn->scrnIndex, from, "Shadow framebuffer is %s.\n",
-               pVia->shadowFB ? "enabled" : "disabled");
-
-    /* Use hardware acceleration, unless on shadow framebuffer. */
-    from = (xf86GetOptValBool(VIAOptions, OPTION_NOACCEL, &pVia->NoAccel)
-            ? X_CONFIG : X_DEFAULT);
-    if (!pVia->NoAccel && pVia->shadowFB) {
-        xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Acceleration is "
-                   "not supported when using shadow framebuffer.\n");
-        pVia->NoAccel = TRUE;
-        from = X_DEFAULT;
-    }
-
-    /* Disable EXA for KMS case */
-    if (pVia->KMS)
-        pVia->NoAccel = TRUE;
-
-    xf86DrvMsg(pScrn->scrnIndex, from, "Hardware acceleration is %s.\n",
-               !pVia->NoAccel ? "enabled" : "disabled");
-
-    if (!pVia->NoAccel) {
-        from = X_DEFAULT;
-        xf86DrvMsg(pScrn->scrnIndex, from,
-                   "Using EXA acceleration architecture.\n");
-
-        //pVia->noComposite = FALSE;
-        if (pVia->useEXA) {
-            from = xf86GetOptValBool(VIAOptions, OPTION_EXA_NOCOMPOSITE,
-                                     &pVia->noComposite) ? X_CONFIG : 
X_DEFAULT;
-            xf86DrvMsg(pScrn->scrnIndex, from,
-                       "EXA composite acceleration %s.\n",
-                       !pVia->noComposite ? "enabled" : "disabled");
-
-            //pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024;
-            from = xf86GetOptValInteger(VIAOptions, OPTION_EXA_SCRATCH_SIZE,
-                                        &pVia->exaScratchSize)
-                    ? X_CONFIG : X_DEFAULT;
-            xf86DrvMsg(pScrn->scrnIndex, from,
-                       "EXA scratch area size is %d KB.\n",
-                       pVia->exaScratchSize);
-        }
-    }
-
-    /* Use a hardware cursor, unless on secondary or on shadow framebuffer. */
-    from = X_DEFAULT;
-    if (pVia->IsSecondary || pVia->shadowFB)
-        pVia->drmmode.hwcursor = FALSE;
-    else if (xf86GetOptValBool(VIAOptions, OPTION_SWCURSOR,
-                               &pVia->drmmode.hwcursor)) {
-        pVia->drmmode.hwcursor = !pVia->drmmode.hwcursor;
-        from = X_CONFIG;
-    }
-    if (pVia->drmmode.hwcursor)
-        xf86DrvMsg(pScrn->scrnIndex, from, "Using hardware two-color "
-                   "cursors and software full-color cursors.\n");
-    else
-        xf86DrvMsg(pScrn->scrnIndex, from, "Using software cursors.\n");
-
-    //pVia->VQEnable = TRUE;
-    from = xf86GetOptValBool(VIAOptions, OPTION_DISABLEVQ, &pVia->VQEnable)
-            ? X_CONFIG : X_DEFAULT;
-    if (from == X_CONFIG)
-        pVia->VQEnable = !pVia->VQEnable;
-    xf86DrvMsg(pScrn->scrnIndex, from,
-               "GPU virtual command queue will be %s.\n",
-               (pVia->VQEnable) ? "enabled" : "disabled");
-
-    //pVia->DRIIrqEnable = TRUE;
-    from = xf86GetOptValBool(VIAOptions, OPTION_DISABLEIRQ, 
&pVia->DRIIrqEnable)
-            ? X_CONFIG : X_DEFAULT;
-    if (from == X_CONFIG)
-        pVia->DRIIrqEnable = !pVia->DRIIrqEnable;
-    xf86DrvMsg(pScrn->scrnIndex, from,
-               "DRI IRQ will be %s if DRI is enabled.\n",
-               (pVia->DRIIrqEnable) ? "enabled" : "disabled");
-
-    //pVia->agpEnable = FALSE;
-    from = xf86GetOptValBool(VIAOptions, OPTION_AGP_DMA, &pVia->agpEnable)
-            ? X_CONFIG : X_DEFAULT;
-    xf86DrvMsg(pScrn->scrnIndex, from,
-               "AGP DMA will be %s if DRI is enabled.\n",
-               (pVia->agpEnable) ? "enabled" : "disabled");
-
-    //pVia->dma2d = TRUE;
-    if (pVia->agpEnable) {
-        from = xf86GetOptValBool(VIAOptions, OPTION_2D_DMA, &pVia->dma2d)
-                ? X_CONFIG : X_DEFAULT;
-        if (from == X_CONFIG)
-            pVia->dma2d = !pVia->dma2d;
-        xf86DrvMsg(pScrn->scrnIndex, from, "AGP DMA will %sbe used for "
-                   "2D acceleration.\n", (pVia->dma2d) ? "" : "not ");
-    }
-    //pVia->dmaXV = TRUE;
-    from = xf86GetOptValBool(VIAOptions, OPTION_XV_DMA, &pVia->dmaXV)
-            ? X_CONFIG : X_DEFAULT;
-    if (from == X_CONFIG)
-        pVia->dmaXV = !pVia->dmaXV;
-    xf86DrvMsg(pScrn->scrnIndex, from, "PCI DMA will %sbe used for XV "
-               "image transfer if DRI is enabled.\n",
-               (pVia->dmaXV) ? "" : "not ");
-
-#ifdef HAVE_DEBUG
-    //pVia->disableXvBWCheck = FALSE;
-    from = xf86GetOptValBool(VIAOptions, OPTION_DISABLE_XV_BW_CHECK,
-                             &pVia->disableXvBWCheck)
-            ? X_CONFIG : X_DEFAULT;
-    xf86DrvMsg(pScrn->scrnIndex, from, "Xv Bandwidth check is %s.\n",
-               pVia->disableXvBWCheck ? "disabled" : "enabled");
-    if (pVia->disableXvBWCheck) {
-        xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-                   "You may get a \"snowy\" screen"
-                   " when using the Xv overlay.\n");
-    }
-#endif
-
-    //pVia->maxDriSize = 0;
-    from = xf86GetOptValInteger(VIAOptions, OPTION_MAX_DRIMEM,
-                                &pVia->maxDriSize)
-            ? X_CONFIG : X_DEFAULT;
-    if (pVia->maxDriSize > 0)
-        xf86DrvMsg(pScrn->scrnIndex, from,
-                   "Will impose a %d kB limit on video RAM reserved for 
DRI.\n",
-                   pVia->maxDriSize);
-    else
-        xf86DrvMsg(pScrn->scrnIndex, from,
-                   "Will not impose a limit on video RAM reserved for DRI.\n");
-
-    //pVia->agpMem = AGP_SIZE / 1024;
-    from = xf86GetOptValInteger(VIAOptions, OPTION_AGPMEM, &pVia->agpMem)
-            ? X_CONFIG : X_DEFAULT;
-    xf86DrvMsg(pScrn->scrnIndex, from,
-               "Will try to allocate %d KB of AGP memory.\n", pVia->agpMem);
-
-    pVIADisplay = pVia->pVIADisplay;
-    pVIADisplay->TVDotCrawl = FALSE;
-    from = xf86GetOptValBool(VIAOptions, OPTION_TVDOTCRAWL,
-                             &pVIADisplay->TVDotCrawl)
-            ? X_CONFIG : X_DEFAULT;
-    xf86DrvMsg(pScrn->scrnIndex, from, "TV dotCrawl is %s.\n",
-               pVIADisplay->TVDotCrawl ? "enabled" : "disabled");
-
-    /* TV Deflicker */
-    pVIADisplay->TVDeflicker = 0;
-    from = xf86GetOptValInteger(VIAOptions, OPTION_TVDEFLICKER,
-                                &pVIADisplay->TVDeflicker)
-            ? X_CONFIG : X_DEFAULT;
-    xf86DrvMsg(pScrn->scrnIndex, from, "TV deflicker is set to %d.\n",
-               pVIADisplay->TVDeflicker);
-
-    pVIADisplay->TVType = TVTYPE_NONE;
-    if ((s = xf86GetOptValString(VIAOptions, OPTION_TVTYPE))) {
-        if (!xf86NameCmp(s, "NTSC")) {
-            pVIADisplay->TVType = TVTYPE_NTSC;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is NTSC.\n");
-        } else if (!xf86NameCmp(s, "PAL")) {
-            pVIADisplay->TVType = TVTYPE_PAL;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is PAL.\n");
-        } else if (!xf86NameCmp(s, "480P")) {
-            pVIADisplay->TVType = TVTYPE_480P;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is SDTV 480P.\n");
-        } else if (!xf86NameCmp(s, "576P")) {
-            pVIADisplay->TVType = TVTYPE_576P;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is SDTV 576P.\n");
-        } else if (!xf86NameCmp(s, "720P")) {
-            pVIADisplay->TVType = TVTYPE_720P;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is HDTV 720P.\n");
-        } else if (!xf86NameCmp(s, "1080I")) {
-            pVIADisplay->TVType = TVTYPE_1080I;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is HDTV 1080i.\n");
-        }
-    } else {
-        xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, "No default TV type is 
set.\n");
-    }
-
-    /* TV output signal Option */
-    pVIADisplay->TVOutput = TVOUTPUT_NONE;
-    if ((s = xf86GetOptValString(VIAOptions, OPTION_TVOUTPUT))) {
-        if (!xf86NameCmp(s, "S-Video")) {
-            pVIADisplay->TVOutput = TVOUTPUT_SVIDEO;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                       "TV Output Signal is S-Video.\n");
-        } else if (!xf86NameCmp(s, "Composite")) {
-            pVIADisplay->TVOutput = TVOUTPUT_COMPOSITE;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                       "TV Output Signal is Composite.\n");
-        } else if (!xf86NameCmp(s, "SC")) {
-            pVIADisplay->TVOutput = TVOUTPUT_SC;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is 
SC.\n");
-        } else if (!xf86NameCmp(s, "RGB")) {
-            pVIADisplay->TVOutput = TVOUTPUT_RGB;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                       "TV Output Signal is RGB.\n");
-        } else if (!xf86NameCmp(s, "YCbCr")) {
-            pVIADisplay->TVOutput = TVOUTPUT_YCBCR;
-            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-                       "TV Output Signal is YCbCr.\n");
-        }
-    } else {
-        xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT,
-                   "No default TV output signal type is set.\n");
-    }
+    viaProcessOptions(pScrn);
 
     VIAVidHWDiffInit(pScrn);
 
-#ifdef HAVE_DEBUG
-    //pVia->PrintVGARegs = FALSE;
-    from = xf86GetOptValBool(VIAOptions, OPTION_PRINTVGAREGS,
-                             &pVia->PrintVGARegs)
-            ? X_CONFIG : X_DEFAULT;
-    xf86DrvMsg(pScrn->scrnIndex, from, "Will %sprint VGA registers.\n",
-               pVia->PrintVGARegs ? "" : "not ");
-    if (pVia->PrintVGARegs)
-        ViaVgahwPrint(VGAHWPTR(pScrn)); /* Do this as early as possible */
-#endif /* HAVE_DEBUG */
-
     /* CRTC handling */
     xf86CrtcConfigInit(pScrn, &via_xf86crtc_config_funcs);
 
diff --git a/src/via_driver.h b/src/via_driver.h
index f9262b6..920d9e2 100644
--- a/src/via_driver.h
+++ b/src/via_driver.h
@@ -356,6 +356,9 @@ typedef struct
 } VIAEntRec, *VIAEntPtr;
 
 
+const OptionInfoRec *VIAAvailableOptions(int chipid, int busid);
+void viaProcessOptions(ScrnInfoPtr pScrn);
+
 /* In via_display.c. */
 const xf86CrtcFuncsRec iga1_crtc_funcs;
 const xf86CrtcFuncsRec iga2_crtc_funcs;
diff --git a/src/via_options.c b/src/via_options.c
new file mode 100644
index 0000000..f0bdd39
--- /dev/null
+++ b/src/via_options.c
@@ -0,0 +1,562 @@
+/*
+ * Copyright 2005-2019 OpenChrome Project
+ *                     [https://www.freedesktop.org/wiki/Openchrome]
+ * Copyright 2004-2006 Luc Verhaegen.
+ * Copyright 2004-2005 The Unichrome Project  [unichrome.sf.net]
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * 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, sub license, 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
+ * NON-INFRINGEMENT. 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "via_driver.h"
+
+
+typedef enum
+{
+#ifdef HAVE_DEBUG
+    OPTION_PRINTVGAREGS,
+    OPTION_PRINTTVREGS,
+#endif
+    OPTION_NOACCEL,
+    OPTION_EXA_NOCOMPOSITE,
+    OPTION_EXA_SCRATCH_SIZE,
+    OPTION_SWCURSOR,
+    OPTION_SHADOW_FB,
+    OPTION_ROTATION_TYPE,
+    OPTION_ROTATE,
+    OPTION_CENTER,
+    OPTION_TVDOTCRAWL,
+    OPTION_TVTYPE,
+    OPTION_TVOUTPUT,
+    OPTION_DISABLEVQ,
+    OPTION_DISABLEIRQ,
+    OPTION_TVDEFLICKER,
+    OPTION_AGP_DMA,
+    OPTION_2D_DMA,
+    OPTION_XV_DMA,
+    OPTION_MAX_DRIMEM,
+    OPTION_AGPMEM,
+    OPTION_DISABLE_XV_BW_CHECK
+} VIAOpts;
+
+static OptionInfoRec VIAOptions[] = {
+#ifdef HAVE_DEBUG /* Don't document these three. */
+    {OPTION_PRINTVGAREGS,        "PrintVGARegs",     OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_PRINTTVREGS,         "PrintTVRegs",      OPTV_BOOLEAN, {0}, FALSE},
+#endif
+    {OPTION_NOACCEL,             "NoAccel",          OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_EXA_NOCOMPOSITE,     "ExaNoComposite",   OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_EXA_SCRATCH_SIZE,    "ExaScratchSize",   OPTV_INTEGER, {0}, FALSE},
+    {OPTION_SWCURSOR,            "SWCursor",         OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_SHADOW_FB,           "ShadowFB",         OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_ROTATION_TYPE,       "RotationType",     OPTV_ANYSTR,  {0}, FALSE},
+    {OPTION_ROTATE,              "Rotate",           OPTV_ANYSTR,  {0}, FALSE},
+    {OPTION_TVDOTCRAWL,          "TVDotCrawl",       OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_TVDEFLICKER,         "TVDeflicker",      OPTV_INTEGER, {0}, FALSE},
+    {OPTION_TVTYPE,              "TVType",           OPTV_ANYSTR,  {0}, FALSE},
+    {OPTION_TVOUTPUT,            "TVOutput",         OPTV_ANYSTR,  {0}, FALSE},
+    {OPTION_DISABLEVQ,           "DisableVQ",        OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_DISABLEIRQ,          "DisableIRQ",       OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_AGP_DMA,             "EnableAGPDMA",     OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_2D_DMA,              "NoAGPFor2D",       OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_XV_DMA,              "NoXVDMA",          OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_DISABLE_XV_BW_CHECK, "DisableXvBWCheck", OPTV_BOOLEAN, {0}, FALSE},
+    {OPTION_MAX_DRIMEM,          "MaxDRIMem",        OPTV_INTEGER, {0}, FALSE},
+    {OPTION_AGPMEM,              "AGPMem",           OPTV_INTEGER, {0}, FALSE},
+    {-1,                         NULL,               OPTV_NONE,    {0}, FALSE}
+};
+
+const OptionInfoRec *
+VIAAvailableOptions(int chipid, int busid)
+{
+    return VIAOptions;
+}
+
+
+static void
+viaSetupDefaultOptions(ScrnInfoPtr pScrn)
+{
+    VIAPtr pVia = VIAPTR(pScrn);
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "%s - Setting up default chipset options.\n",
+                        __func__));
+
+    pVia->shadowFB = FALSE;
+    pVia->NoAccel = FALSE;
+    pVia->noComposite = FALSE;
+    pVia->useEXA = TRUE;
+    pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024;
+    pVia->drmmode.hwcursor = TRUE;
+    pVia->VQEnable = TRUE;
+    pVia->DRIIrqEnable = TRUE;
+    pVia->agpEnable = TRUE;
+    pVia->dma2d = TRUE;
+    pVia->dmaXV = TRUE;
+#ifdef HAVE_DEBUG
+    pVia->disableXvBWCheck = FALSE;
+#endif
+    pVia->maxDriSize = 0;
+    pVia->agpMem = AGP_SIZE / 1024;
+    pVia->VideoEngine = VIDEO_ENGINE_CLE;
+#ifdef HAVE_DEBUG
+    pVia->PrintVGARegs = FALSE;
+#endif
+
+    /*
+     * Disable vertical interpolation because the size of
+     * line buffer (limited to 800) is too small to do interpolation.
+     */
+    pVia->swov.maxWInterp = 800;
+    pVia->swov.maxHInterp = 600;
+
+    switch (pVia->Chipset) {
+    case VIA_CLE266:
+        break;
+    case VIA_KM400:
+        /*
+         * IRQ is not broken on KM400A, but testing
+         * (pVia->ChipRev < 0x80) is not enough to make sure we
+         * have an older, broken KM400.
+         */
+        pVia->DRIIrqEnable = FALSE;
+        break;
+    case VIA_K8M800:
+        pVia->DRIIrqEnable = FALSE;
+        break;
+    case VIA_PM800:
+        pVia->VideoEngine = VIDEO_ENGINE_CME;
+        break;
+    case VIA_P4M800PRO:
+        break;
+    case VIA_CX700:
+        pVia->VideoEngine = VIDEO_ENGINE_CME;
+        pVia->swov.maxWInterp = 1920;
+        pVia->swov.maxHInterp = 1080;
+        break;
+    case VIA_P4M890:
+        pVia->VideoEngine = VIDEO_ENGINE_CME;
+        pVia->dmaXV = FALSE;
+        break;
+    case VIA_K8M890:
+        pVia->VideoEngine = VIDEO_ENGINE_CME;
+        pVia->agpEnable = FALSE;
+        pVia->dmaXV = FALSE;
+        break;
+    case VIA_P4M900:
+        pVia->VideoEngine = VIDEO_ENGINE_CME;
+        pVia->agpEnable = FALSE;
+        /* FIXME: this needs to be tested */
+        pVia->dmaXV = FALSE;
+        break;
+    case VIA_VX800:
+    case VIA_VX855:
+    case VIA_VX900:
+        pVia->VideoEngine = VIDEO_ENGINE_CME;
+        pVia->agpEnable = FALSE;
+        pVia->dmaXV = FALSE;
+        break;
+    }
+}
+
+void
+viaProcessOptions(ScrnInfoPtr pScrn)
+{
+    VIAPtr pVia = VIAPTR(pScrn);
+    VIADisplayPtr pVIADisplay = pVia->pVIADisplay;
+    MessageType from = X_DEFAULT;
+    const char *s = NULL;
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Entered %s.\n", __func__));
+
+    viaSetupDefaultOptions(pScrn);
+
+    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, VIAOptions);
+
+    /*
+     * When rotating, switch shadow frame buffer on and acceleration
+     * off.
+     */
+    if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATION_TYPE))) {
+        if (!xf86NameCmp(s, "SWRandR")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_0;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Rotating screen RandR enabled, "
+                        "acceleration disabled\n");
+        } else if (!xf86NameCmp(s, "HWRandR")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_0;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Hardware accelerated rotating screen is not "
+                        "implemented. Using SW RandR.\n");
+        } else {
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "\"%s\" is not a valid"
+                        "value for Option \"RotationType\".\n", s);
+            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Valid options are \"SWRandR\" and "
+                        "\"HWRandR\".\n");
+        }
+    }
+
+    /*
+     * When rotating, switch shadow frame buffer on and acceleration
+     * off.
+     */
+    if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATE))) {
+        if (!xf86NameCmp(s, "CW")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_270;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Rotating screen clockwise -- "
+                        "acceleration is disabled.\n");
+        } else if (!xf86NameCmp(s, "CCW")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_90;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Rotating screen counterclockwise -- "
+                        "acceleration is disabled.\n");
+        } else if (!xf86NameCmp(s, "UD")) {
+            pVia->shadowFB = TRUE;
+            pVia->NoAccel = TRUE;
+            pVia->RandRRotation = TRUE;
+            pVia->rotate = RR_Rotate_180;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "Rotating screen upside-down -- "
+                        "acceleration is disabled.\n");
+        } else {
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "\"%s\" is not a valid value for "
+                        "Option \"Rotate\".\n", s);
+            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Valid options are \"CW\", \"CCW\" "
+                        "or \"UD\".\n");
+        }
+    }
+
+    from = (xf86GetOptValBool(VIAOptions,
+                                OPTION_SHADOW_FB, &pVia->shadowFB)
+            ? X_CONFIG : X_DEFAULT);
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "Shadow framebuffer is %s.\n",
+                pVia->shadowFB ? "enabled" : "disabled");
+
+    /*
+     * Use hardware acceleration, unless on shadow frame buffer.
+     */
+    from = (xf86GetOptValBool(VIAOptions,
+                                OPTION_NOACCEL, &pVia->NoAccel) ?
+            X_CONFIG : X_DEFAULT);
+    if (!pVia->NoAccel && pVia->shadowFB) {
+        xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                    "Acceleration is not supported when using shadow "
+                    "frame buffer.\n");
+        pVia->NoAccel = TRUE;
+        from = X_DEFAULT;
+    }
+
+    /*
+     * Disable EXA for KMS case
+     */
+    if (pVia->KMS)
+        pVia->NoAccel = TRUE;
+
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "Hardware acceleration is %s.\n",
+                !pVia->NoAccel ? "enabled" : "disabled");
+
+    if (!pVia->NoAccel) {
+        from = X_DEFAULT;
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "Using EXA acceleration architecture.\n");
+/*
+        pVia->noComposite = FALSE;
+*/
+        if (pVia->useEXA) {
+            from = xf86GetOptValBool(VIAOptions,
+                                        OPTION_EXA_NOCOMPOSITE,
+                                        &pVia->noComposite) ?
+                    X_CONFIG : X_DEFAULT;
+            xf86DrvMsg(pScrn->scrnIndex, from,
+                        "EXA composite acceleration %s.\n",
+                        !pVia->noComposite ? "enabled" : "disabled");
+
+/*
+            pVia->exaScratchSize = VIA_SCRATCH_SIZE / 1024;
+*/
+            from = xf86GetOptValInteger(VIAOptions,
+                                            OPTION_EXA_SCRATCH_SIZE,
+                                            &pVia->exaScratchSize) ?
+                    X_CONFIG : X_DEFAULT;
+            xf86DrvMsg(pScrn->scrnIndex, from,
+                        "EXA scratch area size is %d KB.\n",
+                        pVia->exaScratchSize);
+        }
+    }
+
+    /*
+     * Use a hardware cursor, unless on secondary or on shadow
+     * frame buffer.
+     */
+    from = X_DEFAULT;
+    if (pVia->IsSecondary || pVia->shadowFB)
+        pVia->drmmode.hwcursor = FALSE;
+    else if (xf86GetOptValBool(VIAOptions, OPTION_SWCURSOR,
+                                &pVia->drmmode.hwcursor)) {
+        pVia->drmmode.hwcursor = !pVia->drmmode.hwcursor;
+        from = X_CONFIG;
+    }
+
+    if (pVia->drmmode.hwcursor)
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "Using hardware two-color cursors and software "
+                    "full-color cursors.\n");
+    else
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "Using software cursors.\n");
+
+/*
+    pVia->VQEnable = TRUE;
+*/
+    from = xf86GetOptValBool(VIAOptions,
+                                OPTION_DISABLEVQ, &pVia->VQEnable) ?
+            X_CONFIG : X_DEFAULT;
+    if (from == X_CONFIG)
+        pVia->VQEnable = !pVia->VQEnable;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "GPU virtual command queue will be %s.\n",
+                (pVia->VQEnable) ? "enabled" : "disabled");
+
+/*
+    pVia->DRIIrqEnable = TRUE;
+*/
+    from = xf86GetOptValBool(VIAOptions,
+                                OPTION_DISABLEIRQ,
+                                &pVia->DRIIrqEnable) ?
+            X_CONFIG : X_DEFAULT;
+    if (from == X_CONFIG)
+        pVia->DRIIrqEnable = !pVia->DRIIrqEnable;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "DRI IRQ will be %s if DRI is enabled.\n",
+                (pVia->DRIIrqEnable) ? "enabled" : "disabled");
+
+/*
+    pVia->agpEnable = FALSE;
+*/
+    from = xf86GetOptValBool(VIAOptions,
+                                OPTION_AGP_DMA, &pVia->agpEnable) ?
+            X_CONFIG : X_DEFAULT;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "AGP DMA will be %s if DRI is enabled.\n",
+                (pVia->agpEnable) ? "enabled" : "disabled");
+
+/*
+    pVia->dma2d = TRUE;
+*/
+    if (pVia->agpEnable) {
+        from = xf86GetOptValBool(VIAOptions,
+                                    OPTION_2D_DMA, &pVia->dma2d) ?
+                X_CONFIG : X_DEFAULT;
+        if (from == X_CONFIG)
+            pVia->dma2d = !pVia->dma2d;
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "AGP DMA will %sbe used for 2D acceleration.\n",
+                    (pVia->dma2d) ? "" : "not ");
+    }
+
+/*
+    pVia->dmaXV = TRUE;
+*/
+    from = xf86GetOptValBool(VIAOptions,
+                                OPTION_XV_DMA, &pVia->dmaXV) ?
+            X_CONFIG : X_DEFAULT;
+    if (from == X_CONFIG)
+        pVia->dmaXV = !pVia->dmaXV;
+    xf86DrvMsg(pScrn->scrnIndex, from, "PCI DMA will %sbe used for XV "
+               "image transfer if DRI is enabled.\n",
+               (pVia->dmaXV) ? "" : "not ");
+
+#ifdef HAVE_DEBUG
+/*
+    pVia->disableXvBWCheck = FALSE;
+*/
+    from = xf86GetOptValBool(VIAOptions,
+                                OPTION_DISABLE_XV_BW_CHECK,
+                                &pVia->disableXvBWCheck) ?
+            X_CONFIG : X_DEFAULT;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "Xv Bandwidth check is %s.\n",
+                pVia->disableXvBWCheck ? "disabled" : "enabled");
+    if (pVia->disableXvBWCheck) {
+        xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                    "You may get a \"snowy\" screen when using the Xv "
+                    "overlay.\n");
+    }
+#endif
+
+/*
+    pVia->maxDriSize = 0;
+*/
+    from = xf86GetOptValInteger(VIAOptions,
+                                OPTION_MAX_DRIMEM,
+                                &pVia->maxDriSize) ?
+            X_CONFIG : X_DEFAULT;
+    if (pVia->maxDriSize > 0)
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "Will impose a %d kB limit on video RAM reserved "
+                    "for DRI.\n",
+                    pVia->maxDriSize);
+    else
+        xf86DrvMsg(pScrn->scrnIndex, from,
+                    "Will not impose a limit on video RAM reserved "
+                    "for DRI.\n");
+
+/*
+    pVia->agpMem = AGP_SIZE / 1024;
+*/
+    from = xf86GetOptValInteger(VIAOptions,
+                                OPTION_AGPMEM, &pVia->agpMem) ?
+            X_CONFIG : X_DEFAULT;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "Will try to allocate %d KB of AGP memory.\n",
+                pVia->agpMem);
+
+    pVIADisplay = pVia->pVIADisplay;
+    pVIADisplay->TVDotCrawl = FALSE;
+    from = xf86GetOptValBool(VIAOptions,
+                                OPTION_TVDOTCRAWL,
+                                &pVIADisplay->TVDotCrawl) ?
+            X_CONFIG : X_DEFAULT;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "TV dotCrawl is %s.\n",
+                pVIADisplay->TVDotCrawl ? "enabled" : "disabled");
+
+    /*
+     * TV Deflicker
+     */
+    pVIADisplay->TVDeflicker = 0;
+    from = xf86GetOptValInteger(VIAOptions, OPTION_TVDEFLICKER,
+                                &pVIADisplay->TVDeflicker) ?
+            X_CONFIG : X_DEFAULT;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "TV deflicker is set to %d.\n",
+                pVIADisplay->TVDeflicker);
+
+    pVIADisplay->TVType = TVTYPE_NONE;
+    if ((s = xf86GetOptValString(VIAOptions, OPTION_TVTYPE))) {
+        if (!xf86NameCmp(s, "NTSC")) {
+            pVIADisplay->TVType = TVTYPE_NTSC;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Type is NTSC.\n");
+        } else if (!xf86NameCmp(s, "PAL")) {
+            pVIADisplay->TVType = TVTYPE_PAL;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Type is PAL.\n");
+        } else if (!xf86NameCmp(s, "480P")) {
+            pVIADisplay->TVType = TVTYPE_480P;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Type is SDTV 480P.\n");
+        } else if (!xf86NameCmp(s, "576P")) {
+            pVIADisplay->TVType = TVTYPE_576P;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Type is SDTV 576P.\n");
+        } else if (!xf86NameCmp(s, "720P")) {
+            pVIADisplay->TVType = TVTYPE_720P;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Type is HDTV 720P.\n");
+        } else if (!xf86NameCmp(s, "1080I")) {
+            pVIADisplay->TVType = TVTYPE_1080I;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Type is HDTV 1080i.\n");
+        }
+    } else {
+        xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT,
+                    "No default TV type is set.\n");
+    }
+
+    /*
+     * TV output signal option
+     */
+    pVIADisplay->TVOutput = TVOUTPUT_NONE;
+    if ((s = xf86GetOptValString(VIAOptions, OPTION_TVOUTPUT))) {
+        if (!xf86NameCmp(s, "S-Video")) {
+            pVIADisplay->TVOutput = TVOUTPUT_SVIDEO;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Output Signal is S-Video.\n");
+        } else if (!xf86NameCmp(s, "Composite")) {
+            pVIADisplay->TVOutput = TVOUTPUT_COMPOSITE;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Output Signal is Composite.\n");
+        } else if (!xf86NameCmp(s, "SC")) {
+            pVIADisplay->TVOutput = TVOUTPUT_SC;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Output Signal is SC.\n");
+        } else if (!xf86NameCmp(s, "RGB")) {
+            pVIADisplay->TVOutput = TVOUTPUT_RGB;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Output Signal is RGB.\n");
+        } else if (!xf86NameCmp(s, "YCbCr")) {
+            pVIADisplay->TVOutput = TVOUTPUT_YCBCR;
+            xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+                        "TV Output Signal is YCbCr.\n");
+        }
+    } else {
+        xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT,
+                    "No default TV output signal type is set.\n");
+    }
+
+#ifdef HAVE_DEBUG
+/*
+    pVia->PrintVGARegs = FALSE;
+*/
+    from = xf86GetOptValBool(VIAOptions,
+                                OPTION_PRINTVGAREGS,
+                                &pVia->PrintVGARegs) ?
+            X_CONFIG : X_DEFAULT;
+    xf86DrvMsg(pScrn->scrnIndex, from,
+                "Will %sprint VGA registers.\n",
+                pVia->PrintVGARegs ? "" : "not ");
+    if (pVia->PrintVGARegs)
+        /*
+         * Do this as early as possible.
+         */
+        ViaVgahwPrint(VGAHWPTR(pScrn));
+#endif /* HAVE_DEBUG */
+
+    DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "Exiting %s.\n", __func__));
+}
_______________________________________________
openchrome-devel mailing list
openchrome-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/openchrome-devel

Reply via email to