Compare commits

...

56 Commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult
3c6deb7df5 gitlab CI: add libdrm with freedreno, nouveau, omap
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2024-06-07 17:14:19 +02:00
Enrico Weigelt, metux IT consult
81d7edd384 gitlab CI: add debian-i386 build
Add CI jobs for building on debian-i386 (just had amd64 yet), so we can
also test 32bit targets.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2024-06-07 10:27:46 +02:00
Enrico Weigelt, metux IT consult
6bdea80acc gitlab CI: add pipeline for building against various Xserver releases
Adding a gitlab pipeline building this driver against Xserver major releases
since 1.18, including current master branch, on FreeBSD and Debian.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2024-06-06 17:28:02 +02:00
Enrico Weigelt, metux IT consult
0f89fbffcb gitlab CI: common scripts for driver builds
Adding a bunch of common scripts for building xorg drivers on different
platforms (for now Debian and FreeBSD) against different server versions.

Also designed to be executed locally (eg. within a VM), so one doesn't
always have to employ f.d.o gitlab.

For now, these are synced manually across various driver repos, until we've
found a viable solution for a central place.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2024-06-06 17:27:45 +02:00
Enrico Weigelt, metux IT consult
c8d9f3be7e drop compat with ancient xservers
We're relying on >= 1.18 now, so no compat with older ones needed.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/driver/xf86-video-fbdev/-/merge_requests/8>
2024-05-28 14:38:46 +02:00
Alan Coopersmith
ae894fe112 Raise minimum supported Xserver version to 1.18 (ABI_VIDEODRV_VERSION 20.0)
Already effectively required by use of XNFcallocarray() introduced in
xorg/xserver@b96dc999 - xserver-1.18.0, released in Nov. 2015.

Allows dropping remnants of code for ISA and pre-pciaccess X servers

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/driver/xf86-video-fbdev/-/merge_requests/7>
2024-05-14 11:16:37 -07:00
Enrico Weigelt, metux IT consult
dc48c20ceb use XNFcallocarray() instead of xnfcalloc macro
xnfcalloc is just an alias for XNFcallocarray() that doesn't seem to serve
any practical purpose, so it can go away once all drivers stopped using it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/driver/xf86-video-fbdev/-/merge_requests/5>
2024-05-08 15:46:23 +02:00
Alan Coopersmith
7bccdf4373 Fix warning: unused variable ‘scrnIdx’ [-Wunused-variable]
fbdev.c: In function ‘FBDevDGASetMode’:
fbdev.c:1145:9: warning: unused variable ‘scrnIdx’ [-Wunused-variable]
 1145 |     int scrnIdx = pScrn->pScreen->myNum;
      |         ^~~~~~~

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-01-15 10:08:31 -08:00
Alan Coopersmith
112b6c1153 Fix warning: statement with no effect [-Wunused-value]
fbdev.c: In function ‘FBDevProbe’:
fbdev.c:355:21: warning: statement with no effect [-Wunused-value]
  355 |                     0;
      |                     ^

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-01-15 10:08:23 -08:00
Alan Coopersmith
89728ce1d6 Add X.Org's standard C warning flags to AM_CFLAGS
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-01-07 09:19:53 -08:00
Alan Coopersmith
554d6fda21 configure: Use LT_INIT from libtool 2 instead of deprecated AC_PROG_LIBTOOL
AC_PROG_LIBTOOL was replaced by LT_INIT in libtool 2 in 2008,
so it's time to rely on it.

Clears autoconf warnings:

configure.ac:44: warning: The macro 'AC_PROG_LIBTOOL' is obsolete.
configure.ac:44: You should run autoupdate.
aclocal.m4:3515: AC_PROG_LIBTOOL is expanded from...
configure.ac:44: the top level

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-01-07 09:17:53 -08:00
Alan Coopersmith
7f445dbd5a gitlab CI: ensure libtool is installed in build container
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-10-01 13:10:19 -07:00
Alan Coopersmith
a8aa1c97f9 gitlab CI: stop requiring Signed-off-by in commits
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-02-09 12:06:56 -08:00
Alan Coopersmith
6ef9644156 gitlab CI: add a basic build test
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-01-22 10:26:32 -08:00
Alan Coopersmith
cf1875209c Fix spelling/wording issues
Found by using:
    codespell --builtin clear,rare,usage,informal,code,names

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-01-22 10:25:44 -08:00
Alan Coopersmith
2850cd86d1 Build xz tarballs instead of bzip2
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-01-22 10:25:12 -08:00
Tuomo Rinne
4730f13b92 Fix build error when building with xserver built using meson 2019-01-14 22:33:42 +00:00
Alan Coopersmith
4865f92f74 Update configure.ac bug URL for gitlab migration
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2018-11-25 13:57:38 -08:00
Alan Coopersmith
f676c9def1 Update README for gitlab migration
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2018-11-18 12:35:19 -08:00
Adam Jackson
82aa13d013 fbdev 0.5.0
Signed-off-by: Adam Jackson <ajax@redhat.com>
2018-05-30 12:31:25 -04:00
Adam Jackson
67525c485f Update for 1.20 ABI
Signed-off-by: Adam Jackson <ajax@redhat.com>
2018-05-30 12:31:25 -04:00
Alan Coopersmith
9af7f81534 Use #ifdef instead of #if to avoid build error
fbdev.c:491:21: error: #if with no expression
 #if HAVE_SHADOW_3224
                     ^

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
2018-03-05 11:42:22 -05:00
Adam Jackson
e0bce0d017 Use shadowUpdate32to24 at 24bpp
Signed-off-by: Adam Jackson <ajax@redhat.com>
2017-02-16 12:22:09 -05:00
Adam Jackson
3cf9923119 Remove dead pix24bpp variable
Signed-off-by: Adam Jackson <ajax@redhat.com>
2017-02-16 12:22:09 -05:00
Mihail Konev
8c03e3474e autogen: add default patch prefix
Signed-off-by: Mihail Konev <k.mvc@ya.ru>
2017-01-26 14:00:22 +10:00
Emil Velikov
39f668420f autogen.sh: use quoted string variables
Place quotes around the $srcdir, $ORIGDIR and $0 variables to prevent
fall-outs, when they contain space.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-01-26 11:26:28 +10:00
Peter Hutterer
303f902c76 autogen.sh: use exec instead of waiting for configure to finish
Syncs the invocation of configure with the one from the server.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
2017-01-26 11:23:46 +10:00
Alan Coopersmith
f627319599 autogen.sh: Honor NOCONFIGURE=1
See http://people.gnome.org/~walters/docs/build-api.txt

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2017-01-26 11:16:37 +10:00
Alan Coopersmith
22f288b4e4 configure: Drop AM_MAINTAINER_MODE
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2017-01-26 11:16:37 +10:00
Adam Jackson
2c5eba8574 Fix shadow fb allocation size (v2)
->bitsPerPixel is rather obviously eight times too large.

v2: Use ->displayWidth - the pitch - not ->virtualX (Keith Packard)

Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2017-01-05 11:15:27 -05:00
Pascal Terjan
66e7909bfe Initialize pci_dev
Else it is read before initialization if XSERVER_LIBPCIACCESS is not
defined or location.type is not BUS_PCI.

Noticed when I got a segfault where it was 0x1 while doing some tests on
arm.

Signed-off-by: Pascal Terjan <pterjan@google.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
2016-01-27 11:33:24 -05:00
Adam Jackson
ae0aeffae6 Pass the pci device (if any) through to fbdevhw in probe and preinit
Signed-off-by: Adam Jackson <ajax@redhat.com>
2014-08-11 12:13:20 -04:00
Adam Jackson
2673e72706 Use own thunk functions instead of fbdevHW*Weak
I plan to remove the Weak functions from a future server.

