[PATCH 3/3] xfree86: vgaarb: make arbiter optional at build time
Tiago Vignatti
tiago.vignatti at nokia.com
Thu Sep 10 07:52:34 PDT 2009
This patch implements the option of a server without support for vga
arbitration, cutting off totally such code. 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 <tiago.vignatti at nokia.com>
---
Another way to cook this option would be to let dummy functions and avoid
VGAARB macro all over the code. It's cleaner but the code remains with some
(minor) VGA arbiter symbols. Any comments regarding this?
configure.ac | 10 ++++++++--
hw/xfree86/common/Makefile.am | 15 ++++++++++-----
hw/xfree86/common/xf86Bus.c | 5 ++++-
hw/xfree86/common/xf86DPMS.c | 7 ++++++-
hw/xfree86/common/xf86Init.c | 16 ++++++++++++++--
hw/xfree86/common/xf86VGAarbiter.c | 15 ---------------
hw/xfree86/common/xf86VGAarbiter.h | 10 +++++-----
hw/xfree86/common/xf86str.h | 6 ++++++
hw/xfree86/dri/dri.c | 6 +++++-
hw/xfree86/dri2/dri2.c | 4 ++++
hw/xfree86/loader/sdksyms.sh | 2 ++
include/xorg-config.h.in | 6 +++---
12 files changed, 67 insertions(+), 35 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..ae37b10 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -17,6 +17,12 @@ if DGA
DGASOURCES = xf86DGA.c
endif
+if VGAARBITER
+VGAARBSOURCES = xf86VGAarbiter.c
+VGAARB_SDK = xf86VGAarbiter.h
+VGAARB_EXTRADIST = xf86VGAarbiter.h xf86VGAarbiterPriv.h
+endif
+
XISOURCES = xf86Xinput.c xisb.c
XISDKINCS = xf86Xinput.h xisb.h
RANDRSOURCES = xf86RandR.c
@@ -35,7 +41,7 @@ AM_LDFLAGS = -r
libcommon_la_SOURCES = xf86Configure.c xf86ShowOpts.c xf86Bus.c xf86Config.c \
xf86Cursor.c $(DGASOURCES) xf86DPMS.c \
xf86Events.c xf86Globals.c xf86AutoConfig.c \
- xf86Option.c xf86Init.c xf86VGAarbiter.c \
+ xf86Option.c xf86Init.c $(VGAARBSOURCES) \
xf86VidMode.c xf86fbman.c xf86cmap.c \
xf86Helper.c xf86PM.c xf86Xinput.c xisb.c \
xf86Mode.c xorgHelper.c \
@@ -52,7 +58,7 @@ sdk_HEADERS = compiler.h fourcc.h xf86.h xf86Module.h xf86Opt.h \
xf86PciInfo.h xf86Priv.h xf86Privstr.h \
xf86cmap.h xf86fbman.h xf86str.h xf86Xinput.h xisb.h \
$(XVSDKINCS) $(XF86VMODE_SDK) xorgVersion.h \
- xf86sbusBus.h xf86VGAarbiter.h
+ xf86sbusBus.h $(VGAARB_SDK)
DISTCLEANFILES = xf86Build.h
CLEANFILES = $(BUILT_SOURCES)
@@ -83,9 +89,8 @@ EXTRA_DIST = \
xorgVersion.h \
$(MODEDEFSOURCES) \
modeline2c.awk \
- xf86VGAarbiter.h \
- xf86VGAarbiterPriv.h \
- $(DISTKBDSOURCES)
+ $(VGAARB_EXTRADIST) \
+ $(DISTKBDSOURCES)
if LNXACPI
XORG_CFLAGS += -DHAVE_ACPI
diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index 9d243c1..03d284f 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -47,7 +47,9 @@
#define XF86_OS_PRIVS
#include "xf86_OSproc.h"
+#ifdef VGAARB
#include "xf86VGAarbiter.h"
+#endif
#include "Pci.h"
@@ -525,8 +527,9 @@ xf86PostScreenInit(void)
SetSIGIOForState(OPERATING);
return;
}
-
+#ifdef VGAARB
xf86VGAarbiterWrapFunctions();
+#endif
DebugF("PostScreenInit generation: %i\n",serverGeneration);
xf86EnterServerState(OPERATING);
diff --git a/hw/xfree86/common/xf86DPMS.c b/hw/xfree86/common/xf86DPMS.c
index 22174c7..7e4e3a5 100644
--- a/hw/xfree86/common/xf86DPMS.c
+++ b/hw/xfree86/common/xf86DPMS.c
@@ -42,8 +42,9 @@
#include <X11/extensions/dpmsconst.h>
#include "dpmsproc.h"
#endif
+#ifdef VGAARB
#include "xf86VGAarbiter.h"
-
+#endif
#ifdef DPMSExtension
static int DPMSKeyIndex;
@@ -163,9 +164,13 @@ DPMSSet(ClientPtr client, int level)
pScrn = xf86Screens[i];
pDPMS = dixLookupPrivate(&screenInfo.screens[i]->devPrivates, DPMSKey);
if (pDPMS && pScrn->DPMSSet && pDPMS->Enabled && pScrn->vtSema) {
+#ifdef VGAARB
xf86VGAarbiterLock(pScrn);
+#endif
pScrn->DPMSSet(pScrn, level, 0);
+#ifdef VGAARB
xf86VGAarbiterUnlock(pScrn);
+#endif
}
}
return Success;
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 8f2cdf6..6846a47 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -78,7 +78,9 @@
#include "picturestr.h"
#endif
+#ifdef VGAARB
#include "xf86VGAarbiter.h"
+#endif
#include "globals.h"
#ifdef DPMSExtension
@@ -729,9 +731,9 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
xf86Msg(X_ERROR, "No devices detected.\n");
return;
}
-
+#ifdef VGAARB
xf86VGAarbiterInit();
-
+#endif
/*
* Match up the screens found by the probes against those specified
* in the config file. Remove the ones that won't be used. Sort
@@ -812,12 +814,16 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
*/
for (i = 0; i < xf86NumScreens; i++) {
+#ifdef VGAARB
xf86VGAarbiterScrnInit(xf86Screens[i]);
xf86VGAarbiterLock(xf86Screens[i]);
+#endif
if (xf86Screens[i]->PreInit &&
xf86Screens[i]->PreInit(xf86Screens[i], 0))
xf86Screens[i]->configured = TRUE;
+#ifdef VGAARB
xf86VGAarbiterUnlock(xf86Screens[i]);
+#endif
}
for (i = 0; i < xf86NumScreens; i++)
if (!xf86Screens[i]->configured)
@@ -1026,7 +1032,9 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
#endif /* SCO325 */
for (i = 0; i < xf86NumScreens; i++) {
+#ifdef VGAARB
xf86VGAarbiterLock(xf86Screens[i]);
+#endif
/*
* Almost everything uses these defaults, and many of those that
* don't, will wrap them.
@@ -1041,7 +1049,9 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
xf86Screens[i]->DriverFunc = NULL;
xf86Screens[i]->pScreen = NULL;
scr_index = AddScreen(xf86Screens[i]->ScreenInit, argc, argv);
+#ifdef VGAARB
xf86VGAarbiterUnlock(xf86Screens[i]);
+#endif
if (scr_index == i) {
/*
* Hook in our ScrnInfoRec, and initialise some other pScreen
@@ -1181,7 +1191,9 @@ ddxGiveUp(void)
{
int i;
+#ifdef VGAARB
xf86VGAarbiterFini();
+#endif
#ifdef XF86PM
if (xf86OSPMClose)
diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
index 9b72331..4bbed99 100644
--- a/hw/xfree86/common/xf86VGAarbiter.c
+++ b/hw/xfree86/common/xf86VGAarbiter.c
@@ -31,8 +31,6 @@
#include "xorg-config.h"
#include "xf86VGAarbiter.h"
-
-#ifdef HAVE_PCI_DEVICE_VGAARB_INIT
#include "xf86VGAarbiterPriv.h"
#include "xf86Bus.h"
#include "xf86Priv.h"
@@ -1161,16 +1159,3 @@ VGAarbiterCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor *color, int nRe
PICTURE_EPILOGUE (CompositeRects, VGAarbiterCompositeRects);
}
#endif
-#else
-/* dummy functions */
-void xf86VGAarbiterInit(void) {}
-void xf86VGAarbiterFini(void) {}
-
-void xf86VGAarbiterLock(ScrnInfoPtr pScrn) {}
-void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn) {}
-Bool xf86VGAarbiterAllowDRI(ScreenPtr pScreen) { return TRUE; }
-void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn) {}
-void xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn) {}
-Bool xf86VGAarbiterWrapFunctions(void) { return FALSE; }
-
-#endif
diff --git a/hw/xfree86/common/xf86VGAarbiter.h b/hw/xfree86/common/xf86VGAarbiter.h
index 904b6b0..2dca749 100644
--- a/hw/xfree86/common/xf86VGAarbiter.h
+++ b/hw/xfree86/common/xf86VGAarbiter.h
@@ -31,12 +31,12 @@
#include "xf86.h"
/* Functions */
-extern void xf86VGAarbiterInit(void);
-extern void xf86VGAarbiterFini(void);
+void xf86VGAarbiterInit(void);
+void xf86VGAarbiterFini(void);
void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn);
-extern Bool xf86VGAarbiterWrapFunctions(void);
-extern void xf86VGAarbiterLock(ScrnInfoPtr pScrn);
-extern void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn);
+Bool xf86VGAarbiterWrapFunctions(void);
+void xf86VGAarbiterLock(ScrnInfoPtr pScrn);
+void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn);
/* allow a driver to remove itself from arbiter - really should be
* done in the kernel though */
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..225722f 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -69,7 +69,9 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "mipointer.h"
#include "xf86_OSproc.h"
#include "inputstr.h"
+#ifdef VGAARB
#include "xf86VGAarbiter.h"
+#endif
#define PCI_BUS_NO_DOMAIN(bus) ((bus) & 0xffu)
@@ -334,12 +336,14 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
return FALSE;
}
+#ifdef VGAARB
if (!xf86VGAarbiterAllowDRI(pScreen)) {
DRIDrvMsg(pScreen->myNum, X_WARNING,
"Direct rendering is not supported when VGA arb is necessary for the device\n");
return FALSE;
}
-
+#endif
+
/*
* If Xinerama is on, don't allow DRI to initialise. It won't be usable
* anyway.
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index d15ced1..d5ecc7b 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -39,7 +39,9 @@
#include "scrnintstr.h"
#include "windowstr.h"
#include "dri2.h"
+#ifdef VGAARB
#include "xf86VGAarbiter.h"
+#endif
#include "xf86.h"
@@ -415,11 +417,13 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
if (info->version < 3)
return FALSE;
+#ifdef VGAARB
if (!xf86VGAarbiterAllowDRI(pScreen)) {
xf86DrvMsg(pScreen->myNum, X_WARNING,
"[DRI2] Direct rendering is not supported when VGA arb is necessary for the device\n");
return FALSE;
}
+#endif
ds = xalloc(sizeof *ds);
if (!ds)
diff --git a/hw/xfree86/loader/sdksyms.sh b/hw/xfree86/loader/sdksyms.sh
index 1186547..448742a 100755
--- a/hw/xfree86/loader/sdksyms.sh
+++ b/hw/xfree86/loader/sdksyms.sh
@@ -121,7 +121,9 @@ cat > sdksyms.c << EOF
#include "xf86fbman.h"
#include "xf86str.h"
#include "xf86Xinput.h"
+#ifdef VGAARB
#include "xf86VGAarbiter.h"
+#endif
#include "xisb.h"
#if XV
# include "xf86xv.h"
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
More information about the xorg-devel
mailing list