diff mbox

add kms-only build time option

Message ID 20090818123542.12aad4a6@jbarnes-g45 (mailing list archive)
State Not Applicable
Headers show

Commit Message

Jesse Barnes Aug. 18, 2009, 7:35 p.m. UTC
To prevent the server from trying to enable I/O ports, we can use the
DriverFunc callback and clear the passed in "flags" parameter.  However
this call happens early, way before we know whether KMS will be
available or not.  So to enable non-root configs we can add a build
time option instead, which assumes KMS support (and therefore indicates
to the server that I/O ports are not needed).

Any comments?
diff mbox

Patch

diff --git a/configure.ac b/configure.ac
index d5c12a8..54560bc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -83,6 +83,11 @@  AC_ARG_ENABLE(xvmc, AC_HELP_STRING([--disable-xvmc],
               [XVMC="$enableval"],
               [XVMC=yes])
 
+AC_ARG_ENABLE(kms-only, AC_HELP_STRING([--enable-kms-only],
+                                  [Assume KMS support [[default=no]]]),
+              [KMS_ONLY="$enableval"],
+              [KMS_ONLY=no])
+
 # Checks for extensions
 XORG_DRIVER_CHECK_EXT(XINERAMA, xineramaproto)
 XORG_DRIVER_CHECK_EXT(RANDR, randrproto)
@@ -166,6 +171,11 @@  if test "$XVMC" = yes; then
     	AC_SUBST([XVMCLIB_CFLAGS])
 fi
 
+AM_CONDITIONAL(KMS_ONLY, test x$KMS_ONLY = xyes)
+if test "$KMS_ONLY" = yes; then
+	AC_DEFINE(KMS_ONLY,1,[Assume KMS support])
+fi
+
 AC_SUBST([DRI_CFLAGS])
 AC_SUBST([XORG_CFLAGS])
 AC_SUBST([WARN_CFLAGS])
diff --git a/src/i810_driver.c b/src/i810_driver.c
index 0366901..a08a500 100644
--- a/src/i810_driver.c
+++ b/src/i810_driver.c
@@ -79,7 +79,7 @@  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 /* Required Functions: */
 
 static void I810Identify(int flags);
-
+static Bool I810DriverFunc(ScrnInfoPtr pScrn, xorgDriverFuncOp op, pointer ptr);
 static Bool intel_pci_probe (DriverPtr		drv,
 			     int		entity_num,
 			     struct pci_device	*dev,
@@ -150,7 +150,7 @@  _X_EXPORT DriverRec I810 = {
    I810AvailableOptions,
    NULL,
    0,
-   NULL,
+   I810DriverFunc,
    intel_device_match,
    intel_pci_probe
 };
@@ -394,6 +394,26 @@  I810AvailableOptions(int chipid, int busid)
 #endif
 }
 
+static Bool
+I810DriverFunc(ScrnInfoPtr pScrn, xorgDriverFuncOp op, pointer ptr)
+{
+    xorgHWFlags *flag;
+
+    switch (op) {
+        case GET_REQUIRED_HW_INTERFACES:
+            flag = (CARD32*)ptr;
+#ifdef KMS_ONLY
+            (*flag) = 0;
+#else
+	    (*flag) = HW_IO | HW_MMIO;
+#endif
+            return TRUE;
+        default:
+	    /* Unknown or deprecated function */
+            return FALSE;
+    }
+}
+
 struct pci_device *
 intel_host_bridge (void)
 {