Signed-off-by: Adam Jackson <ajax@redhat.com>
2014-05-21 09:49:56 -04:00
Adam Jackson
dd1cf1028c Default to 32bpp if the console is 8bpp (and we weren't told otherwise)
You can still override this on the command line or in the config file.
Without this we'll come up at 8bpp on matroxfb (and probably others),
which among other things breaks the default desktop since gnome-shell
wants GLX and GLX doesn't support pseudocolor anymore.

Signed-off-by: Adam Jackson <ajax@redhat.com>
2014-03-21 12:41:55 -04:00
Julien Cristau
679ed9a4e6 Bump to 0.4.4 2013-09-23 20:02:47 +02:00
Adam Jackson
ac293412a0 Remove mibstore.h
Signed-off-by: Adam Jackson <ajax@redhat.com>
2012-09-25 08:54:37 -04:00
Dave Airlie
2edaad4ab2 fbdev: bump to 0.4.3
Signed-off-by: Dave Airlie <airlied@redhat.com>
2012-07-02 12:47:08 +01:00
Dave Airlie
8a65ca2fdc fbdev: port to new server API.
Signed-off-by: Dave Airlie <airlied@redhat.com>
2012-06-05 11:29:31 +01:00
Dave Airlie
91e8b295f8 fbdev: convert to new screen conversion APIs.
Generated using util/modular/x-driver-screen-scrn-conv.sh

Signed-off-by: Dave Airlie <airlied@redhat.com>
2012-06-05 11:21:08 +01:00
Dave Airlie
6e29cf8c29 fbdev: add compat-api + makefile 2012-06-05 11:21:03 +01:00
Paulo Zanoni
a87213930e Add MOD_CLASS_VIDEODRV to FBDevVersRec
fbdev seems to be the only video driver without MOD_CLASS_VIDEODRV

Signed-off-by: Paulo Zanoni <pzanoni@mandriva.com>
Reviewed-by: Jesse Adkins <jesserayadkins@gmail.com>
Signed-off-by: Julien Cristau <jcristau@debian.org>
2010-12-17 13:09:24 +01:00
Cyril Brulebois
be003f2568 Perform XV initialization only if the server supports it.
Use XV from server's xorg-server.h to determine whether to perform XV
initialization.

Signed-off-by: Cyril Brulebois <kibi@debian.org>
Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
2010-11-10 14:07:24 +01:00
Cyril Brulebois
20909cd806 Avoid unused variables when XSERVER_LIBPCIACCESS is defined.
Signed-off-by: Cyril Brulebois <kibi@debian.org>
Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
2010-11-10 14:07:04 +01:00
Cyril Brulebois
90524a26d3 man: Stop mentioning server's -scanpci option.
It got removed in server's 9727db88d57089be6483104de435626cdbad883a
(long time ago).

Signed-off-by: Cyril Brulebois <kibi@debian.org>
Reviewed-by: Julien Cristau <jcristau@debian.org>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Julien Cristau <jcristau@debian.org>
2010-11-10 14:06:11 +01:00
Cyril Brulebois
0d45d8f3ad Convert x{re,c,}alloc and xfree.
Signed-off-by: Cyril Brulebois <kibi@debian.org>
Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
2010-11-10 14:05:48 +01:00
Jesse Adkins
049cdddd14 Purge cvs tags.
Signed-off-by: Jesse Adkins <jesserayadkins@gmail.com>
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2010-10-06 20:42:48 -07:00
Gaetan Nadon
d3a2fe1b76 config: add comments for main statements 2010-07-21 20:12:43 -04:00
Gaetan Nadon
f7e68d16dc config: replace deprecated use of AC_OUTPUT with AC_CONFIG_FILES
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-21 16:07:00 -04:00
Gaetan Nadon
0ddf357522 config: replace deprecated AC_HELP_STRING with AS_HELP_STRING
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-21 14:37:41 -04:00
Gaetan Nadon
55e0de6cb1 config: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-21 14:05:22 -04:00
Gaetan Nadon
a05560b1d3 config: complete AC_INIT m4 quoting
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-21 09:27:42 -04:00
Gaetan Nadon
8f7d8a7ba3 config: remove unrequired AC_SUBST([XORG_CFLAGS])
This macro is called by PKG_CHECK_MODULES

Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-20 21:44:57 -04:00
Gaetan Nadon
9b3ef42fdd config: remove unrequired AC_HEADER_STDC
Autoconf says:
"This macro is obsolescent, as current systems have conforming
header files. New programs need not use this macro".

Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-20 20:24:42 -04:00
Gaetan Nadon
b768d66b87 config: remove AC_PROG_CC as it overrides AC_PROG_C_C99
XORG_STRICT_OPTION from XORG_DEFAULT_OPTIONS calls
AC_PROG_C_C99. This sets gcc with -std=gnu99.
If AC_PROG_CC macro is called afterwards, it resets CC to gcc.

Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-20 19:41:30 -04:00
Gaetan Nadon
fa588a1ddc config: update AC_PREREQ statement to 2.60
Unrelated to the previous patches, the new value simply reflects
the reality that the minimum level for autoconf to configure
all x.org modules is 2.60 dated June 2006.

ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.60.tar.gz

Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-20 18:45:19 -04:00
Gaetan Nadon
6977b3490a config: upgrade to util-macros 1.8 for additional man page support
Use MAN_SUBST now supplied in XORG_MANPAGE_SECTIONS
The value of MAN_SUBST is the same for all X.Org packages.
2010-07-20 17:38:00 -04:00
18 changed files with 896 additions and 190 deletions

5
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,5 @@
variables:
FDO_UPSTREAM_REPO: 'xorg/driver/xf86-video-fbdev'
include:
- local: '.gitlab-ci/common/xorg-driver.yml'

View File

@@ -0,0 +1,20 @@
common CI stuff - supposed to be synced across all drivers
moving this to a dedicated CI component is left for a later exercise.
Some scripts can also be used locally, eg. in a VM:
Prepare the image:
.gitlab-ci/common/debian/image-install.sh
.gitlab-ci/common/freebsd/image-install.sh
Build the xserver + driver:
.gitlab-ci/common/build-driver.sh debian <xserver git ref>
.gitlab-ci/common/build-driver.sh freebsd <xserver git ref>
Build just the xserver:
.gitlab-ci/common/build-xserver.sh debian <xserver git ref>
.gitlab-ci/common/build-xserver.sh freebsd <xserver git ref>

View File

@@ -0,0 +1,61 @@
#!/usr/bin/env bash
set -e
PLATFORM="$1"
XSERVER_REF="$2"
if [ ! "$PLATFORM" ]; then
echo "missing PLATFORM" >&2
exit 1
fi
if [ ! "$XSERVER_REF" ]; then
echo "missing XSERVER_REF" >&2
exit 1
fi
.gitlab-ci/common/build-xserver.sh "$PLATFORM" "$XSERVER_REF"
MACH=`gcc -dumpmachine`
echo "Building on machine $MACH"
case "$PLATFORM" in
freebsd)
export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/libdata/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/libdata/pkgconfig"
export ACLOCAL_PATH="/usr/share/aclocal:/usr/local/share/aclocal"
export CFLAGS="$CFLAGS -I/usr/local/include"
export UDEV_CFLAGS=" "
export UDEV_LIBS=" "
;;
debian)
export PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig"
;;
*)
echo "unknown platform $PLATFORM" >&2
;;
esac
if [ -f autogen.sh ]; then
(
echo "building driver via autotools"
rm -Rf _builddir
mkdir -p _builddir
cd _builddir
../autogen.sh --disable-silent-rules
make
make check
make distcheck
)
elif [ -f meson.build ]; then
(
echo "building driver via meson"
meson setup _build
cd _build
meson compile
meson install
)
else
echo "failed detecting build system"
exit 1
fi

View File

@@ -0,0 +1,71 @@
#!/usr/bin/env bash
set -e
set -x
PLATFORM="$1"
XSERVER_REF="$2"
if [ ! "$XSERVER_REF" ]; then
echo "missing XSERVER_REF variable" >&2
exit 1
fi
XSERVER_CLONE=/tmp/xserver
XSERVER_BUILD=$XSERVER_CLONE/_builddir
XSERVER_REPO=https://gitlab.freedesktop.org/xorg/xserver.git
MACH=`gcc -dumpmachine`
export PKG_CONFIG_PATH="/usr/lib/$MACH/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH"
export PKG_CONFIG_PATH="/usr/local/lib/$MACH/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:$PKG_CONFIG_PATH"
echo "cloning xserver"
rm -Rf $XSERVER_CLONE
git clone --depth=1 -b $XSERVER_REF $XSERVER_REPO $XSERVER_CLONE
echo "checking platform: $PLATFORM"
case "$PLATFORM" in
freebsd)
echo "Building on FreeBSD"
XSERVER_OS_AUTOCONF_FLAGS="--without-dtrace"
XSERVER_MESON_DISABLE="glx udev udev_kms"
;;
debian)
echo "Building on Debian"
;;
*)
echo "unknown platform $PLATFORM" >&2
exit 1
;;
esac
if [ -f $XSERVER_CLONE/meson.build ]; then
(
echo "Building Xserver via meson"
for opt in $XSERVER_MESON_DISABLE ; do
if grep "'$opt'" $XSERVER_CLONE/meson_options.txt ; then
echo "disable $opt"
XSERVER_MESON_FLAGS="$XSERVER_MESON_FLAGS -D$opt=false"
else
echo "no option $opt"
fi
done
mkdir -p $XSERVER_BUILD
cd $XSERVER_BUILD
meson setup --prefix=/usr $XSERVER_MESON_FLAGS
meson compile
meson install
)
else
(
echo "Building Xserver via autotools"
cd $XSERVER_CLONE
# Workaround glvnd having reset the version in gl.pc from what Mesa used
# similar to xserver commit e6ef2b12404dfec7f23592a3524d2a63d9d25802
sed -i -e 's/gl >= [79].[12].0/gl >= 1.2/' configure.ac
./autogen.sh --prefix=/usr $XSERVER_AUTOCONF_FLAGS $XSERVER_OS_AUTOCONF_FLAGS
make -j`nproc`
make -j`nproc` install
)
fi

