mirror of
https://github.com/X11Libre/xf86-video-fbdev.git
synced 2026-03-24 17:45:26 +00:00
Compare commits
56 Commits
xf86-video
...
wip/ci
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c6deb7df5 | ||
|
|
81d7edd384 | ||
|
|
6bdea80acc | ||
|
|
0f89fbffcb | ||
|
|
c8d9f3be7e | ||
|
|
ae894fe112 | ||
|
|
dc48c20ceb | ||
|
|
7bccdf4373 | ||
|
|
112b6c1153 | ||
|
|
89728ce1d6 | ||
|
|
554d6fda21 | ||
|
|
7f445dbd5a | ||
|
|
a8aa1c97f9 | ||
|
|
6ef9644156 | ||
|
|
cf1875209c | ||
|
|
2850cd86d1 | ||
|
|
4730f13b92 | ||
|
|
4865f92f74 | ||
|
|
f676c9def1 | ||
|
|
82aa13d013 | ||
|
|
67525c485f | ||
|
|
9af7f81534 | ||
|
|
e0bce0d017 | ||
|
|
3cf9923119 | ||
|
|
8c03e3474e | ||
|
|
39f668420f | ||
|
|
303f902c76 | ||
|
|
f627319599 | ||
|
|
22f288b4e4 | ||
|
|
2c5eba8574 | ||
|
|
66e7909bfe | ||
|
|
ae0aeffae6 | ||
|
|
2673e72706 | ||
|
|
dd1cf1028c | ||
|
|
679ed9a4e6 | ||
|
|
ac293412a0 | ||
|
|
2edaad4ab2 | ||
|
|
8a65ca2fdc | ||
|
|
91e8b295f8 | ||
|
|
6e29cf8c29 | ||
|
|
a87213930e | ||
|
|
be003f2568 | ||
|
|
20909cd806 | ||
|
|
90524a26d3 | ||
|
|
0d45d8f3ad | ||
|
|
049cdddd14 | ||
|
|
d3a2fe1b76 | ||
|
|
f7e68d16dc | ||
|
|
0ddf357522 | ||
|
|
55e0de6cb1 | ||
|
|
a05560b1d3 | ||
|
|
8f7d8a7ba3 | ||
|
|
9b3ef42fdd | ||
|
|
b768d66b87 | ||
|
|
fa588a1ddc | ||
|
|
6977b3490a |
5
.gitlab-ci.yml
Normal file
5
.gitlab-ci.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
variables:
|
||||
FDO_UPSTREAM_REPO: 'xorg/driver/xf86-video-fbdev'
|
||||
|
||||
include:
|
||||
- local: '.gitlab-ci/common/xorg-driver.yml'
|
||||
20
.gitlab-ci/common/README.md
Normal file
20
.gitlab-ci/common/README.md
Normal 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>
|
||||
61
.gitlab-ci/common/build-driver.sh
Executable file
61
.gitlab-ci/common/build-driver.sh
Executable 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
|
||||
71
.gitlab-ci/common/build-xserver.sh
Executable file
71
.gitlab-ci/common/build-xserver.sh
Executable 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
|
||||
88
.gitlab-ci/common/debian/image-install.sh
Executable file
88
.gitlab-ci/common/debian/image-install.sh
Executable 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
|
||||
8
.gitlab-ci/common/freebsd/FreeBSD.conf
Normal file
8
.gitlab-ci/common/freebsd/FreeBSD.conf
Normal 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
|
||||
}
|
||||
59
.gitlab-ci/common/freebsd/image-install.sh
Executable file
59
.gitlab-ci/common/freebsd/image-install.sh
Executable 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"
|
||||
109
.gitlab-ci/common/freebsd/libdrm-2.4.116.patch
Normal file
109
.gitlab-ci/common/freebsd/libdrm-2.4.116.patch
Normal 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
|
||||
|
||||
216
.gitlab-ci/common/xorg-driver.yml
Normal file
216
.gitlab-ci/common/xorg-driver.yml
Normal 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
|
||||
@@ -30,3 +30,5 @@ ChangeLog:
|
||||
$(CHANGELOG_CMD)
|
||||
|
||||
dist-hook: ChangeLog INSTALL
|
||||
|
||||
EXTRA_DIST = README.md
|
||||
|
||||
20
README
20
README
@@ -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
18
README.md
Normal 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
|
||||
|
||||
13
autogen.sh
13
autogen.sh
@@ -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
|
||||
|
||||
58
configure.ac
58
configure.ac
@@ -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
|
||||
|
||||
@@ -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) < $< > $@
|
||||
|
||||
@@ -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__)
|
||||
|
||||
@@ -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
|
||||
|
||||
307
src/fbdev.c
307
src/fbdev.c
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user