summaryrefslogtreecommitdiffstats
path: root/source/x/x11
diff options
context:
space:
mode:
Diffstat (limited to 'source/x/x11')
-rw-r--r--source/x/x11/arch.use.flags2
-rw-r--r--source/x/x11/build/appres (renamed from source/x/x11/build/gccmakedep)0
-rw-r--r--source/x/x11/build/bdftopcf (renamed from source/x/x11/build/xcompmgr)0
-rw-r--r--source/x/x11/build/beforelight (renamed from source/x/x11/build/xf86-video-ati)0
-rw-r--r--source/x/x11/build/bitmap (renamed from source/x/x11/build/xf86-video-modesetting)0
-rw-r--r--source/x/x11/build/compiz (renamed from source/x/x11/build/xf86-input-wacom)0
-rw-r--r--source/x/x11/build/dri2proto (renamed from source/x/x11/build/xf86-video-nouveau)0
-rw-r--r--source/x/x11/build/dri3proto (renamed from source/x/x11/build/xf86-video-openchrome)0
-rw-r--r--source/x/x11/build/editres1
-rw-r--r--source/x/x11/build/fixesproto1
-rw-r--r--source/x/x11/build/font-util1
-rw-r--r--source/x/x11/build/fonttosfnt1
-rw-r--r--source/x/x11/build/fslsfonts1
-rw-r--r--source/x/x11/build/fstobdf1
-rw-r--r--source/x/x11/build/iceauth1
-rw-r--r--source/x/x11/build/ico1
-rw-r--r--source/x/x11/build/imake1
-rwxr-xr-xsource/x/x11/build/increment-all-drivers.sh13
-rw-r--r--source/x/x11/build/intel-gpu-tools1
-rw-r--r--source/x/x11/build/libICE1
-rw-r--r--source/x/x11/build/libSM1
-rw-r--r--source/x/x11/build/libX111
-rw-r--r--source/x/x11/build/libXScrnSaver1
-rw-r--r--source/x/x11/build/libXau1
-rw-r--r--source/x/x11/build/libXaw3d2
-rw-r--r--source/x/x11/build/libXcm1
-rw-r--r--source/x/x11/build/libXcomposite1
-rw-r--r--source/x/x11/build/libXcursor1
-rw-r--r--source/x/x11/build/libXdamage1
-rw-r--r--source/x/x11/build/libXdmcp1
-rw-r--r--source/x/x11/build/libXevie1
-rw-r--r--source/x/x11/build/libXext1
-rw-r--r--source/x/x11/build/libXfont1
-rw-r--r--source/x/x11/build/libXfontcache1
-rw-r--r--source/x/x11/build/libXft1
-rw-r--r--source/x/x11/build/libXinerama1
-rw-r--r--source/x/x11/build/libXmu1
-rw-r--r--source/x/x11/build/libXp1
-rw-r--r--source/x/x11/build/libXpm1
-rw-r--r--source/x/x11/build/libXres1
-rw-r--r--source/x/x11/build/libXtst1
-rw-r--r--source/x/x11/build/libXv1
-rw-r--r--source/x/x11/build/libXvMC1
-rw-r--r--source/x/x11/build/libXxf86dga1
-rw-r--r--source/x/x11/build/libXxf86misc1
-rw-r--r--source/x/x11/build/libXxf86vm1
-rw-r--r--source/x/x11/build/libdmx1
-rw-r--r--source/x/x11/build/libxshmfence1
-rw-r--r--source/x/x11/build/listres1
-rw-r--r--source/x/x11/build/lndir1
-rw-r--r--source/x/x11/build/luit1
-rw-r--r--source/x/x11/build/makedepend1
-rw-r--r--source/x/x11/build/mkcomposecache1
-rw-r--r--source/x/x11/build/mkfontscale1
-rw-r--r--source/x/x11/build/oclock1
-rw-r--r--source/x/x11/build/presentproto1
-rw-r--r--source/x/x11/build/rgb1
-rw-r--r--source/x/x11/build/sessreg1
-rw-r--r--source/x/x11/build/showfont1
-rw-r--r--source/x/x11/build/transset1
-rw-r--r--source/x/x11/build/viewres1
-rw-r--r--source/x/x11/build/xauth1
-rw-r--r--source/x/x11/build/xbacklight1
-rw-r--r--source/x/x11/build/xbiff1
-rw-r--r--source/x/x11/build/xbitmaps1
-rw-r--r--source/x/x11/build/xcalc1
-rw-r--r--source/x/x11/build/xcb-proto1
-rw-r--r--source/x/x11/build/xcb-util1
-rw-r--r--source/x/x11/build/xcb-util-cursor1
-rw-r--r--source/x/x11/build/xcb-util-keysyms1
-rw-r--r--source/x/x11/build/xcb-util-renderutil1
-rw-r--r--source/x/x11/build/xcb-util-wm1
-rw-r--r--source/x/x11/build/xclipboard1
-rw-r--r--source/x/x11/build/xclock1
-rw-r--r--source/x/x11/build/xcm1
-rw-r--r--source/x/x11/build/xconsole1
-rw-r--r--source/x/x11/build/xcursorgen1
-rw-r--r--source/x/x11/build/xdbedizzy1
-rw-r--r--source/x/x11/build/xdm2
-rw-r--r--source/x/x11/build/xedit1
-rw-r--r--source/x/x11/build/xextproto1
-rw-r--r--source/x/x11/build/xeyes1
-rw-r--r--source/x/x11/build/xf86-input-acecad2
-rw-r--r--source/x/x11/build/xf86-input-aiptek2
-rw-r--r--source/x/x11/build/xf86-input-joystick2
-rw-r--r--source/x/x11/build/xf86-input-keyboard2
-rw-r--r--source/x/x11/build/xf86-input-mouse2
-rw-r--r--source/x/x11/build/xf86-input-penmount2
-rw-r--r--source/x/x11/build/xf86-input-void2
-rw-r--r--source/x/x11/build/xf86-video-apm2
-rw-r--r--source/x/x11/build/xf86-video-ark2
-rw-r--r--source/x/x11/build/xf86-video-chips2
-rw-r--r--source/x/x11/build/xf86-video-cirrus2
-rw-r--r--source/x/x11/build/xf86-video-dummy1
-rw-r--r--source/x/x11/build/xf86-video-glint2
-rw-r--r--source/x/x11/build/xf86-video-i1282
-rw-r--r--source/x/x11/build/xf86-video-i7402
-rw-r--r--source/x/x11/build/xf86-video-mach642
-rw-r--r--source/x/x11/build/xf86-video-mga2
-rw-r--r--source/x/x11/build/xf86-video-nv2
-rw-r--r--source/x/x11/build/xf86-video-omap2
-rw-r--r--source/x/x11/build/xf86-video-rendition1
-rw-r--r--source/x/x11/build/xf86-video-s32
-rw-r--r--source/x/x11/build/xf86-video-s3virge2
-rw-r--r--source/x/x11/build/xf86-video-savage1
-rw-r--r--source/x/x11/build/xf86-video-siliconmotion2
-rw-r--r--source/x/x11/build/xf86-video-sis2
-rw-r--r--source/x/x11/build/xf86-video-sisusb2
-rw-r--r--source/x/x11/build/xf86-video-tdfx2
-rw-r--r--source/x/x11/build/xf86-video-tga2
-rw-r--r--source/x/x11/build/xf86-video-trident2
-rw-r--r--source/x/x11/build/xf86-video-tseng2
-rw-r--r--source/x/x11/build/xf86-video-v4l2
-rw-r--r--source/x/x11/build/xf86-video-vesa1
-rw-r--r--source/x/x11/build/xf86-video-vmware2
-rw-r--r--source/x/x11/build/xf86-video-voodoo2
-rw-r--r--source/x/x11/build/xf86-video-xgi2
-rw-r--r--source/x/x11/build/xf86-video-xgixp2
-rw-r--r--source/x/x11/build/xf86dga1
-rw-r--r--source/x/x11/build/xfd1
-rw-r--r--source/x/x11/build/xfontsel1
-rw-r--r--source/x/x11/build/xfs1
-rw-r--r--source/x/x11/build/xfsinfo1
-rw-r--r--source/x/x11/build/xinit1
-rw-r--r--source/x/x11/build/xkbcomp1
-rw-r--r--source/x/x11/build/xkbutils1
-rw-r--r--source/x/x11/build/xkill1
-rw-r--r--source/x/x11/build/xload1
-rw-r--r--source/x/x11/build/xlogo1
-rw-r--r--source/x/x11/build/xlsclients1
-rw-r--r--source/x/x11/build/xman1
-rw-r--r--source/x/x11/build/xmessage1
-rw-r--r--source/x/x11/build/xmore1
-rw-r--r--source/x/x11/build/xorg-cf-files1
-rw-r--r--source/x/x11/build/xorg-sgml-doctools1
-rw-r--r--source/x/x11/build/xpr1
-rw-r--r--source/x/x11/build/xprop1
-rw-r--r--source/x/x11/build/xpyb2
-rw-r--r--source/x/x11/build/xrdb1
-rw-r--r--source/x/x11/build/xrefresh1
-rw-r--r--source/x/x11/build/xscope1
-rw-r--r--source/x/x11/build/xset1
-rw-r--r--source/x/x11/build/xsetroot1
-rw-r--r--source/x/x11/build/xsm1
-rw-r--r--source/x/x11/build/xstdcmap1
-rw-r--r--source/x/x11/build/xvidtune1
-rw-r--r--source/x/x11/build/xwd1
-rw-r--r--source/x/x11/build/xwininfo1
-rw-r--r--source/x/x11/build/xwud1
-rw-r--r--source/x/x11/configure/autogen13
-rw-r--r--source/x/x11/configure/configure1
-rw-r--r--source/x/x11/configure/intel-gpu-tools (renamed from source/x/x11/configure/xf86-input-vmmouse)5
-rw-r--r--source/x/x11/configure/libxcb14
-rw-r--r--source/x/x11/configure/libxshmfence15
-rw-r--r--source/x/x11/configure/xf86-video-intel14
-rw-r--r--source/x/x11/configure/xf86-video-nouveau12
-rw-r--r--source/x/x11/configure/xorg-server15
-rw-r--r--source/x/x11/makepkg/xorg-server5
-rw-r--r--source/x/x11/modularize7
-rw-r--r--source/x/x11/noarch1
-rw-r--r--source/x/x11/package-blacklist1
-rw-r--r--source/x/x11/patch/luit.patch3
-rw-r--r--source/x/x11/patch/luit/luit_use_system_extensions.diff38
-rw-r--r--source/x/x11/patch/xdm.patch9
-rw-r--r--source/x/x11/patch/xdm/xdm-1.1.11-arc4random-include.patch18
-rw-r--r--source/x/x11/patch/xdm/xdm-1.1.11-setproctitle-include.patch37
-rw-r--r--source/x/x11/patch/xdm/xdm-consolekit.patch230
-rw-r--r--source/x/x11/patch/xf86-video-chips.patch25
-rw-r--r--source/x/x11/patch/xf86-video-chips/iopl.h60
-rw-r--r--source/x/x11/patch/xf86-video-geode.patch7
-rw-r--r--source/x/x11/patch/xf86-video-i740.patch7
-rw-r--r--source/x/x11/patch/xf86-video-intel.patch3
-rw-r--r--source/x/x11/patch/xf86-video-intel/0001-sna-Let-modestting-glamor-handle-gen9.patch41
-rw-r--r--source/x/x11/patch/xf86-video-neomagic.patch7
-rw-r--r--source/x/x11/patch/xf86-video-r128.patch7
-rw-r--r--source/x/x11/patch/xf86-video-rendition.patch7
-rw-r--r--source/x/x11/patch/xf86-video-s3virge.patch7
-rw-r--r--source/x/x11/patch/xf86-video-savage.patch7
-rw-r--r--source/x/x11/patch/xf86-video-siliconmotion.patch7
-rw-r--r--source/x/x11/patch/xf86-video-sis.patch2
-rw-r--r--source/x/x11/patch/xf86-video-sis/sis-0.10.7-git.patch121
-rw-r--r--source/x/x11/patch/xf86-video-tdfx.patch7
-rw-r--r--source/x/x11/patch/xf86-video-trident.patch7
-rw-r--r--source/x/x11/patch/xf86-video-v4l.patch4
-rw-r--r--source/x/x11/patch/xf86-video-v4l/xf86-video-v4l-0.2.0-build-fix.patch14
-rw-r--r--source/x/x11/patch/xf86-video-v4l/xorg-x11-drv-v4l-support_v4l2_only_drivers.patch4068
-rw-r--r--source/x/x11/patch/xf86-video-vesa.patch7
-rw-r--r--source/x/x11/patch/xf86-video-voodoo.patch3
-rw-r--r--source/x/x11/patch/xf86-video-voodoo/0001-don-t-use-PCITAG-in-struct-anymore.patch26
-rw-r--r--source/x/x11/patch/xf86-video-xgixp.patch18
-rw-r--r--source/x/x11/patch/xf86-video-xgixp/0001-Remove-mibstore.h.patch37
-rw-r--r--source/x/x11/patch/xf86-video-xgixp/0002-Remove-symbol-lists-as-they-are-not-used-any-more.patch176
-rw-r--r--source/x/x11/patch/xf86-video-xgixp/0003-shadow-shadowInit-shadowAdd-Remove.patch79
-rw-r--r--source/x/x11/patch/xf86-video-xgixp/0004-Stop-using-deprecated-xf86PciInfo.h.patch27
-rw-r--r--source/x/x11/patch/xf86-video-xgixp/0005-Update-for-new-damage-API.patch26
-rw-r--r--source/x/x11/patch/xinit.patch2
-rw-r--r--source/x/x11/patch/xinit/xinit.remove.systemd.kludge.diff19
-rw-r--r--source/x/x11/patch/xorg-server.patch2
-rw-r--r--source/x/x11/patch/xorg-server/xorg-server.CVE-2013-4396.diff73
-rw-r--r--source/x/x11/patch/xorg-server/xorg-server.combo.mouse.keyboard.layout.patch49
-rw-r--r--source/x/x11/post-install/xf86-input-libinput.post-install4
-rw-r--r--source/x/x11/post-install/xf86-input-wacom.post-install5
-rw-r--r--source/x/x11/post-install/xf86-input-wacom/60-wacom.rules19
-rw-r--r--source/x/x11/post-install/xf86-video-intel.post-install2
-rw-r--r--source/x/x11/slack-desc/dri3proto19
-rw-r--r--source/x/x11/slack-desc/glamor-egl19
-rw-r--r--source/x/x11/slack-desc/libXpresent19
-rw-r--r--source/x/x11/slack-desc/libxshmfence19
-rw-r--r--source/x/x11/slack-desc/presentproto19
-rw-r--r--source/x/x11/slack-desc/xcb-util-errors19
-rw-r--r--source/x/x11/slack-desc/xf86-input-libinput19
-rw-r--r--source/x/x11/slack-desc/xf86-video-amdgpu19
-rwxr-xr-xsource/x/x11/src/get-xf86-video-intel.sh47
-rwxr-xr-xsource/x/x11/src/get-xf86-video-nouveau.sh51
-rwxr-xr-xsource/x/x11/src/get-xf86-video-openchrome.sh47
-rw-r--r--source/x/x11/src/xf86-input-wacom.url1
-rwxr-xr-xsource/x/x11/x11.SlackBuild13
217 files changed, 5488 insertions, 433 deletions
diff --git a/source/x/x11/arch.use.flags b/source/x/x11/arch.use.flags
index f28a6ccab..11087c884 100644
--- a/source/x/x11/arch.use.flags
+++ b/source/x/x11/arch.use.flags
@@ -1,5 +1,7 @@
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+elif [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
diff --git a/source/x/x11/build/gccmakedep b/source/x/x11/build/appres
index 0cfbf0888..0cfbf0888 100644
--- a/source/x/x11/build/gccmakedep
+++ b/source/x/x11/build/appres
diff --git a/source/x/x11/build/xcompmgr b/source/x/x11/build/bdftopcf
index 0cfbf0888..0cfbf0888 100644
--- a/source/x/x11/build/xcompmgr
+++ b/source/x/x11/build/bdftopcf
diff --git a/source/x/x11/build/xf86-video-ati b/source/x/x11/build/beforelight
index 0cfbf0888..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-ati
+++ b/source/x/x11/build/beforelight
diff --git a/source/x/x11/build/xf86-video-modesetting b/source/x/x11/build/bitmap
index 0cfbf0888..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-modesetting
+++ b/source/x/x11/build/bitmap
diff --git a/source/x/x11/build/xf86-input-wacom b/source/x/x11/build/compiz
index b8626c4cf..b8626c4cf 100644
--- a/source/x/x11/build/xf86-input-wacom
+++ b/source/x/x11/build/compiz
diff --git a/source/x/x11/build/xf86-video-nouveau b/source/x/x11/build/dri2proto
index 0cfbf0888..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-nouveau
+++ b/source/x/x11/build/dri2proto
diff --git a/source/x/x11/build/xf86-video-openchrome b/source/x/x11/build/dri3proto
index 0cfbf0888..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-openchrome
+++ b/source/x/x11/build/dri3proto
diff --git a/source/x/x11/build/editres b/source/x/x11/build/editres
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/editres
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/fixesproto b/source/x/x11/build/fixesproto
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/fixesproto
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/font-util b/source/x/x11/build/font-util
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/font-util
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/fonttosfnt b/source/x/x11/build/fonttosfnt
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/fonttosfnt
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/fslsfonts b/source/x/x11/build/fslsfonts
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/fslsfonts
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/fstobdf b/source/x/x11/build/fstobdf
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/fstobdf
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/iceauth b/source/x/x11/build/iceauth
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/iceauth
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/ico b/source/x/x11/build/ico
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/ico
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/imake b/source/x/x11/build/imake
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/imake
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/increment-all-drivers.sh b/source/x/x11/build/increment-all-drivers.sh
new file mode 100755
index 000000000..b3f7cbbab
--- /dev/null
+++ b/source/x/x11/build/increment-all-drivers.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+# A script to increment build numbers of all the drivers.
+# This is used when upgrading to a new major version of the X server.
+#
+# Any drivers that are newly added should not have a build file in
+# here (or it should contain "1"). The usual method is to run this
+# script and then remove the build files for any new driver versions.
+
+for DRVSRC in ../src/driver/* ; do
+ DRVBASENAME=$(basename $DRVSRC | rev | cut -f 2- -d - | rev)
+ ./increment.sh $DRVBASENAME
+done
+
diff --git a/source/x/x11/build/intel-gpu-tools b/source/x/x11/build/intel-gpu-tools
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/intel-gpu-tools
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libICE b/source/x/x11/build/libICE
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libICE
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libSM b/source/x/x11/build/libSM
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libSM
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libX11 b/source/x/x11/build/libX11
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libX11
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXScrnSaver b/source/x/x11/build/libXScrnSaver
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXScrnSaver
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXau b/source/x/x11/build/libXau
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXau
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXaw3d b/source/x/x11/build/libXaw3d
index 0cfbf0888..00750edc0 100644
--- a/source/x/x11/build/libXaw3d
+++ b/source/x/x11/build/libXaw3d
@@ -1 +1 @@
-2
+3
diff --git a/source/x/x11/build/libXcm b/source/x/x11/build/libXcm
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXcm
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXcomposite b/source/x/x11/build/libXcomposite
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXcomposite
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXcursor b/source/x/x11/build/libXcursor
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXcursor
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXdamage b/source/x/x11/build/libXdamage
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXdamage
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXdmcp b/source/x/x11/build/libXdmcp
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXdmcp
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXevie b/source/x/x11/build/libXevie
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXevie
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXext b/source/x/x11/build/libXext
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXext
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXfont b/source/x/x11/build/libXfont
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXfont
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXfontcache b/source/x/x11/build/libXfontcache
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXfontcache
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXft b/source/x/x11/build/libXft
new file mode 100644
index 000000000..00750edc0
--- /dev/null
+++ b/source/x/x11/build/libXft
@@ -0,0 +1 @@
+3
diff --git a/source/x/x11/build/libXinerama b/source/x/x11/build/libXinerama
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXinerama
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXmu b/source/x/x11/build/libXmu
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXmu
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXp b/source/x/x11/build/libXp
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXp
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXpm b/source/x/x11/build/libXpm
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXpm
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXres b/source/x/x11/build/libXres
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXres
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXtst b/source/x/x11/build/libXtst
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXtst
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXv b/source/x/x11/build/libXv
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXv
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXvMC b/source/x/x11/build/libXvMC
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXvMC
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXxf86dga b/source/x/x11/build/libXxf86dga
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXxf86dga
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXxf86misc b/source/x/x11/build/libXxf86misc
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXxf86misc
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libXxf86vm b/source/x/x11/build/libXxf86vm
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libXxf86vm
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libdmx b/source/x/x11/build/libdmx
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libdmx
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/libxshmfence b/source/x/x11/build/libxshmfence
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/libxshmfence
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/listres b/source/x/x11/build/listres
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/listres
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/lndir b/source/x/x11/build/lndir
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/lndir
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/luit b/source/x/x11/build/luit
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/luit
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/makedepend b/source/x/x11/build/makedepend
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/makedepend
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/mkcomposecache b/source/x/x11/build/mkcomposecache
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/mkcomposecache
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/mkfontscale b/source/x/x11/build/mkfontscale
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/mkfontscale
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/oclock b/source/x/x11/build/oclock
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/oclock
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/presentproto b/source/x/x11/build/presentproto
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/presentproto
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/rgb b/source/x/x11/build/rgb
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/rgb
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/sessreg b/source/x/x11/build/sessreg
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/sessreg
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/showfont b/source/x/x11/build/showfont
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/showfont
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/transset b/source/x/x11/build/transset
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/transset
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/viewres b/source/x/x11/build/viewres
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/viewres
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xauth b/source/x/x11/build/xauth
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xauth
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xbacklight b/source/x/x11/build/xbacklight
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xbacklight
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xbiff b/source/x/x11/build/xbiff
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xbiff
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xbitmaps b/source/x/x11/build/xbitmaps
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xbitmaps
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcalc b/source/x/x11/build/xcalc
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xcalc
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcb-proto b/source/x/x11/build/xcb-proto
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xcb-proto
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcb-util b/source/x/x11/build/xcb-util
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xcb-util
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcb-util-cursor b/source/x/x11/build/xcb-util-cursor
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xcb-util-cursor
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcb-util-keysyms b/source/x/x11/build/xcb-util-keysyms
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xcb-util-keysyms
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcb-util-renderutil b/source/x/x11/build/xcb-util-renderutil
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xcb-util-renderutil
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcb-util-wm b/source/x/x11/build/xcb-util-wm
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xcb-util-wm
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xclipboard b/source/x/x11/build/xclipboard
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xclipboard
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xclock b/source/x/x11/build/xclock
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xclock
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcm b/source/x/x11/build/xcm
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xcm
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xconsole b/source/x/x11/build/xconsole
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xconsole
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xcursorgen b/source/x/x11/build/xcursorgen
new file mode 100644
index 000000000..00750edc0
--- /dev/null
+++ b/source/x/x11/build/xcursorgen
@@ -0,0 +1 @@
+3
diff --git a/source/x/x11/build/xdbedizzy b/source/x/x11/build/xdbedizzy
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xdbedizzy
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xdm b/source/x/x11/build/xdm
index b8626c4cf..1e8b31496 100644
--- a/source/x/x11/build/xdm
+++ b/source/x/x11/build/xdm
@@ -1 +1 @@
-4
+6
diff --git a/source/x/x11/build/xedit b/source/x/x11/build/xedit
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xedit
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xextproto b/source/x/x11/build/xextproto
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xextproto
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xeyes b/source/x/x11/build/xeyes
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xeyes
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xf86-input-acecad b/source/x/x11/build/xf86-input-acecad
index 7ed6ff82d..ec635144f 100644
--- a/source/x/x11/build/xf86-input-acecad
+++ b/source/x/x11/build/xf86-input-acecad
@@ -1 +1 @@
-5
+9
diff --git a/source/x/x11/build/xf86-input-aiptek b/source/x/x11/build/xf86-input-aiptek
index 7ed6ff82d..ec635144f 100644
--- a/source/x/x11/build/xf86-input-aiptek
+++ b/source/x/x11/build/xf86-input-aiptek
@@ -1 +1 @@
-5
+9
diff --git a/source/x/x11/build/xf86-input-joystick b/source/x/x11/build/xf86-input-joystick
index 7ed6ff82d..ec635144f 100644
--- a/source/x/x11/build/xf86-input-joystick
+++ b/source/x/x11/build/xf86-input-joystick
@@ -1 +1 @@
-5
+9
diff --git a/source/x/x11/build/xf86-input-keyboard b/source/x/x11/build/xf86-input-keyboard
index 00750edc0..0cfbf0888 100644
--- a/source/x/x11/build/xf86-input-keyboard
+++ b/source/x/x11/build/xf86-input-keyboard
@@ -1 +1 @@
-3
+2
diff --git a/source/x/x11/build/xf86-input-mouse b/source/x/x11/build/xf86-input-mouse
index 00750edc0..b8626c4cf 100644
--- a/source/x/x11/build/xf86-input-mouse
+++ b/source/x/x11/build/xf86-input-mouse
@@ -1 +1 @@
-3
+4
diff --git a/source/x/x11/build/xf86-input-penmount b/source/x/x11/build/xf86-input-penmount
index 7ed6ff82d..ec635144f 100644
--- a/source/x/x11/build/xf86-input-penmount
+++ b/source/x/x11/build/xf86-input-penmount
@@ -1 +1 @@
-5
+9
diff --git a/source/x/x11/build/xf86-input-void b/source/x/x11/build/xf86-input-void
index 7ed6ff82d..ec635144f 100644
--- a/source/x/x11/build/xf86-input-void
+++ b/source/x/x11/build/xf86-input-void
@@ -1 +1 @@
-5
+9
diff --git a/source/x/x11/build/xf86-video-apm b/source/x/x11/build/xf86-video-apm
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-apm
+++ b/source/x/x11/build/xf86-video-apm
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86-video-ark b/source/x/x11/build/xf86-video-ark
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-ark
+++ b/source/x/x11/build/xf86-video-ark
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86-video-chips b/source/x/x11/build/xf86-video-chips
index b8626c4cf..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-chips
+++ b/source/x/x11/build/xf86-video-chips
@@ -1 +1 @@
-4
+2
diff --git a/source/x/x11/build/xf86-video-cirrus b/source/x/x11/build/xf86-video-cirrus
index b8626c4cf..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-cirrus
+++ b/source/x/x11/build/xf86-video-cirrus
@@ -1 +1 @@
-4
+2
diff --git a/source/x/x11/build/xf86-video-dummy b/source/x/x11/build/xf86-video-dummy
new file mode 100644
index 000000000..7ed6ff82d
--- /dev/null
+++ b/source/x/x11/build/xf86-video-dummy
@@ -0,0 +1 @@
+5
diff --git a/source/x/x11/build/xf86-video-glint b/source/x/x11/build/xf86-video-glint
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-glint
+++ b/source/x/x11/build/xf86-video-glint
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86-video-i128 b/source/x/x11/build/xf86-video-i128
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-i128
+++ b/source/x/x11/build/xf86-video-i128
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86-video-i740 b/source/x/x11/build/xf86-video-i740
index b8626c4cf..00750edc0 100644
--- a/source/x/x11/build/xf86-video-i740
+++ b/source/x/x11/build/xf86-video-i740
@@ -1 +1 @@
-4
+3
diff --git a/source/x/x11/build/xf86-video-mach64 b/source/x/x11/build/xf86-video-mach64
index b8626c4cf..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-mach64
+++ b/source/x/x11/build/xf86-video-mach64
@@ -1 +1 @@
-4
+2
diff --git a/source/x/x11/build/xf86-video-mga b/source/x/x11/build/xf86-video-mga
index b8626c4cf..00750edc0 100644
--- a/source/x/x11/build/xf86-video-mga
+++ b/source/x/x11/build/xf86-video-mga
@@ -1 +1 @@
-4
+3
diff --git a/source/x/x11/build/xf86-video-nv b/source/x/x11/build/xf86-video-nv
index 7ed6ff82d..ec635144f 100644
--- a/source/x/x11/build/xf86-video-nv
+++ b/source/x/x11/build/xf86-video-nv
@@ -1 +1 @@
-5
+9
diff --git a/source/x/x11/build/xf86-video-omap b/source/x/x11/build/xf86-video-omap
index b8626c4cf..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-omap
+++ b/source/x/x11/build/xf86-video-omap
@@ -1 +1 @@
-4
+2
diff --git a/source/x/x11/build/xf86-video-rendition b/source/x/x11/build/xf86-video-rendition
deleted file mode 100644
index b8626c4cf..000000000
--- a/source/x/x11/build/xf86-video-rendition
+++ /dev/null
@@ -1 +0,0 @@
-4
diff --git a/source/x/x11/build/xf86-video-s3 b/source/x/x11/build/xf86-video-s3
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-s3
+++ b/source/x/x11/build/xf86-video-s3
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86-video-s3virge b/source/x/x11/build/xf86-video-s3virge
index 7ed6ff82d..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-s3virge
+++ b/source/x/x11/build/xf86-video-s3virge
@@ -1 +1 @@
-5
+2
diff --git a/source/x/x11/build/xf86-video-savage b/source/x/x11/build/xf86-video-savage
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xf86-video-savage
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xf86-video-siliconmotion b/source/x/x11/build/xf86-video-siliconmotion
index 7ed6ff82d..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-siliconmotion
+++ b/source/x/x11/build/xf86-video-siliconmotion
@@ -1 +1 @@
-5
+2
diff --git a/source/x/x11/build/xf86-video-sis b/source/x/x11/build/xf86-video-sis
index b8626c4cf..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-sis
+++ b/source/x/x11/build/xf86-video-sis
@@ -1 +1 @@
-4
+2
diff --git a/source/x/x11/build/xf86-video-sisusb b/source/x/x11/build/xf86-video-sisusb
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-sisusb
+++ b/source/x/x11/build/xf86-video-sisusb
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86-video-tdfx b/source/x/x11/build/xf86-video-tdfx
index b8626c4cf..00750edc0 100644
--- a/source/x/x11/build/xf86-video-tdfx
+++ b/source/x/x11/build/xf86-video-tdfx
@@ -1 +1 @@
-4
+3
diff --git a/source/x/x11/build/xf86-video-tga b/source/x/x11/build/xf86-video-tga
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-tga
+++ b/source/x/x11/build/xf86-video-tga
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86-video-trident b/source/x/x11/build/xf86-video-trident
index b8626c4cf..00750edc0 100644
--- a/source/x/x11/build/xf86-video-trident
+++ b/source/x/x11/build/xf86-video-trident
@@ -1 +1 @@
-4
+3
diff --git a/source/x/x11/build/xf86-video-tseng b/source/x/x11/build/xf86-video-tseng
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-tseng
+++ b/source/x/x11/build/xf86-video-tseng
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86-video-v4l b/source/x/x11/build/xf86-video-v4l
index ec635144f..b1bd38b62 100644
--- a/source/x/x11/build/xf86-video-v4l
+++ b/source/x/x11/build/xf86-video-v4l
@@ -1 +1 @@
-9
+13
diff --git a/source/x/x11/build/xf86-video-vesa b/source/x/x11/build/xf86-video-vesa
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xf86-video-vesa
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xf86-video-vmware b/source/x/x11/build/xf86-video-vmware
index b8626c4cf..7f8f011eb 100644
--- a/source/x/x11/build/xf86-video-vmware
+++ b/source/x/x11/build/xf86-video-vmware
@@ -1 +1 @@
-4
+7
diff --git a/source/x/x11/build/xf86-video-voodoo b/source/x/x11/build/xf86-video-voodoo
index 7ed6ff82d..ec635144f 100644
--- a/source/x/x11/build/xf86-video-voodoo
+++ b/source/x/x11/build/xf86-video-voodoo
@@ -1 +1 @@
-5
+9
diff --git a/source/x/x11/build/xf86-video-xgi b/source/x/x11/build/xf86-video-xgi
index b8626c4cf..0cfbf0888 100644
--- a/source/x/x11/build/xf86-video-xgi
+++ b/source/x/x11/build/xf86-video-xgi
@@ -1 +1 @@
-4
+2
diff --git a/source/x/x11/build/xf86-video-xgixp b/source/x/x11/build/xf86-video-xgixp
index b8626c4cf..45a4fb75d 100644
--- a/source/x/x11/build/xf86-video-xgixp
+++ b/source/x/x11/build/xf86-video-xgixp
@@ -1 +1 @@
-4
+8
diff --git a/source/x/x11/build/xf86dga b/source/x/x11/build/xf86dga
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xf86dga
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xfd b/source/x/x11/build/xfd
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xfd
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xfontsel b/source/x/x11/build/xfontsel
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xfontsel
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xfs b/source/x/x11/build/xfs
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xfs
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xfsinfo b/source/x/x11/build/xfsinfo
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xfsinfo
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xinit b/source/x/x11/build/xinit
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xinit
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xkbcomp b/source/x/x11/build/xkbcomp
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xkbcomp
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xkbutils b/source/x/x11/build/xkbutils
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xkbutils
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xkill b/source/x/x11/build/xkill
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xkill
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xload b/source/x/x11/build/xload
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xload
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xlogo b/source/x/x11/build/xlogo
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xlogo
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xlsclients b/source/x/x11/build/xlsclients
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xlsclients
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xman b/source/x/x11/build/xman
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xman
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xmessage b/source/x/x11/build/xmessage
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xmessage
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xmore b/source/x/x11/build/xmore
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xmore
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xorg-cf-files b/source/x/x11/build/xorg-cf-files
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xorg-cf-files
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xorg-sgml-doctools b/source/x/x11/build/xorg-sgml-doctools
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xorg-sgml-doctools
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xpr b/source/x/x11/build/xpr
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xpr
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xprop b/source/x/x11/build/xprop
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xprop
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xpyb b/source/x/x11/build/xpyb
index 0cfbf0888..00750edc0 100644
--- a/source/x/x11/build/xpyb
+++ b/source/x/x11/build/xpyb
@@ -1 +1 @@
-2
+3
diff --git a/source/x/x11/build/xrdb b/source/x/x11/build/xrdb
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xrdb
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xrefresh b/source/x/x11/build/xrefresh
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xrefresh
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xscope b/source/x/x11/build/xscope
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xscope
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xset b/source/x/x11/build/xset
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xset
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xsetroot b/source/x/x11/build/xsetroot
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xsetroot
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xsm b/source/x/x11/build/xsm
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xsm
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xstdcmap b/source/x/x11/build/xstdcmap
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xstdcmap
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xvidtune b/source/x/x11/build/xvidtune
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xvidtune
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xwd b/source/x/x11/build/xwd
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xwd
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xwininfo b/source/x/x11/build/xwininfo
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xwininfo
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/build/xwud b/source/x/x11/build/xwud
new file mode 100644
index 000000000..0cfbf0888
--- /dev/null
+++ b/source/x/x11/build/xwud
@@ -0,0 +1 @@
+2
diff --git a/source/x/x11/configure/autogen b/source/x/x11/configure/autogen
new file mode 100644
index 000000000..291eb9b94
--- /dev/null
+++ b/source/x/x11/configure/autogen
@@ -0,0 +1,13 @@
+CFLAGS=$SLKCFLAGS \
+CXXFLAGS=$SLKCFLAGS \
+./autogen.sh \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --infodir=/usr/info \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
+ --with-udev-rules-dir=/lib/udev/rules.d \
+ --disable-static \
+ --build=$ARCH-slackware-linux
diff --git a/source/x/x11/configure/configure b/source/x/x11/configure/configure
index 0f3bccf24..dcb1109bd 100644
--- a/source/x/x11/configure/configure
+++ b/source/x/x11/configure/configure
@@ -8,5 +8,6 @@ CXXFLAGS=$SLKCFLAGS \
--infodir=/usr/info \
--mandir=/usr/man \
--docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
+ --with-udev-rules-dir=/lib/udev/rules.d \
--disable-static \
--build=$ARCH-slackware-linux
diff --git a/source/x/x11/configure/xf86-input-vmmouse b/source/x/x11/configure/intel-gpu-tools
index 1ac863519..d996de5c3 100644
--- a/source/x/x11/configure/xf86-input-vmmouse
+++ b/source/x/x11/configure/intel-gpu-tools
@@ -7,8 +7,7 @@ CXXFLAGS=$SLKCFLAGS \
--localstatedir=/var \
--infodir=/usr/info \
--mandir=/usr/man \
+ --docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
--disable-static \
- --with-hal-bin-dir=none \
- --with-hal-callouts-dir=none \
- --with-hal-fdi-dir=none \
+ --disable-dumper \
--build=$ARCH-slackware-linux
diff --git a/source/x/x11/configure/libxcb b/source/x/x11/configure/libxcb
new file mode 100644
index 000000000..0c8a4a8c8
--- /dev/null
+++ b/source/x/x11/configure/libxcb
@@ -0,0 +1,14 @@
+CFLAGS=$SLKCFLAGS \
+CXXFLAGS=$SLKCFLAGS \
+./configure \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --infodir=/usr/info \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
+ --disable-static \
+ --enable-xinput \
+ --enable-xkb \
+ --build=$ARCH-slackware-linux
diff --git a/source/x/x11/configure/libxshmfence b/source/x/x11/configure/libxshmfence
new file mode 100644
index 000000000..ec0521d86
--- /dev/null
+++ b/source/x/x11/configure/libxshmfence
@@ -0,0 +1,15 @@
+# Of course, the libtool stuff included in the tarball is broken :/
+autoreconf -v -i -f
+
+CFLAGS=$SLKCFLAGS \
+CXXFLAGS=$SLKCFLAGS \
+./configure \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --infodir=/usr/info \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
+ --disable-static \
+ --build=$ARCH-slackware-linux
diff --git a/source/x/x11/configure/xf86-video-intel b/source/x/x11/configure/xf86-video-intel
new file mode 100644
index 000000000..d744b3290
--- /dev/null
+++ b/source/x/x11/configure/xf86-video-intel
@@ -0,0 +1,14 @@
+CFLAGS=$SLKCFLAGS \
+CXXFLAGS=$SLKCFLAGS \
+./autogen.sh \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --infodir=/usr/info \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
+ --disable-static \
+ --enable-kms-only \
+ --enable-uxa \
+ --build=$ARCH-slackware-linux
diff --git a/source/x/x11/configure/xf86-video-nouveau b/source/x/x11/configure/xf86-video-nouveau
new file mode 100644
index 000000000..0f3bccf24
--- /dev/null
+++ b/source/x/x11/configure/xf86-video-nouveau
@@ -0,0 +1,12 @@
+CFLAGS=$SLKCFLAGS \
+CXXFLAGS=$SLKCFLAGS \
+./configure \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --infodir=/usr/info \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
+ --disable-static \
+ --build=$ARCH-slackware-linux
diff --git a/source/x/x11/configure/xorg-server b/source/x/x11/configure/xorg-server
index b62befbae..755b565dd 100644
--- a/source/x/x11/configure/xorg-server
+++ b/source/x/x11/configure/xorg-server
@@ -3,17 +3,25 @@ BUILD_SERVERS="--enable-xorg \
--enable-dmx \
--enable-xvfb \
--enable-xnest \
+ --enable-glamor \
--enable-kdrive \
--enable-xephyr \
--enable-xfbdev \
--enable-config-udev \
- --disable-config-hal"
+ --enable-kdrive-evdev \
+ --enable-kdrive-kbd \
+ --enable-kdrive-mouse \
+ --disable-config-hal \
+ --disable-systemd-logind"
-MESA_VERSION=${MESA_VERSION:-7.5} # unused in 1.7+
+#MESA_VERSION=${MESA_VERSION:-7.5} # unused in 1.7+
# Default font paths to be used by the X server
DEF_FONTPATH="/usr/share/fonts/local,/usr/share/fonts/TTF,/usr/share/fonts/OTF,/usr/share/fonts/Type1,/usr/share/fonts/misc,/usr/share/fonts/CID,/usr/share/fonts/75dpi/:unscaled,/usr/share/fonts/100dpi/:unscaled,/usr/share/fonts/75dpi,/usr/share/fonts/100dpi,/usr/share/fonts/cyrillic"
+# Reconf (don't remove this plz):
+autoreconf -vif
+
CFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
@@ -24,10 +32,11 @@ CFLAGS="$SLKCFLAGS" \
--mandir=/usr/man \
--disable-static \
--with-pic \
+ --enable-suid-wrapper \
--with-int10=x86emu \
--with-default-font-path="${DEF_FONTPATH}" \
--with-module-dir=/usr/lib${LIBDIRSUFFIX}/xorg/modules \
- --with-os-name="Slackware 14.1" \
+ --with-os-name="Slackware 14.2" \
--with-os-vendor="Slackware Linux Project" \
--with-xkb-path=/etc/X11/xkb \
--with-xkb-output=/var/lib/xkb \
diff --git a/source/x/x11/makepkg/xorg-server b/source/x/x11/makepkg/xorg-server
index 4f47738e1..13d601edc 100644
--- a/source/x/x11/makepkg/xorg-server
+++ b/source/x/x11/makepkg/xorg-server
@@ -38,5 +38,10 @@ if [ "$UPGRADE_PACKAGES" = "yes" ]; then
/sbin/upgradepkg --install-new ${SLACK_X_BUILD_DIR}/xorg-server-xvfb-${MODULAR_PACKAGE_VERSION}-$ARCH-$BUILD.txz
/sbin/upgradepkg --install-new ${SLACK_X_BUILD_DIR}/xorg-server-xephyr-${MODULAR_PACKAGE_VERSION}-$ARCH-$BUILD.txz
/sbin/upgradepkg --install-new ${SLACK_X_BUILD_DIR}/xorg-server-${MODULAR_PACKAGE_VERSION}-$ARCH-$BUILD.txz
+elif [ "$UPGRADE_PACKAGES" = "always" ]; then
+ /sbin/upgradepkg --install-new --reinstall ${SLACK_X_BUILD_DIR}/xorg-server-xnest-${MODULAR_PACKAGE_VERSION}-$ARCH-$BUILD.txz
+ /sbin/upgradepkg --install-new --reinstall ${SLACK_X_BUILD_DIR}/xorg-server-xvfb-${MODULAR_PACKAGE_VERSION}-$ARCH-$BUILD.txz
+ /sbin/upgradepkg --install-new --reinstall ${SLACK_X_BUILD_DIR}/xorg-server-xephyr-${MODULAR_PACKAGE_VERSION}-$ARCH-$BUILD.txz
+ /sbin/upgradepkg --install-new --reinstall ${SLACK_X_BUILD_DIR}/xorg-server-${MODULAR_PACKAGE_VERSION}-$ARCH-$BUILD.txz
fi
diff --git a/source/x/x11/modularize b/source/x/x11/modularize
index 38762ffda..8a28ed93e 100644
--- a/source/x/x11/modularize
+++ b/source/x/x11/modularize
@@ -11,6 +11,7 @@ compositeproto
damageproto
dmxproto
dri2proto
+dri3proto
editres
encodings
evieext
@@ -58,6 +59,7 @@ fonttosfnt
fslsfonts
fstobdf
gccmakedep
+glamor-egl
glproto
iceauth
ico
@@ -89,6 +91,7 @@ libXinerama
libXmu
libXp
libXpm
+libXpresent
libXrandr
libXrender
libXres
@@ -105,6 +108,7 @@ libpciaccess
libpthread-stubs
libxcb
libxkbfile
+libxshmfence
listres
lndir
luit
@@ -114,6 +118,7 @@ mkfontdir
mkfontscale
oclock
pixman
+presentproto
printproto
randrproto
recordproto
@@ -140,6 +145,7 @@ xcalc
xcb-proto
xcb-util
xcb-util-cursor
+xcb-util-errors
xcb-util-image
xcb-util-keysyms
xcb-util-renderutil
@@ -173,6 +179,7 @@ xf86-input-synaptics
xf86-input-vmmouse
xf86-input-void
xf86-input-wacom
+xf86-video-amdgpu
xf86-video-apm
xf86-video-ark
xf86-video-ast
diff --git a/source/x/x11/noarch b/source/x/x11/noarch
index 480ffc26c..8785ee527 100644
--- a/source/x/x11/noarch
+++ b/source/x/x11/noarch
@@ -70,7 +70,6 @@ xf86miscproto
xf86vidmodeproto
xineramaproto
xkeyboard-config
-xorg-cf-files
xorg-docs
xproto
xtrans
diff --git a/source/x/x11/package-blacklist b/source/x/x11/package-blacklist
index 8e2f3eb5c..603b8c31f 100644
--- a/source/x/x11/package-blacklist
+++ b/source/x/x11/package-blacklist
@@ -28,6 +28,7 @@ xf86-video-via
xkbdata
xphelloworld
xrx
+xf86-video-modesetting
# Not applicable to us
grandr
diff --git a/source/x/x11/patch/luit.patch b/source/x/x11/patch/luit.patch
new file mode 100644
index 000000000..871e17bc3
--- /dev/null
+++ b/source/x/x11/patch/luit.patch
@@ -0,0 +1,3 @@
+zcat $CWD/patch/luit/luit_use_system_extensions.diff.gz | patch -p1 --verbose \
+ || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+autoreconf -v -i -f
diff --git a/source/x/x11/patch/luit/luit_use_system_extensions.diff b/source/x/x11/patch/luit/luit_use_system_extensions.diff
new file mode 100644
index 000000000..24f1791e6
--- /dev/null
+++ b/source/x/x11/patch/luit/luit_use_system_extensions.diff
@@ -0,0 +1,38 @@
+--- ./configure.ac.orig 2012-03-22 23:23:07.000000000 -0500
++++ ./configure.ac 2014-07-14 18:22:11.438996085 -0500
+@@ -33,9 +33,7 @@
+ XORG_DEFAULT_OPTIONS
+
+ AC_CONFIG_HEADERS([config.h])
+-
+-AC_CANONICAL_HOST
+-
++AC_USE_SYSTEM_EXTENSIONS
+
+ AC_CHECK_HEADERS([pty.h stropts.h sys/param.h sys/select.h])
+ AC_CHECK_FUNCS([select grantpt posix_openpt])
+@@ -54,23 +52,16 @@
+ PKG_CHECK_EXISTS(x11, [],
+ [AC_MSG_WARN([libX11 not found. luit may not be able to find locale aliases without it.])])
+
++AC_CANONICAL_HOST
+ case $host_os in
+ # darwin has poll() but can't be used to poll character devices (atleast through SnowLeopard)
+ darwin*)
+- OS_CFLAGS=
+- ;;
+- linux*)
+- AC_CHECK_HEADERS([poll.h])
+- AC_CHECK_FUNCS([poll])
+- OS_CFLAGS="-D_XOPEN_SOURCE=500"
+ ;;
+ *)
+ AC_CHECK_HEADERS([poll.h])
+ AC_CHECK_FUNCS([poll])
+- OS_CFLAGS=
+ ;;
+ esac
+-AC_SUBST(OS_CFLAGS)
+
+ AC_CHECK_HEADERS([pty.h stropts.h sys/ioctl.h sys/param.h sys/poll.h sys/select.h sys/time.h termios.h])
+ AC_CHECK_FUNCS([grantpt putenv select strdup])
diff --git a/source/x/x11/patch/xdm.patch b/source/x/x11/patch/xdm.patch
index 75e0dcb92..37be22286 100644
--- a/source/x/x11/patch/xdm.patch
+++ b/source/x/x11/patch/xdm.patch
@@ -1 +1,8 @@
-zcat $CWD/patch/xdm/xdm.glibc.crypt.diff.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xdm/xdm.glibc.crypt.diff.gz | patch -p1 --verbose || \
+ { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xdm/xdm-1.1.11-arc4random-include.patch.gz | patch -p1 --verbose || \
+ { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xdm/xdm-1.1.11-setproctitle-include.patch.gz | patch -p1 --verbose || \
+ { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xdm/xdm-consolekit.patch.gz | patch -p1 --verbose || \
+ { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/x/x11/patch/xdm/xdm-1.1.11-arc4random-include.patch b/source/x/x11/patch/xdm/xdm-1.1.11-arc4random-include.patch
new file mode 100644
index 000000000..db948094b
--- /dev/null
+++ b/source/x/x11/patch/xdm/xdm-1.1.11-arc4random-include.patch
@@ -0,0 +1,18 @@
+diff -ur a/xdm/genauth.c b/xdm/genauth.c
+--- a/xdm/genauth.c 2011-09-25 09:35:47.000000000 +0200
++++ b/xdm/genauth.c 2014-01-06 16:28:09.664060603 +0100
+@@ -40,6 +40,14 @@
+
+ #include <errno.h>
+
++#ifdef HAVE_ARC4RANDOM
++# ifdef __linux__
++# include <bsd/stdlib.h>
++# else
++# include <stdlib.h>
++# endif
++#endif
++
+ #include <time.h>
+ #define Time_t time_t
+
diff --git a/source/x/x11/patch/xdm/xdm-1.1.11-setproctitle-include.patch b/source/x/x11/patch/xdm/xdm-1.1.11-setproctitle-include.patch
new file mode 100644
index 000000000..0a3f32bbe
--- /dev/null
+++ b/source/x/x11/patch/xdm/xdm-1.1.11-setproctitle-include.patch
@@ -0,0 +1,37 @@
+diff -ur a/xdm/choose.c b/xdm/choose.c
+--- a/xdm/choose.c 2011-09-25 09:35:47.000000000 +0200
++++ b/xdm/choose.c 2014-01-06 16:33:09.628065364 +0100
+@@ -54,6 +54,14 @@
+ # include <tiuser.h>
+ # endif
+
++# ifdef HAVE_SETPROCTITLE
++# ifdef __linux__
++# include <bsd/unistd.h>
++# else
++# include <unistd.h>
++# endif
++# endif
++
+ # include <time.h>
+ # define Time_t time_t
+
+diff -ur a/xdm/session.c b/xdm/session.c
+--- a/xdm/session.c 2011-09-25 09:35:47.000000000 +0200
++++ b/xdm/session.c 2014-01-06 16:40:57.508072789 +0100
+@@ -54,6 +54,15 @@
+ # include <usersec.h>
+ #endif
+
++# ifdef HAVE_SETPROCTITLE
++# include <sys/types.h>
++# ifdef __linux__
++# include <bsd/unistd.h>
++# else
++# include <unistd.h>
++# endif
++# endif
++
+ #ifndef USE_PAM /* PAM modules should handle these */
+ # ifdef SECURE_RPC
+ # include <rpc/rpc.h>
diff --git a/source/x/x11/patch/xdm/xdm-consolekit.patch b/source/x/x11/patch/xdm/xdm-consolekit.patch
new file mode 100644
index 000000000..fbacd36fc
--- /dev/null
+++ b/source/x/x11/patch/xdm/xdm-consolekit.patch
@@ -0,0 +1,230 @@
+http://bugs.gentoo.org/360987
+http://projects.archlinux.org/svntogit/packages.git/plain/trunk/xdm-consolekit.patch?h=packages/xorg-xdm
+http://lists.x.org/archives/xorg-devel/2011-February/019615.html
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=615020
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -362,6 +362,20 @@
+
+ AM_CONDITIONAL(DYNAMIC_GREETER, test x$DYNAMIC_GREETER = xyes)
+
++# ConsoleKit support
++AC_ARG_WITH(consolekit, AC_HELP_STRING([--with-consolekit], [Use ConsoleKit]),
++ [USE_CONSOLEKIT=$withval], [USE_CONSOLEKIT=yes])
++if test x"$USE_CONSOLEKIT" != xno; then
++ PKG_CHECK_MODULES(CK_CONNECTOR, ck-connector,
++ [USE_CONSOLEKIT=yes], [USE_CONSOLEKIT=no])
++ if test x"$USE_CONSOLEKIT" = xyes; then
++ AC_DEFINE([USE_CONSOLEKIT], 1, [Define to 1 to use ConsoleKit])
++ XDM_CFLAGS="$XDM_CFLAGS $CK_CONNECTOR_CFLAGS -DUSE_CONSOLEKIT"
++ XDM_LIBS="$XDM_LIBS $CK_CONNECTOR_LIBS"
++ fi
++fi
++dnl AM_CONDITIONAL(USE_CONSOLEKIT, test$USE_CONSOLEKIT = xyes)
++
+ #
+ # XDM
+ #
+--- a/xdm/session.c
++++ b/xdm/session.c
+@@ -66,6 +66,11 @@
+ #endif
+ #endif /* USE_PAM */
+
++#ifdef USE_CONSOLEKIT
++#include <ck-connector.h>
++#include <dbus/dbus.h>
++#endif
++
+ #ifdef __SCO__
+ #include <prot.h>
+ #endif
+@@ -472,6 +477,97 @@
+ }
+ }
+
++#ifdef USE_CONSOLEKIT
++
++static CkConnector *connector;
++
++static int openCKSession(struct verify_info *verify, struct display *d)
++{
++ int ret;
++ DBusError error;
++ char *remote_host_name = "";
++ dbus_bool_t is_local;
++ char *display_name = "";
++ char *display_device = "";
++ char devtmp[16];
++
++ if (!use_consolekit)
++ return 1;
++
++ is_local = d->displayType.location == Local;
++ if (d->peerlen > 0 && d->peer)
++ remote_host_name = d->peer;
++ if (d->name)
++ display_name = d->name;
++ /* how can we get the corresponding tty at best...? */
++ if (d->windowPath) {
++ display_device = strchr(d->windowPath, ':');
++ if (display_device && display_device[1])
++ display_device++;
++ else
++ display_device = d->windowPath;
++ snprintf(devtmp, sizeof(devtmp), "/dev/tty%s", display_device);
++ display_device = devtmp;
++ }
++
++ connector = ck_connector_new();
++ if (!connector) {
++ LogOutOfMem("ck_connector");
++ return 0;
++ }
++
++ dbus_error_init(&error);
++ ret = ck_connector_open_session_with_parameters(
++ connector, &error,
++ "unix-user", &verify->uid,
++ "x11-display", &display_name,
++ "x11-display-device", &display_device,
++ "remote-host-name", &remote_host_name,
++ "is-local", &is_local,
++ NULL);
++ if (!ret) {
++ if (dbus_error_is_set(&error)) {
++ LogError("Dbus error: %s\n", error.message);
++ dbus_error_free(&error);
++ } else {
++ LogError("ConsoleKit error\n");
++ }
++ LogError("console-kit-daemon not running?\n");
++ ck_connector_unref(connector);
++ connector = NULL;
++ return 0;
++ }
++
++ verify->userEnviron = setEnv(verify->userEnviron,
++ "XDG_SESSION_COOKIE", ck_connector_get_cookie(connector));
++ return 1;
++}
++
++static void closeCKSession(void)
++{
++ DBusError error;
++
++ if (!connector)
++ return;
++
++ dbus_error_init(&error);
++ if (!ck_connector_close_session(connector, &error)) {
++ if (dbus_error_is_set(&error)) {
++ LogError("Dbus error: %s\n", error.message);
++ dbus_error_free(&error);
++ } else {
++ LogError("ConsoleKit close error\n");
++ }
++ LogError("console-kit-daemon not running?\n");
++ }
++ ck_connector_unref(connector);
++ connector = NULL;
++}
++#else
++#define openCKSession(v,d) 1
++#define closeCKSession()
++#endif
++
+ void
+ SessionExit (struct display *d, int status, int removeAuth)
+ {
+@@ -486,6 +580,8 @@
+ }
+ #endif
+
++ closeCKSession();
++
+ /* make sure the server gets reset after the session is over */
+ if (d->serverPid >= 2 && d->resetSignal)
+ kill (d->serverPid, d->resetSignal);
+@@ -568,6 +664,10 @@
+ #ifdef USE_PAM
+ if (pamh) pam_open_session(pamh, 0);
+ #endif
++
++ if (!openCKSession(verify, d))
++ return 0;
++
+ switch (pid = fork ()) {
+ case 0:
+ CleanUpChild ();
+--- a/include/dm.h
++++ b/include/dm.h
+@@ -325,6 +325,9 @@
+ extern char *prngdSocket;
+ extern int prngdPort;
+ # endif
++#ifdef USE_CONSOLEKIT
++extern int use_consolekit;
++#endif
+
+ extern char *greeterLib;
+ extern char *willing;
+--- a/xdm/resource.c
++++ b/xdm/resource.c
+@@ -68,6 +68,9 @@
+ char *prngdSocket;
+ int prngdPort;
+ #endif
++#ifdef USE_CONSOLEKIT
++int use_consolekit;
++#endif
+
+ char *greeterLib;
+ char *willing;
+@@ -258,6 +261,10 @@
+ "false"} ,
+ { "willing", "Willing", DM_STRING, &willing,
+ ""} ,
++#ifdef USE_CONSOLEKIT
++{ "consoleKit", "ConsoleKit", DM_BOOL, (char **) &use_consolekit,
++ "true"} ,
++#endif
+ };
+
+ # define NUM_DM_RESOURCES (sizeof DmResources / sizeof DmResources[0])
+@@ -440,7 +447,11 @@
+ {"-debug", "*debugLevel", XrmoptionSepArg, (caddr_t) NULL },
+ {"-xrm", NULL, XrmoptionResArg, (caddr_t) NULL },
+ {"-daemon", ".daemonMode", XrmoptionNoArg, "true" },
+-{"-nodaemon", ".daemonMode", XrmoptionNoArg, "false" }
++{"-nodaemon", ".daemonMode", XrmoptionNoArg, "false" },
++#ifdef USE_CONSOLEKIT
++{"-consolekit", ".consoleKit", XrmoptionNoArg, "true" },
++{"-noconsolekit", ".consoleKit", XrmoptionNoArg, "false" }
++#endif
+ };
+
+ static int originalArgc;
+--- a/man/xdm.man
++++ b/man/xdm.man
+@@ -51,6 +51,8 @@
+ ] [
+ .B \-session
+ .I session_program
++] [
++.B \-noconsolekit
+ ]
+ .SH DESCRIPTION
+ .I Xdm
+@@ -218,6 +220,10 @@
+ .IP "\fB\-xrm\fP \fIresource_specification\fP"
+ Allows an arbitrary resource to be specified, as in most
+ X Toolkit applications.
++.IP "\fB\-noconsolekit\fP"
++Specifies ``false'' as the value for the \fBDisplayManager.consoleKit\fP
++resource.
++This suppresses the session management using ConsoleKit.
+ .SH RESOURCES
+ At many stages the actions of
+ .I xdm
diff --git a/source/x/x11/patch/xf86-video-chips.patch b/source/x/x11/patch/xf86-video-chips.patch
deleted file mode 100644
index a9ddcaa4d..000000000
--- a/source/x/x11/patch/xf86-video-chips.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-# Rationale for this is here:
-
-# commit bde65934fe8b40a5fdc8a469d0355caca59e81b5
-# Author: Alan Coopersmith <alan.coopersmith@oracle.com>
-# Date: Sat Jul 21 09:27:10 2012 -0700
-#
-# Add iopl.h to source lists in util/Makefile.am so it gets packaged
-#
-# Was missed when it was created in commit c421f2477c9999, since
-# "make distcheck" passes due to configure determining it can't
-# build the utils without the header and moving on.
-#
-# Reported-by: Andreas Radke <a.radke@arcor.de>
-# Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-
-# iopl.h obtained from git repo
-cp $CWD/patch/xf86-video-chips/iopl.h util/ \
- || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-chips/iopl.h b/source/x/x11/patch/xf86-video-chips/iopl.h
deleted file mode 100644
index e08207c7f..000000000
--- a/source/x/x11/patch/xf86-video-chips/iopl.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifdef __NetBSD__
-# include <sys/types.h>
-# include <machine/pio.h>
-# include <machine/sysarch.h>
-#else
-# if defined(__linux__)
-/* Can't because <sys/iopl.h> provides conflicting inb, outb, etc
- * # include <sys/io.h>
- */
-int iopl(int level);
-# endif
-# if defined(SVR4) && defined(i386)
-# include <sys/types.h>
-# ifdef NCR
- /* broken NCR <sys/sysi86.h> */
-# define __STDC
-# include <sys/sysi86.h>
-# undef __STDC
-# else
-# include <sys/sysi86.h>
-# endif
-# ifdef SVR4
-# if !defined(sun)
-# include <sys/seg.h>
-# endif
-# endif
-# include <sys/v86.h>
-# if defined(sun)
-# include <sys/psw.h>
-# endif
-# endif
-# include "AsmMacros.h"
-#endif /* NetBSD */
-
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef __NetBSD__
-# define SET_IOPL() i386_iopl(3)
-# define RESET_IOPL() i386_iopl(0)
-#else
-# if defined(SVR4) && defined(i386)
-# ifndef SI86IOPL
-# define SET_IOPL() sysi86(SI86V86,V86SC_IOPL,PS_IOPL)
-# define RESET_IOPL() sysi86(SI86V86,V86SC_IOPL,0)
-# else
-# define SET_IOPL() sysi86(SI86IOPL,3)
-# define RESET_IOPL() sysi86(SI86IOPL,0)
-# endif
-# else
-# ifdef linux
-# define SET_IOPL() iopl(3)
-# define RESET_IOPL() iopl(0)
-# else
-# define SET_IOPL() (void)0
-# define RESET_IOPL() (void)0
-# endif
-# endif
-#endif
diff --git a/source/x/x11/patch/xf86-video-geode.patch b/source/x/x11/patch/xf86-video-geode.patch
deleted file mode 100644
index 6bbc3b34a..000000000
--- a/source/x/x11/patch/xf86-video-geode.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScrn);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScrn);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-i740.patch b/source/x/x11/patch/xf86-video-i740.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-i740.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-intel.patch b/source/x/x11/patch/xf86-video-intel.patch
new file mode 100644
index 000000000..dab2d0d30
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-intel.patch
@@ -0,0 +1,3 @@
+# Disable this patch. Latest git should support gen9 properly.
+#zcat $CWD/patch/xf86-video-intel/0001-sna-Let-modestting-glamor-handle-gen9.patch.gz \
+# | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/x/x11/patch/xf86-video-intel/0001-sna-Let-modestting-glamor-handle-gen9.patch b/source/x/x11/patch/xf86-video-intel/0001-sna-Let-modestting-glamor-handle-gen9.patch
new file mode 100644
index 000000000..75d719529
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-intel/0001-sna-Let-modestting-glamor-handle-gen9.patch
@@ -0,0 +1,41 @@
+From 442ac0a20132f49fbfb37f05db9d90f04b13698d Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Mon, 29 Feb 2016 14:43:35 +0100
+Subject: [RFC/PATCH xf86-video-intel] sna: Let modestting + glamor handle
+ gen9+
+
+sna has no meaningfull accel for gen9+, this causes problems with i.e.
+apps using XVideo since the sprite XVideo support does not work well
+for many apps.
+
+Therefor it is better to just let the xserver fall back to modesetting +
+glamor. This is implemented by returning FALSE from the probe methods,
+just like how nouveau handles falling back to modesetting for newer cards.
+
+BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1305369
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ src/intel_module.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/intel_module.c b/src/intel_module.c
+index 60835b9..5979cb9 100644
+--- a/src/intel_module.c
++++ b/src/intel_module.c
+@@ -571,6 +571,13 @@ intel_scrn_create(DriverPtr driver,
+ return FALSE;
+ }
+
++ /*
++ * We've no accel support for these, so let modesetting + glamor
++ * handle them.
++ */
++ if ((unsigned)((struct intel_device_info *)match_data)->gen >= 0110)
++ return FALSE;
++
+ scrn = xf86AllocateScreen(driver, flags);
+ if (scrn == NULL)
+ return FALSE;
+--
+2.7.2
+
diff --git a/source/x/x11/patch/xf86-video-neomagic.patch b/source/x/x11/patch/xf86-video-neomagic.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-neomagic.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-r128.patch b/source/x/x11/patch/xf86-video-r128.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-r128.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-rendition.patch b/source/x/x11/patch/xf86-video-rendition.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-rendition.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-s3virge.patch b/source/x/x11/patch/xf86-video-s3virge.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-s3virge.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-savage.patch b/source/x/x11/patch/xf86-video-savage.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-savage.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-siliconmotion.patch b/source/x/x11/patch/xf86-video-siliconmotion.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-siliconmotion.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-sis.patch b/source/x/x11/patch/xf86-video-sis.patch
deleted file mode 100644
index 45276b4c8..000000000
--- a/source/x/x11/patch/xf86-video-sis.patch
+++ /dev/null
@@ -1,2 +0,0 @@
-zcat $CWD/patch/xf86-video-sis/sis-0.10.7-git.patch.gz | patch -p1 --verbose \
- || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/x/x11/patch/xf86-video-sis/sis-0.10.7-git.patch b/source/x/x11/patch/xf86-video-sis/sis-0.10.7-git.patch
deleted file mode 100644
index 865237552..000000000
--- a/source/x/x11/patch/xf86-video-sis/sis-0.10.7-git.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-diff --git a/src/sis.h b/src/sis.h
-index 46fca2a..20e6134 100644
---- a/src/sis.h
-+++ b/src/sis.h
-@@ -75,7 +75,6 @@
-
- #include "compiler.h"
- #include "xf86Pci.h"
--#include "xf86Priv.h"
- #include "xf86_OSproc.h"
- #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
- #include "xf86Resources.h"
-diff --git a/src/sis_driver.c b/src/sis_driver.c
-index 61e8075..0fd83d7 100644
---- a/src/sis_driver.c
-+++ b/src/sis_driver.c
-@@ -57,7 +57,6 @@
- #include "fb.h"
- #include "micmap.h"
- #include "mipointer.h"
--#include "mibstore.h"
- #include "edid.h"
-
- #define SIS_NEED_inSISREG
-@@ -94,6 +93,10 @@
- #include "dri.h"
- #endif
-
-+#ifndef DEFAULT_DPI
-+#define DEFAULT_DPI 96
-+#endif
-+
- /*
- * LookupWindow was removed with video abi 11.
- */
-@@ -7344,7 +7347,11 @@ SISUnmapMem(ScrnInfoPtr pScrn)
- if(pSiSEnt->MapCountIOBase) {
- pSiSEnt->MapCountIOBase--;
- if((pSiSEnt->MapCountIOBase == 0) || (pSiSEnt->forceUnmapIOBase)) {
-+#ifndef XSERVER_LIBPCIACCESS
- xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pSiSEnt->IOBase, (pSiS->mmioSize * 1024));
-+#else
-+ pci_device_unmap_range(pSiS->PciInfo, pSiSEnt->IOBase, (pSiS->mmioSize * 1024));
-+#endif
- pSiSEnt->IOBase = NULL;
- pSiSEnt->MapCountIOBase = 0;
- pSiSEnt->forceUnmapIOBase = FALSE;
-@@ -7355,7 +7362,11 @@ SISUnmapMem(ScrnInfoPtr pScrn)
- if(pSiSEnt->MapCountIOBaseDense) {
- pSiSEnt->MapCountIOBaseDense--;
- if((pSiSEnt->MapCountIOBaseDense == 0) || (pSiSEnt->forceUnmapIOBaseDense)) {
-+#ifndef XSERVER_LIBPCIACCESS
- xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pSiSEnt->IOBaseDense, (pSiS->mmioSize * 1024));
-+#else
-+ pci_device_unmap_range(pSiS->PciInfo, (pointer)pSiSEnt->IOBaseDense, (pSiS->mmioSize * 1024));
-+#endif
- pSiSEnt->IOBaseDense = NULL;
- pSiSEnt->MapCountIOBaseDense = 0;
- pSiSEnt->forceUnmapIOBaseDense = FALSE;
-@@ -7366,7 +7377,11 @@ SISUnmapMem(ScrnInfoPtr pScrn)
- if(pSiSEnt->MapCountFbBase) {
- pSiSEnt->MapCountFbBase--;
- if((pSiSEnt->MapCountFbBase == 0) || (pSiSEnt->forceUnmapFbBase)) {
-+#ifndef XSERVER_LIBPCIACCESS
- xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pSiSEnt->RealFbBase, pSiS->FbMapSize);
-+#else
-+ pci_device_unmap_range(pSiS->PciInfo, (pointer)pSiSEnt->RealFbBase, pSiS->FbMapSize);
-+#endif
- pSiSEnt->FbBase = pSiSEnt->RealFbBase = NULL;
- pSiSEnt->MapCountFbBase = 0;
- pSiSEnt->forceUnmapFbBase = FALSE;
-@@ -7376,13 +7391,25 @@ SISUnmapMem(ScrnInfoPtr pScrn)
- }
- } else {
- #endif
-+#ifndef XSERVER_LIBPCIACCESS
- xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pSiS->IOBase, (pSiS->mmioSize * 1024));
-+#else
-+ pci_device_unmap_range(pSiS->PciInfo, (pointer)pSiS->IOBase, (pSiS->mmioSize * 1024));
-+#endif
- pSiS->IOBase = NULL;
- #ifdef __alpha__
-+#ifndef XSERVER_LIBPCIACCESS
- xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pSiS->IOBaseDense, (pSiS->mmioSize * 1024));
-+#else
-+ pci_device_unmap_range(pSiS->PciInfo, (pointer)pSiS->IOBaseDense, (pSiS->mmioSize * 1024));
-+#endif
- pSiS->IOBaseDense = NULL;
- #endif
-+#ifndef XSERVER_LIBPCIACCESS
- xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pSiS->RealFbBase, pSiS->FbMapSize);
-+#else
-+ pci_device_unmap_range(pSiS->PciInfo, (pointer)pSiS->RealFbBase, pSiS->FbMapSize);
-+#endif
- pSiS->FbBase = pSiS->RealFbBase = NULL;
- #ifdef SISDUALHEAD
- }
-@@ -8859,7 +8886,6 @@ SISScreenInit(SCREEN_INIT_ARGS_DECL)
- }
- pSiS->SiSFastVidCopyDone = TRUE;
-
-- miInitializeBackingStore(pScreen);
- xf86SetBackingStore(pScreen);
- xf86SetSilkenMouse(pScreen);
-
-@@ -9352,7 +9378,14 @@ SISMergedPointerMoved(SCRN_ARG_TYPE arg, int x, int y)
- }
- if(doit) {
- sigstate = xf86BlockSIGIO();
--#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 15
-+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 18
-+ {
-+ double dx = x, dy = y;
-+ miPointerSetPosition(inputInfo.pointer, Absolute, &dx, &dy, NULL, NULL);
-+ x = (int)dx;
-+ y = (int)dy;
-+ }
-+#elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 15
- {
- double dx = x, dy = y;
- miPointerSetPosition(inputInfo.pointer, Absolute, &dx, &dy);
diff --git a/source/x/x11/patch/xf86-video-tdfx.patch b/source/x/x11/patch/xf86-video-tdfx.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-tdfx.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-trident.patch b/source/x/x11/patch/xf86-video-trident.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-trident.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-v4l.patch b/source/x/x11/patch/xf86-video-v4l.patch
new file mode 100644
index 000000000..5040a98ec
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-v4l.patch
@@ -0,0 +1,4 @@
+zcat $CWD/patch/xf86-video-v4l/xorg-x11-drv-v4l-support_v4l2_only_drivers.patch.gz \
+ | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xf86-video-v4l/xf86-video-v4l-0.2.0-build-fix.patch.gz \
+ | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/x/x11/patch/xf86-video-v4l/xf86-video-v4l-0.2.0-build-fix.patch b/source/x/x11/patch/xf86-video-v4l/xf86-video-v4l-0.2.0-build-fix.patch
new file mode 100644
index 000000000..febba2c68
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-v4l/xf86-video-v4l-0.2.0-build-fix.patch
@@ -0,0 +1,14 @@
+diff -up xf86-video-v4l-0.2.0/src/v4l.c~ xf86-video-v4l-0.2.0/src/v4l.c
+--- xf86-video-v4l-0.2.0/src/v4l.c~ 2015-02-11 17:42:55.000000000 +0100
++++ xf86-video-v4l-0.2.0/src/v4l.c 2015-02-11 17:44:33.432706357 +0100
+@@ -42,6 +42,10 @@
+ # define DEBUG(x)
+ #endif
+
++#ifndef VIDEO_INVERT_CLIPLIST
++#define VIDEO_INVERT_CLIPLIST 0x00000002
++#endif
++
+ /***************************************************************************/
+
+ static void V4LIdentify(int flags);
diff --git a/source/x/x11/patch/xf86-video-v4l/xorg-x11-drv-v4l-support_v4l2_only_drivers.patch b/source/x/x11/patch/xf86-video-v4l/xorg-x11-drv-v4l-support_v4l2_only_drivers.patch
new file mode 100644
index 000000000..3a2ec418e
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-v4l/xorg-x11-drv-v4l-support_v4l2_only_drivers.patch
@@ -0,0 +1,4068 @@
+diff --git a/src/v4l.c b/src/v4l.c
+--- a/src/v4l.c
++++ b/src/v4l.c
+@@ -1,6 +1,9 @@
+ /*
+- * video4linux Xv Driver
++ * video4linux Xv Driver
+ * based on Michael Schimek's permedia 2 driver.
++ *
++ * Copyright (c) 2011 Mauro Carvalho Chehab <mchehab@redhat.com> for:
++ * - Major rewrite, as driver got ported to V4L2 API
+ */
+
+ #ifdef HAVE_CONFIG_H
+@@ -9,12 +12,16 @@
+
+ #include <sys/types.h>
+ #include <sys/stat.h>
++#include <ctype.h>
++
+ #include <fcntl.h>
+ #include <errno.h>
+ #include <string.h>
+ #include <stdio.h>
++#include <unistd.h>
++#include <sys/ioctl.h>
+
+-#include "videodev.h"
++#include "videodev2.h"
+ #include "xf86.h"
+ #include "xf86_OSproc.h"
+ #include "xf86Pci.h"
+@@ -25,29 +32,32 @@
+ #include "regionstr.h"
+ #include "dgaproc.h"
+ #include "xf86str.h"
++#include "fourcc.h"
+
+-#include <asm/ioctl.h> /* _IORW(xxx) #defines are here */
++#include <asm/ioctl.h> /* _IORW(xxx) #defines are here */
+
+-#if 0
++#if 1
+ # define DEBUG(x) (x)
+ #else
+ # define DEBUG(x)
+ #endif
+
++/***************************************************************************/
++
+ static void V4LIdentify(int flags);
+ static Bool V4LProbe(DriverPtr drv, int flags);
+ static const OptionInfoRec * V4LAvailableOptions(int chipid, int busid);
+
+ _X_EXPORT DriverRec V4L = {
+- 40000,
+- "v4l",
+- V4LIdentify, /* Identify*/
+- V4LProbe, /* Probe */
+- V4LAvailableOptions,
+- NULL,
+- 0
+-};
+-
++ .driverVersion = 50000,
++ .driverName = "v4l",
++ .Identify = V4LIdentify,
++ .Probe = V4LProbe,
++ .AvailableOptions = V4LAvailableOptions,
++ .module = NULL,
++ .refCount = 0,
++ .driverFunc = NULL, /* FIXME: Need to implement for new probing mode */
++};
+
+ #ifdef XFree86LOADER
+
+@@ -55,16 +65,16 @@ static MODULESETUPPROTO(v4lSetup);
+
+ static XF86ModuleVersionInfo v4lVersRec =
+ {
+- "v4l",
+- MODULEVENDORSTRING,
+- MODINFOSTRING1,
+- MODINFOSTRING2,
+- XORG_VERSION_CURRENT,
+- 0, 1, 1,
+- ABI_CLASS_VIDEODRV,
+- ABI_VIDEODRV_VERSION,
+- MOD_CLASS_NONE,
+- {0,0,0,0}
++ "v4l",
++ MODULEVENDORSTRING,
++ MODINFOSTRING1,
++ MODINFOSTRING2,
++ XORG_VERSION_CURRENT,
++ 0, 1, 1,
++ ABI_CLASS_VIDEODRV,
++ ABI_VIDEODRV_VERSION,
++ MOD_CLASS_NONE,
++ {0,0,0,0}
+ };
+
+ _X_EXPORT XF86ModuleData v4lModuleData = { &v4lVersRec, v4lSetup, NULL };
+@@ -72,32 +82,32 @@ _X_EXPORT XF86ModuleData v4lModuleData =
+ static pointer
+ v4lSetup(pointer module, pointer opts, int *errmaj, int *errmin)
+ {
+- const char *osname;
+- static Bool setupDone = FALSE;
++ const char *osname;
++ static Bool setupDone = FALSE;
+
+- if (setupDone) {
+- if (errmaj)
+- *errmaj = LDR_ONCEONLY;
+- return NULL;
+- }
+-
+- setupDone = TRUE;
++ if (setupDone) {
++ if (errmaj)
++ *errmaj = LDR_ONCEONLY;
++ return NULL;
++ }
+
+- /* Check that we're being loaded on a Linux system */
+- LoaderGetOS(&osname, NULL, NULL, NULL);
+- if (!osname || strcmp(osname, "linux") != 0) {
+- if (errmaj)
+- *errmaj = LDR_BADOS;
+- if (errmin)
+- *errmin = 0;
+- return NULL;
+- } else {
+- /* OK */
++ setupDone = TRUE;
+
+- xf86AddDriver (&V4L, module, 0);
+-
+- return (pointer)1;
+- }
++ /* Check that we're being loaded on a Linux system */
++ LoaderGetOS(&osname, NULL, NULL, NULL);
++ if (!osname || strcmp(osname, "linux") != 0) {
++ if (errmaj)
++ *errmaj = LDR_BADOS;
++ if (errmin)
++ *errmin = 0;
++ return NULL;
++ } else {
++ /* OK */
++
++ xf86AddDriver (&V4L, module, 0);
++
++ return (pointer)1;
++ }
+ }
+
+ #else
+@@ -112,25 +122,28 @@ v4lSetup(pointer module, pointer opts, i
+ #define VIDEO_YUV 2 /* yuv overlay (to offscreen memory + hw scaling) */
+ #define VIDEO_RECLIP 3 /* temporarly off, window clipping changes */
+
++typedef struct _XvV4LCtrlRec {
++ struct v4l2_queryctrl qctrl;
++ Atom xv;
++} XvV4LCtrlRec, *XvV4LCtrlPtr;
++
+ typedef struct _PortPrivRec {
+ ScrnInfoPtr pScrn;
+- FBAreaPtr pFBArea[2];
+- int VideoOn;
+- Bool StreamOn;
++ FBAreaPtr pFBArea[2];
++ int VideoOn;
++ Bool StreamOn;
+
+ /* file handle */
+- int nr;
+- struct video_capability cap;
++ int nr;
++ struct v4l2_capability cap;
+
+ /* RGB overlay */
+- struct video_buffer rgb_fbuf;
+- struct video_window rgb_win;
+- int rgbpalette;
++ struct v4l2_framebuffer rgb_fbuf;
++ struct v4l2_window rgb_win;
+ int rgbdepth;
+
+ /* attributes */
+- struct video_picture pict;
+- struct video_audio audio;
++ CARD32 pixelformat;
+
+ XF86VideoEncodingPtr enc;
+ int *input;
+@@ -145,24 +158,21 @@ typedef struct _PortPrivRec {
+
+ int yuv_width,yuv_height;
+ XF86SurfacePtr surface;
+- struct video_buffer yuv_fbuf;
+- struct video_window yuv_win;
++ struct v4l2_framebuffer yuv_fbuf;
++ struct v4l2_window yuv_win;
++
++ struct v4l2_standard *standard; /* FIXME: can be removed */
++
++ XvV4LCtrlPtr XvV4LCtrl;
++ int n_qctrl;
+ } PortPrivRec, *PortPrivPtr;
+
+-#define XV_ENCODING "XV_ENCODING"
+-#define XV_BRIGHTNESS "XV_BRIGHTNESS"
+-#define XV_CONTRAST "XV_CONTRAST"
+-#define XV_SATURATION "XV_SATURATION"
+-#define XV_HUE "XV_HUE"
++#define XV_ENCODING "XV_ENCODING"
++#define XV_FREQ "XV_FREQ"
+
+-#define XV_FREQ "XV_FREQ"
+-#define XV_MUTE "XV_MUTE"
+-#define XV_VOLUME "XV_VOLUME"
++#define MAKE_ATOM(a) MakeAtom(a, strlen(a), TRUE)
+
+-#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
+-
+-static Atom xvEncoding, xvBrightness, xvContrast, xvSaturation, xvHue;
+-static Atom xvFreq, xvMute, xvVolume;
++static Atom xvEncoding, xvFreq;
+
+ static XF86VideoFormatRec
+ InputVideoFormats[] = {
+@@ -176,16 +186,8 @@ InputVideoFormats[] = {
+
+ static const XF86AttributeRec Attributes[] = {
+ {XvSettable | XvGettable, -1000, 1000, XV_ENCODING},
+- {XvSettable | XvGettable, -1000, 1000, XV_BRIGHTNESS},
+- {XvSettable | XvGettable, -1000, 1000, XV_CONTRAST},
+- {XvSettable | XvGettable, -1000, 1000, XV_SATURATION},
+- {XvSettable | XvGettable, -1000, 1000, XV_HUE},
+ };
+-static const XF86AttributeRec VolumeAttr =
+- {XvSettable | XvGettable, -1000, 1000, XV_VOLUME};
+-static const XF86AttributeRec MuteAttr =
+- {XvSettable | XvGettable, 0, 1, XV_MUTE};
+-static const XF86AttributeRec FreqAttr =
++static const XF86AttributeRec FreqAttr =
+ {XvSettable | XvGettable, 0, 16*1000, XV_FREQ};
+
+
+@@ -206,59 +208,247 @@ static struct V4L_DEVICE {
+ };
+
+ /* ---------------------------------------------------------------------- */
+-/* forward decl */
+
+-static void V4lQueryBestSize(ScrnInfoPtr pScrn, Bool motion,
+- short vid_w, short vid_h, short drw_w, short drw_h,
+- unsigned int *p_w, unsigned int *p_h, pointer data);
++static int SetV4LFmt(int fd, CARD32 pixelformat)
++{
++ struct v4l2_framebuffer fbuf;
++ char *p = (char *)&pixelformat;
++
++ memset(&fbuf, 0, sizeof(fbuf));
++ if (ioctl(fd, VIDIOC_G_FBUF, &fbuf) == -1) {
++ xf86Msg(X_ERROR, "v4l: Error %d: Can't get FBUF\n", errno);
++ return errno;
++ }
++ if (fbuf.fmt.pixelformat != pixelformat) {
++ fbuf.fmt.pixelformat = pixelformat;
++ if (ioctl(fd, VIDIOC_S_FBUF, &fbuf) == -1) {
++ xf86Msg(X_ERROR, "v4l: Error %d: Can't set FBUF to %c%c%c%c\n",
++ errno, p[0], p[1], p[2], p[3]);
++ return errno;
++ }
++ }
++ DEBUG(xf86Msg(X_INFO, "v4l: Set overlay format to %c%c%c%c\n",
++ p[0], p[1], p[2], p[3]));
++ return 0;
++}
++static int GetV4LFmt(int fd, CARD32 *pixelformat)
++{
++ struct v4l2_framebuffer fbuf;
++
++ memset(&fbuf, 0, sizeof(fbuf));
++ if (ioctl(fd, VIDIOC_G_FBUF, &fbuf) == -1) {
++ xf86Msg(X_ERROR, "v4l: Error %d: Can't get FBUF\n", errno);
++ return errno;
++ }
++
++ *pixelformat = fbuf.fmt.pixelformat;
++
++ return 0;
++}
++
++#define ATTR_NAME_PREFIX "XV_"
++static int AddControl(PortPrivPtr p, XF86AttributeRec **list, int *count,
++ struct v4l2_queryctrl *qctrl, int *n)
++{
++ char *ptr;
++
++/* v4l_add_attr */
++ if (qctrl->flags & V4L2_CTRL_FLAG_DISABLED)
++ return 0;
++ switch (qctrl->type) {
++ case V4L2_CTRL_TYPE_INTEGER:
++ case V4L2_CTRL_TYPE_BOOLEAN:
++ case V4L2_CTRL_TYPE_MENU:
++ case V4L2_CTRL_TYPE_BUTTON:
++ break;
++ default:
++ return 0;
++ }
++
++ p->XvV4LCtrl = realloc(p->XvV4LCtrl, sizeof(XvV4LCtrlRec) * (*n + 1));
++ if (!p->XvV4LCtrl) {
++ if (*list) {
++ free (*list);
++ *count = 0;
++ *n = 0;
++ }
++ return -1;
++ }
++
++ *list = realloc(*list, sizeof(XF86AttributeRec) * (*count + 1));
++ if (NULL == *list) {
++ if (p->XvV4LCtrl)
++ free (p->XvV4LCtrl);
++ *count = 0;
++ return -1;
++ }
++
++ memset(*list + *count, 0, sizeof(XF86AttributeRec));
++ (*list)[*count].flags = XvSettable | XvGettable;
++
++ if (qctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
++ (*list)[*count].flags &= ~XvSettable;
++ if (qctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
++ (*list)[*count].flags &= ~XvGettable;
++ (*list)[*count].min_value = qctrl->minimum;
++ (*list)[*count].max_value = qctrl->maximum;
++ (*list)[*count].name = malloc(strlen((char *)qctrl->name) + 1 + sizeof (ATTR_NAME_PREFIX));
++ strcpy((*list)[*count].name, ATTR_NAME_PREFIX);
++ strcat((*list)[*count].name, (char *)qctrl->name);
++ for (ptr = (*list)[*count].name; *ptr; ptr++) {
++ *ptr = toupper(*ptr);
++ if (*ptr == ' ')
++ *ptr = '_';
++ }
++
++ p->XvV4LCtrl[*n].xv = MAKE_ATOM((*list)[*count].name);
++ memcpy(&p->XvV4LCtrl[*n].qctrl, qctrl, sizeof(*qctrl));
++
++ xf86Msg(X_INFO, "v4l: add attr %s (Xv/GPA %d) (%d to %d)\n",
++ (*list)[*count].name, (int)p->XvV4LCtrl[*n].xv,
++ p->XvV4LCtrl[*n].qctrl.minimum,
++ p->XvV4LCtrl[*n].qctrl.maximum);
++
++ (*count)++;
++ (*n)++;
++
++ return 0;
++}
++
++static void AddAllV4LControls(PortPrivPtr p, XF86AttributeRec **list,
++ int *count, int fd)
++{
++ int entries = 0;
++ CARD32 id;
++ struct v4l2_queryctrl qctrl;
++
++ memset(&qctrl, 0, sizeof(qctrl));
++ qctrl.id = V4L2_CTRL_FLAG_NEXT_CTRL;
++ while (!ioctl(fd, VIDIOC_QUERYCTRL, &qctrl)) {
++ if (AddControl(p, list, count, &qctrl, &entries))
++ return;
++ qctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
++ }
++ if (qctrl.id != V4L2_CTRL_FLAG_NEXT_CTRL)
++ return;
++ for (id = V4L2_CID_USER_BASE; id < V4L2_CID_LASTP1; id++) {
++ qctrl.id = id;
++ if (!ioctl(fd, VIDIOC_QUERYCTRL, &qctrl)) {
++ if (AddControl(p, list, count, &qctrl, &entries))
++ return;
++ }
++ }
++ qctrl.id = V4L2_CID_PRIVATE_BASE;
++ while (!ioctl(fd, VIDIOC_QUERYCTRL, &qctrl)) {
++ if (AddControl(p, list, count, &qctrl, &entries))
++ return;
++ qctrl.id++;
++ }
++ p->n_qctrl = entries;
++}
+
+ /* ---------------------------------------------------------------------- */
+
++/* setup yuv overlay + hw scaling: look if we find some common video
++ format which both v4l driver and the X-Server can handle */
++static int v4l_check_yuv(ScrnInfoPtr pScrn, PortPrivPtr pPPriv,
++ char *dev, int fd)
++{
++ static const struct {
++ CARD32 v4l_palette;
++ unsigned int xv_id;
++ unsigned int xv_format;
++ } yuvlist[] = {
++ { V4L2_PIX_FMT_YUYV, FOURCC_YUY2, XvPacked },
++ { V4L2_PIX_FMT_UYVY, FOURCC_UYVY, XvPacked },
++ { 0 /* end of list */ },
++ };
++ /* FIXME: Why pScrn->scrnIndex? */
++ ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
++ int fmt,i;
++
++ pPPriv->format = xf86XVQueryOffscreenImages(pScreen, &pPPriv->nformat);
++ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
++ "v4l: Number of Xv formats: %d\n", pPPriv->nformat);
++ if (!pPPriv->nformat)
++ return FALSE;
++
++ for (fmt = 0; yuvlist[fmt].v4l_palette != 0; fmt++) {
++ pPPriv->pixelformat = yuvlist[fmt].v4l_palette;
++ if (-1 == SetV4LFmt(fd, pPPriv->pixelformat))
++ continue;
++ GetV4LFmt(fd, &pPPriv->pixelformat);
++ if (pPPriv->pixelformat != yuvlist[fmt].v4l_palette)
++ continue;
++ /* ... works, check available offscreen image formats now ... */
++ for (i = 0; i < pPPriv->nformat; i++) {
++ if (pPPriv->format[i].image->id == yuvlist[fmt].xv_id &&
++ pPPriv->format[i].image->format == yuvlist[fmt].xv_format) {
++ /* ... match found, good. */
++ pPPriv->yuv_format = yuvlist[fmt].v4l_palette;
++ pPPriv->myfmt = pPPriv->format+i;
++ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
++ "v4l[%s]: using hw video scaling [%4.4s].\n",
++ dev,(char*)&(pPPriv->format[i].image->id));
++ return TRUE;
++ }
++ }
++ }
++ return TRUE;
++}
++
+ static int V4lOpenDevice(PortPrivPtr pPPriv, ScrnInfoPtr pScrn)
+ {
+ static int first = 1;
+
++#if 0
++ /*
++ * It may be a good idea to probe here, but this would break
++ * some things, as initialization uses yuv_format
++ */
++ if (!pPPriv->yuv_format && first)
++ v4l_check_yuv(pScrn, pPPriv, V4L_NAME, V4L_FD);
++#endif
+ if (-1 == V4L_FD) {
+- V4L_FD = open(V4L_NAME, O_RDWR, 0);
++ V4L_FD = open(V4L_NAME, O_RDWR, 0);
+
+- pPPriv->rgb_fbuf.width = pScrn->virtualX;
+- pPPriv->rgb_fbuf.height = pScrn->virtualY;
+- pPPriv->rgb_fbuf.depth = pScrn->bitsPerPixel;
+- pPPriv->rgb_fbuf.bytesperline = pScrn->displayWidth * ((pScrn->bitsPerPixel + 7)/8);
+- pPPriv->rgb_fbuf.base = (pointer)(pScrn->memPhysBase + pScrn->fbOffset);
+- if (first) {
+- first = 0;
+- xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
+- "v4l: memPhysBase=0x%lx\n", pScrn->memPhysBase);
+- }
++ if (-1 == V4L_FD)
++ return errno;
+
+- switch (pScrn->bitsPerPixel) {
+- case 16:
+- if (pScrn->weight.green == 5) {
+- pPPriv->rgbpalette = VIDEO_PALETTE_RGB555;
+- pPPriv->rgbdepth = 16;
+- } else {
+- pPPriv->rgbpalette = VIDEO_PALETTE_RGB565;
+- pPPriv->rgbdepth = 16;
+- }
+- break;
+- case 24:
+- pPPriv->rgbpalette = VIDEO_PALETTE_RGB24;
+- pPPriv->rgbdepth = 24;
+- break;
+- case 32:
+- pPPriv->rgbpalette = VIDEO_PALETTE_RGB32;
+- pPPriv->rgbdepth = 32;
+- break;
+- }
++ if (-1 == ioctl(V4L_FD, VIDIOC_G_FBUF, &pPPriv->rgb_fbuf)) {
++ xf86Msg(X_ERROR, "v4l: Error %d: Can't get FBUF\n", errno);
++ return errno;
++ }
++ pPPriv->rgb_fbuf.fmt.width = pScrn->virtualX;
++ pPPriv->rgb_fbuf.fmt.height = pScrn->virtualY;
++ pPPriv->rgb_fbuf.fmt.bytesperline = pScrn->displayWidth * ((pScrn->bitsPerPixel + 7)/8);
++ pPPriv->rgb_fbuf.base = (pointer)(pScrn->memPhysBase + pScrn->fbOffset);
++ if (first) {
++ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
++ "v4l: memPhysBase=0x%lx\n", pScrn->memPhysBase);
++ first = 0;
++ }
++
++ switch (pScrn->bitsPerPixel) {
++ case 16:
++ if (pScrn->weight.green == 5) {
++ pPPriv->rgb_fbuf.fmt.pixelformat = V4L2_PIX_FMT_RGB555;
++ } else {
++ pPPriv->rgb_fbuf.fmt.pixelformat = V4L2_PIX_FMT_RGB565;
++ }
++ break;
++ case 24:
++ pPPriv->rgb_fbuf.fmt.pixelformat = V4L2_PIX_FMT_BGR24;
++ break;
++ case 32:
++ pPPriv->rgb_fbuf.fmt.pixelformat = V4L2_PIX_FMT_BGR32;
++ break;
++ }
+ }
+
+- if (-1 == V4L_FD)
+- return errno;
+-
+ V4L_REF++;
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
+- "Xv/open: refcount=%d\n",V4L_REF));
++ "Xv/open: refcount=%d\n",V4L_REF));
+
+ return 0;
+ }
+@@ -267,10 +457,10 @@ static void V4lCloseDevice(PortPrivPtr p
+ {
+ V4L_REF--;
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
+- "Xv/close: refcount=%d\n",V4L_REF));
++ "Xv/close: refcount=%d\n",V4L_REF));
+ if (0 == V4L_REF && -1 != V4L_FD) {
+- close(V4L_FD);
+- V4L_FD = -1;
++ close(V4L_FD);
++ V4L_FD = -1;
+ }
+ }
+
+@@ -280,8 +470,10 @@ V4lPutVideo(ScrnInfoPtr pScrn,
+ short vid_w, short vid_h, short drw_w, short drw_h,
+ RegionPtr clipBoxes, pointer data, DrawablePtr pDraw)
+ {
++ struct v4l2_format fmt;
++
+ PortPrivPtr pPPriv = (PortPrivPtr) data;
+- struct video_clip *clip;
++ struct v4l2_clip *clip;
+ BoxPtr pBox;
+ RegionRec newReg;
+ BoxRec newBox;
+@@ -291,179 +483,214 @@ V4lPutVideo(ScrnInfoPtr pScrn,
+
+ /* Open a file handle to the device */
+ if (VIDEO_OFF == pPPriv->VideoOn) {
+- if (V4lOpenDevice(pPPriv, pScrn))
+- return Success;
++ if (V4lOpenDevice(pPPriv, pScrn))
++ return Success;
+ }
+
+ if (0 != pPPriv->yuv_format) {
+- DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/PV yuv\n"));
+- width = pPPriv->enc[pPPriv->cenc].width;
++ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/PV yuv\n"));
++ width = pPPriv->enc[pPPriv->cenc].width;
+ height = pPPriv->enc[pPPriv->cenc].height/2; /* no interlace */
+- if (drw_w < width)
+- width = drw_w;
+- if (drw_h < height)
+- height = drw_h;
+- if ((height != pPPriv->yuv_height) || (width != pPPriv->yuv_width)) {
+- /* new size -- free old surface */
+- DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, " surface resize\n"));
+- if (pPPriv->surface) {
+- pPPriv->VideoOn = VIDEO_OFF;
+- pPPriv->myfmt->stop(pPPriv->surface);
+- pPPriv->myfmt->free_surface(pPPriv->surface);
+- xfree(pPPriv->surface);
+- pPPriv->surface = NULL;
+- }
+- pPPriv->yuv_width = width;
+- pPPriv->yuv_height = height;
+- }
+- if (!pPPriv->surface) {
+- /* allocate + setup offscreen surface */
+- if (NULL == (pPPriv->surface = xalloc(sizeof(XF86SurfaceRec))))
+- return FALSE;
+- if (Success != pPPriv->myfmt->alloc_surface
+- (pScrn,pPPriv->myfmt->image->id,
+- pPPriv->yuv_width,pPPriv->yuv_height,pPPriv->surface)) {
+- xfree(pPPriv->surface);
+- pPPriv->surface = NULL;
+- goto fallback_to_rgb;
+- }
+- pPPriv->yuv_fbuf.width = pPPriv->surface->width;
+- pPPriv->yuv_fbuf.height = pPPriv->surface->height;
+- pPPriv->yuv_fbuf.depth = 16;
+- pPPriv->yuv_fbuf.bytesperline = pPPriv->surface->pitches[0];
+- pPPriv->yuv_fbuf.base =
+- (pointer)(pScrn->memPhysBase + pPPriv->surface->offsets[0]);
+- DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, " surface: %p+%d = %p, %dx%d, pitch %d\n",
+- pScrn->memPhysBase,pPPriv->surface->offsets[0],
+- pScrn->memPhysBase+pPPriv->surface->offsets[0],
+- pPPriv->surface->width,pPPriv->surface->height,
+- pPPriv->surface->pitches[0]));
+- pPPriv->yuv_win.width = pPPriv->surface->width;
+- pPPriv->yuv_win.height = pPPriv->surface->height;
+- }
++ if (drw_w < width)
++ width = drw_w;
++ if (drw_h < height)
++ height = drw_h;
++ if ((height != pPPriv->yuv_height) || (width != pPPriv->yuv_width)) {
++ /* new size -- free old surface */
++ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, " surface resize\n"));
++ if (pPPriv->surface) {
++ pPPriv->VideoOn = VIDEO_OFF;
++ pPPriv->myfmt->stop(pPPriv->surface);
++ pPPriv->myfmt->free_surface(pPPriv->surface);
++ free(pPPriv->surface);
++ pPPriv->surface = NULL;
++ }
++ pPPriv->yuv_width = width;
++ pPPriv->yuv_height = height;
++ }
++ if (!pPPriv->surface) {
++ /* allocate + setup offscreen surface */
++ if (NULL == (pPPriv->surface = malloc(sizeof(XF86SurfaceRec))))
++ return FALSE;
++ if (Success != pPPriv->myfmt->alloc_surface
++ (pScrn,pPPriv->myfmt->image->id,
++ pPPriv->yuv_width,pPPriv->yuv_height,pPPriv->surface)) {
++ free(pPPriv->surface);
++ pPPriv->surface = NULL;
++ goto fallback_to_rgb;
++ }
+
+- /* program driver */
+- if (-1 == ioctl(V4L_FD,VIDIOCSFBUF,&(pPPriv->yuv_fbuf)))
+- perror("ioctl VIDIOCSFBUF");
+- if (-1 == ioctl(V4L_FD,VIDIOCGPICT,&pPPriv->pict))
+- perror("ioctl VIDIOCGPICT");
+- pPPriv->pict.palette = pPPriv->yuv_format;
+- pPPriv->pict.depth = 16;
+- if (-1 == ioctl(V4L_FD,VIDIOCSPICT,&pPPriv->pict))
+- perror("ioctl VIDIOCSPICT");
+- if (-1 == ioctl(V4L_FD,VIDIOCSWIN,&(pPPriv->yuv_win)))
+- perror("ioctl VIDIOCSWIN");
+- if (-1 == ioctl(V4L_FD, VIDIOCCAPTURE, &one))
+- perror("ioctl VIDIOCCAPTURE(1)");
++ if (-1 == ioctl(V4L_FD, VIDIOC_G_FBUF, &pPPriv->yuv_fbuf)) {
++ xf86Msg(X_ERROR, "v4l: Error %d: Can't get FBUF\n", errno);
++ return errno;
++ }
++ pPPriv->yuv_fbuf.fmt.width = pPPriv->surface->width;
++ pPPriv->yuv_fbuf.fmt.height = pPPriv->surface->height;
++ pPPriv->yuv_fbuf.fmt.bytesperline = pPPriv->surface->pitches[0];
++ pPPriv->yuv_fbuf.fmt.pixelformat = pPPriv->yuv_format;
++ pPPriv->yuv_fbuf.base =
++ (pointer)(pScrn->memPhysBase + pPPriv->surface->offsets[0]);
++ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
++ " surface: %p+%d = %p, %dx%d, pitch %d\n",
++ (void *)pScrn->memPhysBase, pPPriv->surface->offsets[0],
++ (void *)pScrn->memPhysBase+pPPriv->surface->offsets[0],
++ pPPriv->surface->width, pPPriv->surface->height,
++ pPPriv->surface->pitches[0]));
++ memset(&pPPriv->yuv_win, 0, sizeof(pPPriv->yuv_win));
++ pPPriv->yuv_win.w.left = 0;
++ pPPriv->yuv_win.w.top = 0;
++ pPPriv->yuv_win.w.width = pPPriv->surface->width;
++ pPPriv->yuv_win.w.height = pPPriv->surface->height;
++ }
+
+- if (0 == (pPPriv->myfmt->flags & VIDEO_INVERT_CLIPLIST)) {
+- /* invert cliplist */
+- newBox.x1 = drw_x;
+- newBox.y1 = drw_y;
+- newBox.x2 = drw_x + drw_w;
+- newBox.y2 = drw_y + drw_h;
++ /* program driver */
++ if (-1 == ioctl(V4L_FD, VIDIOC_S_FBUF, &pPPriv->yuv_fbuf)) {
++ xf86Msg(X_ERROR, "Error %d at VIDIOC_S_FBUF\n", errno);
++ return BadValue;
++ }
++ pPPriv->pixelformat = pPPriv->yuv_format;
++ if (-1 == SetV4LFmt(V4L_FD, pPPriv->pixelformat))
++ return BadValue;
+
+- if (pPPriv->myfmt->flags & VIDEO_CLIP_TO_VIEWPORT) {
+- /* trim to the viewport */
+- if(newBox.x1 < pScrn->frameX0)
+- newBox.x1 = pScrn->frameX0;
+- if(newBox.x2 > pScrn->frameX1)
+- newBox.x2 = pScrn->frameX1;
+-
+- if(newBox.y1 < pScrn->frameY0)
+- newBox.y1 = pScrn->frameY0;
+- if(newBox.y2 > pScrn->frameY1)
+- newBox.y2 = pScrn->frameY1;
+- }
++ memset(&fmt, 0, sizeof(fmt));
++ fmt.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
++ memcpy(&fmt.fmt.win, &pPPriv->yuv_win, sizeof(pPPriv->yuv_win));
++ if (-1 == ioctl(V4L_FD, VIDIOC_S_FMT, &fmt)) {
++ xf86Msg(X_ERROR, "Error %d at VIDIOC_S_FMT\n", errno);
++ return BadValue;
++ }
++ if (-1 == ioctl(V4L_FD, VIDIOC_OVERLAY, &one)) {
++ xf86Msg(X_ERROR, "v4l: Error %d while enabling Overlay\n", errno);
++ return BadValue;
++ }
+
+- REGION_INIT(pScrn->pScreen, &newReg, &newBox, 1);
+- REGION_SUBTRACT(pScrn->pScreen, &newReg, &newReg, clipBoxes);
+- clipBoxes = &newReg;
+- }
+-
+- /* start overlay */
+- DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
+- "over: - %d,%d -> %d,%d (%dx%d) (yuv=%dx%d)\n",
+- drw_x, drw_y,
+- drw_x+drw_w, drw_y+drw_h,
+- drw_w, drw_h,
+- pPPriv->surface->width,pPPriv->surface->height));
+- pPPriv->myfmt->display(pPPriv->surface,
+- 0, 0, drw_x, drw_y,
+- pPPriv->surface->width,
+- pPPriv->surface->height,
+- drw_w, drw_h,
+- clipBoxes);
+- if (0 == (pPPriv->myfmt->flags & VIDEO_INVERT_CLIPLIST)) {
+- REGION_UNINIT(pScrn->pScreen, &newReg);
+- }
+- pPPriv->VideoOn = VIDEO_YUV;
+- return Success;
++ if (0 == (pPPriv->myfmt->flags & VIDEO_INVERT_CLIPLIST)) {
++ /* invert cliplist */
++ newBox.x1 = drw_x;
++ newBox.y1 = drw_y;
++ newBox.x2 = drw_x + drw_w;
++ newBox.y2 = drw_y + drw_h;
++
++ if (pPPriv->myfmt->flags & VIDEO_CLIP_TO_VIEWPORT) {
++ /* trim to the viewport */
++ if(newBox.x1 < pScrn->frameX0)
++ newBox.x1 = pScrn->frameX0;
++ if(newBox.x2 > pScrn->frameX1)
++ newBox.x2 = pScrn->frameX1;
++
++ if(newBox.y1 < pScrn->frameY0)
++ newBox.y1 = pScrn->frameY0;
++ if(newBox.y2 > pScrn->frameY1)
++ newBox.y2 = pScrn->frameY1;
++ }
++
++ REGION_INIT(pScrn->pScreen, &newReg, &newBox, 1);
++ REGION_SUBTRACT(pScrn->pScreen, &newReg, &newReg, clipBoxes);
++ clipBoxes = &newReg;
++ }
++
++ /* start overlay */
++ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
++ "over: - %d,%d -> %d,%d (%dx%d) (yuv=%dx%d)\n",
++ drw_x, drw_y,
++ drw_x+drw_w, drw_y+drw_h,
++ drw_w, drw_h,
++ pPPriv->surface->width,pPPriv->surface->height));
++ pPPriv->myfmt->display(pPPriv->surface,
++ 0, 0, drw_x, drw_y,
++ pPPriv->surface->width,
++ pPPriv->surface->height,
++ drw_w, drw_h,
++ clipBoxes);
++ if (0 == (pPPriv->myfmt->flags & VIDEO_INVERT_CLIPLIST)) {
++ REGION_UNINIT(pScrn->pScreen, &newReg);
++ }
++ pPPriv->VideoOn = VIDEO_YUV;
++ return Success;
+ }
+
+- fallback_to_rgb:
++fallback_to_rgb:
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/PV rgb\n"));
+ /* FIXME: vid-* is ignored for now, not supported by v4l */
+
+ dw = (drw_w < pPPriv->enc[pPPriv->cenc].width) ?
+- drw_w : pPPriv->enc[pPPriv->cenc].width;
++ drw_w : pPPriv->enc[pPPriv->cenc].width;
+ dh = (drw_h < pPPriv->enc[pPPriv->cenc].height) ?
+- drw_h : pPPriv->enc[pPPriv->cenc].height;
++ drw_h : pPPriv->enc[pPPriv->cenc].height;
+ /* if the window is too big, center the video */
+ dx = drw_x + (drw_w - dw)/2;
+ dy = drw_y + (drw_h - dh)/2;
+ /* bttv prefeares aligned addresses */
+ dx &= ~3;
+- if (dx < drw_x) dx += 4;
+- if (dx+dw > drw_x+drw_w) dw -= 4;
++ if (dx < drw_x)
++ dx += 4;
++ if (dx+dw > drw_x+drw_w)
++ dw -= 4;
+
+ /* window */
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, " win: %dx%d+%d+%d\n",
+- drw_w,drw_h,drw_x,drw_y));
++ drw_w,drw_h,drw_x,drw_y));
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, " use: %dx%d+%d+%d\n",
+- dw,dh,dx,dy));
+- pPPriv->rgb_win.x = dx;
+- pPPriv->rgb_win.y = dy;
+- pPPriv->rgb_win.width = dw;
+- pPPriv->rgb_win.height = dh;
+- pPPriv->rgb_win.flags = 0;
+-
++ dw,dh,dx,dy));
++ memset(&pPPriv->rgb_win, 0, sizeof(pPPriv->rgb_win));
++ pPPriv->rgb_win.w.left = dx;
++ pPPriv->rgb_win.w.top = dy;
++ pPPriv->rgb_win.w.width = dw;
++ pPPriv->rgb_win.w.height = dh;
++
+ /* clipping */
+ if (pPPriv->rgb_win.clips) {
+- xfree(pPPriv->rgb_win.clips);
+- pPPriv->rgb_win.clips = NULL;
++ free(pPPriv->rgb_win.clips);
++ pPPriv->rgb_win.clips = NULL;
+ }
+ pPPriv->rgb_win.clipcount = REGION_NUM_RECTS(clipBoxes);
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2," clip: have #%d\n",
+- pPPriv->rgb_win.clipcount));
++ pPPriv->rgb_win.clipcount));
+ if (0 != pPPriv->rgb_win.clipcount) {
+- pPPriv->rgb_win.clips = xalloc(pPPriv->rgb_win.clipcount*sizeof(struct video_clip));
+- if (NULL != pPPriv->rgb_win.clips) {
+- memset(pPPriv->rgb_win.clips,0,pPPriv->rgb_win.clipcount*sizeof(struct video_clip));
+- pBox = REGION_RECTS(clipBoxes);
+- clip = pPPriv->rgb_win.clips;
+- for (i = 0; i < REGION_NUM_RECTS(clipBoxes); i++, pBox++, clip++) {
+- clip->x = pBox->x1 - dx;
+- clip->y = pBox->y1 - dy;
+- clip->width = pBox->x2 - pBox->x1;
+- clip->height = pBox->y2 - pBox->y1;
+- }
+- }
++ pPPriv->rgb_win.clips = malloc(pPPriv->rgb_win.clipcount*sizeof(struct v4l2_clip));
++ if (NULL != pPPriv->rgb_win.clips) {
++ memset(pPPriv->rgb_win.clips,0,pPPriv->rgb_win.clipcount*sizeof(struct v4l2_clip));
++ pBox = REGION_RECTS(clipBoxes);
++ clip = pPPriv->rgb_win.clips;
++
++ /*
++ * FIXME: This code currently does nothing, as we don't emulate
++ * The V4L1 clipping stuff
++ */
++ for (i = 0; i < REGION_NUM_RECTS(clipBoxes); i++, pBox++, clip++) {
++ clip->c.left = pBox->x1 - dx;
++ clip->c.top = pBox->y1 - dy;
++ clip->c.width = pBox->x2 - pBox->x1;
++ clip->c.height = pBox->y2 - pBox->y1;
++ }
++ }
+ }
+
+ /* start */
+- if (-1 == ioctl(V4L_FD,VIDIOCSFBUF,&(pPPriv->rgb_fbuf)))
+- perror("ioctl VIDIOCSFBUF");
+- if (-1 == ioctl(V4L_FD,VIDIOCGPICT,&pPPriv->pict))
+- perror("ioctl VIDIOCGPICT");
+- pPPriv->pict.palette = pPPriv->rgbpalette;
+- pPPriv->pict.depth = pPPriv->rgbdepth;
+- if (-1 == ioctl(V4L_FD,VIDIOCSPICT,&pPPriv->pict))
+- perror("ioctl VIDIOCSPICT");
+- if (-1 == ioctl(V4L_FD,VIDIOCSWIN,&(pPPriv->rgb_win)))
+- perror("ioctl VIDIOCSWIN");
+- if (-1 == ioctl(V4L_FD, VIDIOCCAPTURE, &one))
+- perror("ioctl VIDIOCCAPTURE(1)");
++ if (-1 == ioctl(V4L_FD, VIDIOC_S_FBUF, &pPPriv->rgb_fbuf)) {
++ xf86Msg(X_ERROR, "Error %d at VIDIOC_S_FBUF\n", errno);
++ return BadValue;
++ }
++ if (-1 == GetV4LFmt(V4L_FD, &pPPriv->pixelformat)) {
++ xf86Msg(X_ERROR, "Error %d getting pixelformat\n", errno);
++ return BadValue;
++ }
++ pPPriv->pixelformat = pPPriv->rgb_fbuf.fmt.pixelformat;
++ if (-1 == SetV4LFmt(V4L_FD, pPPriv->pixelformat)) {
++ xf86Msg(X_ERROR, "Error %d getting pixelformat\n", errno);
++ return BadValue;
++ }
++ memset(&fmt, 0, sizeof(fmt));
++ fmt.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
++ memcpy(&fmt.fmt.win, &pPPriv->rgb_win, sizeof(pPPriv->rgb_win));
++ if (-1 == ioctl(V4L_FD, VIDIOC_S_FMT, &fmt)) {
++ xf86Msg(X_ERROR, "Error %d at VIDIOC_S_FMT\n", errno);
++ return BadValue;
++ }
++ if (-1 == ioctl(V4L_FD, VIDIOC_OVERLAY, &one)) {
++ xf86Msg(X_ERROR, "v4l: Error %d while enabling Overlay\n", errno);
++ return BadValue;
++ }
+ pPPriv->VideoOn = VIDEO_RGB;
+
+ return Success;
+@@ -476,7 +703,7 @@ V4lPutStill(ScrnInfoPtr pScrn,
+ RegionPtr clipBoxes, pointer data, DrawablePtr pDraw)
+ {
+ #if 0
+- PortPrivPtr pPPriv = (PortPrivPtr) data;
++ PortPrivPtr pPPriv = (PortPrivPtr) data;
+ #endif
+
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/PS\n"));
+@@ -488,177 +715,152 @@ V4lPutStill(ScrnInfoPtr pScrn,
+ static void
+ V4lStopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown)
+ {
+- PortPrivPtr pPPriv = (PortPrivPtr) data;
++ PortPrivPtr pPPriv = (PortPrivPtr) data;
+ int zero=0;
+
+ if (VIDEO_OFF == pPPriv->VideoOn) {
+- DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
+- "Xv/StopVideo called with video already off\n"));
+- return;
++ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
++ "Xv/StopVideo called with video already off\n"));
++ return;
+ }
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/StopVideo shutdown=%d\n",shutdown));
+
+ if (!shutdown) {
+- /* just reclipping, we have to stop DMA transfers to the visible screen */
+- if (VIDEO_RGB == pPPriv->VideoOn) {
+- if (-1 == ioctl(V4L_FD, VIDIOCCAPTURE, &zero))
+- perror("ioctl VIDIOCCAPTURE(0)");
+- pPPriv->VideoOn = VIDEO_RECLIP;
+- }
++ /* just reclipping, we have to stop DMA transfers to the visible screen */
++ if (VIDEO_RGB == pPPriv->VideoOn) {
++ if (-1 == ioctl(V4L_FD, VIDIOC_OVERLAY, &zero))
++ xf86Msg(X_ERROR, "v4l: Error %d while disabling Overlay\n", errno);
++ pPPriv->VideoOn = VIDEO_RECLIP;
++ }
+ } else {
+- /* video stop - turn off and free everything */
+- if (VIDEO_YUV == pPPriv->VideoOn) {
+- pPPriv->myfmt->stop(pPPriv->surface);
+- pPPriv->myfmt->free_surface(pPPriv->surface);
+- xfree(pPPriv->surface);
+- pPPriv->surface = NULL;
+- }
+- if (-1 == ioctl(V4L_FD, VIDIOCCAPTURE, &zero))
+- perror("ioctl VIDIOCCAPTURE(0)");
+-
+- V4lCloseDevice(pPPriv,pScrn);
+- pPPriv->VideoOn = VIDEO_OFF;
++ /* video stop - turn off and free everything */
++ if (VIDEO_YUV == pPPriv->VideoOn) {
++ pPPriv->myfmt->stop(pPPriv->surface);
++ pPPriv->myfmt->free_surface(pPPriv->surface);
++ free(pPPriv->surface);
++ pPPriv->surface = NULL;
++ }
++ if (-1 == ioctl(V4L_FD, VIDIOC_OVERLAY, &zero))
++ xf86Msg(X_ERROR, "v4l: Error %d while disabling Overlay\n", errno);
++
++ V4lCloseDevice(pPPriv,pScrn);
++ pPPriv->VideoOn = VIDEO_OFF;
+ }
+ }
+
+-/* v4l uses range 0 - 65535; Xv uses -1000 - 1000 */
+-static int
+-v4l_to_xv(int val) {
+- val = val * 2000 / 65536 - 1000;
+- if (val < -1000) val = -1000;
+- if (val > 1000) val = 1000;
+- return val;
+-}
+-static int
+-xv_to_v4l(int val) {
+- val = val * 65536 / 2000 + 32768;
+- if (val < -0) val = 0;
+- if (val > 65535) val = 65535;
+- return val;
+-}
+-
+ static int
+ V4lSetPortAttribute(ScrnInfoPtr pScrn,
+ Atom attribute, INT32 value, pointer data)
+ {
+- PortPrivPtr pPPriv = (PortPrivPtr) data;
+- struct video_channel chan;
+- int ret = Success;
++ struct v4l2_control ctrl;
++ PortPrivPtr pPPriv = (PortPrivPtr) data;
++ int i, ret = BadValue;
+
+ if (V4lOpenDevice(pPPriv, pScrn))
+- return Success;
++ return Success;
+
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/SPA %d, %d\n",
+- attribute, value));
++ (int)attribute, (int)value));
+
+ if (-1 == V4L_FD) {
+- ret = Success;
++ ret = Success;
+ } else if (attribute == xvEncoding) {
+- if (value >= 0 && value < pPPriv->nenc) {
+- pPPriv->cenc = value;
+- chan.channel = pPPriv->input[value];
+- chan.norm = pPPriv->norm[value];
+- if (-1 == ioctl(V4L_FD,VIDIOCSCHAN,&chan))
+- perror("ioctl VIDIOCSCHAN");
+- } else {
+- ret = BadValue;
+- }
+- } else if (attribute == xvBrightness ||
+- attribute == xvContrast ||
+- attribute == xvSaturation ||
+- attribute == xvHue) {
+- ioctl(V4L_FD,VIDIOCGPICT,&pPPriv->pict);
+- if (attribute == xvBrightness) pPPriv->pict.brightness = xv_to_v4l(value);
+- if (attribute == xvContrast) pPPriv->pict.contrast = xv_to_v4l(value);
+- if (attribute == xvSaturation) pPPriv->pict.colour = xv_to_v4l(value);
+- if (attribute == xvHue) pPPriv->pict.hue = xv_to_v4l(value);
+- if (-1 == ioctl(V4L_FD,VIDIOCSPICT,&pPPriv->pict))
+- perror("ioctl VIDIOCSPICT");
+- } else if (attribute == xvMute ||
+- attribute == xvVolume) {
+- ioctl(V4L_FD,VIDIOCGAUDIO,&pPPriv->audio);
+- if (attribute == xvMute) {
+- if (value)
+- pPPriv->audio.flags |= VIDEO_AUDIO_MUTE;
+- else
+- pPPriv->audio.flags &= ~VIDEO_AUDIO_MUTE;
+- } else if (attribute == xvVolume) {
+- if (pPPriv->audio.flags & VIDEO_AUDIO_VOLUME)
+- pPPriv->audio.volume = xv_to_v4l(value);
+- } else {
+- ret = BadValue;
+- }
+- if (ret != BadValue)
+- if (-1 == ioctl(V4L_FD,VIDIOCSAUDIO,&pPPriv->audio))
+- perror("ioctl VIDIOCSAUDIO");
++ if (value < 0 || value >= pPPriv->nenc)
++ goto err;
++ if (ioctl(V4L_FD, VIDIOC_S_INPUT, &pPPriv->input[value]) == -1) {
++ xf86Msg(X_ERROR, "v4l: Error %d while setting input\n", errno);
++ goto err;
++ }
++ if (ioctl(V4L_FD, VIDIOC_S_STD, &pPPriv->norm[value]) == -1) {
++ xf86Msg(X_ERROR, "v4l: Error %d while setting standard\n", errno);
++ goto err;
++ }
++ pPPriv->cenc = value;
++ ret = Success;
+ } else if (attribute == xvFreq) {
+- unsigned long freq = value;
+- if (-1 == ioctl(V4L_FD,VIDIOCSFREQ,&freq))
+- perror("ioctl VIDIOCSFREQ");
+- } else if (0 != pPPriv->yuv_format &&
+- pPPriv->myfmt->setAttribute) {
+- /* not mine -> pass to yuv scaler driver */
+- ret = pPPriv->myfmt->setAttribute(pScrn, attribute, value);
++ struct v4l2_frequency freq;
++ memset(&freq, 0, sizeof(freq));
++ ioctl(V4L_FD, VIDIOC_G_FREQUENCY, &freq);
++ freq.frequency = value;
++ if (ioctl(V4L_FD, VIDIOC_S_FREQUENCY, &freq) == -1)
++ xf86Msg(X_ERROR, "v4l: Error %d while setting frequency\n", errno);
++ else
++ ret = Success;
+ } else {
+- ret = BadValue;
++ for (i = 0; i < pPPriv->n_qctrl; i++)
++ if (pPPriv->XvV4LCtrl[i].xv == attribute)
++ break;
++ if (i == pPPriv->n_qctrl) {
++ /* not mine -> pass to yuv scaler driver */
++ if (0 != pPPriv->yuv_format && pPPriv->myfmt->setAttribute)
++ ret = pPPriv->myfmt->setAttribute(pScrn, attribute, value);
++ else
++ ret = BadMatch;
++ goto err;
++ }
++ if (pPPriv->XvV4LCtrl[i].qctrl.flags & V4L2_CTRL_FLAG_DISABLED)
++ goto err;
++ ctrl.id = pPPriv->XvV4LCtrl[i].qctrl.id;
++ ctrl.value = value;
++ if (ioctl(V4L_FD, VIDIOC_S_CTRL, &ctrl) != 1)
++ ret = Success;
+ }
+
++err:
+ V4lCloseDevice(pPPriv,pScrn);
+ return ret;
+ }
+
+ static int
+-V4lGetPortAttribute(ScrnInfoPtr pScrn,
++V4lGetPortAttribute(ScrnInfoPtr pScrn,
+ Atom attribute, INT32 *value, pointer data)
+ {
++ struct v4l2_control ctrl;
+ PortPrivPtr pPPriv = (PortPrivPtr) data;
+- int ret = Success;
++ int i, ret = BadValue;
+
+ if (V4lOpenDevice(pPPriv, pScrn))
+- return Success;
++ return Success;
+
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/GPA %d\n",
+- attribute));
++ (int)attribute));
+
+ if (-1 == V4L_FD) {
+- ret = Success;
++ ret = Success;
+ } else if (attribute == xvEncoding) {
+- *value = pPPriv->cenc;
+- } else if (attribute == xvBrightness ||
+- attribute == xvContrast ||
+- attribute == xvSaturation ||
+- attribute == xvHue) {
+- ioctl(V4L_FD,VIDIOCGPICT,&pPPriv->pict);
+- if (attribute == xvBrightness) *value = v4l_to_xv(pPPriv->pict.brightness);
+- if (attribute == xvContrast) *value = v4l_to_xv(pPPriv->pict.contrast);
+- if (attribute == xvSaturation) *value = v4l_to_xv(pPPriv->pict.colour);
+- if (attribute == xvHue) *value = v4l_to_xv(pPPriv->pict.hue);
+- } else if (attribute == xvMute ||
+- attribute == xvVolume) {
+- ioctl(V4L_FD,VIDIOCGAUDIO,&pPPriv->audio);
+- if (attribute == xvMute) {
+- *value = (pPPriv->audio.flags & VIDEO_AUDIO_MUTE) ? 1 : 0;
+- } else if (attribute == xvVolume) {
+- if (pPPriv->audio.flags & VIDEO_AUDIO_VOLUME)
+- *value = v4l_to_xv(pPPriv->audio.volume);
+- } else {
+- ret = BadValue;
+- }
++ *value = pPPriv->cenc;
++ ret = Success;
+ } else if (attribute == xvFreq) {
+- unsigned long freq;
+- ioctl(V4L_FD,VIDIOCGFREQ,&freq);
+- *value = freq;
+- } else if (0 != pPPriv->yuv_format &&
+- pPPriv->myfmt->getAttribute) {
+- /* not mine -> pass to yuv scaler driver */
+- ret = pPPriv->myfmt->getAttribute(pScrn, attribute, value);
++ struct v4l2_frequency freq;
++ memset(&freq, 0, sizeof(freq));
++ if (ioctl(V4L_FD, VIDIOC_G_FREQUENCY, &freq) != -1) {
++ *value = freq.frequency;
++ ret = Success;
++ }
+ } else {
+- ret = BadValue;
++ for (i = 0; i < pPPriv->n_qctrl; i++)
++ if (pPPriv->XvV4LCtrl[i].xv == attribute)
++ break;
++ if (i == pPPriv->n_qctrl) {
++ /* not mine -> pass to yuv scaler driver */
++ if (0 != pPPriv->yuv_format && pPPriv->myfmt->getAttribute)
++ ret = pPPriv->myfmt->getAttribute(pScrn, attribute, value);
++ else
++ ret = BadMatch;
++ goto err;
++ }
++ if (pPPriv->XvV4LCtrl[i].qctrl.flags & V4L2_CTRL_FLAG_DISABLED)
++ goto err;
++ ctrl.id = pPPriv->XvV4LCtrl[i].qctrl.id;
++ if (ioctl(V4L_FD, VIDIOC_G_CTRL, &ctrl) != -1) {
++ *value = ctrl.value;
++ ret = Success;
++ }
+ }
++ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/GPA %d, %d\n",
++ (int)attribute, (int)*value));
+
+- DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/GPA %d, %d\n",
+- attribute, *value));
+-
++err:
+ V4lCloseDevice(pPPriv,pScrn);
+ return ret;
+ }
+@@ -673,15 +875,15 @@ V4lQueryBestSize(ScrnInfoPtr pScrn, Bool
+ int maxy = pPPriv->enc[pPPriv->cenc].height;
+
+ if (0 != pPPriv->yuv_format) {
+- *p_w = pPPriv->myfmt->max_width;
+- *p_h = pPPriv->myfmt->max_height;
++ *p_w = pPPriv->myfmt->max_width;
++ *p_h = pPPriv->myfmt->max_height;
+ } else {
+- *p_w = (drw_w < maxx) ? drw_w : maxx;
+- *p_h = (drw_h < maxy) ? drw_h : maxy;
++ *p_w = (drw_w < maxx) ? drw_w : maxx;
++ *p_h = (drw_h < maxy) ? drw_h : maxy;
+ }
+
+ DEBUG(xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2, "Xv/BS %d %dx%d %dx%d\n",
+- pPPriv->cenc,drw_w,drw_h,*p_w,*p_h));
++ pPPriv->cenc,drw_w,drw_h,*p_w,*p_h));
+ }
+
+ static const OptionInfoRec *
+@@ -693,132 +895,198 @@ V4LAvailableOptions(int chipid, int busi
+ static void
+ V4LIdentify(int flags)
+ {
+- xf86Msg(X_INFO, "v4l driver for Video4Linux\n");
+-}
++ xf86Msg(X_INFO, "v4l driver for Video4Linux overlay mode (V4L2)\n");
++}
+
+ static char*
+ fixname(char *str)
+ {
+ int s,d;
+ for (s=0, d=0;; s++) {
+- if (str[s] == '-')
+- continue;
+- str[d++] = tolower(str[s]);
+- if (0 == str[s])
+- break;
++ if (str[s] == '-')
++ continue;
++ str[d++] = tolower(str[s]);
++ if (0 == str[s])
++ break;
+ }
+ return str;
+ }
+
+ static int
+-v4l_add_enc(XF86VideoEncodingPtr enc, int i,
+- char *norm, char *input, int width, int height, int n, int d)
++AddV4LEnc(XF86VideoEncodingPtr enc, int entry,
++ char *norm, char *input, int width, int height, int n, int d)
+ {
+- enc[i].id = i;
+- enc[i].name = xalloc(strlen(norm)+strlen(input)+2);
+- if (NULL == enc[i].name)
+- return -1;
+- enc[i].width = width;
+- enc[i].height = height;
+- enc[i].rate.numerator = n;
+- enc[i].rate.denominator = d;
+- sprintf(enc[i].name,"%s-%s",norm,fixname(input));
++ enc->id = entry;
++ enc->name = malloc(strlen(norm) + strlen(input) + 2);
++ if (!enc->name)
++ return -1;
++
++ enc->width = width;
++ enc->height = height;
++ enc->rate.numerator = n;
++ enc->rate.denominator = d * 2; /* Refresh rate is twice, due to interlace */
++ sprintf(enc->name,"%s-%s",norm,fixname(input));
++
++ xf86Msg(X_INFO, "v4l: adding input %s, %dx%d %d fps\n",
++ enc->name, enc->width, enc->height, (d + n - 1)/n);
++
+ return 0;
+ }
+
++static int
++V4LGetStd(PortPrivPtr p, int fd)
++{
++ struct v4l2_standard standard;
++ int entries = 0;
++
++ /*
++ * 128 is just an arbitrary large number. There aren't that many video stds
++ * The max value is there just to avoid an endless loop, if the driver is
++ * broken.
++ */
++ for (entries = 0; entries < 128; entries++) {
++ memset(&standard, 0, sizeof(standard));
++ standard.index = entries;
++ if (-1 == ioctl(fd,VIDIOC_ENUMSTD, &standard))
++ break;
++ p->standard = realloc(p->standard, sizeof(standard) * (entries + 1));
++ memcpy(&p->standard[entries], &standard, sizeof(standard));
++ }
++
++ /*
++ * Some webcam drivers don't implement VIDIOC_ENUMSTD. Fake it
++ * This is currently unused, as no webcam driver allows OVERLAY mode,
++ * but the code is here, in the case some webcam driver starts allowing
++ * overlay.
++ * FIXME: Webcam drivers may use VIDIOC_ENUM_FRAMESIZES and
++ * VIDIOC_ENUM_FRAMEINTERVALS ioctl's that may help to fine-tune
++ * their needs. Those ioctl's could be used here in order to better
++ * support webcams.
++ */
++ if (!entries) {
++ xf86Msg(X_INFO, "v4l: VIDIOC_ENUMSTD error %d.\n",errno);
++ p->standard = realloc(p->standard, sizeof(standard) * (entries + 1));
++ p->standard[0].id = V4L2_STD_ALL;
++ strcpy((char *)p->standard[0].name, "CAMERA");
++ p->standard[0].frameperiod.numerator = 1001;
++ p->standard[0].frameperiod.denominator = 300001;
++ p->standard[0].framelines = 480;
++ entries++;
++ }
++ return entries;
++}
++
+ static void
+-V4LBuildEncodings(PortPrivPtr p, int fd, int channels)
++V4LBuildEncodings(PortPrivPtr p, int fd)
+ {
+- static struct video_channel channel;
+- int i,entries,have_bttv,bttv_ver;
++ unsigned int inp, std, num_std;
+
+-#define BTTV_VERSION _IOR('v' , BASE_VIDIOCPRIVATE+6, int)
+- have_bttv = 0;
+- if (-1 != ioctl(fd,BTTV_VERSION,&bttv_ver))
+- have_bttv = 1;
+-
+- entries = (have_bttv ? 7 : 3) * channels;
+- p->enc = xalloc(sizeof(XF86VideoEncodingRec) * entries);
+- if (NULL == p->enc)
+- goto fail;
+- memset(p->enc,0,sizeof(XF86VideoEncodingRec) * entries);
+- p->norm = xalloc(sizeof(int) * entries);
+- if (NULL == p->norm)
+- goto fail;
+- memset(p->norm,0,sizeof(int) * entries);
+- p->input = xalloc(sizeof(int) * entries);
+- if (NULL == p->input)
+- goto fail;
+- memset(p->input,0,sizeof(int) * entries);
++ num_std = V4LGetStd(p, fd);
+
+ p->nenc = 0;
+- for (i = 0; i < channels; i++) {
+- channel.channel = i;
+- if (-1 == ioctl(fd,VIDIOCGCHAN,&channel)) {
+- perror("ioctl VIDIOCGCHAN");
+- continue;
+- }
+-
+- v4l_add_enc(p->enc, p->nenc,"PAL", channel.name, 768,576, 1,50);
+- p->norm[p->nenc] = VIDEO_MODE_PAL;
+- p->input[p->nenc] = i;
+- p->nenc++;
+-
+- v4l_add_enc(p->enc,p->nenc,"NTSC", channel.name, 640,480, 1001,60000);
+- p->norm[p->nenc] = VIDEO_MODE_NTSC;
+- p->input[p->nenc] = i;
+- p->nenc++;
+-
+- v4l_add_enc(p->enc,p->nenc,"SECAM",channel.name, 768,576, 1,50);
+- p->norm[p->nenc] = VIDEO_MODE_SECAM;
+- p->input[p->nenc] = i;
+- p->nenc++;
+
+- if (have_bttv) {
+- /* workaround for a v4l design flaw: The v4l API knows just pal,
+- ntsc and secam. But there are a few more norms (pal versions
+- with a different timings used in south america for example).
+- The bttv driver can handle these too. */
+- if (0 != v4l_add_enc(p->enc,p->nenc,"PAL-Nc",channel.name,
+- 640, 576, 1,50))
+- goto fail;
+- p->norm[p->nenc] = 3;
+- p->input[p->nenc] = i;
+- p->nenc++;
++ /*
++ * 256 is just an arbitrary large number. There aren't that many video
++ * inputs on any driver. The max value is there just to avoid an endless
++ * loop, if the driver is broken.
++ */
++ for (inp = 0; inp < 256; inp++) {
++ struct v4l2_input input;
+
+- if (0 != v4l_add_enc(p->enc,p->nenc,"PAL-M",channel.name,
+- 640, 576, 1,50))
+- goto fail;
+- p->norm[p->nenc] = 4;
+- p->input[p->nenc] = i;
+- p->nenc++;
++ memset(&input, 0, sizeof(input));
++ input.index = inp;
++ if (ioctl(fd, VIDIOC_ENUMINPUT, &input) == -1)
++ break;
+
+- if (0 != v4l_add_enc(p->enc, p->nenc,"PAL-N", channel.name,
+- 768,576, 1,50))
+- goto fail;
+- p->norm[p->nenc] = 5;
+- p->input[p->nenc] = i;
+- p->nenc++;
+-
+- if (0 != v4l_add_enc(p->enc,p->nenc,"NTSC-JP", channel.name,
+- 640,480, 1001,60000))
+- goto fail;
+- p->norm[p->nenc] = 6;
+- p->input[p->nenc] = i;
+- p->nenc++;
+- }
++ for (std = 0; std < num_std; std++) {
++ int width, height;
++
++ /*
++ * Currently, this code is not reliable, due to driver
++ * non-compliance on both saa7134 and bttv. So, instead,
++ * just use the video standard information
++ */
++#if 0
++ struct v4l2_framebuffer fbuf;
++
++ /* Some webcam drivers will fail here, but that's OK */
++ ioctl(fd, VIDIOC_S_STD, &p->standard[std].id);
++
++ memset(&fbuf, 0, sizeof(fbuf));
++ if (ioctl(fd, VIDIOC_G_FBUF, &fbuf) == -1) {
++ xf86Msg(X_INFO, "v4l: Error %d: Can't get FBUF\n", errno);
++ return;
++ }
++ height = fbuf.fmt.height;
++ width = fbuf.fmt.width;
++
++ /*
++ * If the overlay method fails, get the resolution
++ * via checking V4L2_BUF_TYPE_VIDEO_CAPTURE
++ */
++ if (!height || !width) {
++ struct v4l2_format format;
++
++ format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ if (ioctl(fd, VIDIOC_G_FMT, &format) == -1) {
++ /* Hmm... device doesn't support capture. */
++ height = p->standard[std].framelines;
++ if (height == 480)
++ width = 640;
++ else if (height == 576)
++ width = 768;
++ else
++ continue;
++ } else {
++ height = format.fmt.pix.height;
++ width = format.fmt.pix.width;
++ }
++ }
++#else
++ if (p->standard[std].id & V4L2_STD_525_60) {
++ height = 480;
++ width = 640;
++ } else {
++ height = 576;
++ width = 768;
++ }
++
++#endif
++ /* Fixup for some driver bug */
++ if ((p->standard[std].id & V4L2_STD_525_60) && (height == 576))
++ height = 480;
++
++ p->enc = realloc(p->enc, sizeof(XF86VideoEncodingRec) * (p->nenc + 1));
++ p->norm = realloc(p->norm, sizeof(int) * (p->nenc + 1));
++ p->input = realloc(p->input, sizeof(int) * (p->nenc + 1));
++ if (!p->enc || !p->norm || !p->input)
++ goto fail;
++ if (AddV4LEnc(&p->enc[p->nenc], p->nenc,
++ (char *)p->standard[std].name,
++ (char *)input.name, width, height,
++ p->standard[std].frameperiod.numerator,
++ p->standard[std].frameperiod.denominator))
++ goto fail;
++ p->norm[p->nenc] = p->standard[std].id;
++ p->input[p->nenc] = inp;
++ p->nenc++;
++ }
+ }
++
++ if (!p->nenc)
++ xf86Msg(X_ERROR, "v4l: couldn't detect any valid input/standard\n");
+ return;
+-
+- fail:
++
++fail:
++ xf86Msg(X_ERROR, "v4l: Fail to get standards: %d\n", errno);
+ if (p->input)
+- xfree(p->input);
++ free(p->input);
+ p->input = NULL;
+ if (p->norm)
+- xfree(p->norm);
++ free(p->norm);
+ p->norm = NULL;
+ if (p->enc)
+- xfree(p->enc);
++ free(p->enc);
+ p->enc = NULL;
+ p->nenc = 0;
+ }
+@@ -826,75 +1094,35 @@ V4LBuildEncodings(PortPrivPtr p, int fd,
+ /* add a attribute a list */
+ static void
+ v4l_add_attr(XF86AttributeRec **list, int *count,
+- const XF86AttributeRec *attr)
++ const XF86AttributeRec *attr)
+ {
+ XF86AttributeRec *oldlist = *list;
+ int i;
++ Atom gpa;
+
+ for (i = 0; i < *count; i++) {
+- if (0 == strcmp((*list)[i].name,attr->name)) {
+- DEBUG(xf86Msg(X_INFO, "v4l: skip dup attr %s\n",attr->name));
+- return;
+- }
++ if (0 == strcmp((*list)[i].name,attr->name)) {
++ DEBUG(xf86Msg(X_INFO, "v4l: skip dup attr %s\n",attr->name));
++ return;
++ }
+ }
+-
+- DEBUG(xf86Msg(X_INFO, "v4l: add attr %s\n",attr->name));
+- *list = xalloc((*count + 1) * sizeof(XF86AttributeRec));
++
++ *list = malloc((*count + 1) * sizeof(XF86AttributeRec));
+ if (NULL == *list) {
+- *count = 0;
+- return;
++ *count = 0;
++ return;
+ }
+ if (*count)
+- memcpy(*list, oldlist, *count * sizeof(XF86AttributeRec));
++ memcpy(*list, oldlist, *count * sizeof(XF86AttributeRec));
+ memcpy(*list + *count, attr, sizeof(XF86AttributeRec));
++
++ gpa = MAKE_ATOM((*list)[*count].name);
++ xf86Msg(X_INFO, "v4l: add attr %s (Xv/GPA %d) (%d to %d)\n",
++ attr->name, (int)gpa, attr->min_value, attr->max_value);
++
+ (*count)++;
+ }
+
+-/* setup yuv overlay + hw scaling: look if we find some common video
+- format which both v4l driver and the X-Server can handle */
+-static void v4l_check_yuv(ScrnInfoPtr pScrn, PortPrivPtr pPPriv,
+- char *dev, int fd)
+-{
+- static const struct {
+- unsigned int v4l_palette;
+- unsigned int v4l_depth;
+- unsigned int xv_id;
+- unsigned int xv_format;
+- } yuvlist[] = {
+- { VIDEO_PALETTE_YUV422, 16, 0x32595559, XvPacked },
+- { VIDEO_PALETTE_UYVY, 16, 0x59565955, XvPacked },
+- { 0 /* end of list */ },
+- };
+- ScreenPtr pScreen = screenInfo.screens[pScrn->scrnIndex];
+- int fmt,i;
+-
+- pPPriv->format = xf86XVQueryOffscreenImages(pScreen,&pPPriv->nformat);
+- for (fmt = 0; yuvlist[fmt].v4l_palette != 0; fmt++) {
+- /* check v4l ... */
+- ioctl(fd,VIDIOCGPICT,&pPPriv->pict);
+- pPPriv->pict.palette = yuvlist[fmt].v4l_palette;
+- pPPriv->pict.depth = yuvlist[fmt].v4l_depth;
+- if (-1 == ioctl(fd,VIDIOCSPICT,&pPPriv->pict))
+- continue;
+- ioctl(fd,VIDIOCGPICT,&pPPriv->pict);
+- if (pPPriv->pict.palette != yuvlist[fmt].v4l_palette)
+- continue;
+- /* ... works, check available offscreen image formats now ... */
+- for (i = 0; i < pPPriv->nformat; i++) {
+- if (pPPriv->format[i].image->id == yuvlist[fmt].xv_id &&
+- pPPriv->format[i].image->format == yuvlist[fmt].xv_format) {
+- /* ... match found, good. */
+- pPPriv->yuv_format = yuvlist[fmt].v4l_palette;
+- pPPriv->myfmt = pPPriv->format+i;
+- xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+- "v4l[%s]: using hw video scaling [%4.4s].\n",
+- dev,(char*)&(pPPriv->format[i].image->id));
+- return;
+- }
+- }
+- }
+-}
+-
+ static int
+ V4LInit(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr **adaptors)
+ {
+@@ -904,118 +1132,114 @@ V4LInit(ScrnInfoPtr pScrn, XF86VideoAdap
+ char dev[18];
+ int fd,i,j,d;
+
+- DEBUG(xf86Msg(X_INFO, "v4l: init start\n"));
++ for (i = 0, d = 0; d < MAX_V4L_DEVICES; d++) {
++ sprintf(dev, "/dev/video%d", d);
++ fd = open(dev, O_RDWR, 0);
++ if (fd == -1) {
++ sprintf(dev, "/dev/v4l/video%d", d);
++ fd = open(dev, O_RDWR, 0);
++ if (fd == -1)
++ break;
++ }
++ DEBUG(xf86Msg(X_INFO, "v4l: %s open ok\n",dev));
+
+- for (i = 0, d = 0; d < MAX_V4L_DEVICES; d++) {
+- sprintf(dev, "/dev/video%d", d);
+- fd = open(dev, O_RDWR, 0);
+- if (fd == -1) {
+- sprintf(dev, "/dev/v4l/video%d", d);
+- fd = open(dev, O_RDWR, 0);
+- if (fd == -1)
+- break;
+- }
+- DEBUG(xf86Msg(X_INFO, "v4l: %s open ok\n",dev));
++ /* our private data */
++ pPPriv = malloc(sizeof(PortPrivRec));
++ if (!pPPriv)
++ return FALSE;
++ memset(pPPriv,0,sizeof(PortPrivRec));
++ pPPriv->nr = d;
+
+- /* our private data */
+- pPPriv = xalloc(sizeof(PortPrivRec));
+- if (!pPPriv)
+- return FALSE;
+- memset(pPPriv,0,sizeof(PortPrivRec));
+- pPPriv->nr = d;
++ /* check device capabilities */
++ memset(&pPPriv->cap, 0, sizeof(&pPPriv->cap));
++ if (-1 == ioctl(fd, VIDIOC_QUERYCAP, &pPPriv->cap) ||
++ 0 == (pPPriv->cap.capabilities & V4L2_CAP_VIDEO_OVERLAY)) {
++ xf86Msg(X_ERROR, "v4l: %s: no overlay support\n",dev);
++ free(pPPriv);
++ close(fd);
++ continue;
++ }
+
+- /* check device */
+- if (-1 == ioctl(fd,VIDIOCGCAP,&pPPriv->cap) ||
+- 0 == (pPPriv->cap.type & VID_TYPE_OVERLAY)) {
+- DEBUG(xf86Msg(X_INFO, "v4l: %s: no overlay support\n",dev));
+- xfree(pPPriv);
+- close(fd);
+- continue;
+- }
+- strncpy(V4L_NAME, dev, 16);
+- V4LBuildEncodings(pPPriv,fd,pPPriv->cap.channels);
+- if (NULL == pPPriv->enc)
+- return FALSE;
+- v4l_check_yuv(pScrn,pPPriv,dev,fd);
+-
+- /* alloc VideoAdaptorRec */
+- VAR = xrealloc(VAR,sizeof(XF86VideoAdaptorPtr)*(i+1));
+- VAR[i] = xalloc(sizeof(XF86VideoAdaptorRec));
+- if (!VAR[i])
+- return FALSE;
+- memset(VAR[i],0,sizeof(XF86VideoAdaptorRec));
++ if (v4l_check_yuv(pScrn, pPPriv, dev, fd) == FALSE) {
++ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 2,
++ "Xv Overlay not supported. Can't use v4l driver\n");
++ free(pPPriv);
++ close(fd);
++ continue;
++ }
+
++ xf86Msg(X_INFO, "v4l: enabling overlay mode for %s.\n", dev);
++ strncpy(V4L_NAME, dev, 16);
++ V4LBuildEncodings(pPPriv, fd);
++ if (NULL == pPPriv->enc)
++ return FALSE;
+
+- /* build attribute list */
+- for (j = 0; j < V4L_ATTR; j++) {
+- /* video attributes */
+- v4l_add_attr(&VAR[i]->pAttributes, &VAR[i]->nAttributes,
+- &Attributes[j]);
+- }
+- if (0 == ioctl(fd,VIDIOCGAUDIO,&pPPriv->audio)) {
+- /* audio attributes */
+- if (pPPriv->audio.flags & VIDEO_AUDIO_VOLUME)
+- v4l_add_attr(&VAR[i]->pAttributes, &VAR[i]->nAttributes,
+- &VolumeAttr);
+- if (pPPriv->audio.flags & VIDEO_AUDIO_MUTABLE)
+- v4l_add_attr(&VAR[i]->pAttributes, &VAR[i]->nAttributes,
+- &MuteAttr);
+- }
+- if (pPPriv->cap.type & VID_TYPE_TUNER) {
+- /* tuner attributes */
+- v4l_add_attr(&VAR[i]->pAttributes, &VAR[i]->nAttributes,
+- &FreqAttr);
+- }
+- if (0 != pPPriv->yuv_format) {
+- /* pass throuth scaler attributes */
+- for (j = 0; j < pPPriv->myfmt->num_attributes; j++) {
+- v4l_add_attr(&VAR[i]->pAttributes, &VAR[i]->nAttributes,
+- pPPriv->myfmt->attributes+j);
+- }
+- }
+-
+-
+- /* hook in private data */
+- Private = xalloc(sizeof(DevUnion));
+- if (!Private)
+- return FALSE;
+- memset(Private,0,sizeof(DevUnion));
+- Private->ptr = (pointer)pPPriv;
+- VAR[i]->pPortPrivates = Private;
+- VAR[i]->nPorts = 1;
++ /* alloc VideoAdaptorRec */
++ VAR = realloc(VAR,sizeof(XF86VideoAdaptorPtr)*(i+1));
++ VAR[i] = malloc(sizeof(XF86VideoAdaptorRec));
++ if (!VAR[i])
++ return FALSE;
++ memset(VAR[i],0,sizeof(XF86VideoAdaptorRec));
+
+- /* init VideoAdaptorRec */
+- VAR[i]->type = XvInputMask | XvWindowMask | XvVideoMask;
+- VAR[i]->name = "video4linux";
+- VAR[i]->flags = VIDEO_INVERT_CLIPLIST;
++ /* build attribute list */
++ AddAllV4LControls(pPPriv, &VAR[i]->pAttributes, &VAR[i]->nAttributes, fd);
+
+- VAR[i]->PutVideo = V4lPutVideo;
+- VAR[i]->PutStill = V4lPutStill;
+- VAR[i]->StopVideo = V4lStopVideo;
+- VAR[i]->SetPortAttribute = V4lSetPortAttribute;
+- VAR[i]->GetPortAttribute = V4lGetPortAttribute;
+- VAR[i]->QueryBestSize = V4lQueryBestSize;
++ for (j = 0; j < V4L_ATTR; j++) {
++ /* Other video attributes */
++ v4l_add_attr(&VAR[i]->pAttributes, &VAR[i]->nAttributes,
++ &Attributes[j]);
++ }
++ if (pPPriv->cap.capabilities & V4L2_CAP_TUNER) {
++ /* tuner attributes */
++ v4l_add_attr(&VAR[i]->pAttributes, &VAR[i]->nAttributes,
++ &FreqAttr);
++ }
+
+- VAR[i]->nEncodings = pPPriv->nenc;
+- VAR[i]->pEncodings = pPPriv->enc;
+- VAR[i]->nFormats =
+- sizeof(InputVideoFormats) / sizeof(InputVideoFormats[0]);
+- VAR[i]->pFormats = InputVideoFormats;
++ /* Initialize yuv_format */
++ if (0 != pPPriv->yuv_format) {
++ /* pass throuth scaler attributes */
++ for (j = 0; j < pPPriv->myfmt->num_attributes; j++) {
++ v4l_add_attr(&VAR[i]->pAttributes, &VAR[i]->nAttributes,
++ pPPriv->myfmt->attributes+j);
++ }
++ }
+
+- if (fd != -1)
+- close(fd);
+- i++;
++ DEBUG(xf86Msg(X_INFO, "v4l: saving config into driver data\n"));
++ /* hook in private data */
++ Private = malloc(sizeof(DevUnion));
++ if (!Private)
++ return FALSE;
++ memset(Private,0,sizeof(DevUnion));
++ Private->ptr = (pointer)pPPriv;
++ VAR[i]->pPortPrivates = Private;
++ VAR[i]->nPorts = 1;
++
++ /* init VideoAdaptorRec */
++ VAR[i]->type = XvInputMask | XvWindowMask | XvVideoMask;
++ VAR[i]->name = "video4linux";
++ VAR[i]->flags = VIDEO_INVERT_CLIPLIST;
++
++ VAR[i]->PutVideo = V4lPutVideo;
++ VAR[i]->PutStill = V4lPutStill;
++ VAR[i]->StopVideo = V4lStopVideo;
++ VAR[i]->SetPortAttribute = V4lSetPortAttribute;
++ VAR[i]->GetPortAttribute = V4lGetPortAttribute;
++ VAR[i]->QueryBestSize = V4lQueryBestSize;
++
++ VAR[i]->nEncodings = pPPriv->nenc;
++ VAR[i]->pEncodings = pPPriv->enc;
++ VAR[i]->nFormats = sizeof(InputVideoFormats) / sizeof(InputVideoFormats[0]);
++ VAR[i]->pFormats = InputVideoFormats;
++
++ if (fd != -1) {
++ DEBUG(xf86Msg(X_INFO, "v4l: %s init finished.\n",dev));
++ close(fd);
++ }
++ i++;
+ }
+
+ xvEncoding = MAKE_ATOM(XV_ENCODING);
+- xvHue = MAKE_ATOM(XV_HUE);
+- xvSaturation = MAKE_ATOM(XV_SATURATION);
+- xvBrightness = MAKE_ATOM(XV_BRIGHTNESS);
+- xvContrast = MAKE_ATOM(XV_CONTRAST);
+-
+ xvFreq = MAKE_ATOM(XV_FREQ);
+- xvMute = MAKE_ATOM(XV_MUTE);
+- xvVolume = MAKE_ATOM(XV_VOLUME);
+
+ DEBUG(xf86Msg(X_INFO, "v4l: init done, %d device(s) found\n",i));
+
+@@ -1024,10 +1248,43 @@ V4LInit(ScrnInfoPtr pScrn, XF86VideoAdap
+ }
+
+ static Bool
++V4LDetect(void)
++{
++ struct v4l2_capability cap;
++ int fd, d, n = 0;
++ char dev[18];
++
++ for (d = 0; d < MAX_V4L_DEVICES; d++) {
++ sprintf(dev, "/dev/video%d", d);
++ fd = open(dev, O_RDWR, 0);
++ if (fd == -1) {
++ sprintf(dev, "/dev/v4l/video%d", d);
++ fd = open(dev, O_RDWR, 0);
++ if (fd == -1)
++ break;
++ }
++ close (fd);
++ memset(&cap, 0, sizeof(cap));
++ if (!ioctl(fd, VIDIOC_QUERYCAP, &cap) &&
++ (cap.capabilities & V4L2_CAP_VIDEO_OVERLAY))
++ n++;
++ }
++ xf86Msg(X_INFO, "v4l: %d video adapters with overlay support detected\n", n);
++
++ return (n > 0) ? TRUE : FALSE;
++}
++
++static Bool
+ V4LProbe(DriverPtr drv, int flags)
+ {
+- if (flags & PROBE_DETECT)
+- return TRUE;
++ /*
++ * Don't try to register adapter at the detection phase, as Xv
++ * extensions won't be there
++ */
++ if (flags == PROBE_DETECT)
++ return V4LDetect();
++
++ DEBUG(xf86Msg(X_INFO, "v4l: Initiating device probe\n"));
+
+ xf86XVRegisterGenericAdaptorDriver(V4LInit);
+ drv->refCount++;
+diff --git a/src/videodev.h b/src/videodev.h
+deleted file mode 100644
+--- a/src/videodev.h
++++ /dev/null
+@@ -1,254 +0,0 @@
+-#ifndef __LINUX_VIDEODEV_H
+-#define __LINUX_VIDEODEV_H
+-
+-/* Linux V4L API, Version 1
+- * videodev.h from v4l driver in Linux 2.2.3
+- *
+- * Used here with the explicit permission of the original author, Alan Cox.
+- * <alan@lxorguk.ukuu.org.uk>
+- */
+-
+-#include <X11/Xmd.h>
+-
+-#define VID_TYPE_CAPTURE 1 /* Can capture */
+-#define VID_TYPE_TUNER 2 /* Can tune */
+-#define VID_TYPE_TELETEXT 4 /* Does teletext */
+-#define VID_TYPE_OVERLAY 8 /* Overlay onto frame buffer */
+-#define VID_TYPE_CHROMAKEY 16 /* Overlay by chromakey */
+-#define VID_TYPE_CLIPPING 32 /* Can clip */
+-#define VID_TYPE_FRAMERAM 64 /* Uses the frame buffer memory */
+-#define VID_TYPE_SCALES 128 /* Scalable */
+-#define VID_TYPE_MONOCHROME 256 /* Monochrome only */
+-#define VID_TYPE_SUBCAPTURE 512 /* Can capture subareas of the image */
+-
+-struct video_capability
+-{
+- char name[32];
+- int type;
+- int channels; /* Num channels */
+- int audios; /* Num audio devices */
+- int maxwidth; /* Supported width */
+- int maxheight; /* And height */
+- int minwidth; /* Supported width */
+- int minheight; /* And height */
+-};
+-
+-
+-struct video_channel
+-{
+- int channel;
+- char name[32];
+- int tuners;
+- CARD32 flags;
+-#define VIDEO_VC_TUNER 1 /* Channel has a tuner */
+-#define VIDEO_VC_AUDIO 2 /* Channel has audio */
+- CARD16 type;
+-#define VIDEO_TYPE_TV 1
+-#define VIDEO_TYPE_CAMERA 2
+- CARD16 norm; /* Norm set by channel */
+-};
+-
+-struct video_tuner
+-{
+- int tuner;
+- char name[32];
+- unsigned long rangelow, rangehigh; /* Tuner range */
+- CARD32 flags;
+-#define VIDEO_TUNER_PAL 1
+-#define VIDEO_TUNER_NTSC 2
+-#define VIDEO_TUNER_SECAM 4
+-#define VIDEO_TUNER_LOW 8 /* Uses KHz not MHz */
+-#define VIDEO_TUNER_NORM 16 /* Tuner can set norm */
+-#define VIDEO_TUNER_STEREO_ON 128 /* Tuner is seeing stereo */
+- CARD16 mode; /* PAL/NTSC/SECAM/OTHER */
+-#define VIDEO_MODE_PAL 0
+-#define VIDEO_MODE_NTSC 1
+-#define VIDEO_MODE_SECAM 2
+-#define VIDEO_MODE_AUTO 3
+- CARD16 signal; /* Signal strength 16bit scale */
+-};
+-
+-struct video_picture
+-{
+- CARD16 brightness;
+- CARD16 hue;
+- CARD16 colour;
+- CARD16 contrast;
+- CARD16 whiteness; /* Black and white only */
+- CARD16 depth; /* Capture depth */
+- CARD16 palette; /* Palette in use */
+-#define VIDEO_PALETTE_GREY 1 /* Linear greyscale */
+-#define VIDEO_PALETTE_HI240 2 /* High 240 cube (BT848) */
+-#define VIDEO_PALETTE_RGB565 3 /* 565 16 bit RGB */
+-#define VIDEO_PALETTE_RGB24 4 /* 24bit RGB */
+-#define VIDEO_PALETTE_RGB32 5 /* 32bit RGB */
+-#define VIDEO_PALETTE_RGB555 6 /* 555 15bit RGB */
+-#define VIDEO_PALETTE_YUV422 7 /* YUV422 capture */
+-#define VIDEO_PALETTE_YUYV 8
+-#define VIDEO_PALETTE_UYVY 9 /* The great thing about standards is ... */
+-#define VIDEO_PALETTE_YUV420 10
+-#define VIDEO_PALETTE_YUV411 11 /* YUV411 capture */
+-#define VIDEO_PALETTE_RAW 12 /* RAW capture (BT848) */
+-#define VIDEO_PALETTE_YUV422P 13 /* YUV 4:2:2 Planar */
+-#define VIDEO_PALETTE_YUV411P 14 /* YUV 4:1:1 Planar */
+-#define VIDEO_PALETTE_YUV420P 15 /* YUV 4:2:0 Planar */
+-#define VIDEO_PALETTE_YUV410P 16 /* YUV 4:1:0 Planar */
+-#define VIDEO_PALETTE_PLANAR 13 /* start of planar entries */
+-#define VIDEO_PALETTE_COMPONENT 7 /* start of component entries */
+-};
+-
+-struct video_audio
+-{
+- int audio; /* Audio channel */
+- CARD16 volume; /* If settable */
+- CARD16 bass, treble;
+- CARD32 flags;
+-#define VIDEO_AUDIO_MUTE 1
+-#define VIDEO_AUDIO_MUTABLE 2
+-#define VIDEO_AUDIO_VOLUME 4
+-#define VIDEO_AUDIO_BASS 8
+-#define VIDEO_AUDIO_TREBLE 16
+- char name[16];
+-#define VIDEO_SOUND_MONO 1
+-#define VIDEO_SOUND_STEREO 2
+-#define VIDEO_SOUND_LANG1 4
+-#define VIDEO_SOUND_LANG2 8
+- CARD16 mode;
+- CARD16 balance; /* Stereo balance */
+- CARD16 step; /* Step actual volume uses */
+-};
+-
+-struct video_clip
+-{
+- INT32 x,y;
+- INT32 width, height;
+- struct video_clip *next; /* For user use/driver use only */
+-};
+-
+-struct video_window
+-{
+- CARD32 x,y; /* Position of window */
+- CARD32 width,height; /* Its size */
+- CARD32 chromakey;
+- CARD32 flags;
+- struct video_clip *clips; /* Set only */
+- int clipcount;
+-#define VIDEO_WINDOW_INTERLACE 1
+-#define VIDEO_CLIP_BITMAP -1
+-/* bitmap is 1024x625, a '1' bit represents a clipped pixel */
+-#define VIDEO_CLIPMAP_SIZE (128 * 625)
+-};
+-
+-struct video_capture
+-{
+- CARD32 x,y; /* Offsets into image */
+- CARD32 width, height; /* Area to capture */
+- CARD16 decimation; /* Decimation divder */
+- CARD16 flags; /* Flags for capture */
+-#define VIDEO_CAPTURE_ODD 0 /* Temporal */
+-#define VIDEO_CAPTURE_EVEN 1
+-};
+-
+-struct video_buffer
+-{
+- void *base;
+- int height,width;
+- int depth;
+- int bytesperline;
+-};
+-
+-struct video_mmap
+-{
+- unsigned int frame; /* Frame (0 - n) for double buffer */
+- int height,width;
+- unsigned int format; /* should be VIDEO_PALETTE_* */
+-};
+-
+-struct video_key
+-{
+- CARD8 key[8];
+- CARD32 flags;
+-};
+-
+-
+-#define VIDEO_MAX_FRAME 32
+-
+-struct video_mbuf
+-{
+- int size; /* Total memory to map */
+- int frames; /* Frames */
+- int offsets[VIDEO_MAX_FRAME];
+-};
+-
+-
+-#define VIDEO_NO_UNIT (-1)
+-
+-
+-struct video_unit
+-{
+- int video; /* Video minor */
+- int vbi; /* VBI minor */
+- int radio; /* Radio minor */
+- int audio; /* Audio minor */
+- int teletext; /* Teletext minor */
+-};
+-
+-#define VIDIOCGCAP _IOR('v',1,struct video_capability) /* Get capabilities */
+-#define VIDIOCGCHAN _IOWR('v',2,struct video_channel) /* Get channel info (sources) */
+-#define VIDIOCSCHAN _IOW('v',3,struct video_channel) /* Set channel */
+-#define VIDIOCGTUNER _IOWR('v',4,struct video_tuner) /* Get tuner abilities */
+-#define VIDIOCSTUNER _IOW('v',5,struct video_tuner) /* Tune the tuner for the current channel */
+-#define VIDIOCGPICT _IOR('v',6,struct video_picture) /* Get picture properties */
+-#define VIDIOCSPICT _IOW('v',7,struct video_picture) /* Set picture properties */
+-#define VIDIOCCAPTURE _IOW('v',8,int) /* Start, end capture */
+-#define VIDIOCGWIN _IOR('v',9, struct video_window) /* Set the video overlay window */
+-#define VIDIOCSWIN _IOW('v',10, struct video_window) /* Set the video overlay window - passes clip list for hardware smarts , chromakey etc */
+-#define VIDIOCGFBUF _IOR('v',11, struct video_buffer) /* Get frame buffer */
+-#define VIDIOCSFBUF _IOW('v',12, struct video_buffer) /* Set frame buffer - root only */
+-#define VIDIOCKEY _IOR('v',13, struct video_key) /* Video key event - to dev 255 is to all - cuts capture on all DMA windows with this key (0xFFFFFFFF == all) */
+-#define VIDIOCGFREQ _IOR('v',14, unsigned long) /* Set tuner */
+-#define VIDIOCSFREQ _IOW('v',15, unsigned long) /* Set tuner */
+-#define VIDIOCGAUDIO _IOR('v',16, struct video_audio) /* Get audio info */
+-#define VIDIOCSAUDIO _IOW('v',17, struct video_audio) /* Audio source, mute etc */
+-#define VIDIOCSYNC _IOW('v',18, int) /* Sync with mmap grabbing */
+-#define VIDIOCMCAPTURE _IOW('v',19, struct video_mmap) /* Grab frames */
+-#define VIDIOCGMBUF _IOR('v', 20, struct video_mbuf) /* Memory map buffer info */
+-#define VIDIOCGUNIT _IOR('v', 21, struct video_unit) /* Get attached units */
+-#define VIDIOCGCAPTURE _IOR('v',22, struct video_capture) /* Get frame buffer */
+-#define VIDIOCSCAPTURE _IOW('v',23, struct video_capture) /* Set frame buffer - root only */
+-
+-#define BASE_VIDIOCPRIVATE 192 /* 192-255 are private */
+-
+-
+-#define VID_HARDWARE_BT848 1
+-#define VID_HARDWARE_QCAM_BW 2
+-#define VID_HARDWARE_PMS 3
+-#define VID_HARDWARE_QCAM_C 4
+-#define VID_HARDWARE_PSEUDO 5
+-#define VID_HARDWARE_SAA5249 6
+-#define VID_HARDWARE_AZTECH 7
+-#define VID_HARDWARE_SF16MI 8
+-#define VID_HARDWARE_RTRACK 9
+-#define VID_HARDWARE_ZOLTRIX 10
+-#define VID_HARDWARE_SAA7146 11
+-#define VID_HARDWARE_VIDEUM 12 /* Reserved for Winnov videum */
+-#define VID_HARDWARE_RTRACK2 13
+-#define VID_HARDWARE_PERMEDIA2 14 /* Reserved for Permedia2 */
+-#define VID_HARDWARE_RIVA128 15 /* Reserved for RIVA 128 */
+-#define VID_HARDWARE_PLANB 16 /* PowerMac motherboard video-in */
+-#define VID_HARDWARE_BROADWAY 17 /* Broadway project */
+-#define VID_HARDWARE_GEMTEK 18
+-#define VID_HARDWARE_TYPHOON 19
+-#define VID_HARDWARE_VINO 20 /* Reserved for SGI Indy Vino */
+-
+-/*
+- * Initialiser list
+- */
+-
+-struct video_init
+-{
+- char *name;
+- int (*init)(struct video_init *);
+-};
+-
+-#endif
+diff --git a/src/videodev2.h b/src/videodev2.h
+new file mode 100644
+--- /dev/null
++++ b/src/videodev2.h
+@@ -0,0 +1,1929 @@
++/*
++ * Video for Linux Two header file
++ *
++ * Copyright (C) 1999-2007 the contributors
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * Alternatively you can redistribute this file under the terms of the
++ * BSD license as stated below:
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in
++ * the documentation and/or other materials provided with the
++ * distribution.
++ * 3. The names of its contributors may not be used to endorse or promote
++ * products derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
++ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * Header file for v4l or V4L2 drivers and applications
++ * with public API.
++ * All kernel-specific stuff were moved to media/v4l2-dev.h, so
++ * no #if __KERNEL tests are allowed here
++ *
++ * See http://linuxtv.org for more info
++ *
++ * Author: Bill Dirks <bill@thedirks.org>
++ * Justin Schoeman
++ * Hans Verkuil <hverkuil@xs4all.nl>
++ * et al.
++ */
++#ifndef __LINUX_VIDEODEV2_H
++#define __LINUX_VIDEODEV2_H
++
++#include <linux/ioctl.h>
++#include <linux/types.h>
++#include <sys/time.h>
++
++/*
++ * Common stuff for both V4L1 and V4L2
++ * Moved from videodev.h
++ */
++#define VIDEO_MAX_FRAME 32
++#define VIDEO_MAX_PLANES 8
++
++/* These defines are V4L1 specific and should not be used with the V4L2 API!
++ They will be removed from this header in the future. */
++
++#define VID_TYPE_CAPTURE 1 /* Can capture */
++#define VID_TYPE_TUNER 2 /* Can tune */
++#define VID_TYPE_TELETEXT 4 /* Does teletext */
++#define VID_TYPE_OVERLAY 8 /* Overlay onto frame buffer */
++#define VID_TYPE_CHROMAKEY 16 /* Overlay by chromakey */
++#define VID_TYPE_CLIPPING 32 /* Can clip */
++#define VID_TYPE_FRAMERAM 64 /* Uses the frame buffer memory */
++#define VID_TYPE_SCALES 128 /* Scalable */
++#define VID_TYPE_MONOCHROME 256 /* Monochrome only */
++#define VID_TYPE_SUBCAPTURE 512 /* Can capture subareas of the image */
++#define VID_TYPE_MPEG_DECODER 1024 /* Can decode MPEG streams */
++#define VID_TYPE_MPEG_ENCODER 2048 /* Can encode MPEG streams */
++#define VID_TYPE_MJPEG_DECODER 4096 /* Can decode MJPEG streams */
++#define VID_TYPE_MJPEG_ENCODER 8192 /* Can encode MJPEG streams */
++
++/*
++ * M I S C E L L A N E O U S
++ */
++
++/* Four-character-code (FOURCC) */
++#define v4l2_fourcc(a, b, c, d)\
++ ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
++
++/*
++ * E N U M S
++ */
++enum v4l2_field {
++ V4L2_FIELD_ANY = 0, /* driver can choose from none,
++ top, bottom, interlaced
++ depending on whatever it thinks
++ is approximate ... */
++ V4L2_FIELD_NONE = 1, /* this device has no fields ... */
++ V4L2_FIELD_TOP = 2, /* top field only */
++ V4L2_FIELD_BOTTOM = 3, /* bottom field only */
++ V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
++ V4L2_FIELD_SEQ_TB = 5, /* both fields sequential into one
++ buffer, top-bottom order */
++ V4L2_FIELD_SEQ_BT = 6, /* same as above + bottom-top order */
++ V4L2_FIELD_ALTERNATE = 7, /* both fields alternating into
++ separate buffers */
++ V4L2_FIELD_INTERLACED_TB = 8, /* both fields interlaced, top field
++ first and the top field is
++ transmitted first */
++ V4L2_FIELD_INTERLACED_BT = 9, /* both fields interlaced, top field
++ first and the bottom field is
++ transmitted first */
++};
++#define V4L2_FIELD_HAS_TOP(field) \
++ ((field) == V4L2_FIELD_TOP ||\
++ (field) == V4L2_FIELD_INTERLACED ||\
++ (field) == V4L2_FIELD_INTERLACED_TB ||\
++ (field) == V4L2_FIELD_INTERLACED_BT ||\
++ (field) == V4L2_FIELD_SEQ_TB ||\
++ (field) == V4L2_FIELD_SEQ_BT)
++#define V4L2_FIELD_HAS_BOTTOM(field) \
++ ((field) == V4L2_FIELD_BOTTOM ||\
++ (field) == V4L2_FIELD_INTERLACED ||\
++ (field) == V4L2_FIELD_INTERLACED_TB ||\
++ (field) == V4L2_FIELD_INTERLACED_BT ||\
++ (field) == V4L2_FIELD_SEQ_TB ||\
++ (field) == V4L2_FIELD_SEQ_BT)
++#define V4L2_FIELD_HAS_BOTH(field) \
++ ((field) == V4L2_FIELD_INTERLACED ||\
++ (field) == V4L2_FIELD_INTERLACED_TB ||\
++ (field) == V4L2_FIELD_INTERLACED_BT ||\
++ (field) == V4L2_FIELD_SEQ_TB ||\
++ (field) == V4L2_FIELD_SEQ_BT)
++
++enum v4l2_buf_type {
++ V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
++ V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
++ V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
++ V4L2_BUF_TYPE_VBI_CAPTURE = 4,
++ V4L2_BUF_TYPE_VBI_OUTPUT = 5,
++ V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
++ V4L2_BUF_TYPE_SLICED_VBI_OUTPUT = 7,
++#if 1
++ /* Experimental */
++ V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,
++#endif
++ V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,
++ V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE = 10,
++ V4L2_BUF_TYPE_PRIVATE = 0x80,
++};
++
++#define V4L2_TYPE_IS_MULTIPLANAR(type) \
++ ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE \
++ || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
++
++#define V4L2_TYPE_IS_OUTPUT(type) \
++ ((type) == V4L2_BUF_TYPE_VIDEO_OUTPUT \
++ || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE \
++ || (type) == V4L2_BUF_TYPE_VIDEO_OVERLAY \
++ || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \
++ || (type) == V4L2_BUF_TYPE_VBI_OUTPUT \
++ || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT)
++
++enum v4l2_tuner_type {
++ V4L2_TUNER_RADIO = 1,
++ V4L2_TUNER_ANALOG_TV = 2,
++ V4L2_TUNER_DIGITAL_TV = 3,
++};
++
++enum v4l2_memory {
++ V4L2_MEMORY_MMAP = 1,
++ V4L2_MEMORY_USERPTR = 2,
++ V4L2_MEMORY_OVERLAY = 3,
++};
++
++/* see also http://vektor.theorem.ca/graphics/ycbcr/ */
++enum v4l2_colorspace {
++ /* ITU-R 601 -- broadcast NTSC/PAL */
++ V4L2_COLORSPACE_SMPTE170M = 1,
++
++ /* 1125-Line (US) HDTV */
++ V4L2_COLORSPACE_SMPTE240M = 2,
++
++ /* HD and modern captures. */
++ V4L2_COLORSPACE_REC709 = 3,
++
++ /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
++ V4L2_COLORSPACE_BT878 = 4,
++
++ /* These should be useful. Assume 601 extents. */
++ V4L2_COLORSPACE_470_SYSTEM_M = 5,
++ V4L2_COLORSPACE_470_SYSTEM_BG = 6,
++
++ /* I know there will be cameras that send this. So, this is
++ * unspecified chromaticities and full 0-255 on each of the
++ * Y'CbCr components
++ */
++ V4L2_COLORSPACE_JPEG = 7,
++
++ /* For RGB colourspaces, this is probably a good start. */
++ V4L2_COLORSPACE_SRGB = 8,
++};
++
++enum v4l2_priority {
++ V4L2_PRIORITY_UNSET = 0, /* not initialized */
++ V4L2_PRIORITY_BACKGROUND = 1,
++ V4L2_PRIORITY_INTERACTIVE = 2,
++ V4L2_PRIORITY_RECORD = 3,
++ V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE,
++};
++
++struct v4l2_rect {
++ __s32 left;
++ __s32 top;
++ __s32 width;
++ __s32 height;
++};
++
++struct v4l2_fract {
++ __u32 numerator;
++ __u32 denominator;
++};
++
++/*
++ * D R I V E R C A P A B I L I T I E S
++ */
++struct v4l2_capability {
++ __u8 driver[16]; /* i.e. "bttv" */
++ __u8 card[32]; /* i.e. "Hauppauge WinTV" */
++ __u8 bus_info[32]; /* "PCI:" + pci_name(pci_dev) */
++ __u32 version; /* should use KERNEL_VERSION() */
++ __u32 capabilities; /* Device capabilities */
++ __u32 reserved[4];
++};
++
++/* Values for 'capabilities' field */
++#define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */
++#define V4L2_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */
++#define V4L2_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */
++#define V4L2_CAP_VBI_CAPTURE 0x00000010 /* Is a raw VBI capture device */
++#define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a raw VBI output device */
++#define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040 /* Is a sliced VBI capture device */
++#define V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080 /* Is a sliced VBI output device */
++#define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */
++#define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */
++#define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */
++#define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */
++
++/* Is a video capture device that supports multiplanar formats */
++#define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000
++/* Is a video output device that supports multiplanar formats */
++#define V4L2_CAP_VIDEO_OUTPUT_MPLANE 0x00002000
++
++#define V4L2_CAP_TUNER 0x00010000 /* has a tuner */
++#define V4L2_CAP_AUDIO 0x00020000 /* has audio support */
++#define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
++#define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */
++
++#define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */
++#define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */
++#define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
++
++/*
++ * V I D E O I M A G E F O R M A T
++ */
++struct v4l2_pix_format {
++ __u32 width;
++ __u32 height;
++ __u32 pixelformat;
++ enum v4l2_field field;
++ __u32 bytesperline; /* for padding, zero if unused */
++ __u32 sizeimage;
++ enum v4l2_colorspace colorspace;
++ __u32 priv; /* private data, depends on pixelformat */
++};
++
++/* Pixel format FOURCC depth Description */
++
++/* RGB formats */
++#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */
++#define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */
++#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */
++#define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */
++#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */
++#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */
++#define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */
++#define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */
++#define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */
++#define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */
++#define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */
++
++/* Grey formats */
++#define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */
++#define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */
++#define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */
++#define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
++#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
++
++/* Palette formats */
++#define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */
++
++/* Luminance+Chrominance formats */
++#define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */
++#define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */
++#define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */
++#define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */
++#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
++#define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */
++#define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */
++#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */
++#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16 YVU411 planar */
++#define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y', '4', '1', 'P') /* 12 YUV 4:1:1 */
++#define V4L2_PIX_FMT_YUV444 v4l2_fourcc('Y', '4', '4', '4') /* 16 xxxxyyyy uuuuvvvv */
++#define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */
++#define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */
++#define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */
++#define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */
++#define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */
++#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */
++#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */
++
++/* two planes -- one Y, one Cr + Cb interleaved */
++#define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */
++#define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') /* 12 Y/CrCb 4:2:0 */
++#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */
++#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
++
++/* two non contiguous planes - one Y, one Cr + Cb interleaved */
++#define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */
++#define V4L2_PIX_FMT_NV12MT v4l2_fourcc('T', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 64x32 macroblocks */
++
++/* three non contiguous planes - Y, Cb, Cr */
++#define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12 YUV420 planar */
++
++/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
++#define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */
++#define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */
++#define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */
++#define V4L2_PIX_FMT_SRGGB8 v4l2_fourcc('R', 'G', 'G', 'B') /* 8 RGRG.. GBGB.. */
++#define V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10 BGBG.. GRGR.. */
++#define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10 GBGB.. RGRG.. */
++#define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10 GRGR.. BGBG.. */
++#define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10 RGRG.. GBGB.. */
++ /* 10bit raw bayer DPCM compressed to 8 bits */
++#define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
++ /*
++ * 10bit raw bayer, expanded to 16 bits
++ * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb...
++ */
++#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */
++
++/* compressed formats */
++#define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG */
++#define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG */
++#define V4L2_PIX_FMT_DV v4l2_fourcc('d', 'v', 's', 'd') /* 1394 */
++#define V4L2_PIX_FMT_MPEG v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 */
++
++/* Vendor-specific formats */
++#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
++#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
++#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
++#define V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
++#define V4L2_PIX_FMT_PWC1 v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
++#define V4L2_PIX_FMT_PWC2 v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
++#define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
++#define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
++#define V4L2_PIX_FMT_SPCA505 v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
++#define V4L2_PIX_FMT_SPCA508 v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
++#define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
++#define V4L2_PIX_FMT_PAC207 v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
++#define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
++#define V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
++#define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
++#define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
++#define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
++#define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
++#define V4L2_PIX_FMT_STV0680 v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
++#define V4L2_PIX_FMT_TM6000 v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
++#define V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
++#define V4L2_PIX_FMT_KONICA420 v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
++
++/*
++ * F O R M A T E N U M E R A T I O N
++ */
++struct v4l2_fmtdesc {
++ __u32 index; /* Format number */
++ enum v4l2_buf_type type; /* buffer type */
++ __u32 flags;
++ __u8 description[32]; /* Description string */
++ __u32 pixelformat; /* Format fourcc */
++ __u32 reserved[4];
++};
++
++#define V4L2_FMT_FLAG_COMPRESSED 0x0001
++#define V4L2_FMT_FLAG_EMULATED 0x0002
++
++#if 1
++ /* Experimental Frame Size and frame rate enumeration */
++/*
++ * F R A M E S I Z E E N U M E R A T I O N
++ */
++enum v4l2_frmsizetypes {
++ V4L2_FRMSIZE_TYPE_DISCRETE = 1,
++ V4L2_FRMSIZE_TYPE_CONTINUOUS = 2,
++ V4L2_FRMSIZE_TYPE_STEPWISE = 3,
++};
++
++struct v4l2_frmsize_discrete {
++ __u32 width; /* Frame width [pixel] */
++ __u32 height; /* Frame height [pixel] */
++};
++
++struct v4l2_frmsize_stepwise {
++ __u32 min_width; /* Minimum frame width [pixel] */
++ __u32 max_width; /* Maximum frame width [pixel] */
++ __u32 step_width; /* Frame width step size [pixel] */
++ __u32 min_height; /* Minimum frame height [pixel] */
++ __u32 max_height; /* Maximum frame height [pixel] */
++ __u32 step_height; /* Frame height step size [pixel] */
++};
++
++struct v4l2_frmsizeenum {
++ __u32 index; /* Frame size number */
++ __u32 pixel_format; /* Pixel format */
++ __u32 type; /* Frame size type the device supports. */
++
++ union { /* Frame size */
++ struct v4l2_frmsize_discrete discrete;
++ struct v4l2_frmsize_stepwise stepwise;
++ };
++
++ __u32 reserved[2]; /* Reserved space for future use */
++};
++
++/*
++ * F R A M E R A T E E N U M E R A T I O N
++ */
++enum v4l2_frmivaltypes {
++ V4L2_FRMIVAL_TYPE_DISCRETE = 1,
++ V4L2_FRMIVAL_TYPE_CONTINUOUS = 2,
++ V4L2_FRMIVAL_TYPE_STEPWISE = 3,
++};
++
++struct v4l2_frmival_stepwise {
++ struct v4l2_fract min; /* Minimum frame interval [s] */
++ struct v4l2_fract max; /* Maximum frame interval [s] */
++ struct v4l2_fract step; /* Frame interval step size [s] */
++};
++
++struct v4l2_frmivalenum {
++ __u32 index; /* Frame format index */
++ __u32 pixel_format; /* Pixel format */
++ __u32 width; /* Frame width */
++ __u32 height; /* Frame height */
++ __u32 type; /* Frame interval type the device supports. */
++
++ union { /* Frame interval */
++ struct v4l2_fract discrete;
++ struct v4l2_frmival_stepwise stepwise;
++ };
++
++ __u32 reserved[2]; /* Reserved space for future use */
++};
++#endif
++
++/*
++ * T I M E C O D E
++ */
++struct v4l2_timecode {
++ __u32 type;
++ __u32 flags;
++ __u8 frames;
++ __u8 seconds;
++ __u8 minutes;
++ __u8 hours;
++ __u8 userbits[4];
++};
++
++/* Type */
++#define V4L2_TC_TYPE_24FPS 1
++#define V4L2_TC_TYPE_25FPS 2
++#define V4L2_TC_TYPE_30FPS 3
++#define V4L2_TC_TYPE_50FPS 4
++#define V4L2_TC_TYPE_60FPS 5
++
++/* Flags */
++#define V4L2_TC_FLAG_DROPFRAME 0x0001 /* "drop-frame" mode */
++#define V4L2_TC_FLAG_COLORFRAME 0x0002
++#define V4L2_TC_USERBITS_field 0x000C
++#define V4L2_TC_USERBITS_USERDEFINED 0x0000
++#define V4L2_TC_USERBITS_8BITCHARS 0x0008
++/* The above is based on SMPTE timecodes */
++
++struct v4l2_jpegcompression {
++ int quality;
++
++ int APPn; /* Number of APP segment to be written,
++ * must be 0..15 */
++ int APP_len; /* Length of data in JPEG APPn segment */
++ char APP_data[60]; /* Data in the JPEG APPn segment. */
++
++ int COM_len; /* Length of data in JPEG COM segment */
++ char COM_data[60]; /* Data in JPEG COM segment */
++
++ __u32 jpeg_markers; /* Which markers should go into the JPEG
++ * output. Unless you exactly know what
++ * you do, leave them untouched.
++ * Inluding less markers will make the
++ * resulting code smaller, but there will
++ * be fewer applications which can read it.
++ * The presence of the APP and COM marker
++ * is influenced by APP_len and COM_len
++ * ONLY, not by this property! */
++
++#define V4L2_JPEG_MARKER_DHT (1<<3) /* Define Huffman Tables */
++#define V4L2_JPEG_MARKER_DQT (1<<4) /* Define Quantization Tables */
++#define V4L2_JPEG_MARKER_DRI (1<<5) /* Define Restart Interval */
++#define V4L2_JPEG_MARKER_COM (1<<6) /* Comment segment */
++#define V4L2_JPEG_MARKER_APP (1<<7) /* App segment, driver will
++ * allways use APP0 */
++};
++
++/*
++ * M E M O R Y - M A P P I N G B U F F E R S
++ */
++struct v4l2_requestbuffers {
++ __u32 count;
++ enum v4l2_buf_type type;
++ enum v4l2_memory memory;
++ __u32 reserved[2];
++};
++
++/**
++ * struct v4l2_plane - plane info for multi-planar buffers
++ * @bytesused: number of bytes occupied by data in the plane (payload)
++ * @length: size of this plane (NOT the payload) in bytes
++ * @mem_offset: when memory in the associated struct v4l2_buffer is
++ * V4L2_MEMORY_MMAP, equals the offset from the start of
++ * the device memory for this plane (or is a "cookie" that
++ * should be passed to mmap() called on the video node)
++ * @userptr: when memory is V4L2_MEMORY_USERPTR, a userspace pointer
++ * pointing to this plane
++ * @data_offset: offset in the plane to the start of data; usually 0,
++ * unless there is a header in front of the data
++ *
++ * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
++ * with two planes can have one plane for Y, and another for interleaved CbCr
++ * components. Each plane can reside in a separate memory buffer, or even in
++ * a completely separate memory node (e.g. in embedded devices).
++ */
++struct v4l2_plane {
++ __u32 bytesused;
++ __u32 length;
++ union {
++ __u32 mem_offset;
++ unsigned long userptr;
++ } m;
++ __u32 data_offset;
++ __u32 reserved[11];
++};
++
++/**
++ * struct v4l2_buffer - video buffer info
++ * @index: id number of the buffer
++ * @type: buffer type (type == *_MPLANE for multiplanar buffers)
++ * @bytesused: number of bytes occupied by data in the buffer (payload);
++ * unused (set to 0) for multiplanar buffers
++ * @flags: buffer informational flags
++ * @field: field order of the image in the buffer
++ * @timestamp: frame timestamp
++ * @timecode: frame timecode
++ * @sequence: sequence count of this frame
++ * @memory: the method, in which the actual video data is passed
++ * @offset: for non-multiplanar buffers with memory == V4L2_MEMORY_MMAP;
++ * offset from the start of the device memory for this plane,
++ * (or a "cookie" that should be passed to mmap() as offset)
++ * @userptr: for non-multiplanar buffers with memory == V4L2_MEMORY_USERPTR;
++ * a userspace pointer pointing to this buffer
++ * @planes: for multiplanar buffers; userspace pointer to the array of plane
++ * info structs for this buffer
++ * @length: size in bytes of the buffer (NOT its payload) for single-plane
++ * buffers (when type != *_MPLANE); number of elements in the
++ * planes array for multi-plane buffers
++ * @input: input number from which the video data has has been captured
++ *
++ * Contains data exchanged by application and driver using one of the Streaming
++ * I/O methods.
++ */
++struct v4l2_buffer {
++ __u32 index;
++ enum v4l2_buf_type type;
++ __u32 bytesused;
++ __u32 flags;
++ enum v4l2_field field;
++ struct timeval timestamp;
++ struct v4l2_timecode timecode;
++ __u32 sequence;
++
++ /* memory location */
++ enum v4l2_memory memory;
++ union {
++ __u32 offset;
++ unsigned long userptr;
++ struct v4l2_plane *planes;
++ } m;
++ __u32 length;
++ __u32 input;
++ __u32 reserved;
++};
++
++/* Flags for 'flags' field */
++#define V4L2_BUF_FLAG_MAPPED 0x0001 /* Buffer is mapped (flag) */
++#define V4L2_BUF_FLAG_QUEUED 0x0002 /* Buffer is queued for processing */
++#define V4L2_BUF_FLAG_DONE 0x0004 /* Buffer is ready */
++#define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */
++#define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */
++#define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */
++/* Buffer is ready, but the data contained within is corrupted. */
++#define V4L2_BUF_FLAG_ERROR 0x0040
++#define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */
++#define V4L2_BUF_FLAG_INPUT 0x0200 /* input field is valid */
++
++/*
++ * O V E R L A Y P R E V I E W
++ */
++struct v4l2_framebuffer {
++ __u32 capability;
++ __u32 flags;
++/* FIXME: in theory we should pass something like PCI device + memory
++ * region + offset instead of some physical address */
++ void *base;
++ struct v4l2_pix_format fmt;
++};
++/* Flags for the 'capability' field. Read only */
++#define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001
++#define V4L2_FBUF_CAP_CHROMAKEY 0x0002
++#define V4L2_FBUF_CAP_LIST_CLIPPING 0x0004
++#define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008
++#define V4L2_FBUF_CAP_LOCAL_ALPHA 0x0010
++#define V4L2_FBUF_CAP_GLOBAL_ALPHA 0x0020
++#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA 0x0040
++#define V4L2_FBUF_CAP_SRC_CHROMAKEY 0x0080
++/* Flags for the 'flags' field. */
++#define V4L2_FBUF_FLAG_PRIMARY 0x0001
++#define V4L2_FBUF_FLAG_OVERLAY 0x0002
++#define V4L2_FBUF_FLAG_CHROMAKEY 0x0004
++#define V4L2_FBUF_FLAG_LOCAL_ALPHA 0x0008
++#define V4L2_FBUF_FLAG_GLOBAL_ALPHA 0x0010
++#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA 0x0020
++#define V4L2_FBUF_FLAG_SRC_CHROMAKEY 0x0040
++
++struct v4l2_clip {
++ struct v4l2_rect c;
++ struct v4l2_clip *next;
++};
++
++struct v4l2_window {
++ struct v4l2_rect w;
++ enum v4l2_field field;
++ __u32 chromakey;
++ struct v4l2_clip *clips;
++ __u32 clipcount;
++ void *bitmap;
++ __u8 global_alpha;
++};
++
++/*
++ * C A P T U R E P A R A M E T E R S
++ */
++struct v4l2_captureparm {
++ __u32 capability; /* Supported modes */
++ __u32 capturemode; /* Current mode */
++ struct v4l2_fract timeperframe; /* Time per frame in .1us units */
++ __u32 extendedmode; /* Driver-specific extensions */
++ __u32 readbuffers; /* # of buffers for read */
++ __u32 reserved[4];
++};
++
++/* Flags for 'capability' and 'capturemode' fields */
++#define V4L2_MODE_HIGHQUALITY 0x0001 /* High quality imaging mode */
++#define V4L2_CAP_TIMEPERFRAME 0x1000 /* timeperframe field is supported */
++
++struct v4l2_outputparm {
++ __u32 capability; /* Supported modes */
++ __u32 outputmode; /* Current mode */
++ struct v4l2_fract timeperframe; /* Time per frame in seconds */
++ __u32 extendedmode; /* Driver-specific extensions */
++ __u32 writebuffers; /* # of buffers for write */
++ __u32 reserved[4];
++};
++
++/*
++ * I N P U T I M A G E C R O P P I N G
++ */
++struct v4l2_cropcap {
++ enum v4l2_buf_type type;
++ struct v4l2_rect bounds;
++ struct v4l2_rect defrect;
++ struct v4l2_fract pixelaspect;
++};
++
++struct v4l2_crop {
++ enum v4l2_buf_type type;
++ struct v4l2_rect c;
++};
++
++/*
++ * A N A L O G V I D E O S T A N D A R D
++ */
++
++typedef __u64 v4l2_std_id;
++
++/* one bit for each */
++#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
++#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
++#define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004)
++#define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008)
++#define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010)
++#define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020)
++#define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040)
++#define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080)
++
++#define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100)
++#define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200)
++#define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400)
++#define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800)
++
++#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000)
++#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000)
++#define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000)
++#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000)
++
++#define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000)
++#define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000)
++#define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000)
++#define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000)
++#define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000)
++#define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000)
++#define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000)
++#define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000)
++
++/* ATSC/HDTV */
++#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
++#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
++
++/* FIXME:
++ Although std_id is 64 bits, there is an issue on PPC32 architecture that
++ makes switch(__u64) to break. So, there's a hack on v4l2-common.c rounding
++ this value to 32 bits.
++ As, currently, the max value is for V4L2_STD_ATSC_16_VSB (30 bits wide),
++ it should work fine. However, if needed to add more than two standards,
++ v4l2-common.c should be fixed.
++ */
++
++/* some merged standards */
++#define V4L2_STD_MN (V4L2_STD_PAL_M|V4L2_STD_PAL_N|V4L2_STD_PAL_Nc|V4L2_STD_NTSC)
++#define V4L2_STD_B (V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_SECAM_B)
++#define V4L2_STD_GH (V4L2_STD_PAL_G|V4L2_STD_PAL_H|V4L2_STD_SECAM_G|V4L2_STD_SECAM_H)
++#define V4L2_STD_DK (V4L2_STD_PAL_DK|V4L2_STD_SECAM_DK)
++
++/* some common needed stuff */
++#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\
++ V4L2_STD_PAL_B1 |\
++ V4L2_STD_PAL_G)
++#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\
++ V4L2_STD_PAL_D1 |\
++ V4L2_STD_PAL_K)
++#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\
++ V4L2_STD_PAL_DK |\
++ V4L2_STD_PAL_H |\
++ V4L2_STD_PAL_I)
++#define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\
++ V4L2_STD_NTSC_M_JP |\
++ V4L2_STD_NTSC_M_KR)
++#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\
++ V4L2_STD_SECAM_K |\
++ V4L2_STD_SECAM_K1)
++#define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\
++ V4L2_STD_SECAM_G |\
++ V4L2_STD_SECAM_H |\
++ V4L2_STD_SECAM_DK |\
++ V4L2_STD_SECAM_L |\
++ V4L2_STD_SECAM_LC)
++
++#define V4L2_STD_525_60 (V4L2_STD_PAL_M |\
++ V4L2_STD_PAL_60 |\
++ V4L2_STD_NTSC |\
++ V4L2_STD_NTSC_443)
++#define V4L2_STD_625_50 (V4L2_STD_PAL |\
++ V4L2_STD_PAL_N |\
++ V4L2_STD_PAL_Nc |\
++ V4L2_STD_SECAM)
++#define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB |\
++ V4L2_STD_ATSC_16_VSB)
++
++#define V4L2_STD_UNKNOWN 0
++#define V4L2_STD_ALL (V4L2_STD_525_60 |\
++ V4L2_STD_625_50)
++
++struct v4l2_standard {
++ __u32 index;
++ v4l2_std_id id;
++ __u8 name[24];
++ struct v4l2_fract frameperiod; /* Frames, not fields */
++ __u32 framelines;
++ __u32 reserved[4];
++};
++
++/*
++ * V I D E O T I M I N G S D V P R E S E T
++ */
++struct v4l2_dv_preset {
++ __u32 preset;
++ __u32 reserved[4];
++};
++
++/*
++ * D V P R E S E T S E N U M E R A T I O N
++ */
++struct v4l2_dv_enum_preset {
++ __u32 index;
++ __u32 preset;
++ __u8 name[32]; /* Name of the preset timing */
++ __u32 width;
++ __u32 height;
++ __u32 reserved[4];
++};
++
++/*
++ * D V P R E S E T V A L U E S
++ */
++#define V4L2_DV_INVALID 0
++#define V4L2_DV_480P59_94 1 /* BT.1362 */
++#define V4L2_DV_576P50 2 /* BT.1362 */
++#define V4L2_DV_720P24 3 /* SMPTE 296M */
++#define V4L2_DV_720P25 4 /* SMPTE 296M */
++#define V4L2_DV_720P30 5 /* SMPTE 296M */
++#define V4L2_DV_720P50 6 /* SMPTE 296M */
++#define V4L2_DV_720P59_94 7 /* SMPTE 274M */
++#define V4L2_DV_720P60 8 /* SMPTE 274M/296M */
++#define V4L2_DV_1080I29_97 9 /* BT.1120/ SMPTE 274M */
++#define V4L2_DV_1080I30 10 /* BT.1120/ SMPTE 274M */
++#define V4L2_DV_1080I25 11 /* BT.1120 */
++#define V4L2_DV_1080I50 12 /* SMPTE 296M */
++#define V4L2_DV_1080I60 13 /* SMPTE 296M */
++#define V4L2_DV_1080P24 14 /* SMPTE 296M */
++#define V4L2_DV_1080P25 15 /* SMPTE 296M */
++#define V4L2_DV_1080P30 16 /* SMPTE 296M */
++#define V4L2_DV_1080P50 17 /* BT.1120 */
++#define V4L2_DV_1080P60 18 /* BT.1120 */
++
++/*
++ * D V B T T I M I N G S
++ */
++
++/* BT.656/BT.1120 timing data */
++struct v4l2_bt_timings {
++ __u32 width; /* width in pixels */
++ __u32 height; /* height in lines */
++ __u32 interlaced; /* Interlaced or progressive */
++ __u32 polarities; /* Positive or negative polarity */
++ __u64 pixelclock; /* Pixel clock in HZ. Ex. 74.25MHz->74250000 */
++ __u32 hfrontporch; /* Horizpontal front porch in pixels */
++ __u32 hsync; /* Horizontal Sync length in pixels */
++ __u32 hbackporch; /* Horizontal back porch in pixels */
++ __u32 vfrontporch; /* Vertical front porch in pixels */
++ __u32 vsync; /* Vertical Sync length in lines */
++ __u32 vbackporch; /* Vertical back porch in lines */
++ __u32 il_vfrontporch; /* Vertical front porch for bottom field of
++ * interlaced field formats
++ */
++ __u32 il_vsync; /* Vertical sync length for bottom field of
++ * interlaced field formats
++ */
++ __u32 il_vbackporch; /* Vertical back porch for bottom field of
++ * interlaced field formats
++ */
++ __u32 reserved[16];
++} __attribute__ ((packed));
++
++/* Interlaced or progressive format */
++#define V4L2_DV_PROGRESSIVE 0
++#define V4L2_DV_INTERLACED 1
++
++/* Polarities. If bit is not set, it is assumed to be negative polarity */
++#define V4L2_DV_VSYNC_POS_POL 0x00000001
++#define V4L2_DV_HSYNC_POS_POL 0x00000002
++
++
++/* DV timings */
++struct v4l2_dv_timings {
++ __u32 type;
++ union {
++ struct v4l2_bt_timings bt;
++ __u32 reserved[32];
++ };
++} __attribute__ ((packed));
++
++/* Values for the type field */
++#define V4L2_DV_BT_656_1120 0 /* BT.656/1120 timing type */
++
++/*
++ * V I D E O I N P U T S
++ */
++struct v4l2_input {
++ __u32 index; /* Which input */
++ __u8 name[32]; /* Label */
++ __u32 type; /* Type of input */
++ __u32 audioset; /* Associated audios (bitfield) */
++ __u32 tuner; /* Associated tuner */
++ v4l2_std_id std;
++ __u32 status;
++ __u32 capabilities;
++ __u32 reserved[3];
++};
++
++/* Values for the 'type' field */
++#define V4L2_INPUT_TYPE_TUNER 1
++#define V4L2_INPUT_TYPE_CAMERA 2
++
++/* field 'status' - general */
++#define V4L2_IN_ST_NO_POWER 0x00000001 /* Attached device is off */
++#define V4L2_IN_ST_NO_SIGNAL 0x00000002
++#define V4L2_IN_ST_NO_COLOR 0x00000004
++
++/* field 'status' - sensor orientation */
++/* If sensor is mounted upside down set both bits */
++#define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */
++#define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */
++
++/* field 'status' - analog */
++#define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */
++#define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */
++
++/* field 'status' - digital */
++#define V4L2_IN_ST_NO_SYNC 0x00010000 /* No synchronization lock */
++#define V4L2_IN_ST_NO_EQU 0x00020000 /* No equalizer lock */
++#define V4L2_IN_ST_NO_CARRIER 0x00040000 /* Carrier recovery failed */
++
++/* field 'status' - VCR and set-top box */
++#define V4L2_IN_ST_MACROVISION 0x01000000 /* Macrovision detected */
++#define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */
++#define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */
++
++/* capabilities flags */
++#define V4L2_IN_CAP_PRESETS 0x00000001 /* Supports S_DV_PRESET */
++#define V4L2_IN_CAP_CUSTOM_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
++#define V4L2_IN_CAP_STD 0x00000004 /* Supports S_STD */
++
++/*
++ * V I D E O O U T P U T S
++ */
++struct v4l2_output {
++ __u32 index; /* Which output */
++ __u8 name[32]; /* Label */
++ __u32 type; /* Type of output */
++ __u32 audioset; /* Associated audios (bitfield) */
++ __u32 modulator; /* Associated modulator */
++ v4l2_std_id std;
++ __u32 capabilities;
++ __u32 reserved[3];
++};
++/* Values for the 'type' field */
++#define V4L2_OUTPUT_TYPE_MODULATOR 1
++#define V4L2_OUTPUT_TYPE_ANALOG 2
++#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3
++
++/* capabilities flags */
++#define V4L2_OUT_CAP_PRESETS 0x00000001 /* Supports S_DV_PRESET */
++#define V4L2_OUT_CAP_CUSTOM_TIMINGS 0x00000002 /* Supports S_DV_TIMINGS */
++#define V4L2_OUT_CAP_STD 0x00000004 /* Supports S_STD */
++
++/*
++ * C O N T R O L S
++ */
++struct v4l2_control {
++ __u32 id;
++ __s32 value;
++};
++
++struct v4l2_ext_control {
++ __u32 id;
++ __u32 size;
++ __u32 reserved2[1];
++ union {
++ __s32 value;
++ __s64 value64;
++ char *string;
++ };
++} __attribute__ ((packed));
++
++struct v4l2_ext_controls {
++ __u32 ctrl_class;
++ __u32 count;
++ __u32 error_idx;
++ __u32 reserved[2];
++ struct v4l2_ext_control *controls;
++};
++
++/* Values for ctrl_class field */
++#define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */
++#define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */
++#define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */
++#define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator control class */
++
++#define V4L2_CTRL_ID_MASK (0x0fffffff)
++#define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL)
++#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
++
++enum v4l2_ctrl_type {
++ V4L2_CTRL_TYPE_INTEGER = 1,
++ V4L2_CTRL_TYPE_BOOLEAN = 2,
++ V4L2_CTRL_TYPE_MENU = 3,
++ V4L2_CTRL_TYPE_BUTTON = 4,
++ V4L2_CTRL_TYPE_INTEGER64 = 5,
++ V4L2_CTRL_TYPE_CTRL_CLASS = 6,
++ V4L2_CTRL_TYPE_STRING = 7,
++};
++
++/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
++struct v4l2_queryctrl {
++ __u32 id;
++ enum v4l2_ctrl_type type;
++ __u8 name[32]; /* Whatever */
++ __s32 minimum; /* Note signedness */
++ __s32 maximum;
++ __s32 step;
++ __s32 default_value;
++ __u32 flags;
++ __u32 reserved[2];
++};
++
++/* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
++struct v4l2_querymenu {
++ __u32 id;
++ __u32 index;
++ __u8 name[32]; /* Whatever */
++ __u32 reserved;
++};
++
++/* Control flags */
++#define V4L2_CTRL_FLAG_DISABLED 0x0001
++#define V4L2_CTRL_FLAG_GRABBED 0x0002
++#define V4L2_CTRL_FLAG_READ_ONLY 0x0004
++#define V4L2_CTRL_FLAG_UPDATE 0x0008
++#define V4L2_CTRL_FLAG_INACTIVE 0x0010
++#define V4L2_CTRL_FLAG_SLIDER 0x0020
++#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040
++
++/* Query flag, to be ORed with the control ID */
++#define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000
++
++/* User-class control IDs defined by V4L2 */
++#define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900)
++#define V4L2_CID_USER_BASE V4L2_CID_BASE
++/* IDs reserved for driver specific controls */
++#define V4L2_CID_PRIVATE_BASE 0x08000000
++
++#define V4L2_CID_USER_CLASS (V4L2_CTRL_CLASS_USER | 1)
++#define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE+0)
++#define V4L2_CID_CONTRAST (V4L2_CID_BASE+1)
++#define V4L2_CID_SATURATION (V4L2_CID_BASE+2)
++#define V4L2_CID_HUE (V4L2_CID_BASE+3)
++#define V4L2_CID_AUDIO_VOLUME (V4L2_CID_BASE+5)
++#define V4L2_CID_AUDIO_BALANCE (V4L2_CID_BASE+6)
++#define V4L2_CID_AUDIO_BASS (V4L2_CID_BASE+7)
++#define V4L2_CID_AUDIO_TREBLE (V4L2_CID_BASE+8)
++#define V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE+9)
++#define V4L2_CID_AUDIO_LOUDNESS (V4L2_CID_BASE+10)
++#define V4L2_CID_BLACK_LEVEL (V4L2_CID_BASE+11) /* Deprecated */
++#define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE+12)
++#define V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE+13)
++#define V4L2_CID_RED_BALANCE (V4L2_CID_BASE+14)
++#define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE+15)
++#define V4L2_CID_GAMMA (V4L2_CID_BASE+16)
++#define V4L2_CID_WHITENESS (V4L2_CID_GAMMA) /* Deprecated */
++#define V4L2_CID_EXPOSURE (V4L2_CID_BASE+17)
++#define V4L2_CID_AUTOGAIN (V4L2_CID_BASE+18)
++#define V4L2_CID_GAIN (V4L2_CID_BASE+19)
++#define V4L2_CID_HFLIP (V4L2_CID_BASE+20)
++#define V4L2_CID_VFLIP (V4L2_CID_BASE+21)
++
++/* Deprecated; use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */
++#define V4L2_CID_HCENTER (V4L2_CID_BASE+22)
++#define V4L2_CID_VCENTER (V4L2_CID_BASE+23)
++
++#define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24)
++enum v4l2_power_line_frequency {
++ V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0,
++ V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1,
++ V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2,
++};
++#define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25)
++#define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26)
++#define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27)
++#define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28)
++#define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29)
++#define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30)
++#define V4L2_CID_COLORFX (V4L2_CID_BASE+31)
++enum v4l2_colorfx {
++ V4L2_COLORFX_NONE = 0,
++ V4L2_COLORFX_BW = 1,
++ V4L2_COLORFX_SEPIA = 2,
++ V4L2_COLORFX_NEGATIVE = 3,
++ V4L2_COLORFX_EMBOSS = 4,
++ V4L2_COLORFX_SKETCH = 5,
++ V4L2_COLORFX_SKY_BLUE = 6,
++ V4L2_COLORFX_GRASS_GREEN = 7,
++ V4L2_COLORFX_SKIN_WHITEN = 8,
++ V4L2_COLORFX_VIVID = 9,
++};
++#define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32)
++#define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33)
++
++#define V4L2_CID_ROTATE (V4L2_CID_BASE+34)
++#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+35)
++
++#define V4L2_CID_CHROMA_GAIN (V4L2_CID_BASE+36)
++
++#define V4L2_CID_ILLUMINATORS_1 (V4L2_CID_BASE+37)
++#define V4L2_CID_ILLUMINATORS_2 (V4L2_CID_BASE+38)
++
++/* last CID + 1 */
++#define V4L2_CID_LASTP1 (V4L2_CID_BASE+39)
++
++/* MPEG-class control IDs defined by V4L2 */
++#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
++#define V4L2_CID_MPEG_CLASS (V4L2_CTRL_CLASS_MPEG | 1)
++
++/* MPEG streams */
++#define V4L2_CID_MPEG_STREAM_TYPE (V4L2_CID_MPEG_BASE+0)
++enum v4l2_mpeg_stream_type {
++ V4L2_MPEG_STREAM_TYPE_MPEG2_PS = 0, /* MPEG-2 program stream */
++ V4L2_MPEG_STREAM_TYPE_MPEG2_TS = 1, /* MPEG-2 transport stream */
++ V4L2_MPEG_STREAM_TYPE_MPEG1_SS = 2, /* MPEG-1 system stream */
++ V4L2_MPEG_STREAM_TYPE_MPEG2_DVD = 3, /* MPEG-2 DVD-compatible stream */
++ V4L2_MPEG_STREAM_TYPE_MPEG1_VCD = 4, /* MPEG-1 VCD-compatible stream */
++ V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */
++};
++#define V4L2_CID_MPEG_STREAM_PID_PMT (V4L2_CID_MPEG_BASE+1)
++#define V4L2_CID_MPEG_STREAM_PID_AUDIO (V4L2_CID_MPEG_BASE+2)
++#define V4L2_CID_MPEG_STREAM_PID_VIDEO (V4L2_CID_MPEG_BASE+3)
++#define V4L2_CID_MPEG_STREAM_PID_PCR (V4L2_CID_MPEG_BASE+4)
++#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO (V4L2_CID_MPEG_BASE+5)
++#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO (V4L2_CID_MPEG_BASE+6)
++#define V4L2_CID_MPEG_STREAM_VBI_FMT (V4L2_CID_MPEG_BASE+7)
++enum v4l2_mpeg_stream_vbi_fmt {
++ V4L2_MPEG_STREAM_VBI_FMT_NONE = 0, /* No VBI in the MPEG stream */
++ V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1, /* VBI in private packets, IVTV format */
++};
++
++/* MPEG audio */
++#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ (V4L2_CID_MPEG_BASE+100)
++enum v4l2_mpeg_audio_sampling_freq {
++ V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0,
++ V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1,
++ V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2,
++};
++#define V4L2_CID_MPEG_AUDIO_ENCODING (V4L2_CID_MPEG_BASE+101)
++enum v4l2_mpeg_audio_encoding {
++ V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0,
++ V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1,
++ V4L2_MPEG_AUDIO_ENCODING_LAYER_3 = 2,
++ V4L2_MPEG_AUDIO_ENCODING_AAC = 3,
++ V4L2_MPEG_AUDIO_ENCODING_AC3 = 4,
++};
++#define V4L2_CID_MPEG_AUDIO_L1_BITRATE (V4L2_CID_MPEG_BASE+102)
++enum v4l2_mpeg_audio_l1_bitrate {
++ V4L2_MPEG_AUDIO_L1_BITRATE_32K = 0,
++ V4L2_MPEG_AUDIO_L1_BITRATE_64K = 1,
++ V4L2_MPEG_AUDIO_L1_BITRATE_96K = 2,
++ V4L2_MPEG_AUDIO_L1_BITRATE_128K = 3,
++ V4L2_MPEG_AUDIO_L1_BITRATE_160K = 4,
++ V4L2_MPEG_AUDIO_L1_BITRATE_192K = 5,
++ V4L2_MPEG_AUDIO_L1_BITRATE_224K = 6,
++ V4L2_MPEG_AUDIO_L1_BITRATE_256K = 7,
++ V4L2_MPEG_AUDIO_L1_BITRATE_288K = 8,
++ V4L2_MPEG_AUDIO_L1_BITRATE_320K = 9,
++ V4L2_MPEG_AUDIO_L1_BITRATE_352K = 10,
++ V4L2_MPEG_AUDIO_L1_BITRATE_384K = 11,
++ V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12,
++ V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13,
++};
++#define V4L2_CID_MPEG_AUDIO_L2_BITRATE (V4L2_CID_MPEG_BASE+103)
++enum v4l2_mpeg_audio_l2_bitrate {
++ V4L2_MPEG_AUDIO_L2_BITRATE_32K = 0,
++ V4L2_MPEG_AUDIO_L2_BITRATE_48K = 1,
++ V4L2_MPEG_AUDIO_L2_BITRATE_56K = 2,
++ V4L2_MPEG_AUDIO_L2_BITRATE_64K = 3,
++ V4L2_MPEG_AUDIO_L2_BITRATE_80K = 4,
++ V4L2_MPEG_AUDIO_L2_BITRATE_96K = 5,
++ V4L2_MPEG_AUDIO_L2_BITRATE_112K = 6,
++ V4L2_MPEG_AUDIO_L2_BITRATE_128K = 7,
++ V4L2_MPEG_AUDIO_L2_BITRATE_160K = 8,
++ V4L2_MPEG_AUDIO_L2_BITRATE_192K = 9,
++ V4L2_MPEG_AUDIO_L2_BITRATE_224K = 10,
++ V4L2_MPEG_AUDIO_L2_BITRATE_256K = 11,
++ V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12,
++ V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13,
++};
++#define V4L2_CID_MPEG_AUDIO_L3_BITRATE (V4L2_CID_MPEG_BASE+104)
++enum v4l2_mpeg_audio_l3_bitrate {
++ V4L2_MPEG_AUDIO_L3_BITRATE_32K = 0,
++ V4L2_MPEG_AUDIO_L3_BITRATE_40K = 1,
++ V4L2_MPEG_AUDIO_L3_BITRATE_48K = 2,
++ V4L2_MPEG_AUDIO_L3_BITRATE_56K = 3,
++ V4L2_MPEG_AUDIO_L3_BITRATE_64K = 4,
++ V4L2_MPEG_AUDIO_L3_BITRATE_80K = 5,
++ V4L2_MPEG_AUDIO_L3_BITRATE_96K = 6,
++ V4L2_MPEG_AUDIO_L3_BITRATE_112K = 7,
++ V4L2_MPEG_AUDIO_L3_BITRATE_128K = 8,
++ V4L2_MPEG_AUDIO_L3_BITRATE_160K = 9,
++ V4L2_MPEG_AUDIO_L3_BITRATE_192K = 10,
++ V4L2_MPEG_AUDIO_L3_BITRATE_224K = 11,
++ V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12,
++ V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13,
++};
++#define V4L2_CID_MPEG_AUDIO_MODE (V4L2_CID_MPEG_BASE+105)
++enum v4l2_mpeg_audio_mode {
++ V4L2_MPEG_AUDIO_MODE_STEREO = 0,
++ V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1,
++ V4L2_MPEG_AUDIO_MODE_DUAL = 2,
++ V4L2_MPEG_AUDIO_MODE_MONO = 3,
++};
++#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION (V4L2_CID_MPEG_BASE+106)
++enum v4l2_mpeg_audio_mode_extension {
++ V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4 = 0,
++ V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8 = 1,
++ V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2,
++ V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3,
++};
++#define V4L2_CID_MPEG_AUDIO_EMPHASIS (V4L2_CID_MPEG_BASE+107)
++enum v4l2_mpeg_audio_emphasis {
++ V4L2_MPEG_AUDIO_EMPHASIS_NONE = 0,
++ V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1,
++ V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17 = 2,
++};
++#define V4L2_CID_MPEG_AUDIO_CRC (V4L2_CID_MPEG_BASE+108)
++enum v4l2_mpeg_audio_crc {
++ V4L2_MPEG_AUDIO_CRC_NONE = 0,
++ V4L2_MPEG_AUDIO_CRC_CRC16 = 1,
++};
++#define V4L2_CID_MPEG_AUDIO_MUTE (V4L2_CID_MPEG_BASE+109)
++#define V4L2_CID_MPEG_AUDIO_AAC_BITRATE (V4L2_CID_MPEG_BASE+110)
++#define V4L2_CID_MPEG_AUDIO_AC3_BITRATE (V4L2_CID_MPEG_BASE+111)
++enum v4l2_mpeg_audio_ac3_bitrate {
++ V4L2_MPEG_AUDIO_AC3_BITRATE_32K = 0,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_40K = 1,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_48K = 2,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_56K = 3,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_64K = 4,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_80K = 5,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_96K = 6,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_112K = 7,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_128K = 8,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_160K = 9,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_192K = 10,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_224K = 11,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_256K = 12,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_320K = 13,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_384K = 14,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_448K = 15,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_512K = 16,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_576K = 17,
++ V4L2_MPEG_AUDIO_AC3_BITRATE_640K = 18,
++};
++
++/* MPEG video */
++#define V4L2_CID_MPEG_VIDEO_ENCODING (V4L2_CID_MPEG_BASE+200)
++enum v4l2_mpeg_video_encoding {
++ V4L2_MPEG_VIDEO_ENCODING_MPEG_1 = 0,
++ V4L2_MPEG_VIDEO_ENCODING_MPEG_2 = 1,
++ V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2,
++};
++#define V4L2_CID_MPEG_VIDEO_ASPECT (V4L2_CID_MPEG_BASE+201)
++enum v4l2_mpeg_video_aspect {
++ V4L2_MPEG_VIDEO_ASPECT_1x1 = 0,
++ V4L2_MPEG_VIDEO_ASPECT_4x3 = 1,
++ V4L2_MPEG_VIDEO_ASPECT_16x9 = 2,
++ V4L2_MPEG_VIDEO_ASPECT_221x100 = 3,
++};
++#define V4L2_CID_MPEG_VIDEO_B_FRAMES (V4L2_CID_MPEG_BASE+202)
++#define V4L2_CID_MPEG_VIDEO_GOP_SIZE (V4L2_CID_MPEG_BASE+203)
++#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE (V4L2_CID_MPEG_BASE+204)
++#define V4L2_CID_MPEG_VIDEO_PULLDOWN (V4L2_CID_MPEG_BASE+205)
++#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE (V4L2_CID_MPEG_BASE+206)
++enum v4l2_mpeg_video_bitrate_mode {
++ V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0,
++ V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1,
++};
++#define V4L2_CID_MPEG_VIDEO_BITRATE (V4L2_CID_MPEG_BASE+207)
++#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK (V4L2_CID_MPEG_BASE+208)
++#define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209)
++#define V4L2_CID_MPEG_VIDEO_MUTE (V4L2_CID_MPEG_BASE+210)
++#define V4L2_CID_MPEG_VIDEO_MUTE_YUV (V4L2_CID_MPEG_BASE+211)
++
++/* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
++#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)
++#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+0)
++enum v4l2_mpeg_cx2341x_video_spatial_filter_mode {
++ V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0,
++ V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO = 1,
++};
++#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+1)
++#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+2)
++enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type {
++ V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF = 0,
++ V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
++ V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_VERT = 2,
++ V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE = 3,
++ V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4,
++};
++#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+3)
++enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type {
++ V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF = 0,
++ V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1,
++};
++#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+4)
++enum v4l2_mpeg_cx2341x_video_temporal_filter_mode {
++ V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0,
++ V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO = 1,
++};
++#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+5)
++#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+6)
++enum v4l2_mpeg_cx2341x_video_median_filter_type {
++ V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF = 0,
++ V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR = 1,
++ V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_VERT = 2,
++ V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3,
++ V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG = 4,
++};
++#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+7)
++#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+8)
++#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9)
++#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10)
++#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11)
++
++/* Camera class control IDs */
++#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)
++#define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1)
++
++#define V4L2_CID_EXPOSURE_AUTO (V4L2_CID_CAMERA_CLASS_BASE+1)
++enum v4l2_exposure_auto_type {
++ V4L2_EXPOSURE_AUTO = 0,
++ V4L2_EXPOSURE_MANUAL = 1,
++ V4L2_EXPOSURE_SHUTTER_PRIORITY = 2,
++ V4L2_EXPOSURE_APERTURE_PRIORITY = 3
++};
++#define V4L2_CID_EXPOSURE_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+2)
++#define V4L2_CID_EXPOSURE_AUTO_PRIORITY (V4L2_CID_CAMERA_CLASS_BASE+3)
++
++#define V4L2_CID_PAN_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+4)
++#define V4L2_CID_TILT_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+5)
++#define V4L2_CID_PAN_RESET (V4L2_CID_CAMERA_CLASS_BASE+6)
++#define V4L2_CID_TILT_RESET (V4L2_CID_CAMERA_CLASS_BASE+7)
++
++#define V4L2_CID_PAN_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+8)
++#define V4L2_CID_TILT_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+9)
++
++#define V4L2_CID_FOCUS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+10)
++#define V4L2_CID_FOCUS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+11)
++#define V4L2_CID_FOCUS_AUTO (V4L2_CID_CAMERA_CLASS_BASE+12)
++
++#define V4L2_CID_ZOOM_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+13)
++#define V4L2_CID_ZOOM_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+14)
++#define V4L2_CID_ZOOM_CONTINUOUS (V4L2_CID_CAMERA_CLASS_BASE+15)
++
++#define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16)
++
++#define V4L2_CID_IRIS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+17)
++#define V4L2_CID_IRIS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+18)
++
++/* FM Modulator class control IDs */
++#define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900)
++#define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1)
++
++#define V4L2_CID_RDS_TX_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 1)
++#define V4L2_CID_RDS_TX_PI (V4L2_CID_FM_TX_CLASS_BASE + 2)
++#define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3)
++#define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5)
++#define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6)
++
++#define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64)
++#define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65)
++#define V4L2_CID_AUDIO_LIMITER_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 66)
++
++#define V4L2_CID_AUDIO_COMPRESSION_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 80)
++#define V4L2_CID_AUDIO_COMPRESSION_GAIN (V4L2_CID_FM_TX_CLASS_BASE + 81)
++#define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD (V4L2_CID_FM_TX_CLASS_BASE + 82)
++#define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83)
++#define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84)
++
++#define V4L2_CID_PILOT_TONE_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 96)
++#define V4L2_CID_PILOT_TONE_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 97)
++#define V4L2_CID_PILOT_TONE_FREQUENCY (V4L2_CID_FM_TX_CLASS_BASE + 98)
++
++#define V4L2_CID_TUNE_PREEMPHASIS (V4L2_CID_FM_TX_CLASS_BASE + 112)
++enum v4l2_preemphasis {
++ V4L2_PREEMPHASIS_DISABLED = 0,
++ V4L2_PREEMPHASIS_50_uS = 1,
++ V4L2_PREEMPHASIS_75_uS = 2,
++};
++#define V4L2_CID_TUNE_POWER_LEVEL (V4L2_CID_FM_TX_CLASS_BASE + 113)
++#define V4L2_CID_TUNE_ANTENNA_CAPACITOR (V4L2_CID_FM_TX_CLASS_BASE + 114)
++
++/*
++ * T U N I N G
++ */
++struct v4l2_tuner {
++ __u32 index;
++ __u8 name[32];
++ enum v4l2_tuner_type type;
++ __u32 capability;
++ __u32 rangelow;
++ __u32 rangehigh;
++ __u32 rxsubchans;
++ __u32 audmode;
++ __s32 signal;
++ __s32 afc;
++ __u32 reserved[4];
++};
++
++struct v4l2_modulator {
++ __u32 index;
++ __u8 name[32];
++ __u32 capability;
++ __u32 rangelow;
++ __u32 rangehigh;
++ __u32 txsubchans;
++ __u32 reserved[4];
++};
++
++/* Flags for the 'capability' field */
++#define V4L2_TUNER_CAP_LOW 0x0001
++#define V4L2_TUNER_CAP_NORM 0x0002
++#define V4L2_TUNER_CAP_STEREO 0x0010
++#define V4L2_TUNER_CAP_LANG2 0x0020
++#define V4L2_TUNER_CAP_SAP 0x0020
++#define V4L2_TUNER_CAP_LANG1 0x0040
++#define V4L2_TUNER_CAP_RDS 0x0080
++#define V4L2_TUNER_CAP_RDS_BLOCK_IO 0x0100
++#define V4L2_TUNER_CAP_RDS_CONTROLS 0x0200
++
++/* Flags for the 'rxsubchans' field */
++#define V4L2_TUNER_SUB_MONO 0x0001
++#define V4L2_TUNER_SUB_STEREO 0x0002
++#define V4L2_TUNER_SUB_LANG2 0x0004
++#define V4L2_TUNER_SUB_SAP 0x0004
++#define V4L2_TUNER_SUB_LANG1 0x0008
++#define V4L2_TUNER_SUB_RDS 0x0010
++
++/* Values for the 'audmode' field */
++#define V4L2_TUNER_MODE_MONO 0x0000
++#define V4L2_TUNER_MODE_STEREO 0x0001
++#define V4L2_TUNER_MODE_LANG2 0x0002
++#define V4L2_TUNER_MODE_SAP 0x0002
++#define V4L2_TUNER_MODE_LANG1 0x0003
++#define V4L2_TUNER_MODE_LANG1_LANG2 0x0004
++
++struct v4l2_frequency {
++ __u32 tuner;
++ enum v4l2_tuner_type type;
++ __u32 frequency;
++ __u32 reserved[8];
++};
++
++struct v4l2_hw_freq_seek {
++ __u32 tuner;
++ enum v4l2_tuner_type type;
++ __u32 seek_upward;
++ __u32 wrap_around;
++ __u32 spacing;
++ __u32 reserved[7];
++};
++
++/*
++ * R D S
++ */
++
++struct v4l2_rds_data {
++ __u8 lsb;
++ __u8 msb;
++ __u8 block;
++} __attribute__ ((packed));
++
++#define V4L2_RDS_BLOCK_MSK 0x7
++#define V4L2_RDS_BLOCK_A 0
++#define V4L2_RDS_BLOCK_B 1
++#define V4L2_RDS_BLOCK_C 2
++#define V4L2_RDS_BLOCK_D 3
++#define V4L2_RDS_BLOCK_C_ALT 4
++#define V4L2_RDS_BLOCK_INVALID 7
++
++#define V4L2_RDS_BLOCK_CORRECTED 0x40
++#define V4L2_RDS_BLOCK_ERROR 0x80
++
++/*
++ * A U D I O
++ */
++struct v4l2_audio {
++ __u32 index;
++ __u8 name[32];
++ __u32 capability;
++ __u32 mode;
++ __u32 reserved[2];
++};
++
++/* Flags for the 'capability' field */
++#define V4L2_AUDCAP_STEREO 0x00001
++#define V4L2_AUDCAP_AVL 0x00002
++
++/* Flags for the 'mode' field */
++#define V4L2_AUDMODE_AVL 0x00001
++
++struct v4l2_audioout {
++ __u32 index;
++ __u8 name[32];
++ __u32 capability;
++ __u32 mode;
++ __u32 reserved[2];
++};
++
++/*
++ * M P E G S E R V I C E S
++ *
++ * NOTE: EXPERIMENTAL API
++ */
++#if 1
++#define V4L2_ENC_IDX_FRAME_I (0)
++#define V4L2_ENC_IDX_FRAME_P (1)
++#define V4L2_ENC_IDX_FRAME_B (2)
++#define V4L2_ENC_IDX_FRAME_MASK (0xf)
++
++struct v4l2_enc_idx_entry {
++ __u64 offset;
++ __u64 pts;
++ __u32 length;
++ __u32 flags;
++ __u32 reserved[2];
++};
++
++#define V4L2_ENC_IDX_ENTRIES (64)
++struct v4l2_enc_idx {
++ __u32 entries;
++ __u32 entries_cap;
++ __u32 reserved[4];
++ struct v4l2_enc_idx_entry entry[V4L2_ENC_IDX_ENTRIES];
++};
++
++
++#define V4L2_ENC_CMD_START (0)
++#define V4L2_ENC_CMD_STOP (1)
++#define V4L2_ENC_CMD_PAUSE (2)
++#define V4L2_ENC_CMD_RESUME (3)
++
++/* Flags for V4L2_ENC_CMD_STOP */
++#define V4L2_ENC_CMD_STOP_AT_GOP_END (1 << 0)
++
++struct v4l2_encoder_cmd {
++ __u32 cmd;
++ __u32 flags;
++ union {
++ struct {
++ __u32 data[8];
++ } raw;
++ };
++};
++
++#endif
++
++
++/*
++ * D A T A S E R V I C E S ( V B I )
++ *
++ * Data services API by Michael Schimek
++ */
++
++/* Raw VBI */
++struct v4l2_vbi_format {
++ __u32 sampling_rate; /* in 1 Hz */
++ __u32 offset;
++ __u32 samples_per_line;
++ __u32 sample_format; /* V4L2_PIX_FMT_* */
++ __s32 start[2];
++ __u32 count[2];
++ __u32 flags; /* V4L2_VBI_* */
++ __u32 reserved[2]; /* must be zero */
++};
++
++/* VBI flags */
++#define V4L2_VBI_UNSYNC (1 << 0)
++#define V4L2_VBI_INTERLACED (1 << 1)
++
++/* Sliced VBI
++ *
++ * This implements is a proposal V4L2 API to allow SLICED VBI
++ * required for some hardware encoders. It should change without
++ * notice in the definitive implementation.
++ */
++
++struct v4l2_sliced_vbi_format {
++ __u16 service_set;
++ /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
++ service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
++ (equals frame lines 313-336 for 625 line video
++ standards, 263-286 for 525 line standards) */
++ __u16 service_lines[2][24];
++ __u32 io_size;
++ __u32 reserved[2]; /* must be zero */
++};
++
++/* Teletext World System Teletext
++ (WST), defined on ITU-R BT.653-2 */
++#define V4L2_SLICED_TELETEXT_B (0x0001)
++/* Video Program System, defined on ETS 300 231*/
++#define V4L2_SLICED_VPS (0x0400)
++/* Closed Caption, defined on EIA-608 */
++#define V4L2_SLICED_CAPTION_525 (0x1000)
++/* Wide Screen System, defined on ITU-R BT1119.1 */
++#define V4L2_SLICED_WSS_625 (0x4000)
++
++#define V4L2_SLICED_VBI_525 (V4L2_SLICED_CAPTION_525)
++#define V4L2_SLICED_VBI_625 (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
++
++struct v4l2_sliced_vbi_cap {
++ __u16 service_set;
++ /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
++ service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
++ (equals frame lines 313-336 for 625 line video
++ standards, 263-286 for 525 line standards) */
++ __u16 service_lines[2][24];
++ enum v4l2_buf_type type;
++ __u32 reserved[3]; /* must be 0 */
++};
++
++struct v4l2_sliced_vbi_data {
++ __u32 id;
++ __u32 field; /* 0: first field, 1: second field */
++ __u32 line; /* 1-23 */
++ __u32 reserved; /* must be 0 */
++ __u8 data[48];
++};
++
++/*
++ * Sliced VBI data inserted into MPEG Streams
++ */
++
++/*
++ * V4L2_MPEG_STREAM_VBI_FMT_IVTV:
++ *
++ * Structure of payload contained in an MPEG 2 Private Stream 1 PES Packet in an
++ * MPEG-2 Program Pack that contains V4L2_MPEG_STREAM_VBI_FMT_IVTV Sliced VBI
++ * data
++ *
++ * Note, the MPEG-2 Program Pack and Private Stream 1 PES packet header
++ * definitions are not included here. See the MPEG-2 specifications for details
++ * on these headers.
++ */
++
++/* Line type IDs */
++#define V4L2_MPEG_VBI_IVTV_TELETEXT_B (1)
++#define V4L2_MPEG_VBI_IVTV_CAPTION_525 (4)
++#define V4L2_MPEG_VBI_IVTV_WSS_625 (5)
++#define V4L2_MPEG_VBI_IVTV_VPS (7)
++
++struct v4l2_mpeg_vbi_itv0_line {
++ __u8 id; /* One of V4L2_MPEG_VBI_IVTV_* above */
++ __u8 data[42]; /* Sliced VBI data for the line */
++} __attribute__ ((packed));
++
++struct v4l2_mpeg_vbi_itv0 {
++ __le32 linemask[2]; /* Bitmasks of VBI service lines present */
++ struct v4l2_mpeg_vbi_itv0_line line[35];
++} __attribute__ ((packed));
++
++struct v4l2_mpeg_vbi_ITV0 {
++ struct v4l2_mpeg_vbi_itv0_line line[36];
++} __attribute__ ((packed));
++
++#define V4L2_MPEG_VBI_IVTV_MAGIC0 "itv0"
++#define V4L2_MPEG_VBI_IVTV_MAGIC1 "ITV0"
++
++struct v4l2_mpeg_vbi_fmt_ivtv {
++ __u8 magic[4];
++ union {
++ struct v4l2_mpeg_vbi_itv0 itv0;
++ struct v4l2_mpeg_vbi_ITV0 ITV0;
++ };
++} __attribute__ ((packed));
++
++/*
++ * A G G R E G A T E S T R U C T U R E S
++ */
++
++/**
++ * struct v4l2_plane_pix_format - additional, per-plane format definition
++ * @sizeimage: maximum size in bytes required for data, for which
++ * this plane will be used
++ * @bytesperline: distance in bytes between the leftmost pixels in two
++ * adjacent lines
++ */
++struct v4l2_plane_pix_format {
++ __u32 sizeimage;
++ __u16 bytesperline;
++ __u16 reserved[7];
++} __attribute__ ((packed));
++
++/**
++ * struct v4l2_pix_format_mplane - multiplanar format definition
++ * @width: image width in pixels
++ * @height: image height in pixels
++ * @pixelformat: little endian four character code (fourcc)
++ * @field: field order (for interlaced video)
++ * @colorspace: supplemental to pixelformat
++ * @plane_fmt: per-plane information
++ * @num_planes: number of planes for this format
++ */
++struct v4l2_pix_format_mplane {
++ __u32 width;
++ __u32 height;
++ __u32 pixelformat;
++ enum v4l2_field field;
++ enum v4l2_colorspace colorspace;
++
++ struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES];
++ __u8 num_planes;
++ __u8 reserved[11];
++} __attribute__ ((packed));
++
++/**
++ * struct v4l2_format - stream data format
++ * @type: type of the data stream
++ * @pix: definition of an image format
++ * @pix_mp: definition of a multiplanar image format
++ * @win: definition of an overlaid image
++ * @vbi: raw VBI capture or output parameters
++ * @sliced: sliced VBI capture or output parameters
++ * @raw_data: placeholder for future extensions and custom formats
++ */
++struct v4l2_format {
++ enum v4l2_buf_type type;
++ union {
++ struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
++ struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
++ struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
++ struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */
++ struct v4l2_sliced_vbi_format sliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
++ __u8 raw_data[200]; /* user-defined */
++ } fmt;
++};
++
++/* Stream type-dependent parameters
++ */
++struct v4l2_streamparm {
++ enum v4l2_buf_type type;
++ union {
++ struct v4l2_captureparm capture;
++ struct v4l2_outputparm output;
++ __u8 raw_data[200]; /* user-defined */
++ } parm;
++};
++
++/*
++ * E V E N T S
++ */
++
++#define V4L2_EVENT_ALL 0
++#define V4L2_EVENT_VSYNC 1
++#define V4L2_EVENT_EOS 2
++#define V4L2_EVENT_PRIVATE_START 0x08000000
++
++/* Payload for V4L2_EVENT_VSYNC */
++struct v4l2_event_vsync {
++ /* Can be V4L2_FIELD_ANY, _NONE, _TOP or _BOTTOM */
++ __u8 field;
++} __attribute__ ((packed));
++
++struct v4l2_event {
++ __u32 type;
++ union {
++ struct v4l2_event_vsync vsync;
++ __u8 data[64];
++ } u;
++ __u32 pending;
++ __u32 sequence;
++ struct timespec timestamp;
++ __u32 reserved[9];
++};
++
++struct v4l2_event_subscription {
++ __u32 type;
++ __u32 reserved[7];
++};
++
++/*
++ * A D V A N C E D D E B U G G I N G
++ *
++ * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS!
++ * FOR DEBUGGING, TESTING AND INTERNAL USE ONLY!
++ */
++
++/* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */
++
++#define V4L2_CHIP_MATCH_HOST 0 /* Match against chip ID on host (0 for the host) */
++#define V4L2_CHIP_MATCH_I2C_DRIVER 1 /* Match against I2C driver name */
++#define V4L2_CHIP_MATCH_I2C_ADDR 2 /* Match against I2C 7-bit address */
++#define V4L2_CHIP_MATCH_AC97 3 /* Match against anciliary AC97 chip */
++
++struct v4l2_dbg_match {
++ __u32 type; /* Match type */
++ union { /* Match this chip, meaning determined by type */
++ __u32 addr;
++ char name[32];
++ };
++} __attribute__ ((packed));
++
++struct v4l2_dbg_register {
++ struct v4l2_dbg_match match;
++ __u32 size; /* register size in bytes */
++ __u64 reg;
++ __u64 val;
++} __attribute__ ((packed));
++
++/* VIDIOC_DBG_G_CHIP_IDENT */
++struct v4l2_dbg_chip_ident {
++ struct v4l2_dbg_match match;
++ __u32 ident; /* chip identifier as specified in <media/v4l2-chip-ident.h> */
++ __u32 revision; /* chip revision, chip specific */
++} __attribute__ ((packed));
++
++/*
++ * I O C T L C O D E S F O R V I D E O D E V I C E S
++ *
++ */
++#define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
++#define VIDIOC_RESERVED _IO('V', 1)
++#define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
++#define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format)
++#define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format)
++#define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers)
++#define VIDIOC_QUERYBUF _IOWR('V', 9, struct v4l2_buffer)
++#define VIDIOC_G_FBUF _IOR('V', 10, struct v4l2_framebuffer)
++#define VIDIOC_S_FBUF _IOW('V', 11, struct v4l2_framebuffer)
++#define VIDIOC_OVERLAY _IOW('V', 14, int)
++#define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer)
++#define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer)
++#define VIDIOC_STREAMON _IOW('V', 18, int)
++#define VIDIOC_STREAMOFF _IOW('V', 19, int)
++#define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm)
++#define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm)
++#define VIDIOC_G_STD _IOR('V', 23, v4l2_std_id)
++#define VIDIOC_S_STD _IOW('V', 24, v4l2_std_id)
++#define VIDIOC_ENUMSTD _IOWR('V', 25, struct v4l2_standard)
++#define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input)
++#define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control)
++#define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control)
++#define VIDIOC_G_TUNER _IOWR('V', 29, struct v4l2_tuner)
++#define VIDIOC_S_TUNER _IOW('V', 30, struct v4l2_tuner)
++#define VIDIOC_G_AUDIO _IOR('V', 33, struct v4l2_audio)
++#define VIDIOC_S_AUDIO _IOW('V', 34, struct v4l2_audio)
++#define VIDIOC_QUERYCTRL _IOWR('V', 36, struct v4l2_queryctrl)
++#define VIDIOC_QUERYMENU _IOWR('V', 37, struct v4l2_querymenu)
++#define VIDIOC_G_INPUT _IOR('V', 38, int)
++#define VIDIOC_S_INPUT _IOWR('V', 39, int)
++#define VIDIOC_G_OUTPUT _IOR('V', 46, int)
++#define VIDIOC_S_OUTPUT _IOWR('V', 47, int)
++#define VIDIOC_ENUMOUTPUT _IOWR('V', 48, struct v4l2_output)
++#define VIDIOC_G_AUDOUT _IOR('V', 49, struct v4l2_audioout)
++#define VIDIOC_S_AUDOUT _IOW('V', 50, struct v4l2_audioout)
++#define VIDIOC_G_MODULATOR _IOWR('V', 54, struct v4l2_modulator)
++#define VIDIOC_S_MODULATOR _IOW('V', 55, struct v4l2_modulator)
++#define VIDIOC_G_FREQUENCY _IOWR('V', 56, struct v4l2_frequency)
++#define VIDIOC_S_FREQUENCY _IOW('V', 57, struct v4l2_frequency)
++#define VIDIOC_CROPCAP _IOWR('V', 58, struct v4l2_cropcap)
++#define VIDIOC_G_CROP _IOWR('V', 59, struct v4l2_crop)
++#define VIDIOC_S_CROP _IOW('V', 60, struct v4l2_crop)
++#define VIDIOC_G_JPEGCOMP _IOR('V', 61, struct v4l2_jpegcompression)
++#define VIDIOC_S_JPEGCOMP _IOW('V', 62, struct v4l2_jpegcompression)
++#define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id)
++#define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format)
++#define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio)
++#define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout)
++#define VIDIOC_G_PRIORITY _IOR('V', 67, enum v4l2_priority)
++#define VIDIOC_S_PRIORITY _IOW('V', 68, enum v4l2_priority)
++#define VIDIOC_G_SLICED_VBI_CAP _IOWR('V', 69, struct v4l2_sliced_vbi_cap)
++#define VIDIOC_LOG_STATUS _IO('V', 70)
++#define VIDIOC_G_EXT_CTRLS _IOWR('V', 71, struct v4l2_ext_controls)
++#define VIDIOC_S_EXT_CTRLS _IOWR('V', 72, struct v4l2_ext_controls)
++#define VIDIOC_TRY_EXT_CTRLS _IOWR('V', 73, struct v4l2_ext_controls)
++#if 1
++#define VIDIOC_ENUM_FRAMESIZES _IOWR('V', 74, struct v4l2_frmsizeenum)
++#define VIDIOC_ENUM_FRAMEINTERVALS _IOWR('V', 75, struct v4l2_frmivalenum)
++#define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx)
++#define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd)
++#define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd)
++#endif
++
++#if 1
++/* Experimental, meant for debugging, testing and internal use.
++ Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined.
++ You must be root to use these ioctls. Never use these in applications! */
++#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register)
++#define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register)
++
++/* Experimental, meant for debugging, testing and internal use.
++ Never use this ioctl in applications! */
++#define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident)
++#endif
++
++#define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek)
++#define VIDIOC_ENUM_DV_PRESETS _IOWR('V', 83, struct v4l2_dv_enum_preset)
++#define VIDIOC_S_DV_PRESET _IOWR('V', 84, struct v4l2_dv_preset)
++#define VIDIOC_G_DV_PRESET _IOWR('V', 85, struct v4l2_dv_preset)
++#define VIDIOC_QUERY_DV_PRESET _IOR('V', 86, struct v4l2_dv_preset)
++#define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings)
++#define VIDIOC_G_DV_TIMINGS _IOWR('V', 88, struct v4l2_dv_timings)
++#define VIDIOC_DQEVENT _IOR('V', 89, struct v4l2_event)
++#define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription)
++#define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
++
++#define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */
++
++#endif /* __LINUX_VIDEODEV2_H */
diff --git a/source/x/x11/patch/xf86-video-vesa.patch b/source/x/x11/patch/xf86-video-vesa.patch
deleted file mode 100644
index 17d7e8297..000000000
--- a/source/x/x11/patch/xf86-video-vesa.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
diff --git a/source/x/x11/patch/xf86-video-voodoo.patch b/source/x/x11/patch/xf86-video-voodoo.patch
index 17d7e8297..0c7b5a07a 100644
--- a/source/x/x11/patch/xf86-video-voodoo.patch
+++ b/source/x/x11/patch/xf86-video-voodoo.patch
@@ -5,3 +5,6 @@ done
grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
sed -i "s/miInitializeBackingStore(pScreen);//g" $file
done
+
+zcat $CWD/patch/xf86-video-voodoo/0001-don-t-use-PCITAG-in-struct-anymore.patch.gz \
+ | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/x/x11/patch/xf86-video-voodoo/0001-don-t-use-PCITAG-in-struct-anymore.patch b/source/x/x11/patch/xf86-video-voodoo/0001-don-t-use-PCITAG-in-struct-anymore.patch
new file mode 100644
index 000000000..1b3f31b31
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-voodoo/0001-don-t-use-PCITAG-in-struct-anymore.patch
@@ -0,0 +1,26 @@
+From 9172ae566a0e85313fc80ab62b4455393eefe593 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Mon, 22 Sep 2014 10:56:02 +1000
+Subject: [PATCH] don't use PCITAG in struct anymore
+
+---
+ src/voodoo.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/voodoo.h b/src/voodoo.h
+index bfed497..c3eb64e 100644
+--- a/src/voodoo.h
++++ b/src/voodoo.h
+@@ -23,7 +23,9 @@ typedef struct {
+
+ Bool Voodoo2; /* Set if Voodoo2 */
+ pciVideoPtr PciInfo; /* PCI data */
++#ifndef XSERVER_LIBPCIACCESS
+ PCITAG PciTag;
++#endif
+ CARD32 PhysBase;
+
+ CARD32 Width; /* Current width */
+--
+2.3.5
+
diff --git a/source/x/x11/patch/xf86-video-xgixp.patch b/source/x/x11/patch/xf86-video-xgixp.patch
index 17d7e8297..08bf4eba3 100644
--- a/source/x/x11/patch/xf86-video-xgixp.patch
+++ b/source/x/x11/patch/xf86-video-xgixp.patch
@@ -1,7 +1,11 @@
-# Remove obsolete references to mibstore.h and miInitializeBackingStore():
-grep -r -l '#include "mibstore.h"' * | while read file ; do
- sed -i "s/#include \"mibstore.h\"//g" $file
-done
-grep -r -l 'miInitializeBackingStore(pScreen);' | while read file ; do
- sed -i "s/miInitializeBackingStore(pScreen);//g" $file
-done
+zcat $CWD/patch/xf86-video-xgixp/0001-Remove-mibstore.h.patch.gz \
+ | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xf86-video-xgixp/0002-Remove-symbol-lists-as-they-are-not-used-any-more.patch.gz \
+ | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xf86-video-xgixp/0003-shadow-shadowInit-shadowAdd-Remove.patch.gz \
+ | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xf86-video-xgixp/0004-Stop-using-deprecated-xf86PciInfo.h.patch.gz \
+ | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xf86-video-xgixp/0005-Update-for-new-damage-API.patch.gz \
+ | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/source/x/x11/patch/xf86-video-xgixp/0001-Remove-mibstore.h.patch b/source/x/x11/patch/xf86-video-xgixp/0001-Remove-mibstore.h.patch
new file mode 100644
index 000000000..650df0631
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-xgixp/0001-Remove-mibstore.h.patch
@@ -0,0 +1,37 @@
+From a84753dd495bcfd724406cae470e17d0c561d0c3 Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Tue, 25 Sep 2012 08:55:05 -0400
+Subject: [PATCH 1/5] Remove mibstore.h
+
+Signed-off-by: Adam Jackson <ajax@redhat.com>
+---
+ src/xgi_driver.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/src/xgi_driver.c b/src/xgi_driver.c
+index 580a03a..8ce071b 100644
+--- a/src/xgi_driver.c
++++ b/src/xgi_driver.c
+@@ -53,8 +53,6 @@
+
+ /* initialise a SW cursor */
+ #include "mipointer.h"
+-/* implementing backing store */
+-#include "mibstore.h"
+
+ /* colormap initialization */
+ #include "micmap.h"
+@@ -2041,10 +2039,6 @@ pScrn->pScreen = pScreen;
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "FB Manager init failed \n");
+ }
+
+- /* If backing store is to be supported (as is usually the case), initialise it. */
+- miInitializeBackingStore(pScreen);
+- XGIDebug(DBG_FUNCTION, "[DBG] Jong 06142006-After miInitializeBackingStore()\n");
+-
+ xf86SetBackingStore(pScreen);
+ XGIDebug(DBG_FUNCTION, "[DBG] Jong 06142006-After xf86SetBackingStore()\n");
+
+--
+2.3.5
+
diff --git a/source/x/x11/patch/xf86-video-xgixp/0002-Remove-symbol-lists-as-they-are-not-used-any-more.patch b/source/x/x11/patch/xf86-video-xgixp/0002-Remove-symbol-lists-as-they-are-not-used-any-more.patch
new file mode 100644
index 000000000..3460782f2
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-xgixp/0002-Remove-symbol-lists-as-they-are-not-used-any-more.patch
@@ -0,0 +1,176 @@
+From e881cbb7cc4aa2d3a4477fd3e0681dc35075457a Mon Sep 17 00:00:00 2001
+From: Egbert Eich <eich@freedesktop.org>
+Date: Fri, 19 Jul 2013 12:10:57 +0200
+Subject: [PATCH 2/5] Remove symbol lists as they are not used any more
+
+Remove symbol lists once used by the old Metrolink module
+loader to ensure that all symbols used by the driver are
+present.
+This module loader has been dropped ages ago, the function
+calls into this module loader to perform this verification
+has been dropped from this driver howver the symbol lists
+have survived - not referenced from anywhere any more.
+
+Reviewed-by: <wharms@bfs.de>
+Signed-off-by: Egbert Eich <eich@freedesktop.org>
+---
+ src/xgi_driver.c | 143 -------------------------------------------------------
+ 1 file changed, 143 deletions(-)
+
+diff --git a/src/xgi_driver.c b/src/xgi_driver.c
+index 8ce071b..c98fcf7 100644
+--- a/src/xgi_driver.c
++++ b/src/xgi_driver.c
+@@ -149,149 +149,6 @@ static void xg47_setup_fb_wrap(ReadMemoryProcPtr *read_ptr,
+ WriteMemoryProcPtr *write_ptr, DrawablePtr pDraw);
+ static void xg47_finish_fb_wrap(DrawablePtr pDraw);
+
+-
+-static const char *vgahwSymbols[] = {
+- "vgaHWBlankScreen",
+- "vgaHWddc1SetSpeedWeak",
+- "vgaHWFreeHWRec",
+- "vgaHWGetHWRec",
+- "vgaHWGetIOBase",
+- "vgaHWGetIndex",
+- "vgaHWInit",
+- "vgaHWLock",
+- "vgaHWMapMem",
+- "vgaHWProtect",
+- "vgaHWRestore",
+- "vgaHWSave",
+- "vgaHWSaveScreen",
+- "vgaHWSetMmioFuncs",
+- "vgaHWUnlock",
+- NULL
+-};
+-
+-static const char *ddcSymbols[] = {
+- "xf86DoEDID_DDC1",
+- "xf86DoEDID_DDC2",
+- "xf86PrintEDID",
+- "xf86SetDDCproperties",
+- NULL
+-};
+-
+-static const char *i2cSymbols[] = {
+- "xf86CreateI2CBusRec",
+- "xf86I2CBusInit",
+- NULL
+-};
+-
+-static const char *fbSymbols[] = {
+-#if X_BYTE_ORDER == X_BIG_ENDIAN
+- "wfbPictureInit",
+- "wfbScreenInit",
+-#else
+- "fbPictureInit",
+- "fbScreenInit",
+-#endif
+- NULL
+-};
+-
+-static const char *xaaSymbols[] = {
+- "XAACreateInfoRec",
+- "XAAestroyInfoRec",
+- "XAAFillSolidRects",
+- "XAAGetCopyROP",
+- "XAAGetPatternROP",
+- "XAAInit",
+- "XAAScreenIndex",
+- "XAAStippleScanlineFuncLSBFirst",
+- "XAAOverlayFBfuncs",
+- "XAACachePlanarMonoStipple",
+- "XAAHelpPatternROP",
+- NULL
+-};
+-
+-static const char *ramdacSymbols[] = {
+- "xf86CreateCursorInfoRec",
+- "xf86DestroyCursorInfoRec",
+- "xf86InitCursor",
+- NULL
+-};
+-
+-static const char *drmSymbols[] = {
+- "drmGetInterruptFromBusID",
+- "drmCtlInstHandler",
+- "drmCtlUninstHandler",
+- "drmCommandNone",
+- "drmCommandRead",
+- "drmCommandWrite",
+- "drmCommandWriteRead",
+- "drmFreeVersion",
+- "drmGetLibVersion",
+- "drmGetVersion",
+- "drmMap",
+- "drmUnmap",
+- NULL
+-};
+-
+-static const char *driSymbols[] = {
+- "DRICloseScreen",
+- "DRICreateInfoRec",
+- "DRIDestroyInfoRec",
+- "DRIFinishScreenInit",
+- "DRIGetContext",
+- "DRIGetDeviceInfo",
+- "DRIGetSAREAPrivate",
+- "DRILock",
+- "DRIQueryVersion",
+- "DRIScreenInit",
+- "DRIUnlock",
+- "DRICreatePCIBusID",
+- NULL
+-};
+-
+-static const char *vbeSymbols[] = {
+- "VBEInit",
+- "VBEDPMSSet",
+- "vbeDoEDID",
+- "vbeFree",
+- NULL
+-};
+-
+-static const char *int10Symbols[] = {
+- "xf86ExecX86int10",
+- "xf86FreeInt10",
+- "xf86InitInt10",
+- NULL
+-};
+-
+-static const char *shadowSymbols[] = {
+- "shadowInit",
+- NULL
+-};
+-
+-static const char *fbdevHWSymbols[] = {
+- "fbdevHWInit",
+- "fbdevHWUseBuildinMode",
+- "fbdevHWGetLineLength",
+- "fbdevHWGetVidmem",
+- "fbdevHWDPMSSet",
+- /* colormap */
+- "fbdevHWLoadPaletteWeak",
+- /* ScrnInfo hooks */
+- "fbdevHWAdjustFrameWeak",
+- "fbdevHWEnterVT",
+- "fbdevHWLeaveVT",
+- "fbdevHWModeInit",
+- "fbdevHWRestore",
+- "fbdevHWSave",
+- "fbdevHWSwitchModeWeak",
+- "fbdevHWValidModeWeak",
+- "fbdevHWMapMMIO",
+- "fbdevHWMapVidmem",
+- "fbdevHWUnmapMMIO",
+- "fbdevHWUnmapVidmem",
+- NULL
+-};
+-
+ #ifdef XSERVER_LIBPCIACCESS
+ #define XGI_DEVICE_MATCH(d, i) \
+ { 0x18ca, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) }
+--
+2.3.5
+
diff --git a/source/x/x11/patch/xf86-video-xgixp/0003-shadow-shadowInit-shadowAdd-Remove.patch b/source/x/x11/patch/xf86-video-xgixp/0003-shadow-shadowInit-shadowAdd-Remove.patch
new file mode 100644
index 000000000..5e6f1d75d
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-xgixp/0003-shadow-shadowInit-shadowAdd-Remove.patch
@@ -0,0 +1,79 @@
+From e5789dfd027424996711f366e036a933d1b98c3f Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Tue, 29 Jul 2014 09:37:18 -0400
+Subject: [PATCH 3/5] shadow: shadowInit -> shadowAdd/Remove
+
+Signed-off-by: Adam Jackson <ajax@redhat.com>
+---
+ src/xgi.h | 1 +
+ src/xgi_driver.c | 26 +++++++++++++++++++++++++-
+ 2 files changed, 26 insertions(+), 1 deletion(-)
+
+diff --git a/src/xgi.h b/src/xgi.h
+index 8cbe77d..e122f1c 100644
+--- a/src/xgi.h
++++ b/src/xgi.h
+@@ -534,6 +534,7 @@ typedef struct {
+ RefreshAreaFuncPtr RefreshArea;
+ CloseScreenProcPtr CloseScreen;
+ ScreenBlockHandlerProcPtr BlockHandler;
++ CreateScreenResourcesProcPtr CreateScreenResources;
+ xf86PointerMovedProc *PointerMoved;
+
+ struct xgi_regs savedReg;
+diff --git a/src/xgi_driver.c b/src/xgi_driver.c
+index c98fcf7..637e360 100644
+--- a/src/xgi_driver.c
++++ b/src/xgi_driver.c
+@@ -1702,6 +1702,25 @@ Bool XGIFBManagerInit(ScreenPtr pScreen)
+ return ret;
+ }
+
++static Bool
++XGICreateScreenResources(ScreenPtr pScreen)
++{
++ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
++ XGIPtr pXGI = XGIPTR(pScrn);
++ Bool ret;
++
++ pScreen->CreateScreenResources = pXGI->CreateScreenResources;
++ ret = pScreen->CreateScreenResources(pScreen);
++ pXGI->CreateScreenResources = pScreen->CreateScreenResources;
++ pScreen->CreateScreenResources = XGICreateScreenResources;
++
++ if (ret)
++ ret = shadowAdd(pScreen, pScreen->GetScreenPixmap(pScreen),
++ XGIShadowUpdate, NULL, 0, 0);
++
++ return ret;
++}
++
+ /* Called at the start of each server generation. */
+ Bool XGIScreenInit(SCREEN_INIT_ARGS_DECL)
+ {
+@@ -2011,7 +2030,10 @@ pScrn->pScreen = pScreen;
+ {
+ pXGI->RefreshArea = XGIRefreshArea;
+ }
+- shadowInit(pScreen, XGIShadowUpdate, 0);
++ if (!shadowSetup(pScreen))
++ return FALSE;
++ pXGI->CreateScreenResources = pScreen->CreateScreenResources;
++ pScreen->CreateScreenResources = XGICreateScreenResources;
+ }
+ XGIDebug(DBG_FUNCTION, "[DBG] Jong 06142006-After pXGI->isShadowFB\n");
+
+@@ -2272,8 +2294,10 @@ static Bool XGICloseScreen(CLOSE_SCREEN_ARGS_DECL)
+
+ if (pXGI->pShadow)
+ {
++ shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));
+ free(pXGI->pShadow);
+ pXGI->pShadow = NULL;
++ pScreen->CreateScreenResources = pXGI->CreateScreenResources;
+ }
+
+ if (pXGI->pDgaModes)
+--
+2.3.5
+
diff --git a/source/x/x11/patch/xf86-video-xgixp/0004-Stop-using-deprecated-xf86PciInfo.h.patch b/source/x/x11/patch/xf86-video-xgixp/0004-Stop-using-deprecated-xf86PciInfo.h.patch
new file mode 100644
index 000000000..5fe7b2484
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-xgixp/0004-Stop-using-deprecated-xf86PciInfo.h.patch
@@ -0,0 +1,27 @@
+From cb0ebfa54639619c11ea8277ab7573a5db7484f9 Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Tue, 29 Jul 2014 09:37:44 -0400
+Subject: [PATCH 4/5] Stop using deprecated xf86PciInfo.h
+
+Signed-off-by: Adam Jackson <ajax@redhat.com>
+---
+ src/xgi_driver.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/src/xgi_driver.c b/src/xgi_driver.c
+index 637e360..b440e85 100644
+--- a/src/xgi_driver.c
++++ b/src/xgi_driver.c
+@@ -43,9 +43,6 @@
+ #include <xf86RandR12.h>
+ #include "vbe.h"
+
+-/* PCI vendor/device definitions */
+-#include "xf86PciInfo.h"
+-
+ /* fbdevhw & vgahw */
+ #include "fbdevhw.h"
+ #include "vgaHW.h"
+--
+2.3.5
+
diff --git a/source/x/x11/patch/xf86-video-xgixp/0005-Update-for-new-damage-API.patch b/source/x/x11/patch/xf86-video-xgixp/0005-Update-for-new-damage-API.patch
new file mode 100644
index 000000000..d299b2ef5
--- /dev/null
+++ b/source/x/x11/patch/xf86-video-xgixp/0005-Update-for-new-damage-API.patch
@@ -0,0 +1,26 @@
+From e36331f3f2641900efe8363fe3dc15877a72c027 Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Wed, 8 Oct 2014 10:34:45 +0200
+Subject: [PATCH 5/5] Update for new damage API
+
+Signed-off-by: Adam Jackson <ajax@redhat.com>
+---
+ src/xgi_shadow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/xgi_shadow.c b/src/xgi_shadow.c
+index 80f3645..c146ce4 100644
+--- a/src/xgi_shadow.c
++++ b/src/xgi_shadow.c
+@@ -86,7 +86,7 @@ void XGIRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
+
+ void XGIShadowUpdate (ScreenPtr pScreen, shadowBufPtr pBuf)
+ {
+- RegionPtr pRegion = &pBuf->damage;
++ RegionPtr pRegion = DamageRegion(pBuf->pDamage);
+ ScrnInfoPtr pScrn;
+ pScrn = xf86ScreenToScrn(pScreen);
+
+--
+2.3.5
+
diff --git a/source/x/x11/patch/xinit.patch b/source/x/x11/patch/xinit.patch
new file mode 100644
index 000000000..dc996d964
--- /dev/null
+++ b/source/x/x11/patch/xinit.patch
@@ -0,0 +1,2 @@
+# LP is truly a one-man disaster...
+zcat $CWD/patch/xinit/xinit.remove.systemd.kludge.diff.gz | patch -p1 || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/x/x11/patch/xinit/xinit.remove.systemd.kludge.diff b/source/x/x11/patch/xinit/xinit.remove.systemd.kludge.diff
new file mode 100644
index 000000000..f51e4628d
--- /dev/null
+++ b/source/x/x11/patch/xinit/xinit.remove.systemd.kludge.diff
@@ -0,0 +1,19 @@
+--- ./startx.cpp.orig 2014-09-11 12:31:42.000000000 -0500
++++ ./startx.cpp 2015-03-29 23:35:06.133875707 -0500
+@@ -192,10 +192,12 @@
+ XCOMM When starting the defaultserver start X on the current tty to avoid
+ XCOMM the startx session being seen as inactive:
+ XCOMM "https://bugzilla.redhat.com/show_bug.cgi?id=806491"
+- tty=$(tty)
+- if expr match "$tty" '^/dev/tty[0-9]\+$' > /dev/null; then
+- tty_num=$(echo "$tty" | grep -oE '[0-9]+$')
+- vtarg="vt$tty_num"
++ if [ -x /usr/lib/systemd/systemd -o -x /lib/systemd/systemd ]; then
++ tty=$(tty)
++ if expr match "$tty" '^/dev/tty[0-9]\+$' > /dev/null; then
++ tty_num=$(echo "$tty" | grep -oE '[0-9]+$')
++ vtarg="vt$tty_num"
++ fi
+ fi
+ #endif
+
diff --git a/source/x/x11/patch/xorg-server.patch b/source/x/x11/patch/xorg-server.patch
index c0c4810fd..1e43b86e4 100644
--- a/source/x/x11/patch/xorg-server.patch
+++ b/source/x/x11/patch/xorg-server.patch
@@ -1,2 +1,2 @@
zcat $CWD/patch/xorg-server/x11.startwithblackscreen.diff.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-zcat $CWD/patch/xorg-server/xorg-server.CVE-2013-4396.diff.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xorg-server/xorg-server.combo.mouse.keyboard.layout.patch.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/x/x11/patch/xorg-server/xorg-server.CVE-2013-4396.diff b/source/x/x11/patch/xorg-server/xorg-server.CVE-2013-4396.diff
deleted file mode 100644
index 14c31782f..000000000
--- a/source/x/x11/patch/xorg-server/xorg-server.CVE-2013-4396.diff
+++ /dev/null
@@ -1,73 +0,0 @@
-From 7bddc2ba16a2a15773c2ea8947059afa27727764 Mon Sep 17 00:00:00 2001
-From: Alan Coopersmith <alan.coopersmith at oracle.com>
-Date: Mon, 16 Sep 2013 21:47:16 -0700
-Subject: [PATCH] Avoid use-after-free in dix/dixfonts.c: doImageText()
- [CVE-2013-4396]
-
-Save a pointer to the passed in closure structure before copying it
-and overwriting the *c pointer to point to our copy instead of the
-original. If we hit an error, once we free(c), reset c to point to
-the original structure before jumping to the cleanup code that
-references *c.
-
-Since one of the errors being checked for is whether the server was
-able to malloc(c->nChars * itemSize), the client can potentially pass
-a number of characters chosen to cause the malloc to fail and the
-error path to be taken, resulting in the read from freed memory.
-
-Since the memory is accessed almost immediately afterwards, and the
-X server is mostly single threaded, the odds of the free memory having
-invalid contents are low with most malloc implementations when not using
-memory debugging features, but some allocators will definitely overwrite
-the memory there, leading to a likely crash.
-
-Reported-by: Pedro Ribeiro <pedrib at gmail.com>
-Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
-Reviewed-by: Julien Cristau <jcristau at debian.org>
----
- dix/dixfonts.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/dix/dixfonts.c b/dix/dixfonts.c
-index feb765d..2e34d37 100644
---- a/dix/dixfonts.c
-+++ b/dix/dixfonts.c
-@@ -1425,6 +1425,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
- GC *pGC;
- unsigned char *data;
- ITclosurePtr new_closure;
-+ ITclosurePtr old_closure;
-
- /* We're putting the client to sleep. We need to
- save some state. Similar problem to that handled
-@@ -1436,12 +1437,14 @@ doImageText(ClientPtr client, ITclosurePtr c)
- err = BadAlloc;
- goto bail;
- }
-+ old_closure = c;
- *new_closure = *c;
- c = new_closure;
-
- data = malloc(c->nChars * itemSize);
- if (!data) {
- free(c);
-+ c = old_closure;
- err = BadAlloc;
- goto bail;
- }
-@@ -1452,6 +1455,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
- if (!pGC) {
- free(c->data);
- free(c);
-+ c = old_closure;
- err = BadAlloc;
- goto bail;
- }
-@@ -1464,6 +1468,7 @@ doImageText(ClientPtr client, ITclosurePtr c)
- FreeScratchGC(pGC);
- free(c->data);
- free(c);
-+ c = old_closure;
- err = BadAlloc;
- goto bail;
- }
diff --git a/source/x/x11/patch/xorg-server/xorg-server.combo.mouse.keyboard.layout.patch b/source/x/x11/patch/xorg-server/xorg-server.combo.mouse.keyboard.layout.patch
new file mode 100644
index 000000000..83f673030
--- /dev/null
+++ b/source/x/x11/patch/xorg-server/xorg-server.combo.mouse.keyboard.layout.patch
@@ -0,0 +1,49 @@
+--- b/Xi/exevents.c 2013-12-27 19:38:52.000000000 +0200
++++ a/Xi/exevents.c 2014-03-04 19:44:15.228721619 +0200
+@@ -665,7 +665,8 @@
+ DeepCopyFeedbackClasses(from, to);
+
+ if ((dce->flags & DEVCHANGE_KEYBOARD_EVENT))
+- DeepCopyKeyboardClasses(from, to);
++ /* We need to copy to MASTER_KEYBOARD. Didn't worked with 'to'. */
++ DeepCopyKeyboardClasses(from, GetMaster(from, MASTER_KEYBOARD));
+ if ((dce->flags & DEVCHANGE_POINTER_EVENT))
+ DeepCopyPointerClasses(from, to);
+ }
+--- b/dix/getevents.c 2013-12-27 19:38:52.000000000 +0200
++++ a/dix/getevents.c 2014-03-04 19:46:50.126336327 +0200
+@@ -706,12 +706,19 @@
+ {
+ DeviceIntPtr master;
+
+- master =
+- GetMaster(dev,
+- (type & DEVCHANGE_POINTER_EVENT) ? MASTER_POINTER :
+- MASTER_KEYBOARD);
++ /* Don't guess the master upon the event type. Use MASTER_ATTACHED,
++ * otherwise we'll never get a DeviceChangedEvent(reason:SlaveSwith). */
++ master = GetMaster(dev, MASTER_ATTACHED);
++ /* Need to track the slave event type. Other we'le never get a
++ * DeviceChangedEvent(reason:SlaveSwith) for the 'keyboard' if the
++ * 'pointer' has been touched before. */
++ int slave_type = (type & DEVCHANGE_KEYBOARD_EVENT) |
++ (type & DEVCHANGE_POINTER_EVENT);
+
+- if (master && master->last.slave != dev) {
++ if (master &&
++ ((master->last.slave != dev) ||
++ (master->last.slave == dev && master->last.slave_type != slave_type))) {
++ master->last.slave_type = slave_type;
+ CreateClassesChangedEvent(events, master, dev,
+ type | DEVCHANGE_SLAVE_SWITCH);
+ if (IsPointerDevice(master)) {
+--- b/include/inputstr.h 2013-12-27 19:38:52.000000000 +0200
++++ a/include/inputstr.h 2014-03-04 19:47:28.074051116 +0200
+@@ -577,6 +577,7 @@
+ double valuators[MAX_VALUATORS];
+ int numValuators;
+ DeviceIntPtr slave;
++ int slave_type;
+ ValuatorMask *scroll;
+ int num_touches; /* size of the touches array */
+ DDXTouchPointInfoPtr touches;
diff --git a/source/x/x11/post-install/xf86-input-libinput.post-install b/source/x/x11/post-install/xf86-input-libinput.post-install
new file mode 100644
index 000000000..baeffe2e8
--- /dev/null
+++ b/source/x/x11/post-install/xf86-input-libinput.post-install
@@ -0,0 +1,4 @@
+# Add default configuration file:
+mkdir -p $PKG/usr/share/X11/xorg.conf.d
+cp -a conf/99-libinput.conf $PKG/usr/share/X11/xorg.conf.d/
+
diff --git a/source/x/x11/post-install/xf86-input-wacom.post-install b/source/x/x11/post-install/xf86-input-wacom.post-install
index d2b17ecc5..f6d9f8538 100644
--- a/source/x/x11/post-install/xf86-input-wacom.post-install
+++ b/source/x/x11/post-install/xf86-input-wacom.post-install
@@ -1,5 +1,10 @@
# I'm not sure we need this any more, so let's wait for a bug report
# https://wiki.archlinux.org/index.php/Wacom_Tablet
mkdir -p $PKG/lib/udev/rules.d
+rm -f $PKG/lib/udev/rules.d/*wacom.rules
cat $CWD/post-install/xf86-input-wacom/60-wacom.rules > \
$PKG/lib/udev/rules.d/60-wacom.rules
+
+# We don't need this right now:
+rm -rf $PKG/usr/lib*/systemd
+
diff --git a/source/x/x11/post-install/xf86-input-wacom/60-wacom.rules b/source/x/x11/post-install/xf86-input-wacom/60-wacom.rules
index 59224786a..aa96d4bef 100644
--- a/source/x/x11/post-install/xf86-input-wacom/60-wacom.rules
+++ b/source/x/x11/post-install/xf86-input-wacom/60-wacom.rules
@@ -1,6 +1,17 @@
-# From https://wiki.archlinux.org/index.php/Wacom_Tablet
ACTION!="add|change", GOTO="wacom_end"
- # Match all wacom tablets with a serial ID starting with WACf or FUJ*
- ATTRS{id}=="WACf*" ENV{NAME}="Serial Wacom Tablet", ENV{ID_INPUT}="1", ENV{ID_INPUT_TABLET}="1"
- ATTRS{id}=="FUJ*" ENV{NAME}="Serial Wacom Tablet", ENV{ID_INPUT}="1", ENV{ID_INPUT_TABLET}="1"
+
+# Match all serial wacom tablets with a serial ID starting with WACf
+# Notes: We assign NAME though we shouldn't, but currently the server requires it
+# We assign the lot to subsystem pnp too because server reads NAME from
+# the parent device. Once all that's fixed, as simple SUBSYSTEM="tty"
+# will do and the ENV{NAME} can be removed.
+SUBSYSTEM=="tty|pnp", SUBSYSTEMS=="pnp", ATTRS{id}=="WACf*", ENV{ID_MODEL}="Serial Wacom Tablet $attr{id}", ENV{ID_INPUT}="1", ENV{ID_INPUT_TABLET}="1", ENV{NAME}="Serial Wacom Tablet $attr{id}"
+SUBSYSTEM=="tty|pnp", SUBSYSTEMS=="pnp", ATTRS{id}=="FUJ*", ENV{ID_MODEL}="Serial Wacom Tablet $attr{id}", ENV{ID_INPUT}="1", ENV{ID_INPUT_TABLET}="1", ENV{NAME}="Serial Wacom Tablet $attr{id}"
+
+# comment out the next line if your distribution does not provide systemd
+# If a /dev/ttySx device with the WACf name is detected, start the
+# wacom-inputattach service with the kernel name as parameter
+#SUBSYSTEM=="tty|pnp", KERNEL=="ttyS[0-9]*", ATTRS{id}=="WACf*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="wacom-inputattach@%k.service"
+
LABEL="wacom_end"
+
diff --git a/source/x/x11/post-install/xf86-video-intel.post-install b/source/x/x11/post-install/xf86-video-intel.post-install
new file mode 100644
index 000000000..10d5630db
--- /dev/null
+++ b/source/x/x11/post-install/xf86-video-intel.post-install
@@ -0,0 +1,2 @@
+install -D -m 0755 tools/dri3info $PKG/usr/bin/dri3info || exit 1
+strip --strip-unneeded $PKG/usr/bin/dri3info
diff --git a/source/x/x11/slack-desc/dri3proto b/source/x/x11/slack-desc/dri3proto
new file mode 100644
index 000000000..9f9b4a22c
--- /dev/null
+++ b/source/x/x11/slack-desc/dri3proto
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+dri3proto: dri3proto (C prototypes for X11 Direct Rendering Infrastructure 3)
+dri3proto:
+dri3proto: dri3proto is part of X11.
+dri3proto:
+dri3proto: For more information about the X.Org Foundation (the providers of the
+dri3proto: X.Org implementation of the X Window System), see their website:
+dri3proto:
+dri3proto: http://www.x.org
+dri3proto:
+dri3proto:
+dri3proto:
diff --git a/source/x/x11/slack-desc/glamor-egl b/source/x/x11/slack-desc/glamor-egl
new file mode 100644
index 000000000..542e8f9ce
--- /dev/null
+++ b/source/x/x11/slack-desc/glamor-egl
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+glamor-egl: glamor-egl (GL-based rendering acceleration library)
+glamor-egl:
+glamor-egl: The Glamor EGL package contains a GL-based rendering acceleration
+glamor-egl: library for X server.
+glamor-egl:
+glamor-egl:
+glamor-egl:
+glamor-egl:
+glamor-egl:
+glamor-egl:
+glamor-egl:
diff --git a/source/x/x11/slack-desc/libXpresent b/source/x/x11/slack-desc/libXpresent
new file mode 100644
index 000000000..d5602d63d
--- /dev/null
+++ b/source/x/x11/slack-desc/libXpresent
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+libXpresent: libXpresent (library for the Present extension to the X11 protocol)
+libXpresent:
+libXpresent: libXpresent is part of X11.
+libXpresent:
+libXpresent: For more information about the X.Org Foundation (the providers of the
+libXpresent: X.Org implementation of the X Window System), see their website:
+libXpresent:
+libXpresent: http://www.x.org
+libXpresent:
+libXpresent:
+libXpresent:
diff --git a/source/x/x11/slack-desc/libxshmfence b/source/x/x11/slack-desc/libxshmfence
new file mode 100644
index 000000000..4a4a5de1a
--- /dev/null
+++ b/source/x/x11/slack-desc/libxshmfence
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+libxshmfence: libxshmfence (The X Shared Memory Fence Library)
+libxshmfence:
+libxshmfence: libxshmfence is part of X11.
+libxshmfence:
+libxshmfence: For more information about the X.Org Foundation (the providers of the
+libxshmfence: X.Org implementation of the X Window System), see their website:
+libxshmfence:
+libxshmfence: http://www.x.org
+libxshmfence:
+libxshmfence:
+libxshmfence:
diff --git a/source/x/x11/slack-desc/presentproto b/source/x/x11/slack-desc/presentproto
new file mode 100644
index 000000000..8443306bf
--- /dev/null
+++ b/source/x/x11/slack-desc/presentproto
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+presentproto: presentproto (X.Org Present protocol specification)
+presentproto:
+presentproto: X.Org Present protocol specification and Xlib/Xserver headers
+presentproto:
+presentproto:
+presentproto:
+presentproto:
+presentproto:
+presentproto:
+presentproto:
+presentproto:
diff --git a/source/x/x11/slack-desc/xcb-util-errors b/source/x/x11/slack-desc/xcb-util-errors
new file mode 100644
index 000000000..ecf868d67
--- /dev/null
+++ b/source/x/x11/slack-desc/xcb-util-errors
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+xcb-util-errors: xcb-util-errors (XCB error debugging library)
+xcb-util-errors:
+xcb-util-errors: xcb-util-errors is a utility library that gives human readable names
+xcb-util-errors: to error codes and event codes and also to major and minor numbers.
+xcb-util-errors: The necessary information is drawn from xcb-proto's protocol
+xcb-util-errors: descriptions. This library is especially useful when working with
+xcb-util-errors: extensions and is mostly useful for debugging.
+xcb-util-errors:
+xcb-util-errors:
+xcb-util-errors:
+xcb-util-errors:
diff --git a/source/x/x11/slack-desc/xf86-input-libinput b/source/x/x11/slack-desc/xf86-input-libinput
new file mode 100644
index 000000000..5e17c4cd4
--- /dev/null
+++ b/source/x/x11/slack-desc/xf86-input-libinput
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+xf86-input-libinput: xf86-input-libinput (libinput-based X driver)
+xf86-input-libinput:
+xf86-input-libinput: This is an X driver based on libinput.
+xf86-input-libinput:
+xf86-input-libinput: For more information about the X.Org Foundation (the providers of the
+xf86-input-libinput: X.Org implementation of the X Window System), see their website:
+xf86-input-libinput:
+xf86-input-libinput: http://www.x.org
+xf86-input-libinput:
+xf86-input-libinput:
+xf86-input-libinput:
diff --git a/source/x/x11/slack-desc/xf86-video-amdgpu b/source/x/x11/slack-desc/xf86-video-amdgpu
new file mode 100644
index 000000000..e17681407
--- /dev/null
+++ b/source/x/x11/slack-desc/xf86-video-amdgpu
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+xf86-video-amdgpu: xf86-video-amdgpu (AMD GPU driver for the Xorg X server)
+xf86-video-amdgpu:
+xf86-video-amdgpu: xf86-video-amdgpu is part of X11.
+xf86-video-amdgpu:
+xf86-video-amdgpu: For more information about the X.Org Foundation (the providers of the
+xf86-video-amdgpu: X.Org implementation of the X Window System), see their website:
+xf86-video-amdgpu:
+xf86-video-amdgpu: http://www.x.org
+xf86-video-amdgpu:
+xf86-video-amdgpu:
+xf86-video-amdgpu:
diff --git a/source/x/x11/src/get-xf86-video-intel.sh b/source/x/x11/src/get-xf86-video-intel.sh
new file mode 100755
index 000000000..c4e8b8c0a
--- /dev/null
+++ b/source/x/x11/src/get-xf86-video-intel.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Copyright 2016 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Pull a stable branch + patches
+BRANCH=${1:-master}
+
+# Clear download area:
+rm -rf xf86-video-intel
+
+# Clone repository:
+git clone git://git.freedesktop.org/git/xorg/driver/xf86-video-intel/
+
+# checkout $BRANCH:
+( cd xf86-video-intel
+ git checkout $BRANCH || exit 1
+)
+
+HEADISAT="$( cd xf86-video-intel && git log -1 --format=%h )"
+DATE="$( cd xf86-video-intel && git log -1 --format=%ad --date=format:%Y%m%d )"
+# Cleanup. We're not packing up the whole git repo.
+( cd xf86-video-intel && find . -type d -name ".git*" -exec rm -rf {} \; 2> /dev/null )
+mv xf86-video-intel xf86-video-intel-git_${DATE}_${HEADISAT}
+tar cf xf86-video-intel-git_${DATE}_${HEADISAT}.tar xf86-video-intel-git_${DATE}_${HEADISAT}
+xz -9 -f xf86-video-intel-git_${DATE}_${HEADISAT}.tar
+rm -rf xf86-video-intel-git_${DATE}_${HEADISAT}
+echo
+echo "xf86-video-intel branch $BRANCH with HEAD at $HEADISAT packaged as xf86-video-intel-git_${DATE}_${HEADISAT}.tar.xz"
+echo
diff --git a/source/x/x11/src/get-xf86-video-nouveau.sh b/source/x/x11/src/get-xf86-video-nouveau.sh
index 9a21febde..4e495dd2a 100755
--- a/source/x/x11/src/get-xf86-video-nouveau.sh
+++ b/source/x/x11/src/get-xf86-video-nouveau.sh
@@ -1,27 +1,46 @@
+#!/bin/sh
+
+# Copyright 2016 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
# Pull a stable branch + patches
-BRANCH=master
+BRANCH=${1:-master}
+
+# Clear download area:
+rm -rf xf86-video-nouveau
-#rm -rf xf86-video-nouveau
-if [ -d xf86-video-nouveau ]; then
- cd xf86-video-nouveau
- git pull -f
- cd ..
-else
- git clone git://anongit.freedesktop.org/git/nouveau/xf86-video-nouveau/
-fi
+# Clone repository:
+git clone git://anongit.freedesktop.org/git/nouveau/xf86-video-nouveau/
-# use master branch
-#( cd xf86-video-nouveau
-# git checkout $BRANCH || exit 1
-#)
+# checkout $BRANCH:
+( cd xf86-video-nouveau
+ git checkout $BRANCH || exit 1
+)
-HEADISAT="$(cat xf86-video-nouveau/.git/packed-refs | grep refs/remotes/origin/$BRANCH | cut -b1-7)"
+HEADISAT="$( cd xf86-video-nouveau && git log -1 --format=%h )"
+DATE="$( cd xf86-video-nouveau && git log -1 --format=%ad --date=format:%Y%m%d )"
# Cleanup. We're not packing up the whole git repo.
( cd xf86-video-nouveau && find . -type d -name ".git*" -exec rm -rf {} \; 2> /dev/null )
-DATE=$(date +%Y%m%d)
mv xf86-video-nouveau xf86-video-nouveau-git_${DATE}_${HEADISAT}
tar cf xf86-video-nouveau-git_${DATE}_${HEADISAT}.tar xf86-video-nouveau-git_${DATE}_${HEADISAT}
-xz -9 xf86-video-nouveau-git_${DATE}_${HEADISAT}.tar
+xz -9 -f xf86-video-nouveau-git_${DATE}_${HEADISAT}.tar
rm -rf xf86-video-nouveau-git_${DATE}_${HEADISAT}
echo
echo "xf86-video-nouveau branch $BRANCH with HEAD at $HEADISAT packaged as xf86-video-nouveau-git_${DATE}_${HEADISAT}.tar.xz"
diff --git a/source/x/x11/src/get-xf86-video-openchrome.sh b/source/x/x11/src/get-xf86-video-openchrome.sh
new file mode 100755
index 000000000..4959465b4
--- /dev/null
+++ b/source/x/x11/src/get-xf86-video-openchrome.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Copyright 2016 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Pull a stable branch + patches
+BRANCH=${1:-master}
+
+# Clear download area:
+rm -rf xf86-video-openchrome
+
+# Clone repository:
+git clone git://anongit.freedesktop.org/git/openchrome/xf86-video-openchrome/
+
+# checkout $BRANCH:
+( cd xf86-video-openchrome
+ git checkout $BRANCH || exit 1
+)
+
+HEADISAT="$( cd xf86-video-openchrome && git log -1 --format=%h )"
+DATE="$( cd xf86-video-openchrome && git log -1 --format=%ad --date=format:%Y%m%d )"
+# Cleanup. We're not packing up the whole git repo.
+( cd xf86-video-openchrome && find . -type d -name ".git*" -exec rm -rf {} \; 2> /dev/null )
+mv xf86-video-openchrome xf86-video-openchrome-git_${DATE}_${HEADISAT}
+tar cf xf86-video-openchrome-git_${DATE}_${HEADISAT}.tar xf86-video-openchrome-git_${DATE}_${HEADISAT}
+xz -9 -f xf86-video-openchrome-git_${DATE}_${HEADISAT}.tar
+rm -rf xf86-video-openchrome-git_${DATE}_${HEADISAT}
+echo
+echo "xf86-video-openchrome branch $BRANCH with HEAD at $HEADISAT packaged as xf86-video-openchrome-git_${DATE}_${HEADISAT}.tar.xz"
+echo
diff --git a/source/x/x11/src/xf86-input-wacom.url b/source/x/x11/src/xf86-input-wacom.url
new file mode 100644
index 000000000..6bb92bba2
--- /dev/null
+++ b/source/x/x11/src/xf86-input-wacom.url
@@ -0,0 +1 @@
+https://sourceforge.net/projects/linuxwacom/files
diff --git a/source/x/x11/x11.SlackBuild b/source/x/x11/x11.SlackBuild
index 6da53346f..d2d75e4f0 100755
--- a/source/x/x11/x11.SlackBuild
+++ b/source/x/x11/x11.SlackBuild
@@ -1,5 +1,5 @@
#!/bin/sh
-# Copyright 2007-2013 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2007-2014 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -26,7 +26,10 @@
# ./x11.SlackBuild lib libX11
# Upgrade packages as they are built.
-# This is default. To not upgrade, pass UPGRADE_PACKAGES=no (or anything else).
+# Default is to upgrade new packages (UPGRADE_PACKAGES=yes).
+# To install ALL newly built packages (even if they are already installed),
+# use UPGRADE_PACKAGES=always
+# To not upgrade, pass UPGRADE_PACKAGES=no
UPGRADE_PACKAGES=${UPGRADE_PACKAGES:-yes}
pkgbase() {
@@ -58,7 +61,7 @@ TMP=${TMP:-/tmp}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
- i?86) export ARCH=i486 ;;
+ i?86) export ARCH=i586 ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
*) export ARCH=$( uname -m ) ;;
@@ -275,6 +278,8 @@ mkdir -p $SLACK_X_BUILD_DIR
/sbin/makepkg -l y -c n ${SLACK_X_BUILD_DIR}/${PKGNAME}-${MODULAR_PACKAGE_VERSION}-${PKGARCH}-${MODBUILD}.txz
if [ "$UPGRADE_PACKAGES" = "yes" ]; then
/sbin/upgradepkg --install-new ${SLACK_X_BUILD_DIR}/${PKGNAME}-${MODULAR_PACKAGE_VERSION}-${PKGARCH}-${MODBUILD}.txz
+ elif [ "$UPGRADE_PACKAGES" = "always" ]; then
+ /sbin/upgradepkg --install-new --reinstall ${SLACK_X_BUILD_DIR}/${PKGNAME}-${MODULAR_PACKAGE_VERSION}-${PKGARCH}-${MODBUILD}.txz
fi
fi
fi
@@ -329,6 +334,8 @@ mkdir -p $SLACK_X_BUILD_DIR
/sbin/makepkg -l y -c n ${SLACK_X_BUILD_DIR}/x11-${x_source_dir}-${VERSION}-${PKGARCH}-${SRCDIRBUILD}.txz
if [ "$UPGRADE_PACKAGES" = "yes" ]; then
/sbin/upgradepkg --install-new ${SLACK_X_BUILD_DIR}/x11-${x_source_dir}-${VERSION}-${PKGARCH}-${SRCDIRBUILD}.txz
+ elif [ "$UPGRADE_PACKAGES" = "always" ]; then
+ /sbin/upgradepkg --install-new --reinstall ${SLACK_X_BUILD_DIR}/x11-${x_source_dir}-${VERSION}-${PKGARCH}-${SRCDIRBUILD}.txz
fi
fi
)