View File

@@ -0,0 +1,88 @@
#!/bin/bash
set -e
set -o xtrace
echo 'deb-src https://deb.debian.org/debian bullseye main' >>/etc/apt/sources.list.d/deb-src.list
echo 'deb-src https://deb.debian.org/debian bullseye-updates main' >>/etc/apt/sources.list.d/deb-src.list
apt-get update
apt-get autoremove -y --purge
apt-get install -y --no-remove \
autoconf \
automake \
build-essential \
libtool \
pkg-config \
ca-certificates \
git \
debian-archive-keyring \
python3 python3-setuptools libxshmfence-dev \
clang \
libxvmc-dev libxcb1-dev libx11-xcb-dev libxcb-dri2-0-dev libxcb-util-dev \
libxfixes-dev libxcb-xfixes0-dev libxrender-dev libxdamage-dev libxrandr-dev \
libxcursor-dev libxss-dev libxinerama-dev libxtst-dev libpng-dev libssl-dev \
libxcb-dri3-dev libxxf86vm-dev libxfont-dev libxkbfile-dev libdrm-dev \
libgbm-dev libgl1-mesa-dev libpciaccess-dev libpixman-1-dev libudev-dev \
libgcrypt-dev libepoxy-dev libevdev-dev libmtdev-dev libinput-dev \
mesa-common-dev libspice-protocol-dev libspice-server-dev \
meson \
nettle-dev \
pkg-config \
valgrind \
x11-xkb-utils xfonts-utils xutils-dev x11proto-dev
build_autoconf() {
local subdir="$1"
shift
(
cd $subdir
./autogen.sh "$@"
make -j${FDO_CI_CONCURRENT:-4}
make -j${FDO_CI_CONCURRENT:-4} install
)
}
build_meson() {
local subdir="$1"
shift
(
cd $subdir
meson _build -Dprefix=/usr "$@"
ninja -C _build -j${FDO_CI_CONCURRENT:-4} install
)
}
do_clone() {
git clone "$1" --depth 1 --branch="$2"
}
mkdir -p /tmp/build-deps
cd /tmp/build-deps
# xserver 1.18 and older branches require libXfont 1.5 instead of 2.0
echo "Installing libXfont 1.5"
do_clone https://gitlab.freedesktop.org/xorg/lib/libXfont.git libXfont-1.5-branch
build_autoconf libXfont
echo "Installing font-util"
do_clone https://gitlab.freedesktop.org/xorg/font/util.git font-util-1.4.1
build_autoconf util --prefix=/usr
echo "Installing libxcvt"
do_clone https://gitlab.freedesktop.org/xorg/lib/libxcvt.git libxcvt-0.1.0
build_meson libxcvt
# xserver requires xorgproto >= 2024.1 for XWAYLAND
echo "Installing xorgproto"
do_clone https://gitlab.freedesktop.org/xorg/proto/xorgproto.git xorgproto-2024.1
build_autoconf xorgproto
# Xwayland requires drm 2.4.116 for drmSyncobjEventfd
# xf86-video-freedreno and xf86-video-omap need extra features
echo "Installing libdrm"
do_clone https://gitlab.freedesktop.org/mesa/drm libdrm-2.4.116
build_meson drm -Dfreedreno=enabled -Dnouveau=enabled -Domap=enabled
rm -Rf /tmp/build-deps

View File

@@ -0,0 +1,8 @@
# using the latest branch
FreeBSD: {
url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
mirror_type: "srv",
signature_type: "fingerprints",
fingerprints: "/usr/share/keys/pkg",
enabled: yes
}

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env bash
set -e
# note: really wanna install to /usr/local, since that's explicitly searched first,
# so we always catch the locally installed before any system/ports provided one
# otherwise we might run into trouble like trying to use outdated xorgproto
build_autoconf() {
local subdir="$1"
shift
(
cd $subdir
./autogen.sh --prefix=/usr/local "$@"
make -j${FDO_CI_CONCURRENT:-4}
make -j${FDO_CI_CONCURRENT:-4} install
)
}
build_meson() {
local subdir="$1"
shift
(
cd $subdir
meson _build -Dprefix=/usr/local "$@"
ninja -C _build -j${FDO_CI_CONCURRENT:-4} install
)
}
do_clone() {
git clone "$1" --depth 1 --branch="$2"
}
cp .gitlab-ci/common/freebsd/FreeBSD.conf /etc/pkg
pkg upgrade -f -y
pkg install -y \
git gcc pkgconf autoconf automake libtool xorg-macros xorgproto meson \
ninja pixman xtrans libXau libXdmcp libXfont libXfont2 libxkbfile libxcvt \
libpciaccess font-util libepoll-shim libdrm mesa-libs libdrm libglu mesa-dri \
libepoxy nettle xkbcomp libXvMC xcb-util valgrind libXcursor libXScrnSaver \
libXinerama libXtst evdev-proto libevdev libmtdev libinput spice-protocol \
libspice-server
[ -f /bin/bash ] || ln -sf /usr/local/bin/bash /bin/bash
# Xwayland requires drm 2.4.116 for drmSyncobjEventfd
# xf86-video-freedreno and xf86-video-omap need extra features
echo "Installing libdrm"
do_clone https://gitlab.freedesktop.org/mesa/drm libdrm-2.4.116
(
cd drm
git config user.email "buildbot@freebsd"
git config user.name "FreeBSD build bot"
git am ../.gitlab-ci/common/freebsd/libdrm-2.4.116.patch
)
build_meson drm -Dfreedreno=enabled -Dnouveau=enabled -Domap=enabled
echo "=== post-install script END"

View File

@@ -0,0 +1,109 @@
From a87432dbb281ddf1c50a5e78091d38f0dac79416 Mon Sep 17 00:00:00 2001
From: "Enrico Weigelt, metux IT consult" <info@metux.net>
Date: Fri, 7 Jun 2024 15:18:47 +0200
Subject: [PATCH 1/2] fix FTBS on FreeBSD (or non-Linux in general)
Several drivers still including <linux/stddef.h>, but not using anything
from it, thus breaking build on non-Linux platforms (eg. FreeBSD).
Since not needed at all, just stop including it.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
---
etnaviv/etnaviv_device.c | 1 -
exynos/exynos_drm.c | 1 -
exynos/exynos_fimg2d.c | 1 -
omap/omap_drm.c | 1 -
tests/exynos/exynos_fimg2d_test.c | 1 -
5 files changed, 5 deletions(-)
diff --git a/etnaviv/etnaviv_device.c b/etnaviv/etnaviv_device.c
index 699df256..a63bd15d 100644
--- a/etnaviv/etnaviv_device.c
+++ b/etnaviv/etnaviv_device.c
@@ -25,7 +25,6 @@
*/
#include <stdlib.h>
-#include <linux/stddef.h>
#include <linux/types.h>
#include <errno.h>
#include <sys/mman.h>
diff --git a/exynos/exynos_drm.c b/exynos/exynos_drm.c
index 3e322a17..fb4cd8de 100644
--- a/exynos/exynos_drm.c
+++ b/exynos/exynos_drm.c
@@ -31,7 +31,6 @@
#include <unistd.h>
#include <sys/mman.h>
-#include <linux/stddef.h>
#include <xf86drm.h>
diff --git a/exynos/exynos_fimg2d.c b/exynos/exynos_fimg2d.c
index ac6fa687..f0aee962 100644
--- a/exynos/exynos_fimg2d.c
+++ b/exynos/exynos_fimg2d.c
@@ -30,7 +30,6 @@
#include <assert.h>
#include <sys/mman.h>
-#include <linux/stddef.h>
#include <xf86drm.h>
diff --git a/omap/omap_drm.c b/omap/omap_drm.c
index aa273660..42d35ef7 100644
--- a/omap/omap_drm.c
+++ b/omap/omap_drm.c
@@ -27,7 +27,6 @@
*/
#include <stdlib.h>
-#include <linux/stddef.h>
#include <linux/types.h>
#include <errno.h>
#include <sys/mman.h>
diff --git a/tests/exynos/exynos_fimg2d_test.c b/tests/exynos/exynos_fimg2d_test.c
index d85e2f6b..b1baa503 100644
--- a/tests/exynos/exynos_fimg2d_test.c
+++ b/tests/exynos/exynos_fimg2d_test.c
@@ -31,7 +31,6 @@
#include <unistd.h>
#include <sys/mman.h>
-#include <linux/stddef.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
--
2.39.2
From 79123db12c6c5f42747fae02068b482055e8c376 Mon Sep 17 00:00:00 2001
From: "Enrico Weigelt, metux IT consult" <info@metux.net>
Date: Fri, 7 Jun 2024 15:43:13 +0200
Subject: [PATCH 2/2] omap: fix FTBS on FreeBSD and drop unneeded include
No need to explicitly include <linux/types.h>, since drm.h already does that,
but conditionally only Linux only.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
---
omap/omap_drm.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/omap/omap_drm.c b/omap/omap_drm.c
index 42d35ef7..93d2207f 100644
--- a/omap/omap_drm.c
+++ b/omap/omap_drm.c
@@ -27,7 +27,6 @@
*/
#include <stdlib.h>
-#include <linux/types.h>
#include <errno.h>
#include <sys/mman.h>
#include <fcntl.h>
--
2.39.2

