This patch implements the option of a server without support for vga
arbitration, using dummy functions. It introduces --{enable, disable}-vgaarb
to autoconf (enabled by default).

Note that the server now requires libpciaccess >= 0.10.8.

Signed-off-by: Tiago Vignatti <[email protected]>
---

What about this one, Dave? I don't know if this way is how you thought. Well,
here are the stats:

- with vgaarbiter
   text    data     bss     dec     hex filename
1658395   48164   43756 1750315  1ab52b /opt/master/bin/Xorg

- without vgaarbiter and with dummy functions we got .7411 % of text removal:
   text    data     bss     dec     hex filename
1646105   48008   43756 1737869  1a848d /opt/master/bin/Xorg

- without vgaarbiter with ugly macros (previous patch) all over the code we 
  got .7657 % of text removal:
   text    data     bss     dec     hex filename
1645698   47976   43756 1737430  1a82d6 /opt/master/bin/Xorg

So it's far from being an extraordinary removal but IMHO already justifies.



 configure.ac                       |   10 ++++++++--
 hw/xfree86/common/Makefile.am      |   10 +++++++---
 hw/xfree86/common/xf86VGAarbiter.c |    5 ++---
 hw/xfree86/common/xf86VGAarbiter.h |    2 +-
 hw/xfree86/common/xf86str.h        |    6 ++++++
 hw/xfree86/dri/dri.c               |    2 +-
 include/xorg-config.h.in           |    6 +++---
 7 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/configure.ac b/configure.ac
index 6345fd9..28e5a59 100644
--- a/configure.ac
+++ b/configure.ac
@@ -591,6 +591,7 @@ AC_ARG_ENABLE(xaa,               
AS_HELP_STRING([--enable-xaa], [Build XAA (defa
 AC_ARG_ENABLE(vgahw,          AS_HELP_STRING([--enable-vgahw], [Build Xorg 
with vga access (default: enabled)]), [VGAHW=$enableval], [VGAHW=yes])
 AC_ARG_ENABLE(vbe,            AS_HELP_STRING([--enable-vbe], [Build Xorg with 
VBE module (default: enabled)]), [VBE=$enableval], [VBE=yes])
 AC_ARG_ENABLE(int10-module,     AS_HELP_STRING([--enable-int10-module], [Build 
Xorg with int10 module (default: enabled)]), [INT10MODULE=$enableval], 
[INT10MODULE=yes])
+AC_ARG_ENABLE(vgaarb,         AS_HELP_STRING([--enable-vgaarb], [Build Xorg 
with VGA arbitration support (default: enabled)]), [VGAARBITER=$enableval], 
[VGAARBITER=yes])
 
 dnl DDXes.
 AC_ARG_ENABLE(xorg,                  AS_HELP_STRING([--enable-xorg], [Build 
Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
@@ -1381,7 +1382,7 @@ if test "x$XORG" = xyes; then
        AC_SUBST([symbol_visibility])
        dnl ===================================================================
 
-       PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
+       PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.10.8])
        SAVE_LIBS=$LIBS
        SAVE_CFLAGS=$CFLAGS
        CFLAGS=$PCIACCESS_CFLAGS
@@ -1389,7 +1390,11 @@ if test "x$XORG" = xyes; then
        AC_CHECK_FUNCS([pci_system_init_dev_mem])
        AC_CHECK_FUNCS([pci_device_enable])
        AC_CHECK_FUNCS([pci_device_is_boot_vga])
-       AC_CHECK_FUNCS([pci_device_vgaarb_init])
+
+       if test "x$VGAARBITER" == xyes; then
+           AC_DEFINE(VGAARB, 1, [Want VGA arbitration.])
+       fi
+
        LIBS=$SAVE_LIBS
        CFLAGS=$SAVE_CFLAGS
        XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $DLOPEN_LIBS 
$GLX_SYS_LIBS $SELINUX_LIB"
@@ -1609,6 +1614,7 @@ AM_CONDITIONAL([SOLARIS_ASM_INLINE], [test 
"x$solaris_asm_inline" = xyes])
 AM_CONDITIONAL([SOLARIS_VT], [test "x$solaris_vt" = xyes])
 AM_CONDITIONAL([DGA], [test "x$DGA" = xyes])
 AM_CONDITIONAL([XF86VIDMODE], [test "x$XF86VIDMODE" = xyes])
+AM_CONDITIONAL([VGAARBITER], [test "x$VGAARBITER" = xyes])
 
 dnl XWin DDX
 
diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index ad27210..76e4bdd 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -17,6 +17,10 @@ if DGA
 DGASOURCES = xf86DGA.c
 endif
 
+if VGAARBITER
+VGAARB_EXTRADIST = xf86VGAarbiterPriv.h
+endif
+
 XISOURCES = xf86Xinput.c xisb.c
 XISDKINCS = xf86Xinput.h xisb.h
 RANDRSOURCES = xf86RandR.c
@@ -83,9 +87,9 @@ EXTRA_DIST = \
        xorgVersion.h \
        $(MODEDEFSOURCES) \
        modeline2c.awk \
-       xf86VGAarbiter.h \
-       xf86VGAarbiterPriv.h \
-        $(DISTKBDSOURCES)
+       xf86VGAarbiter.h
+       $(VGAARB_EXTRADIST) \
+       $(DISTKBDSOURCES)
 
 if LNXACPI
 XORG_CFLAGS += -DHAVE_ACPI
diff --git a/hw/xfree86/common/xf86VGAarbiter.c 
b/hw/xfree86/common/xf86VGAarbiter.c
index 9b72331..ce656c0 100644
--- a/hw/xfree86/common/xf86VGAarbiter.c
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -32,7 +32,7 @@
 
 #include "xf86VGAarbiter.h"
 
-#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
+#ifdef VGAARB
 #include "xf86VGAarbiterPriv.h"
 #include "xf86Bus.h"
 #include "xf86Priv.h"
@@ -1172,5 +1172,4 @@ Bool xf86VGAarbiterAllowDRI(ScreenPtr pScreen) { return 
TRUE; }
 void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn) {}
 void xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn) {}
 Bool xf86VGAarbiterWrapFunctions(void) { return FALSE; }
-
-#endif
+#endif /* VGAARB */
diff --git a/hw/xfree86/common/xf86VGAarbiter.h 
b/hw/xfree86/common/xf86VGAarbiter.h
index 904b6b0..ec71b0d 100644
--- a/hw/xfree86/common/xf86VGAarbiter.h
+++ b/hw/xfree86/common/xf86VGAarbiter.h
@@ -33,7 +33,7 @@
 /* Functions */
 extern void xf86VGAarbiterInit(void);
 extern void xf86VGAarbiterFini(void);
-void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn);
+extern void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn);
 extern Bool xf86VGAarbiterWrapFunctions(void);
 extern void xf86VGAarbiterLock(ScrnInfoPtr pScrn);
 extern void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn);
diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
index b9a2e06..60d91e6 100644
--- a/hw/xfree86/common/xf86str.h
+++ b/hw/xfree86/common/xf86str.h
@@ -517,7 +517,11 @@ typedef struct _confdrirec {
 
 /* These values should be adjusted when new fields are added to ScrnInfoRec */
 #define NUM_RESERVED_INTS              16
+#ifdef VGAARB
 #define NUM_RESERVED_POINTERS          14
+#else
+#define NUM_RESERVED_POINTERS          15
+#endif
 #define NUM_RESERVED_FUNCS             11
 
 typedef pointer (*funcPointer)(void);
@@ -796,7 +800,9 @@ typedef struct _ScrnInfoRec {
     int                        reservedInt[NUM_RESERVED_INTS];
 
     int *              entityInstanceList;
+#ifdef VGAARB
     struct pci_device   *vgaDev;
+#endif
 
     pointer            reservedPtr[NUM_RESERVED_POINTERS];
 
diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index d32b284..7d40870 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -339,7 +339,7 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int 
*pDRMFD)
                   "Direct rendering is not supported when VGA arb is necessary 
for the device\n");
        return FALSE;
     }
-               
+ 
     /*
      * If Xinerama is on, don't allow DRI to initialise.  It won't be usable
      * anyway.
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
index d159420..c092033 100644
--- a/include/xorg-config.h.in
+++ b/include/xorg-config.h.in
@@ -124,10 +124,10 @@
 /* Have pci_enable_device */
 #undef HAVE_PCI_DEVICE_ENABLE
 
-/* Define to 1 if you have the `pci_device_vgaarb_init' function. */
-#undef HAVE_PCI_DEVICE_VGAARB_INIT
-
 /* Path to text files containing PCI IDs */
 #undef PCI_TXT_IDS_PATH
 
+/* Legacy VGA arbitration */
+#undef VGAARB
+
 #endif /* _XORG_CONFIG_H_ */
-- 
1.5.6.3

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to