View File

@@ -0,0 +1,216 @@
# version 0.1.19
variables:
DEBIAN_VERSION: 'bullseye-slim'
DEBIAN_TAG: "2024-06-06.09"
DEBIAN_EXEC: 'bash .gitlab-ci/common/debian/image-install.sh'
DEBIAN_SKIP: "false" # to enable, it has to be litterally "true"
FREEBSD_TAG: '2024-06-06.06'
FREEBSD_VERSION: '14.0'
# image is yet too small for that - need a more complicated way :(
# FREEBSD_EXEC: "bash .gitlab-ci/common/freebsd/image-install.sh"
FREEBSD_SKIP: "false" # to enable, it has to be litterally "true"
.templates_sha: &template_sha bc70242ffb8402243e934659ecc1a2d1c89eca2b # see https://docs.gitlab.com/ee/ci/yaml/#includefile
include:
- project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/debian.yml'
- project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/freebsd.yml'
- project: 'freedesktop/ci-templates'
ref: *template_sha
file: '/templates/ci-fairy.yml'
- template: Security/SAST.gitlab-ci.yml
stages:
- images
- build
- test
# standard commits quality check
check-commits:
extends:
- .fdo.ci-fairy
stage: test
script:
- ci-fairy check-commits --junit-xml=results.xml
except:
- master@$FDO_UPSTREAM_REPO
variables:
GIT_DEPTH: 100
artifacts:
reports:
junit: results.xml
allow_failure: true
needs:
# standard merge request quality checks
check-merge-request:
extends:
- .fdo.ci-fairy
stage: test
script:
- ci-fairy check-merge-request --require-allow-collaboration --junit-xml=results.xml
artifacts:
when: on_failure
reports:
junit: results.xml
allow_failure: true
needs:
# create debian build image
image@debian@amd64:
extends:
- .xorg.distro@debian@amd64
- .fdo.container-build@debian
stage: images
variables:
GIT_STRATEGY: none
rules:
- if: $DEBIAN_SKIP != "true"
when: always
needs:
image@debian@i386:
extends:
- .xorg.distro@debian@i386
- .fdo.container-build@debian
stage: images
variables:
GIT_STRATEGY: none
rules:
- if: $DEBIAN_SKIP != "true"
when: always
needs:
# inherit this to define FDO_DISTRIBUTION_* variables for Debian
.xorg.distro@debian@amd64:
variables:
FDO_DISTRIBUTION_VERSION: "$DEBIAN_VERSION"
FDO_DISTRIBUTION_EXEC: "$DEBIAN_EXEC"
FDO_DISTRIBUTION_TAG: "amd64-$DEBIAN_TAG"
FDO_BASE_IMAGE: "amd64/debian:$DEBIAN_VERSION"
.xorg.distro@debian@i386:
variables:
FDO_DISTRIBUTION_VERSION: "$DEBIAN_VERSION"
FDO_DISTRIBUTION_EXEC: "$DEBIAN_EXEC"
FDO_DISTRIBUTION_TAG: "i386-$DEBIAN_TAG"
FDO_BASE_IMAGE: "i386/debian:$DEBIAN_VERSION"
# overwrite this one if another matrix is needed
.xorg.driver_matrix@debian:
parallel:
matrix:
- CC: [ "gcc", "clang" ]
XSERVER_REF: [
# these break on Debian
# "xorg-server-1.18.4",
# "xorg-server-1.19.7",
"xorg-server-1.20.14",
"xorg-server-21.1.13",
"master"
]
# default build with meson on Debian
.xorg.driver_common@debian:
needs:
- image@debian@i386
- image@debian@amd64
extends:
- .fdo.distribution-image@debian
stage: build
script:
- .gitlab-ci/common/build-driver.sh "debian" "$XSERVER_REF"
variables:
CFLAGS: "-pipe -g -O2"
rules:
- if: $DEBIAN_SKIP != "true"
when: always
# overwrite this when you need some special Debian build
build@debian@amd64:
extends:
- .xorg.driver_matrix@debian
- .xorg.driver_common@debian
- .xorg.distro@debian@amd64
build@debian@i386:
extends:
- .xorg.driver_matrix@debian
- .xorg.driver_common@debian
- .xorg.distro@debian@i386
# inherit this to define FDO_DISTRIBUTION_* variables for FreeBSD
.xorg.distro@freebsd:
variables:
FDO_DISTRIBUTION_VERSION: "$FREEBSD_VERSION"
FDO_DISTRIBUTION_EXEC: "$FREEBSD_EXEC"
FDO_DISTRIBUTION_TAG: "$FREEBSD_TAG"
# create base image for FreeBSD
image@freebsd:
extends:
- .xorg.distro@freebsd
- .fdo.qemu-build@freebsd@x86_64
stage: images
variables:
GIT_STRATEGY: none
rules:
- if: $FREEBSD_SKIP != "true"
when: always
# inherit this to get the default build matrix
.xorg.driver_matrix@freebsd:
parallel:
matrix:
- CC: [ "gcc", "clang" ]
XSERVER_REF: [
# "xorg-server-1.18.4", # this breaks due name clash on "bool"
# "xorg-server-1.19.7",
# "xorg-server-1.20.14", # breaks meson ... see: 331850ce6f0c48a1cfc489da2a27ca0220997a2f -- server-1.20-branch
"xorg-server-21.0.99.1",
"xorg-server-21.1.13",
"master"
]
# common build for driver on FreeBSD. meson and autoconf are both handled by this
.xorg.driver_common@freebsd:
needs:
- image@freebsd
stage: build
extends:
- .fdo.distribution-image@freebsd
- .xorg.distro@freebsd
script:
# FIXME: increasing image and running image-install.sh should be done
# at container image build time, but would have to replicate too much
# of the cbuild script here. better wait until CI folks have increased
# the image size or provide hooks for that
- xz -d -T0 /app/image.raw.xz
- rm -f /app/image.raw.xz
- truncate -s +5G /app/image.raw
- /app/vmctl start
- set +e
- /app/vmctl exec "service growfs onestart"
- scp -r $PWD "vm:"
- /app/vmctl exec "cd $CI_PROJECT_NAME && .gitlab-ci/common/freebsd/image-install.sh"
- /app/vmctl exec "cd $CI_PROJECT_NAME && .gitlab-ci/common/build-driver.sh freebsd $XSERVER_REF" && touch .success
# copy any test results from the VM to our container so we can
# save them as artifacts
- scp -r vm:$CI_PROJECT_NAME/test-results.xml . || true # this is allowed to fail
- /app/vmctl stop
- set -e
- test -e .success || exit 1
rules:
- if: $FREEBSD_SKIP != "true"
when: always
# overwrite this if you need some special FreeBSD build
build@freebsd:
extends:
- .xorg.driver_matrix@freebsd
- .xorg.driver_common@freebsd

View File

@@ -30,3 +30,5 @@ ChangeLog:
$(CHANGELOG_CMD)
dist-hook: ChangeLog INSTALL
EXTRA_DIST = README.md

20
README
View File

@@ -1,20 +0,0 @@
xf86-video-fbdev - video driver for framebuffer device
Please submit bugs & patches to the Xorg bugzilla:
https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
All questions regarding this software should be directed at the
Xorg mailing list:
http://lists.freedesktop.org/mailman/listinfo/xorg
The master development code repository can be found at:
git://anongit.freedesktop.org/git/xorg/driver/xf86-video-fbdev
http://cgit.freedesktop.org/xorg/driver/xf86-video-fbdev
For more information on the git code manager, see:
http://wiki.x.org/wiki/GitPage

18
README.md Normal file
View File

@@ -0,0 +1,18 @@
xf86-video-fbdev - video driver for framebuffer device
------------------------------------------------------
All questions regarding this software should be directed at the
Xorg mailing list:
https://lists.x.org/mailman/listinfo/xorg
The primary development code repository can be found at:
https://gitlab.freedesktop.org/xorg/driver/xf86-video-fbdev
Please submit bug reports and requests to merge patches there.
For patch submission instructions, see:
https://www.x.org/wiki/Development/Documentation/SubmittingPatches

View File

@@ -1,12 +1,17 @@
#! /bin/sh
srcdir=`dirname $0`
srcdir=`dirname "$0"`
test -z "$srcdir" && srcdir=.
ORIGDIR=`pwd`
cd $srcdir
cd "$srcdir"
autoreconf -v --install || exit 1
cd $ORIGDIR || exit $?
cd "$ORIGDIR" || exit $?
$srcdir/configure --enable-maintainer-mode "$@"
git config --local --get format.subjectPrefix >/dev/null 2>&1 ||
git config --local format.subjectPrefix "PATCH xf86-video-fbdev"
if test -z "$NOCONFIGURE"; then
exec "$srcdir"/configure "$@"
fi

View File

@@ -20,35 +20,33 @@
#
# Process this file with autoconf to produce a configure script
AC_PREREQ(2.57)
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-video-fbdev],
0.4.2,
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
xf86-video-fbdev)
[0.5.0],
[https://gitlab.freedesktop.org/xorg/driver/xf86-video-fbdev/issues],
[xf86-video-fbdev])
AC_CONFIG_SRCDIR([Makefile.am])
AM_CONFIG_HEADER([config.h])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_AUX_DIR(.)
AM_INIT_AUTOMAKE([foreign dist-bzip2])
# Initialize Automake
AM_INIT_AUTOMAKE([foreign dist-xz])
AM_MAINTAINER_MODE
# Require xorg-macros: XORG_DEFAULT_OPTIONS
# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
m4_ifndef([XORG_MACROS_VERSION],
[m4_fatal([must install xorg-macros 1.4 or later before running autoconf/autogen])])
XORG_MACROS_VERSION(1.4)
[m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])])
XORG_MACROS_VERSION(1.8)
XORG_DEFAULT_OPTIONS
# Checks for programs.
AC_DISABLE_STATIC
AC_PROG_LIBTOOL
AC_PROG_CC
# Initialize libtool
LT_INIT([disable-static])
AH_TOP([#include "xorg-server.h"])
# Define a configure option for an alternate module directory
AC_ARG_WITH(xorg-module-dir,
AC_HELP_STRING([--with-xorg-module-dir=DIR],
AS_HELP_STRING([--with-xorg-module-dir=DIR],
[Default xorg module directory [[default=$libdir/xorg/modules]]]),
[moduledir="$withval"],
[moduledir="$libdir/xorg/modules"])
@@ -56,21 +54,13 @@ AC_ARG_ENABLE(pciaccess, AS_HELP_STRING([--enable-pciaccess],
[Enable use of libpciaccess (default: disabled)]),
[PCIACCESS=$enableval], [PCIACCESS=no])
# Checks for extensions
# Store the list of server defined optional extensions in REQUIRED_MODULES
XORG_DRIVER_CHECK_EXT(RANDR, randrproto)
XORG_DRIVER_CHECK_EXT(RENDER, renderproto)
XORG_DRIVER_CHECK_EXT(XV, videoproto)
# Checks for pkg-config packages
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.0.99.901 xproto fontsproto $REQUIRED_MODULES])
save_CFLAGS="$CFLAGS"
CFLAGS="$XORG_CFLAGS"
AC_CHECK_DECL(xf86ConfigIsaEntity,
[AC_DEFINE(HAVE_ISA, 1, [Have ISA support])],
[],
[#include "xf86.h"])
CFLAGS="$save_CFLAGS"
# Obtain compiler/linker options for the driver dependencies
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.18 xproto fontsproto $REQUIRED_MODULES])
AM_CONDITIONAL(PCIACCESS, [test "x$PCIACCESS" = xyes])
if test "x$PCIACCESS" = xyes; then
@@ -81,17 +71,15 @@ fi
# Checks for libraries.
# Checks for header files.
AC_HEADER_STDC
AC_SUBST([XORG_CFLAGS])
AC_SUBST([moduledir])
DRIVER_NAME=fbdev
AC_SUBST([DRIVER_NAME])
AC_OUTPUT([
Makefile
src/Makefile
man/Makefile
AC_CONFIG_FILES([
Makefile
src/Makefile
man/Makefile
])
AC_OUTPUT

View File

@@ -32,25 +32,11 @@ EXTRA_DIST = @DRIVER_NAME@.man
CLEANFILES = $(driverman_DATA)
SED = sed
# Strings to replace in man pages
XORGRELSTRING = @PACKAGE_STRING@
XORGMANNAME = X Version 11
# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure
MAN_SUBSTS = \
-e 's|__vendorversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
-e 's|__xorgversion__|"$(XORGRELSTRING)" "$(XORGMANNAME)"|' \
-e 's|__xservername__|Xorg|g' \
-e 's|__xconfigfile__|xorg.conf|g' \
-e 's|__projectroot__|$(prefix)|g' \
-e 's|__appmansuffix__|$(APP_MAN_SUFFIX)|g' \
-e 's|__drivermansuffix__|$(DRIVER_MAN_SUFFIX)|g' \
-e 's|__adminmansuffix__|$(ADMIN_MAN_SUFFIX)|g' \
-e 's|__miscmansuffix__|$(MISC_MAN_SUFFIX)|g' \
-e 's|__filemansuffix__|$(FILE_MAN_SUFFIX)|g'
SUFFIXES = .$(DRIVER_MAN_SUFFIX) .man
.man.$(DRIVER_MAN_SUFFIX):
sed $(MAN_SUBSTS) < $< > $@
$(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@

View File

@@ -1,4 +1,3 @@
.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/fbdev/fbdev.man,v 1.2 2001/01/27 18:20:47 dawes Exp $
.\" shorthand for double quote that works everywhere.
.ds q \N'34'
.TH FBDEV __drivermansuffix__ __vendorversion__
@@ -38,9 +37,7 @@ driver can pick up the currently used video mode from the framebuffer
driver and will use it if there are no video modes configured.
.PP
For PCI boards you might have to add a BusID line to the Device
section. See above for a sample line. You can use \*q\__xservername__
-scanpci\*q
to figure out the correct values.
section. See above for a sample line.
.PP
The following driver
.B Options
@@ -50,12 +47,14 @@ are supported:
The framebuffer device to use. Default: /dev/fb0.
.TP
.BI "Option \*qShadowFB\*q \*q" boolean \*q
Enable or disable use of the shadow framebuffer layer. Default: on.
Enable or disable use of the shadow framebuffer layer. Mandatory for 24bpp
framebuffers on newer servers. Default: on.
.TP
.BI "Option \*qRotate\*q \*q" string \*q
Enable rotation of the display. The supported values are "CW" (clockwise,
90 degrees), "UD" (upside down, 180 degrees) and "CCW" (counter clockwise,
270 degrees). Implies use of the shadow framebuffer layer. Default: off.
270 degrees). Implies use of the shadow framebuffer layer. Disabled for 24bpp
framebuffers. Default: off.
.SH "SEE ALSO"
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), Xserver(__appmansuffix__),
X(__miscmansuffix__), fbdevhw(__drivermansuffix__)

View File

@@ -23,7 +23,7 @@
# -avoid-version prevents gratuitous .0.0.0 version numbers on the end
# _ladir passes a dummy rpath to libtool so the thing will actually link
# TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
AM_CFLAGS = @XORG_CFLAGS@
AM_CFLAGS = $(BASE_CFLAGS) $(XORG_CFLAGS)
fbdev_drv_la_LTLIBRARIES = fbdev_drv.la
fbdev_drv_la_LDFLAGS = -module -avoid-version
fbdev_drv_ladir = @moduledir@/drivers

View File

@@ -14,7 +14,6 @@
#include "xf86_OSproc.h"
#include "mipointer.h"
#include "mibstore.h"
#include "micmap.h"
#include "colormapst.h"
#include "xf86cmap.h"
@@ -24,11 +23,6 @@
/* for visuals */
#include "fb.h"
#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6
#include "xf86Resources.h"
#include "xf86RAC.h"
#endif
#include "fbdevhw.h"
#include "xf86xv.h"
@@ -37,6 +31,13 @@
#include <pciaccess.h>
#endif
/* for xf86{Depth,FbBpp}. i am a terrible person, and i am sorry. */
#include "xf86Priv.h"
#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) > 23
#define HAVE_SHADOW_3224
#endif
static Bool debug = 0;
#define TRACE_ENTER(str) \
@@ -57,12 +58,11 @@ static Bool FBDevPciProbe(DriverPtr drv, int entity_num,
struct pci_device *dev, intptr_t match_data);
#endif
static Bool FBDevPreInit(ScrnInfoPtr pScrn, int flags);
static Bool FBDevScreenInit(int Index, ScreenPtr pScreen, int argc,
char **argv);
static Bool FBDevCloseScreen(int scrnIndex, ScreenPtr pScreen);
static Bool FBDevScreenInit(ScreenPtr pScreen, int argc, char **argv);
static Bool FBDevCloseScreen(ScreenPtr pScreen);
static void * FBDevWindowLinear(ScreenPtr pScreen, CARD32 row, CARD32 offset, int mode,
CARD32 *size, void *closure);
static void FBDevPointerMoved(int index, int x, int y);
static void FBDevPointerMoved(ScrnInfoPtr pScrn, int x, int y);
static Bool FBDevDGAInit(ScrnInfoPtr pScrn, ScreenPtr pScreen);
static Bool FBDevDriverFunc(ScrnInfoPtr pScrn, xorgDriverFuncOp op,
pointer ptr);
@@ -73,12 +73,6 @@ enum { FBDEV_ROTATE_NONE=0, FBDEV_ROTATE_CW=270, FBDEV_ROTATE_UD=180, FBDEV_ROTA
/* -------------------------------------------------------------------- */
/*
* This is intentionally screen-independent. It indicates the binding
* choice made in the first PreInit.
*/
static int pix24bpp = 0;
#define FBDEV_VERSION 4000
#define FBDEV_NAME "FBDEV"
#define FBDEV_DRIVER_NAME "fbdev"
@@ -151,7 +145,7 @@ static XF86ModuleVersionInfo FBDevVersRec =
PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL,
ABI_CLASS_VIDEODRV,
ABI_VIDEODRV_VERSION,
NULL,
MOD_CLASS_VIDEODRV,
{0,0,0,0}
};
@@ -184,10 +178,11 @@ typedef struct {
int lineLength;
int rotate;
Bool shadowFB;
Bool shadow24;
void *shadow;
CloseScreenProcPtr CloseScreen;
CreateScreenResourcesProcPtr CreateScreenResources;
void (*PointerMoved)(int index, int x, int y);
void (*PointerMoved)(ScrnInfoPtr pScrn, int x, int y);
EntityInfoPtr pEnt;
/* DGA info */
DGAModePtr pDGAMode;
@@ -203,7 +198,7 @@ FBDevGetRec(ScrnInfoPtr pScrn)
if (pScrn->driverPrivate != NULL)
return TRUE;
pScrn->driverPrivate = xnfcalloc(sizeof(FBDevRec), 1);
pScrn->driverPrivate = XNFcallocarray(sizeof(FBDevRec), 1);
return TRUE;
}
@@ -212,7 +207,7 @@ FBDevFreeRec(ScrnInfoPtr pScrn)
{
if (pScrn->driverPrivate == NULL)
return;
xfree(pScrn->driverPrivate);
free(pScrn->driverPrivate);
pScrn->driverPrivate = NULL;
}
@@ -230,6 +225,35 @@ FBDevIdentify(int flags)
xf86PrintChipsets(FBDEV_NAME, "driver for framebuffer", FBDevChipsets);
}
static Bool
fbdevSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
{
return fbdevHWSwitchMode(pScrn, mode);
}
static void
fbdevAdjustFrame(ScrnInfoPtr pScrn, int x, int y)
{
fbdevHWAdjustFrame(pScrn, x, y);
}
static Bool
fbdevEnterVT(ScrnInfoPtr pScrn)
{
return fbdevHWEnterVT(pScrn);
}
static void
fbdevLeaveVT(ScrnInfoPtr pScrn)
{
fbdevHWLeaveVT(pScrn);
}
static ModeStatus
fbdevValidMode(ScrnInfoPtr pScrn, DisplayModePtr mode, Bool verbose, int flags)
{
return fbdevHWValidMode(pScrn, mode, verbose, flags);
}
#ifdef XSERVER_LIBPCIACCESS
static Bool FBDevPciProbe(DriverPtr drv, int entity_num,
@@ -248,18 +272,18 @@ static Bool FBDevPciProbe(DriverPtr drv, int entity_num,
pScrn->entityInstanceList[0]);
device = xf86FindOptionValue(devSection->options, "fbdev");
if (fbdevHWProbe(NULL, device, NULL)) {
if (fbdevHWProbe(dev, device, NULL)) {
pScrn->driverVersion = FBDEV_VERSION;
pScrn->driverName = FBDEV_DRIVER_NAME;
pScrn->name = FBDEV_NAME;
pScrn->Probe = FBDevProbe;
pScrn->PreInit = FBDevPreInit;
pScrn->ScreenInit = FBDevScreenInit;
pScrn->SwitchMode = fbdevHWSwitchModeWeak();
pScrn->AdjustFrame = fbdevHWAdjustFrameWeak();
pScrn->EnterVT = fbdevHWEnterVTWeak();
pScrn->LeaveVT = fbdevHWLeaveVTWeak();
pScrn->ValidMode = fbdevHWValidModeWeak();
pScrn->SwitchMode = fbdevSwitchMode;
pScrn->AdjustFrame = fbdevAdjustFrame;
pScrn->EnterVT = fbdevEnterVT;
pScrn->LeaveVT = fbdevLeaveVT;
pScrn->ValidMode = fbdevValidMode;
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
"claimed PCI slot %d@%d:%d:%d\n",
@@ -284,7 +308,9 @@ FBDevProbe(DriverPtr drv, int flags)
ScrnInfoPtr pScrn;
GDevPtr *devSections;
int numDevSections;
#ifndef XSERVER_LIBPCIACCESS
int bus,device,func;
#endif
char *dev;
Bool foundScreen = FALSE;
@@ -301,7 +327,6 @@ FBDevProbe(DriverPtr drv, int flags)
return FALSE;
for (i = 0; i < numDevSections; i++) {
Bool isIsa = FALSE;
Bool isPci = FALSE;
dev = xf86FindOptionValue(devSections[i]->options,"fbdev");
@@ -312,15 +337,8 @@ FBDevProbe(DriverPtr drv, int flags)
if (!xf86CheckPciSlot(bus,device,func))
continue;
isPci = TRUE;
} else
}
#endif
#ifdef HAVE_ISA
if (xf86ParseIsaBusString(devSections[i]->busID))
isIsa = TRUE;
else
#endif
0;
}
if (fbdevHWProbe(NULL,dev,NULL)) {
pScrn = NULL;
@@ -341,16 +359,6 @@ FBDevProbe(DriverPtr drv, int flags)
xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
"claimed PCI slot %d:%d:%d\n",bus,device,func);
#endif
} else if (isIsa) {
#ifdef HAVE_ISA
int entity;
entity = xf86ClaimIsaSlot(drv, 0,
devSections[i], TRUE);
pScrn = xf86ConfigIsaEntity(pScrn,0,entity,
NULL,RES_SHARED_VGA,
NULL,NULL,NULL,NULL);
#endif
} else {
int entity;
@@ -370,18 +378,18 @@ FBDevProbe(DriverPtr drv, int flags)
pScrn->Probe = FBDevProbe;
pScrn->PreInit = FBDevPreInit;
pScrn->ScreenInit = FBDevScreenInit;
pScrn->SwitchMode = fbdevHWSwitchModeWeak();
pScrn->AdjustFrame = fbdevHWAdjustFrameWeak();
pScrn->EnterVT = fbdevHWEnterVTWeak();
pScrn->LeaveVT = fbdevHWLeaveVTWeak();
pScrn->ValidMode = fbdevHWValidModeWeak();
pScrn->SwitchMode = fbdevSwitchMode;
pScrn->AdjustFrame = fbdevAdjustFrame;
pScrn->EnterVT = fbdevEnterVT;
pScrn->LeaveVT = fbdevLeaveVT;
pScrn->ValidMode = fbdevValidMode;
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"using %s\n", dev ? dev : "default device");
}
}
}
xfree(devSections);
free(devSections);
TRACE("probe done");
return foundScreen;
}
@@ -393,6 +401,7 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
int default_depth, fbbpp;
const char *s;
int type;
void *pci_dev = NULL;
if (flags & PROBE_DETECT) return FALSE;
@@ -420,20 +429,53 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
"xf86RegisterResources() found resource conflicts\n");
return FALSE;
}
#else
if (fPtr->pEnt->location.type == BUS_PCI)
pci_dev = fPtr->pEnt->location.id.pci;
#endif
/* open device */
if (!fbdevHWInit(pScrn,NULL,xf86FindOptionValue(fPtr->pEnt->device->options,"fbdev")))
if (!fbdevHWInit(pScrn, pci_dev,
xf86FindOptionValue(fPtr->pEnt->device->options,
"fbdev")))
return FALSE;
default_depth = fbdevHWGetDepth(pScrn,&fbbpp);
if (default_depth == 8) do {
/* trust the command line */
if (xf86FbBpp > 0 || xf86Depth > 0)
break;
/* trust the config file's Screen stanza */
if (pScrn->confScreen->defaultfbbpp > 0 ||
pScrn->confScreen->defaultdepth > 0)
break;
/* trust our Device stanza in the config file */
if (xf86FindOption(fPtr->pEnt->device->options, "DefaultDepth") ||
xf86FindOption(fPtr->pEnt->device->options, "DefaultFbBpp"))
break;
/* otherwise, lol no */
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Console is 8bpp, defaulting to 32bpp\n");
default_depth = 24;
fbbpp = 32;
} while (0);
fPtr->shadow24 = FALSE;
#ifdef HAVE_SHADOW_3224
/* okay but 24bpp is awful */
if (fbbpp == 24) {
fPtr->shadow24 = TRUE;
fbbpp = 32;
}
#endif
if (!xf86SetDepthBpp(pScrn, default_depth, default_depth, fbbpp,
Support24bppFb | Support32bppFb | SupportConvert32to24 | SupportConvert24to32))
return FALSE;
xf86PrintDepthBpp(pScrn);
/* Get the depth24 pixmap format */
if (pScrn->depth == 24 && pix24bpp == 0)
pix24bpp = xf86GetBppFromDepth(pScrn, 24);
/* color weight */
if (pScrn->depth > 8) {
rgb zeros = { 0, 0, 0 };
@@ -471,19 +513,25 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
/* handle options */
xf86CollectOptions(pScrn, NULL);
if (!(fPtr->Options = xalloc(sizeof(FBDevOptions))))
if (!(fPtr->Options = malloc(sizeof(FBDevOptions))))
return FALSE;
memcpy(fPtr->Options, FBDevOptions, sizeof(FBDevOptions));
xf86ProcessOptions(pScrn->scrnIndex, fPtr->pEnt->device->options, fPtr->Options);
/* use shadow framebuffer by default */
fPtr->shadowFB = xf86ReturnOptValBool(fPtr->Options, OPTION_SHADOW_FB, TRUE);
if (!fPtr->shadowFB && fPtr->shadow24) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"24bpp requires shadow framebuffer, forcing\n");
fPtr->shadowFB = TRUE;
}
debug = xf86ReturnOptValBool(fPtr->Options, OPTION_DEBUG, FALSE);
/* rotation */
fPtr->rotate = FBDEV_ROTATE_NONE;
if ((s = xf86GetOptValString(fPtr->Options, OPTION_ROTATE)))
s = xf86GetOptValString(fPtr->Options, OPTION_ROTATE);
if (s && !fPtr->shadow24)
{
if(!xf86NameCmp(s, "CW"))
{
@@ -604,14 +652,34 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
return TRUE;
}
static void
fbdevUpdate32to24(ScreenPtr pScreen, shadowBufPtr pBuf)
{
#ifdef HAVE_SHADOW_3224
shadowUpdate32to24(pScreen, pBuf);
#endif
}
static void
fbdevUpdateRotatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
{
shadowUpdateRotatePacked(pScreen, pBuf);
}
static void
fbdevUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
{
shadowUpdatePacked(pScreen, pBuf);
}
static Bool
FBDevCreateScreenResources(ScreenPtr pScreen)
{
PixmapPtr pPixmap;
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
FBDevPtr fPtr = FBDEVPTR(pScrn);
Bool ret;
void (*update)(ScreenPtr, shadowBufPtr);
pScreen->CreateScreenResources = fPtr->CreateScreenResources;
ret = pScreen->CreateScreenResources(pScreen);
@@ -622,9 +690,15 @@ FBDevCreateScreenResources(ScreenPtr pScreen)
pPixmap = pScreen->GetScreenPixmap(pScreen);
if (!shadowAdd(pScreen, pPixmap, fPtr->rotate ?
shadowUpdateRotatePackedWeak() : shadowUpdatePackedWeak(),
FBDevWindowLinear, fPtr->rotate, NULL)) {
if (fPtr->shadow24)
update = fbdevUpdate32to24;
else if (fPtr->rotate)
update = fbdevUpdateRotatePacked;
else
update = fbdevUpdatePacked;
if (!shadowAdd(pScreen, pPixmap, update, FBDevWindowLinear, fPtr->rotate,
NULL)) {
return FALSE;
}
@@ -634,7 +708,7 @@ FBDevCreateScreenResources(ScreenPtr pScreen)
static Bool
FBDevShadowInit(ScreenPtr pScreen)
{
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
FBDevPtr fPtr = FBDEVPTR(pScrn);
if (!shadowSetup(pScreen)) {
@@ -647,11 +721,28 @@ FBDevShadowInit(ScreenPtr pScreen)
return TRUE;
}
static void
fbdevLoadPalette(ScrnInfoPtr pScrn, int num, int *i, LOCO *col, VisualPtr pVis)
{
fbdevHWLoadPalette(pScrn, num, i, col, pVis);
}
static void
fbdevDPMSSet(ScrnInfoPtr pScrn, int mode, int flags)
{
fbdevHWDPMSSet(pScrn, mode, flags);
}
static Bool
FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
fbdevSaveScreen(ScreenPtr pScreen, int mode)
{
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
return fbdevHWSaveScreen(pScreen, mode);
}
static Bool
FBDevScreenInit(ScreenPtr pScreen, int argc, char **argv)
{
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
FBDevPtr fPtr = FBDEVPTR(pScrn);
VisualPtr visual;
int init_picture = 0;
@@ -671,7 +762,7 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
#endif
if (NULL == (fPtr->fbmem = fbdevHWMapVidmem(pScrn))) {
xf86DrvMsg(scrnIndex,X_ERROR,"mapping of video memory"
xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"mapping of video memory"
" failed\n");
return FALSE;
}
@@ -680,17 +771,17 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
fbdevHWSave(pScrn);
if (!fbdevHWModeInit(pScrn, pScrn->currentMode)) {
xf86DrvMsg(scrnIndex,X_ERROR,"mode initialization failed\n");
xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"mode initialization failed\n");
return FALSE;
}
fbdevHWSaveScreen(pScreen, SCREEN_SAVER_ON);
fbdevHWAdjustFrame(scrnIndex,0,0,0);
fbdevHWAdjustFrame(pScrn, 0, 0);
/* mi layer */
miClearVisualTypes();
if (pScrn->bitsPerPixel > 8) {
if (!miSetVisualTypes(pScrn->depth, TrueColorMask, pScrn->rgbBits, TrueColor)) {
xf86DrvMsg(scrnIndex,X_ERROR,"visual type setup failed"
xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"visual type setup failed"
" for %d bits per pixel [1]\n",
pScrn->bitsPerPixel);
return FALSE;
@@ -699,14 +790,14 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
if (!miSetVisualTypes(pScrn->depth,
miGetDefaultVisualMask(pScrn->depth),
pScrn->rgbBits, pScrn->defaultVisual)) {
xf86DrvMsg(scrnIndex,X_ERROR,"visual type setup failed"
xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"visual type setup failed"
" for %d bits per pixel [2]\n",
pScrn->bitsPerPixel);
return FALSE;
}
}
if (!miSetPixmapDepths()) {
xf86DrvMsg(scrnIndex,X_ERROR,"pixmap depth setup failed\n");
xf86DrvMsg(pScrn->scrnIndex,X_ERROR,"pixmap depth setup failed\n");
return FALSE;
}
@@ -722,7 +813,7 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
(pScrn->bitsPerPixel / 8);
if (pScrn->displayWidth != pScrn->virtualX) {
xf86DrvMsg(scrnIndex, X_INFO,
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Pitch updated to %d after ModeInit\n",
pScrn->displayWidth);
}
@@ -736,8 +827,8 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
fPtr->fbstart = fPtr->fbmem + fPtr->fboff;
if (fPtr->shadowFB) {
fPtr->shadow = xcalloc(1, pScrn->virtualX * pScrn->virtualY *
pScrn->bitsPerPixel);
fPtr->shadow = calloc(1, pScrn->displayWidth * pScrn->virtualY *
((pScrn->bitsPerPixel + 7) / 8));
if (!fPtr->shadow) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
@@ -762,7 +853,7 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
init_picture = 1;
break;
default:
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: invalid number of bits per"
" pixel (%d) encountered in"
" FBDevScreenInit()\n", pScrn->bitsPerPixel);
@@ -773,7 +864,7 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
case FBDEVHW_INTERLEAVED_PLANES:
/* This should never happen ...
* we should check for this much much earlier ... */
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: interleaved planes are not yet "
"supported by the fbdev driver\n");
ret = FALSE;
@@ -781,20 +872,20 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
case FBDEVHW_TEXT:
/* This should never happen ...
* we should check for this much much earlier ... */
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: text mode is not supported by the "
"fbdev driver\n");
ret = FALSE;
break;
case FBDEVHW_VGA_PLANES:
/* Not supported yet */
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: EGA/VGA Planes are not yet "
"supported by the fbdev driver\n");
ret = FALSE;
break;
default:
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: unrecognised hardware type (%d) "
"encountered in FBDevScreenInit()\n", type);
ret = FALSE;
@@ -824,7 +915,7 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
"Render extension initialisation failed\n");
if (fPtr->shadowFB && !FBDevShadowInit(pScreen)) {
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"shadow framebuffer initialization failed\n");
return FALSE;
}
@@ -832,17 +923,18 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
if (!fPtr->rotate)
FBDevDGAInit(pScrn, pScreen);
else {
xf86DrvMsg(scrnIndex, X_INFO, "display rotated; disabling DGA\n");
xf86DrvMsg(scrnIndex, X_INFO, "using driver rotation; disabling "
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "display rotated; disabling DGA\n");
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "using driver rotation; disabling "
"XRandR\n");
#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 24
xf86DisableRandR();
#endif
if (pScrn->bitsPerPixel == 24)
xf86DrvMsg(scrnIndex, X_WARNING, "rotation might be broken at 24 "
xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "rotation might be broken at 24 "
"bits per pixel\n");
}
xf86SetBlackWhitePixels(pScreen);
miInitializeBackingStore(pScreen);
xf86SetBackingStore(pScreen);
/* software cursor */
@@ -854,46 +946,46 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
/* XXX It would be simpler to use miCreateDefColormap() in all cases. */
case FBDEVHW_PACKED_PIXELS:
if (!miCreateDefColormap(pScreen)) {
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: miCreateDefColormap failed "
"in FBDevScreenInit()\n");
return FALSE;
}
break;
case FBDEVHW_INTERLEAVED_PLANES:
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: interleaved planes are not yet "
"supported by the fbdev driver\n");
return FALSE;
case FBDEVHW_TEXT:
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: text mode is not supported by "
"the fbdev driver\n");
return FALSE;
case FBDEVHW_VGA_PLANES:
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: EGA/VGA planes are not yet "
"supported by the fbdev driver\n");
return FALSE;
default:
xf86DrvMsg(scrnIndex, X_ERROR,
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"internal error: unrecognised fbdev hardware type "
"(%d) encountered in FBDevScreenInit()\n", type);
return FALSE;
}
flags = CMAP_PALETTED_TRUECOLOR;
if(!xf86HandleColormaps(pScreen, 256, 8, fbdevHWLoadPaletteWeak(),
NULL, flags))
if(!xf86HandleColormaps(pScreen, 256, 8, fbdevLoadPalette, NULL, flags))
return FALSE;
xf86DPMSInit(pScreen, fbdevHWDPMSSetWeak(), 0);
xf86DPMSInit(pScreen, fbdevDPMSSet, 0);
pScreen->SaveScreen = fbdevHWSaveScreenWeak();
pScreen->SaveScreen = fbdevSaveScreen;
/* Wrap the current CloseScreen function */
fPtr->CloseScreen = pScreen->CloseScreen;
pScreen->CloseScreen = FBDevCloseScreen;
#ifdef XV
{
XF86VideoAdaptorPtr *ptr;
@@ -902,6 +994,7 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
xf86XVScreenInit(pScreen,ptr,n);
}
}
#endif
TRACE_EXIT("FBDevScreenInit");
@@ -909,20 +1002,20 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
}
static Bool
FBDevCloseScreen(int scrnIndex, ScreenPtr pScreen)
FBDevCloseScreen(ScreenPtr pScreen)
{
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
FBDevPtr fPtr = FBDEVPTR(pScrn);
fbdevHWRestore(pScrn);
fbdevHWUnmapVidmem(pScrn);
if (fPtr->shadow) {
shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));
xfree(fPtr->shadow);
free(fPtr->shadow);
fPtr->shadow = NULL;
}
if (fPtr->pDGAMode) {
xfree(fPtr->pDGAMode);
free(fPtr->pDGAMode);
fPtr->pDGAMode = NULL;
fPtr->nDGAMode = 0;
}
@@ -930,7 +1023,7 @@ FBDevCloseScreen(int scrnIndex, ScreenPtr pScreen)
pScreen->CreateScreenResources = fPtr->CreateScreenResources;
pScreen->CloseScreen = fPtr->CloseScreen;
return (*pScreen->CloseScreen)(scrnIndex, pScreen);
return (*pScreen->CloseScreen)(pScreen);
}
@@ -943,7 +1036,7 @@ static void *
FBDevWindowLinear(ScreenPtr pScreen, CARD32 row, CARD32 offset, int mode,
CARD32 *size, void *closure)
{
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
FBDevPtr fPtr = FBDEVPTR(pScrn);
if (!pScrn->vtSema)
@@ -958,9 +1051,8 @@ FBDevWindowLinear(ScreenPtr pScreen, CARD32 row, CARD32 offset, int mode,
}
static void
FBDevPointerMoved(int index, int x, int y)
FBDevPointerMoved(ScrnInfoPtr pScrn, int x, int y)
{
ScrnInfoPtr pScrn = xf86Screens[index];
FBDevPtr fPtr = FBDEVPTR(pScrn);
int newX, newY;
@@ -992,7 +1084,7 @@ FBDevPointerMoved(int index, int x, int y)
}
/* Pass adjusted pointer coordinates to wrapped PointerMoved function. */
(*fPtr->PointerMoved)(index, newX, newY);
(*fPtr->PointerMoved)(pScrn, newX, newY);
}
@@ -1024,7 +1116,6 @@ static Bool
FBDevDGASetMode(ScrnInfoPtr pScrn, DGAModePtr pDGAMode)
{
DisplayModePtr pMode;
int scrnIdx = pScrn->pScreen->myNum;
int frameX0, frameY0;
if (pDGAMode) {
@@ -1039,9 +1130,9 @@ FBDevDGASetMode(ScrnInfoPtr pScrn, DGAModePtr pDGAMode)
frameY0 = pScrn->frameY0;
}
if (!(*pScrn->SwitchMode)(scrnIdx, pMode, 0))
if (!(*pScrn->SwitchMode)(pScrn, pMode))
return FALSE;
(*pScrn->AdjustFrame)(scrnIdx, frameX0, frameY0, 0);
(*pScrn->AdjustFrame)(pScrn, frameX0, frameY0);
return TRUE;
}
@@ -1049,7 +1140,7 @@ FBDevDGASetMode(ScrnInfoPtr pScrn, DGAModePtr pDGAMode)
static void
FBDevDGASetViewport(ScrnInfoPtr pScrn, int x, int y, int flags)
{
(*pScrn->AdjustFrame)(pScrn->pScreen->myNum, x, y, flags);
(*pScrn->AdjustFrame)(pScrn, x, y);
}
static int
@@ -1079,8 +1170,8 @@ FBDevDGAAddModes(ScrnInfoPtr pScrn)
DGAModePtr pDGAMode;
do {
pDGAMode = xrealloc(fPtr->pDGAMode,
(fPtr->nDGAMode + 1) * sizeof(DGAModeRec));
pDGAMode = realloc(fPtr->pDGAMode,
(fPtr->nDGAMode + 1) * sizeof(DGAModeRec));
if (!pDGAMode)
break;