Created
March 8, 2013 15:43
-
-
Save SalemHarrache/5117340 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sudo rm -f /etc/X11/xorg.conf* | |
sudo -i | |
# wget -N http://kanotix.com/files/install-fglrx-debian.sh | |
DISPLAY= sh install-fglrx-debian.sh -z |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
UNSUPPORTED=1 | |
LEGACY=0 | |
#CARDS="$(lspci -n|gawk '{sub("Class","")} $2 == "0300:" {print$3}')" | |
CARDS="$(lspci -n|perl -e 'while(<>){(push(@cards,$_)) if (s/^.+?\s*0300\:\s+(.+?)\s+.*$/$1/)} print join(" ",@cards);')" | |
for card in $CARDS; do | |
VENDOR=${card%:*} | |
DEVICE=${card#*:} | |
case $VENDOR in | |
1002) | |
case $DEVICE in | |
#strings /usr/lib/xorg/modules/drivers/fglrx_drv.so|awk '/^0x....$/{print tolower($1)}'|sed s/0x//|sort -u|tr '\n' '|'|sed 's/|$//' | |
#awk -F'[()x]' '/FGL_ASIC_ID/{print tolower($3)}' common/lib/modules/fglrx/build_mod/fglrxko_pci_ids.h|sort -u|tr '\n' '|'|sed 's/|$//' | |
#671f|673e|689b|9806|9807) UNSUPPORTED=0;LEGACY=5 ;; | |
6700|6701|6702|6703|6704|6705|6706|6707|6708|6709|6718|6719|671c|671d|671f|6720|6721|6722|6723|6724|6725|6726|6727|6728|6729|6738|6739|673e|6740|6741|6742|6743|6744|6745|6746|6747|6748|6749|674a|6750|6751|6758|6759|675b|675d|675f|6760|6761|6762|6763|6764|6765|6766|6767|6768|6770|6772|6778|6779|677b|6780|6784|6788|678a|6798|6799|679a|679e|6800|6801|6808|6809|6818|6819|6820|6821|6823|6824|6825|6826|6827|6828|682d|682f|6830|6831|6838|6839|683b|683d|683f|6840|6841|6842|6843|6849|684c|6850|6858|6859|6880|6888|6889|688a|688c|688d|6890|6898|6899|689b|689c|689d|689e|68a0|68a1|68a8|68a9|68b0|68b1|68b8|68b9|68ba|68be|68bf|68c0|68c1|68c7|68c8|68c9|68d0|68d1|68d8|68d9|68da|68de|68e0|68e1|68e4|68e5|68e8|68e9|68f0|68f1|68f2|68f8|68f9|68fa|68fe|9400|9401|9402|9403|9405|940a|940b|940f|9440|9441|9442|9443|9444|9446|9447|944a|944b|944c|944e|944f|9450|9451|9452|9456|945a|945b|945e|9460|9462|946a|946b|947a|947b|9480|9487|9488|9489|948a|948f|9490|9491|9495|9498|949c|949e|949f|94a0|94a1|94a3|94b1|94b3|94b4|94b5|94c0|94c1|94c3|94c4|94c5|94c6|94c7|94c8|94c9|94cb|94cc|9500|9501|9504|9505|9506|9507|9508|9509|950f|9511|9513|9515|9517|9519|9540|9541|9542|954e|954f|9552|9553|9555|9557|955f|9580|9581|9583|9586|9587|9588|9589|958a|958b|958c|958d|958e|958f|9590|9591|9593|9595|9596|9597|9598|9599|959b|95c0|95c2|95c4|95c5|95c6|95c7|95c9|95cc|95cd|95ce|95cf|9610|9611|9612|9613|9614|9615|9616|9640|9641|9642|9643|9644|9645|9647|9648|9649|964a|964b|964c|964e|964f|9710|9711|9712|9713|9714|9715|9802|9803|9804|9805|9806|9807|9808|9809|9900|9901|9903|9904|9905|9906|9907|9908|9909|990a|990f|9990|9991|9992|9993|9994) UNSUPPORTED=0 ;; | |
4242|4966|4967|4c64|4c66|4c67|5148|514c|514d|5960|5961|5962|5964|5965|5c61|5c63) UNSUPPORTED=0;LEGACY=1 ;; | |
5834|5835|728c|7834|7835) UNSUPPORTED=0;LEGACY=2 ;; | |
3151|3154|3e54|4147|4154|4a4d|4e47|4e4b|4e54|5464|5550|5551|5554|5555|564a|564b|5b64|5b65|5d49|5d50|5d51|5e48|7103|7104|7105|7106|710e|710f|7144|7152|7153|719b|71c4|71d2|71d4|71da|728c) UNSUPPORTED=0;LEGACY=3 ;; | |
3150|3151|3152|3154|3e50|3e54|4144|4146|4147|4148|4149|4150|4151|4152|4153|4154|4155|4a48|4a49|4a4a|4a4b|4a4c|4a4d|4a4e|4a4f|4a50|4a54|4b48|4b49|4b4a|4b4b|4b4c|4e44|4e45|4e46|4e47|4e48|4e49|4e4a|4e4b|4e50|4e51|4e52|4e54|4e56|5460|5461|5462|5464|5548|5549|554a|554b|554c|554d|554e|554f|5550|5551|5554|5555|564a|564b|564f|5652|5653|5657|5854|5874|5954|5955|5974|5975|5a41|5a42|5a43|5a61|5a62|5a63|5b60|5b62|5b63|5b64|5b65|5b66|5d48|5d49|5d4a|5d4c|5d4d|5d4f|5d50|5d51|5d52|5d57|5e48|5e4a|5e4b|5e4c|5e4d|5e4f|7100|7101|7102|7103|7104|7105|7106|7108|7109|710a|710b|710c|710e|710f|7140|7141|7142|7143|7144|7145|7146|7147|7149|714a|714b|714c|714d|714e|714f|7151|7152|7153|715e|715f|7180|7181|7183|7186|7187|7188|718a|718b|718c|718d|718f|7193|7196|719b|719f|71c0|71c1|71c2|71c3|71c4|71c5|71c6|71c7|71cd|71ce|71d2|71d4|71d5|71d6|71da|71de|7200|7210|7211|7240|7243|7244|7245|7246|7247|7248|7249|724a|724b|724c|724d|724e|724f|7280|7281|7283|7284|7287|7288|7289|728b|728c|7290|7291|7293|7297|791e|791f|793f|7941|7942|796c|796d|796e|796f|9270) UNSUPPORTED=0;LEGACY=4 ;; | |
*) UNSUPPORTED=1 ;; | |
esac | |
;; | |
esac | |
done | |
X_VER=$(X -version 2>&1 | grep -E '(X Window System Version|X.Org X Server) [0-9]\.' | sed -e 's/^.*X Window System Version //;s/^.*X.Org X Server //' | cut -d' ' -f1) | |
case $LEGACY in | |
1|2) case $X_VER in | |
1.[5-9]*|1.1[0-9]*) UNSUPPORTED=1 ;; | |
esac ;; | |
3|4) case $X_VER in | |
1.[6-9]*|1.1[0-9]*) UNSUPPORTED=1 ;; | |
esac ;; | |
esac | |
KVER=$(uname -r) | |
KV=$(uname -r|cut -d. -f1-2) | |
RMML=0 | |
SHELL=0 | |
UPDATE=0 | |
VER_FORCE="" | |
PRINT_VER=0 | |
NO_X_KILL=0 | |
PATCH=0 | |
COMPOSITE=1 | |
AUTO_RES=0 | |
AUTO_SYNC=0 | |
FIREGL=0 | |
while getopts pabcfrsuv:yzh opt; do | |
case $opt in | |
p) PRINT_VER=1 | |
;; | |
a) AUTO_RES=1 | |
;; | |
b) AUTO_SYNC=1 | |
;; | |
c) COMPOSITE=0 | |
;; | |
f) FIREGL=1 | |
;; | |
r) RMML=1 | |
;; | |
s) SHELL=1 | |
;; | |
u) UPDATE=1 | |
;; | |
v) VER_FORCE="$OPTARG" | |
;; | |
y) PATCH=1 | |
;; | |
z) NO_X_KILL=1 | |
;; | |
\?|h) echo "Usage $0 [options] " >&2 | |
echo "optional options are:" >&2 | |
echo " -a Use Auto-Selection for screen res" >&2 | |
echo " -b Use Auto-Selection for H/V sync" >&2 | |
echo " -c Disable Composite extension" >&2 | |
echo " -r Remove ModeLines" >&2 | |
echo " -v VER Force use of specific driver version. Example: -v 8.29.6" >&2 | |
echo " -p Print driver version to be installed and quit" >&2 | |
echo " -s Run shell before ati-installer.sh (debug)" >&2 | |
echo " -u Update package scripts (debug)" >&2 | |
echo " -y Force patching. Special purpose only!" >&2 | |
echo " -z No X kill/restart. Special purpose only!" >&2 | |
echo " -h Show this help" >&2 | |
exit 6 | |
;; | |
esac | |
done | |
# most DX8 cards | |
VER_LEGACY_1=8.28.8 | |
# rest of DX8 cards | |
VER_LEGACY_2=8.29.6 | |
# FireGL DX9 cards | |
VER_LEGACY_3=9-3 | |
# all DX9 cards | |
VER_LEGACY_4=9-3 | |
# AMD Radeon HD 6790 - unused now since 11-4 | |
VER_LEGACY_5=8.84 | |
# OpenCL1.2-Static-Cplus-preview | |
#VER_SPECIAL=8.93.10 | |
# AMD Radeon HD 7970 | |
#VER_SPECIAL=8.921 | |
# OpenCL1.2beta | |
#VER_SPECIAL=8.96 | |
# Last official stable | |
VER_SPECIAL=12-3 | |
#VER=12-3 | |
VER=8.96 | |
#VER=12-2 | |
#VER=8.93.10 | |
#VER=12-1 | |
#VER=11-12 | |
#VER=11-11 | |
#VER=11-10 | |
#VER=11-9 | |
#VER=11-8 | |
#VER=8.88.8 | |
#VER=11-7 | |
#VER=11-6 | |
#VER=11-5 | |
#VER=11-4 | |
#VER=8.84 | |
#VER=11-3 | |
#VER=11-2 | |
#VER=11-1 | |
#VER=10-12 | |
#VER=10-11 | |
#VER=10-10 | |
#VER=10-9 | |
#VER=10-8 | |
#VER=10-7 | |
#VER=10-6 | |
#VER=10-5 | |
#VER=10-4 | |
#VER=8.712.3.1 | |
#VER=10-3 | |
#VER=10-2 | |
#VER=10-1 | |
#VER=8.682.2 | |
#VER=9-12 | |
#VER=9-11 | |
#VER=9-10 | |
#VER=9-9 | |
#VER=9-8 | |
#VER=9-7 | |
#VER=9-6 | |
#VER=9-5 | |
#VER=9-4 | |
#VER=9-3 | |
#VER=9.2 | |
#VER=9-1 | |
#VER=8-12 | |
#VER=8-11 | |
#VER=8-10 | |
#VER=8-9 | |
#VER=8-8 | |
#VER=8-7 | |
#VER=8-6 | |
#VER=8-5 | |
#VER=8-4 | |
#VER=8-3 | |
#VER=8-02 | |
#VER=8-01 | |
#VER=8.443.1 | |
#VER=7-11 | |
#VER=8.42.3 | |
#VER=8.41.7 | |
#VER=8.40.4 | |
# Google Earth does not run with 8.40.4 | |
#VER=8.39.4 | |
# first release 8.39.4 showed "AMD Testing use only" in down right corner ;) | |
#VER=8.38.7 | |
#VER=8.38.6 | |
#VER=8.37.6 | |
#VER=8.36.5 | |
# No modeline support for Xorg 7.2 - disabled | |
#VER=8.35.5 | |
#VER=8.34.8 | |
#VER=8.33.6 | |
# 8.33.6 used 85 hz on 75 hz max setting with modelines | |
# 8.33.6 and newer required for Xorg 7.2 | |
#VER=8.32.5 | |
# 8.32.5 supports Xorg 7.2 RC2 | |
#VER=8.31.5 | |
#VER=8.30.3 | |
# 8.30.3 does not work with 71c1|71d4|71d5 | |
#VER=8.29.6 | |
#VER=8.28.8 | |
#VER=8.27.10 | |
# 8.27.10 and newer required for Xorg 7.1 | |
#VER=8.26.18 | |
#VER=8.25.18 | |
#VER=8.24.8 | |
#VER=8.23.7 | |
#VER=8.22.5 | |
[ "$LEGACY" = "1" ] && VER=$VER_LEGACY_1 | |
[ "$LEGACY" = "2" ] && VER=$VER_LEGACY_2 | |
[ "$LEGACY" = "3" ] && VER=$VER_LEGACY_3 | |
[ "$LEGACY" = "4" ] && VER=$VER_LEGACY_4 | |
[ "$LEGACY" = "5" ] && VER=$VER_LEGACY_5 | |
if [ -n "$VER_FORCE" ]; then | |
if [ "${#VER_FORCE}" = "1" ]; then | |
[ "$VER_FORCE" = "1" ] && VER=$VER_LEGACY_1 | |
[ "$VER_FORCE" = "2" ] && VER=$VER_LEGACY_2 | |
[ "$VER_FORCE" = "3" ] && VER=$VER_LEGACY_3 | |
[ "$VER_FORCE" = "4" ] && VER=$VER_LEGACY_4 | |
[ "$VER_FORCE" = "5" ] && VER=$VER_LEGACY_5 | |
[ "$VER_FORCE" = "s" ] && VER=$VER_SPECIAL | |
else | |
VER=$VER_FORCE | |
fi | |
fi | |
# check for pipe usage | |
[ "$0" = "sh" -o "$0" = "bash" ] && NO_X_KILL=1 | |
# check for kms usage - not possible to unload | |
lsmod|grep -q drm_kms_helper && NO_X_KILL=1 | |
if [ "$UNSUPPORTED" = "1" ]; then | |
echo Error: No supported ATI RADEON/FIREGL adapter found. >&2 | |
exit 3 | |
fi | |
if [ "$PRINT_VER" = "1" ]; then | |
echo $VER | |
exit | |
fi | |
if [ ! -f /etc/kanotix-version ]; then | |
echo Error: No KANOTIX found. Do not ask for support! >&2 | |
fi | |
if [ ! -f /etc/debian_version ]; then | |
echo Error: No Debian compatible system found. Do not ask for support! >&2 | |
exit 100 | |
fi | |
if [ "$(id -u)" != 0 ]; then | |
echo Error: You must be root to run this script! >&2 | |
exit 6 | |
fi | |
LAPTOP="" | |
[ "$(find /proc/acpi/battery/ -mindepth 1 -type d 2>/dev/null)" ] && LAPTOP="yes" | |
[ -d /KNOPPIX -o -d /KANOTIX ] && INSTALLED="no" || INSTALLED="yes" | |
if [ -f /etc/default/distro ]; then | |
. /etc/default/distro | |
[ "$FLL_DISTRO_MODE" = "live" ] && INSTALLED="no" | |
fi | |
if [ "$INSTALLED" = "yes" ]; then | |
if [ "$NO_X_KILL" = "0" ] && [ -n "$DISPLAY" ]; then | |
echo Error: Can\`t be run within X! Use a text console \(ALT-CTRL-F1\) >&2 | |
exit 7 | |
fi | |
else | |
if grep -q -e unionfs -e aufs /proc/mounts; then | |
echo Unionfs found. >&2 | |
else | |
echo Activating Unionfs now. >&2 | |
UNIONFS=unionfs | |
modinfo aufs >/dev/null 2>&1 && UNIONFS=aufs | |
AUFSOPT="" | |
[ "$UNIONFS" = "aufs" ] && AUFSOPT="udba=reval," | |
mkdir -p /tmp/union | |
UNION=/KNOPPIX | |
[ -d /KANOTIX ] && UNION=/KANOTIX | |
[ -d "$FLL_MOUNTPOINT" ] && UNION="$FLL_MOUNTPOINT" | |
mount -t $UNIONFS -o ${AUFSOPT}dirs=/tmp/union/:$UNION none $UNION/ >/dev/null 2>&1 | |
fi | |
fi | |
X_CONF=XF86Config-4 | |
if which Xorg >/dev/null; then | |
[ -e /etc/X11/xorg.conf ] && X_CONF=xorg.conf | |
fi | |
X_CONF_CREATE=0 | |
if ! [ -e /etc/X11/$X_CONF ]; then | |
X_CONF=xorg.conf | |
X_CONF_CREATE=1 | |
fi | |
unset UP | |
# create minimalistic xorg.conf when without Driver entry | |
if [ "$X_CONF_CREATE" = "0" ]; then | |
if ! grep -v ^# /etc/X11/$X_CONF|grep Driver|grep -q -e ati -e fglrx -e radeon -e fbdev -e vesa; then | |
echo Warning: /etc/X11/$X_CONF needs some modifications. Trying now. >&2 | |
if ! [ -x /usr/bin/patch ]; then | |
apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes patch | |
fi | |
if ! [ -x /usr/bin/patch ]; then | |
echo Error: No patch tool installed - please install it and try again! >&2 | |
exit 7 | |
fi | |
rm -f /etc/X11/$X_CONF.pure /etc/X11/$X_CONF.rej | |
cp /etc/X11/$X_CONF /etc/X11/$X_CONF.pure | |
if ! grep -q "Device.*Configured Video Device" /etc/X11/$X_CONF; then | |
echo 'Warning: Adding "Configured Video Device" to "Screen" Section.' >&2 | |
perl -pi -e 's/(^\tMonitor\t\t"Configured Monitor"\n)/\1\tDevice\t\t"Configured Video Device"\n/' /etc/X11/$X_CONF | |
fi | |
patch --no-backup-if-mismatch /etc/X11/$X_CONF <<'EOT' | |
Index: xorg.conf | |
@@ -31,6 +31,7 @@ | |
Section "Device" | |
Identifier "Configured Video Device" | |
+ Driver "vesa" | |
EndSection | |
Section "Monitor" | |
@@ -41,6 +42,11 @@ | |
Identifier "Default Screen" | |
Monitor "Configured Monitor" | |
Device "Configured Video Device" | |
+ DefaultDepth 24 | |
+ SubSection "Display" | |
+ Depth 24 | |
+ Modes | |
+ EndSubSection | |
EndSection | |
Section "ServerLayout" | |
EOT | |
if [ $? -ne 0 ]; then | |
echo Error: Unable to patch. Please manually fix file! >&2 | |
rm -f /etc/X11/$X_CONF | |
mv /etc/X11/$X_CONF.pure /etc/X11/$X_CONF | |
exit 8 | |
else | |
echo Warning: Patch applied successfully. >&2 | |
fi | |
fi | |
fi | |
cd /usr/src | |
X -version 2>&1|grep -q -e "X Window System Version 7.1" && case $VER in 8.22.5|8.23.7|8.24.8|8.25.18|8.26.18) | |
echo Error: No Xorg 7.1 support in $VER >&2 | |
exit 8 | |
;; | |
esac | |
X -version 2>&1|grep -q -e "X Window System Version 7.2" -e "X Window System Version 1.3" -e "X Server 1.4" && case $VER in 8.22.5|8.23.7|8.24.8|8.25.18|8.26.18|8.27.10|8.28.8|8.29.6|8.30.3|8.31.5|8.32.5) | |
echo Error: No Xorg 7.2 support in $VER >&2 | |
case $VER in | |
8.28.8|8.29.6|8.32.5) | |
if [ "$PATCH" = "1" ]; then | |
echo Warning: Only incomplete patch possible \(2d only\) >&2 | |
else | |
echo Error: Only incomplete patch possible \(2d only\), use -y option to try >&2 | |
exit 9 | |
fi | |
;; | |
*) | |
exit 10 | |
;; | |
esac | |
esac | |
if X -version 2>&1|grep -q -e "X Window System Version 1.3" -e "X Server 1.4"; then | |
case $VER in | |
8.33.6|8.34.8|8.35.5|8.36.5) | |
echo Error: No Xorg 1.3 support in $VER >&2 | |
PATCH=1 | |
;; | |
8.37.6|8.38.6|8.38.7|8.39.4|8.40.4|8.41.7|8.42.3|7-11|8.443.1|8-01|8-02|8.3|8-3|8-4|8-5|8-6|8-7|8-8|8-9|8-10|8-11|8-12|9-*|1*-*|8.5*|8.6*|8.7*|8.8*|8.9*|9.*) # supports Xorg 1.3 | |
;; | |
*) | |
if [ "$PATCH" = "0" ]; then | |
echo Error: Unknown status of Xorg 1.3 support for this release, use -y to force. >&2 | |
exit 11 | |
fi | |
;; | |
esac | |
fi | |
#[ "$VER" = "8.84" ] && PATCH=1 | |
[ "$PATCH" = "1" ] && echo Warning: Patching driver to support any Xorg release >&2 | |
#if [ "$VER" = "8.39.4" ]; then | |
# PATCH=1 | |
# echo Warning: Brutally patching driver to disable logo >&2 | |
#fi | |
case $VER in | |
8.38.7|8.38.6|8.37.6|8.36.5|8.35.5|8.34.8|8.33.6|8.32.5|8.31.5|8.30.3|8.29.6|8.28.8|8.27.10|8.26.18|8.25.18|8.24.8|8.23.7|8.22.5) | |
if [ $(set -f ; IFS=.- ; set -- $KVER ; printf %d%.2d%.4d "$1" "$2" "$3") -ge 2060024 ]; then | |
echo Error: No patches available to get selected driver release work with current kernel! >&2 | |
exit 12 | |
fi | |
;; | |
esac | |
# remove possible live-config file | |
rm -vf /etc/profile.d/zz-live.sh | |
CPU=$(uname -m) | |
if [ "$CPU" = "x86_64" ]; then | |
ARCH="amd64" | |
else | |
ARCH="i386" | |
fi | |
CPU="x86.x86_64" # since 8.31.5 | |
if [ "$VER" = "8.22.5" -o "$VER" = "8.23.7" ]; then | |
if [ "$ARCH" = "i386" ]; then | |
CPU="i386" | |
else | |
CPU="x86_64" | |
fi | |
fi | |
case $VER in | |
8.24.8|8.25.18|8.26.18|8.27.10|8.28.8|8.29.6|8.30.3) CPU="x86" ;; | |
esac | |
unset X86 | |
[ "$ARCH" = "amd64" ] && X86=64 | |
unset BIT | |
[ "$ARCH" = "amd64" ] && BIT="64bit/" | |
[ "$VER" = "8-11" ] && BIT="64bit/" | |
case $VER in | |
11-12|11-11|11-10|11-9|11-8|8.88.8|11-7|11-6|11-5|11-4|8.84|11-3|11-2|11-1|10-12|10-11|10-10|10-9|10-8|10-7|10-6|10-5|10-4|8.712.3.1|10-3|10-2|10-1|8.682.2|9-12|9-11|9-10|9-9|9-8|9-7|9-6|9-5|9-4|9-3|9.2|9-1|8-12|8-11|8-10|8-9|8-8|8-7|8-6|8-5|8-4|8-3|8-02|8-01|8.443.1|7-11|8.42.3|8.41.7|8.40.4|8.39.4|8.38.7|8.38.6|8.37.6|8.36.5|8.35.5|8.34.8|8.33.6|8.32.5|8.31.5|8.30.3|8.29.6|8.28.8|8.27.10|8.26.18|8.25.18|8.24.8|8.23.7|8.22.5) VENDOR=ati ;; | |
*) VENDOR=amd ;; | |
esac | |
case $VER in | |
8.22.5|8.23.7|8.24.8|8.25.18|8.26.18|8.27.10) DRIVER=ati-driver-installer-$VER-$CPU.run ;; | |
8.24.8|8.25.18|8.26.18|8.27.10|8.28.8|8.29.6|8.30.3) DRIVER=ati-driver-installer-$VER.run ;; | |
*) DRIVER=$VENDOR-driver-installer-$VER-$CPU.run ;; | |
esac | |
if [ ! -e $DRIVER -a "$VER" = 8.682.2 ]; then | |
wget --referer amd.com -Nc http://www2.ati.com/drivers/hotfix/Catalyst_9.12_Hotfix_Linux_8.682.2RC1_Dec15.zip | |
unzip -jo Catalyst_9.12_Hotfix_Linux_8.682.2RC1_Dec15.zip "*.run"||rm -f Catalyst_9.12_Hotfix_Linux_8.682.2RC1_Dec15.zip | |
fi | |
if [ ! -e $DRIVER -a "$VER" = 8.712.3.1 ]; then | |
wget --referer amd.com -Nc http://www2.ati.com/drivers/hotfix/ATI_Catalyst_10.3_OGL4_Preview_Linux.zip | |
unzip -jo ATI_Catalyst_10.3_OGL4_Preview_Linux.zip "*.run"||rm -f ATI_Catalyst_10.3_OGL4_Preview_Linux.zip | |
fi | |
if [ ! -e $DRIVER -a "$VER" = 8.84 ]; then | |
wget -O ati-driver-installer-$VER-x86.x86_64.run --referer amd.com -c http://www2.ati.com/drivers/hotfix/caicos_turks_barts_le/amd_catalyst_8.84_linux_radeon_hd_6700_6600_6500_6400_apr5.run | |
fi | |
if [ ! -e $DRIVER -a "$VER" = 8.88.8 ]; then | |
wget -O ati-driver-installer-$VER-x86.x86_64.run --referer amd.com -c http://www2.ati.com/drivers/hotfix/AMD_Catalyst_Preview_driver_OpenGL_4.2_beta_support_8.88.8-x86.x86_64.run | |
fi | |
if [ ! -e $DRIVER -a "$VER" = 8.921 ]; then | |
wget --referer amd.com -Nc http://www2.ati.com/drivers/hotfix/radeon_7900_series/amd-driver-installer-8.921-x86.x86_64.run | |
fi | |
if [ ! -e $DRIVER -a "$VER" = 8.93.10 ]; then | |
wget --referer amd.com -Nc http://download2-developer.amd.com/amd/APPSDK/OpenCL/OpenCL1.2-Static-Cplus-preview-drivers-Linux.tgz | |
tar xzf OpenCL1.2-Static-Cplus-preview-drivers-Linux.tgz | |
unzip -jo root/Desktop/rt/111216a-130492E-LNX/R6LNX/8.93.10-111216a-130492E.zip \*.run||rm -f OpenCL1.2-Static-Cplus-preview-drivers-Linux.tgz | |
rm -rf root | |
fi | |
if [ ! -e $DRIVER -a "$VER" = 8.96 ]; then | |
wget --referer amd.com -Nc http://download2-developer.amd.com/amd/APPSDK/OpenCL1.2betadriversLinux.tgz | |
tar xzf OpenCL1.2betadriversLinux.tgz fglrx-8.96/amd-driver-installer-8.96-x86.x86_64.run||rm -f OpenCL1.2betadriversLinux.tgz fglrx-8.96/amd-driver-installer-8.96-x86.x86_64.run | |
[ -f fglrx-8.96/amd-driver-installer-8.96-x86.x86_64.run ] && mv fglrx-8.96/amd-driver-installer-8.96-x86.x86_64.run . | |
rmdir fglrx-8.96 | |
fi | |
if ! [ -e $DRIVER ]; then | |
#wget --referer=ati.com -Nc http://www2.ati.com/drivers/linux/${BIT}${DRIVER} | |
wget --referer=ati.com -Nc http://www2.ati.com/drivers/linux/${DRIVER} | |
fi | |
GL=/usr/X11R6/lib/libGL.so.1.2 | |
export FORCE_ATI_UNINSTALL=1 | |
[ -x /usr/share/ati/fglrx-uninstall.sh ] && /usr/share/ati/fglrx-uninstall.sh | |
dpkg --purge fglrx${X86}-4-3-0 >/dev/null 2>&1 | |
dpkg --purge fglrx${X86}-6-8-0 >/dev/null 2>&1 | |
dpkg --purge fglrx-glc22 >/dev/null 2>&1 | |
dpkg --purge fglrx >/dev/null 2>&1 | |
for package in $(dpkg-divert --list|grep "diversion of $GL"|cut -f7 -d' '|grep -v -e fglrx-driver -e xorg-driver-fglrx); do | |
dpkg-divert --package $package --remove $GL | |
done | |
[ -f /var/lib/dpkg/info/xorg-driver-fglrx.postrm ] && sed -i 'sX> /dev/nullX||trueX' /var/lib/dpkg/info/xorg-driver-fglrx.postrm | |
if [ -e $GL.1st ]; then | |
rm -f $GL | |
mv $GL.1st $GL | |
fi | |
rm -rf /usr/share/ati | |
unset UP | |
# Ubuntu universe workaround | |
[ -r /etc/lsb-release ] && . /etc/lsb-release | |
if [ "$DISTRIB_ID" = "Ubuntu" ]; then | |
if ! grep -Eq "^[[:space:]]*deb[[:space:]]+.*universe$" /etc/apt/sources.list; then | |
grep -Eq "deb[[:space:]]+.*universe$" /etc/apt/sources.list && sed -i 's/^#\s*\(deb\s.*universe\)$/\1/' /etc/apt/sources.list | |
fi | |
fi | |
# Ubuntu intrepid multiverse workaround | |
#if [ "$DISTRIB_ID" = "Ubuntu" -a "$DISTRIB_CODENAME" = "intrepid" ]; then | |
# if ! grep -Eq "^[[:space:]]*deb[[:space:]]+.*multiverse$" /etc/apt/sources.list; then | |
# grep -Eq "deb[[:space:]]+.*multiverse$" /etc/apt/sources.list && sed -i 's/^#\s*\(deb\s.*multiverse\)$/\1/' /etc/apt/sources.list | |
# unset UP | |
# fi | |
#fi | |
if ! [ -x /usr/bin/module-assistant ]; then | |
apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes module-assistant | |
fi | |
if ! [ -d /usr/share/build-essential ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes build-essential | |
fi | |
if ! [ -x /usr/bin/fakeroot ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes fakeroot | |
fi | |
if ! [ -x /usr/bin/dh_testdir ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes debhelper | |
fi | |
if ! [ -x /bin/bzip2 ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes bzip2 | |
fi | |
if ! [ -f /usr/lib/libstdc++.so.5 ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes libstdc++5 | |
fi | |
if [ "$(uname -m)" = "x86_64" -a ! -d /usr/share/doc/ia32-libs ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes ia32-libs | |
fi | |
if [ "$(uname -m)" = "x86_64" ] && ! [ -f /emul/ia32-linux/usr/lib/libXcursor.so.1 -o -f /usr/lib32/libXcursor.so.1 ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes ia32-libs-gtk | |
fi | |
if [ "$(uname -m)" = "x86_64" -a ! -d /usr/share/doc/ia32-libs -a ! -d /usr/share/doc/lib32gcc1 ] ; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes lib32gcc1 | |
fi | |
if ! [ -x /usr/bin/module-assistant ]; then | |
echo "Error: module-assistant missing." >&2 | |
[ -r /etc/lsb-release ] && . /etc/lsb-release | |
[ "$DISTRIB_ID" = "Ubuntu" ] && echo "Hint: Enable universe repository in /etc/apt/sources.list." >&2 | |
exit 1 | |
fi | |
if ! [ -x /usr/sbin/dkms ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
FROZEN=0 | |
[ -f /etc/frozen-rc.d ] && FROZEN=1 | |
[ -x /usr/sbin/unfreeze-rc.d ] && /usr/sbin/unfreeze-rc.d | |
apt-get install --allow-unauthenticated --yes dkms | |
[ "$FROZEN" = "1" -a -x /usr/sbin/freeze-rc.d ] && /usr/sbin/freeze-rc.d | |
fi | |
if ! [ -x /usr/sbin/dkms ]; then | |
m-a -i prepare | |
FROZEN=0 | |
[ -f /etc/frozen-rc.d ] && FROZEN=1 | |
[ -x /usr/sbin/unfreeze-rc.d ] && /usr/sbin/unfreeze-rc.d | |
#DKMS_DEB=dkms_2.0.20.4-0ubuntu1_all.deb | |
#wget -N http://linux.dell.com/dkms/$DKMS_DEB | |
DKMS_DEB=dkms_2.0.20.4-0ubuntu3_all.deb | |
wget -N http://kanotix.com/files/thorhammer/backports-ubuntu/dkms/$DKMS_DEB | |
dpkg -i $DKMS_DEB | |
[ "$FROZEN" = "1" -a -x /usr/sbin/freeze-rc.d ] && /usr/sbin/freeze-rc.d | |
fi | |
DKMS=0 | |
if [ -x /usr/sbin/dkms -a ! -f /usr/share/cdbs/1/rules/debhelper.mk ]; then | |
apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes cdbs | |
fi | |
[ -x /usr/sbin/dkms -a -f /usr/share/cdbs/1/rules/debhelper.mk ] && DKMS=1 | |
if [ -f /etc/modutils/1alsa ]; then | |
mv /lib/modules/extra/alsa /lib/modules/$(uname -r)/ | |
rm -f /etc/modutils/1alsa | |
depmod -a | |
fi | |
rm -rf fglrx-install /tmp/fglrx* | |
rm -f fglrx* 2>/dev/null | |
rm -f /tmp/xorg-driver-fglrx* xorg-driver-fglrx* | |
rm -f /etc/fglrxrc /etc/fglrxprofiles.csv | |
rm -rf /etc/ati | |
# Ubuntu workaround | |
[ -f /etc/default/linux-restricted-modules-common ] && perl -pi -e 's/^(DISABLED_MODULES)=.*/\1="fglrx"/' /etc/default/linux-restricted-modules-common | |
[ -x /sbin/lrm-manager ] && /sbin/lrm-manager | |
DISTRIB_ID=Debian | |
DISTRIB_CODENAME=etch | |
X -version 2>&1|grep -q -e "X Window System Version 6.9" -e "X Window System Version 7.0" && DISTRIB_CODENAME=sid | |
if [ -d /usr/lib/xorg/modules ]; then | |
DISTRIB_ID=Ubuntu | |
DISTRIB_CODENAME=dapper | |
fi | |
X -version 2>&1|grep -q -e "X Window System Version 7.1" -e "X Window System Version 7.2" -e "X Window System Version 1.3" -e "X Server 1.4" && [ "$VER" != "8.27.10" ] && DISTRIB_CODENAME=edgy | |
# Debian (and Ubuntu) | |
[ -f /etc/debian_version -a ! -f /etc/kanotix-version ] && m-a -i prepare | |
# Kanotix fallback | |
[ -f /etc/kanotix-version -a "$(readlink -e /lib/modules/$(uname -r)/build)" = "" ] && m-a -i prepare | |
#LC_ALL= LC_CTYPE= LC_MESSAGES= LANG= sh $DRIVER --buildpkg $DISTRIB_ID/$DISTRIB_CODENAME || ( | |
LC_ALL= LC_CTYPE= LC_MESSAGES= LANG= sh $DRIVER --extract fglrx-install || ( | |
rm -f $DRIVER | |
echo $DRIVER could not build Debian packages and has been deleted. >&2 | |
echo Please restart the script to try again. >&2 | |
exit 2 | |
) || exit | |
cd fglrx-install | |
if [ ! -d packages/Ubuntu/dists/edgy ]; then | |
DISTRIB_ID=Debian | |
DISTRIB_CODENAME=etch | |
fi | |
FORCE_XARCH= | |
if [ "$DKMS" = "1" -a -d packages/Ubuntu/dists/intrepid ]; then | |
DISTRIB_ID=Ubuntu | |
DISTRIB_CODENAME=intrepid | |
if [ -d x740 -o -d x750 -o -d xpic ]; then | |
X_VER=$(X -version 2>&1 | grep -E '(X Window System Version|X.Org X Server) [0-9]\.' | sed -e 's/^.*X Window System Version //;s/^.*X.Org X Server //' | cut -d' ' -f1) | |
case $X_VER in | |
1.5*|1.6*) ;; | |
1.7*|1.8*) | |
[ -r /etc/lsb-release ] && . /etc/lsb-release || DISTRIB_ID=Debian | |
if [ "$DISTRIB_ID" = "Ubuntu" ]; then | |
DISTRIB_CODENAME=lucid | |
else | |
DISTRIB_ID=Ubuntu | |
DISTRIB_CODENAME=intrepid | |
#DISTRIB_CODENAME=hardy | |
[ -d x750 ] && FORCE_XARCH=x750 | |
fi;; | |
1.9*) | |
[ -r /etc/lsb-release ] && . /etc/lsb-release || DISTRIB_ID=Debian | |
if [ "$DISTRIB_ID" = "Ubuntu" ]; then | |
DISTRIB_CODENAME=maverick | |
else | |
DISTRIB_ID=Ubuntu | |
DISTRIB_CODENAME=intrepid | |
#DISTRIB_CODENAME=hardy | |
[ -d x760 ] && FORCE_XARCH=x760 | |
fi;; | |
1.1[0-9]*) | |
[ -r /etc/lsb-release ] && . /etc/lsb-release || DISTRIB_ID=Debian | |
if [ "$DISTRIB_ID" != "Ubuntu" ]; then | |
DISTRIB_ID=Ubuntu | |
DISTRIB_CODENAME=intrepid | |
fi;; | |
*) DISTRIB_CODENAME=hardy;; | |
esac | |
fi | |
elif [ "$DKMS" = "1" -a -d packages/Ubuntu/dists/hardy ]; then | |
DISTRIB_ID=Ubuntu | |
DISTRIB_CODENAME=hardy | |
else | |
DKMS=0 | |
fi | |
if [ "$DISTRIB_CODENAME" = "intrepid" -o "$DISTRIB_CODENAME" = "karmic" -o "$DISTRIB_CODENAME" = "lucid" -o "$DISTRIB_CODENAME" = "maverick" -o "$DISTRIB_CODENAME" = "natty" -o "$DISTRIB_CODENAME" = "oneiric" -o "$DISTRIB_CODENAME" = "precise" ] && ! [ -f /usr/lib/libQtCore.so.4 ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes libqtcore4 | |
fi | |
if [ "$DISTRIB_CODENAME" = "intrepid" -o "$DISTRIB_CODENAME" = "karmic" -o "$DISTRIB_CODENAME" = "lucid" -o "$DISTRIB_CODENAME" = "maverick" -o "$DISTRIB_CODENAME" = "natty" -o "$DISTRIB_CODENAME" = "oneiric" -o "$DISTRIB_CODENAME" = "precise" ] && ! [ -f /usr/lib/libQtGui.so.4 ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes libqtgui4 | |
fi | |
if [ "$DISTRIB_CODENAME" = "karmic" -o "$DISTRIB_CODENAME" = "lucid" -o "$DISTRIB_CODENAME" = "maverick" -o "$DISTRIB_CODENAME" = "natty" -o "$DISTRIB_CODENAME" = "oneiric" -o "$DISTRIB_CODENAME" = "precise" ] && ! [ -f /usr/sbin/execstack ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes prelink | |
fi | |
if [ "$DISTRIB_CODENAME" = "natty" -o "$DISTRIB_CODENAME" = "oneiric" -o "$DISTRIB_CODENAME" = "precise" ] && ! [ -f /usr/bin/dh_modaliases ]; then | |
[ -z "$UP" ] && apt-get update && UP=1 | |
apt-get install --allow-unauthenticated --yes dh-modaliases | |
fi | |
[ "$VER" = "8.22.5" -o "$VER" = "8.23.7" ] && perl -pi -e 's/(XVERSIONMAX := )(\$\(basename \$\(XVERSION\)\).99)/${1}1:${2}/' packages/Debian/debian/rules | |
[ "$KV" = "2.6" ] && [ "$VER" = "8.22.5" -o "$VER" = "8.23.7" -o "$VER" = "8.24.8" ] && if [ "$(uname -r|grep -E '2.6.16|2.6.17')" != "" ]; then | |
patch common/lib/modules/fglrx/build_mod/firegl_public.c <<EOT | |
Index: firegl_public.c | |
@@ -361,13 +361,15 @@ | |
} firegl_drm_stub_info_t; | |
static firegl_drm_stub_info_t firegl_stub_info; | |
-#if LINUX_VERSION_CODE < 0x020400 | |
+#if LINUX_VERSION_CODE > 0x02060F | |
struct firegl_drm_stub_info_t *firegl_stub_pointer = NULL; | |
#define inter_module_put(x) | |
#define inter_module_unregister(x) | |
#define inter_module_get_request(x,y) firegl_stub_pointer | |
#define inter_module_register(x,y,z) do { firegl_stub_pointer = z; } while (0) | |
+#endif | |
/* This is a kludge for backward compatibility that is only useful in DRM(stub_open) */ | |
+#if LINUX_VERSION_CODE < 0x020400 | |
#define fops_put(fops) MOD_DEC_USE_COUNT | |
#define fops_get(fops) (fops); MOD_INC_USE_COUNT | |
#endif // LINUX_VERSION_CODE < 0x020400 | |
@@ -2353,7 +2353,7 @@ | |
int ATI_API_CALL __ke_no_iommu(void) | |
{ | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,1) | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,1) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16) | |
#ifdef CONFIG_GART_IOMMU | |
return no_iommu; | |
#else /* !CONFIG_GART_IOMMU */ | |
EOT | |
patch common/lib/modules/fglrx/build_mod/2.6.x/Makefile <<EOT | |
Index: Makefile | |
@@ -1,4 +1,4 @@ | |
-GCC_VER_MAJ = \$(shell \$(CC) --version | head -n 1 | sed -e 's/[^0-9. ]//g;s/^ *//;s/^\(.\)\..*\$\$/\1/') | |
+GCC_VER_MAJ = \$(shell \$(CC) -dumpversion | cut -f1 -d.) | |
obj-m += fglrx.o | |
fglrx-libs += libfglrx_ip.a.GCC\$(GCC_VER_MAJ) | |
@@ -24,36 +24,18 @@ | |
# on first call from remote location we get into this path | |
# whilst on second call all is managed by the embedding kernel makefile | |
-KVER = \$(shell uname -r) | |
-# KVER = 2.6.0-0.test1.1.26custom | |
- | |
-ifeq (1,1) | |
-KDIR = /lib/modules/\$(KVER)/build | |
-else | |
-KDIR = /usr/src/linux-\$(KVER) | |
-endif | |
-PWD = \$(shell pwd) | |
fglrx-cfiles = \${fglrx-c-objs:.o=.c} | |
# default:: kmod_build | |
kmod_build:: \$(fglrx-libs) \$(fglrx-cfiles) \$(fglrx-hdrs) \$(drm-hdrs) | |
- \$(MAKE) -C \$(KDIR) SUBDIRS=\$(PWD) modules | |
- | |
-%.c: | |
- @ln -s ../\$@ | |
- | |
-%.h: | |
- @ln -s ../\$@ | |
- | |
-%.GCC\$(GCC_VER_MAJ): | |
- @ln -s ../\$@ | |
+ \$(MAKE) -C \$(KDIR) SUBDIRS=\$(CURDIR) modules | |
# distclean:: clean | |
clean:: | |
- rm -f *.c *.h *.o *.ko *.GCC* .??* | |
+ rm -f *.o *.ko .*.cmd | |
endif | |
EOT | |
fi | |
[ "$KV" = "2.6" ] && [ "$VER" = "8.27.10" -o "$VER" = "8.28.8" ] && if [ "$(uname -r|grep -E '2.6.18|2.6.19|2.6.20|2.6.21|2.6.22')" != "" ]; then | |
patch common/lib/modules/fglrx/build_mod/firegl_public.c <<EOT | |
Index: firegl_public.c | |
@@ -23,6 +23,9 @@ | |
// ============================================================ | |
#include <linux/version.h> | |
+#ifndef UTS_RELEASE | |
+#include <linux/utsrelease.h> | |
+#endif | |
#ifdef MODVERSIONS | |
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,71) | |
#include <linux/modversions.h> | |
@@ -208,6 +211,10 @@ _syscall3( int, modify_ldt, int, func, v | |
#define preempt_enable() | |
#endif | |
+#ifndef VM_SHM | |
+#define VM_SHM (0) | |
+#endif | |
+ | |
// ============================================================ | |
/* globals */ | |
EOT | |
fi | |
case $VER in 8.22.5|8.23.7|8.24.8|8.25.18|8.26.18|8.27.10|8.28.8|8.29.6|8.30.3|8.31.5|8.32.5|8.33.6) | |
[ "$KV" = "2.6" ] && if [ "$(uname -r|grep -E '2.6.20|2.6.21|2.6.22')" != "" -a ! -f packages/Fedora/ati-drivers-2.6.20.patch -a ! -f packages/Fedora/firegl_public.c.patch ]; then | |
# http://mlau.at/fglrx-833-2620-fixes.patch | |
patch common/lib/modules/fglrx/build_mod/firegl_public.c <<'EOT' | |
Index: firegl_public.c | |
@@ -194,6 +194,82 @@ | |
int errno; | |
#endif // __ia64__ | |
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19) | |
+#if defined(__i386__) | |
+ | |
+#define __syscall_return(type, res) \ | |
+do { \ | |
+ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | |
+ errno = -(res); \ | |
+ res = -1; \ | |
+ } \ | |
+ return (type) (res); \ | |
+} while (0) | |
+ | |
+#define _syscall2(type,name,type1,arg1,type2,arg2) \ | |
+type name(type1 arg1,type2 arg2) \ | |
+{ \ | |
+long __res; \ | |
+__asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ | |
+ : "=a" (__res) \ | |
+ : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)) \ | |
+ : "memory"); \ | |
+__syscall_return(type,__res); \ | |
+} | |
+ | |
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | |
+type name(type1 arg1,type2 arg2,type3 arg3) \ | |
+{ \ | |
+long __res; \ | |
+__asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \ | |
+ : "=a" (__res) \ | |
+ : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)), \ | |
+ "d" ((long)(arg3)) : "memory"); \ | |
+__syscall_return(type,__res); \ | |
+} | |
+ | |
+#elif defined(__x86_64__) | |
+#define __syscall_clobber "r11","rcx","memory" | |
+ | |
+#define __syscall_return(type, res) \ | |
+do { \ | |
+ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | |
+ errno = -(res); \ | |
+ res = -1; \ | |
+ } \ | |
+ return (type) (res); \ | |
+} while (0) | |
+ | |
+#define __syscall "syscall" | |
+ | |
+#define _syscall2(type,name,type1,arg1,type2,arg2) \ | |
+type name(type1 arg1,type2 arg2) \ | |
+{ \ | |
+long __res; \ | |
+__asm__ volatile (__syscall \ | |
+ : "=a" (__res) \ | |
+ : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)) : __syscall_clobber ); \ | |
+__syscall_return(type,__res); \ | |
+} | |
+ | |
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | |
+type name(type1 arg1,type2 arg2,type3 arg3) \ | |
+{ \ | |
+long __res; \ | |
+__asm__ volatile (__syscall \ | |
+ : "=a" (__res) \ | |
+ : "0" (__NR_##name),"D" ((long)(arg1)),"S" ((long)(arg2)), \ | |
+ "d" ((long)(arg3)) : __syscall_clobber); \ | |
+__syscall_return(type,__res); \ | |
+} | |
+ | |
+#else | |
+ | |
+#error "please fix the fglrx syscall mess" | |
+ | |
+#endif /* __i386__ */ | |
+#endif /* 2.6.19 */ | |
+ | |
// int mlock(const void *addr, size_t len); | |
_syscall2(int, mlock, const void *, addr, size_t, len ) | |
// int munlock(const void *addr, size_t len); | |
@@ -2561,11 +2637,23 @@ void ATI_API_CALL __ke_free_irq(unsigned | |
#else | |
static void ATI_API_CALL (*irq_handler_func)(int, void*, void*); /* function pointer variable */ | |
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) | |
static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1, struct pt_regs *regs) | |
{ | |
irq_handler_func(irq, arg1, regs); | |
return IRQ_HANDLED; | |
} | |
+#else | |
+static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1) | |
+{ | |
+ irq_handler_func(irq, arg1, get_irq_regs()); | |
+ return IRQ_HANDLED; | |
+} | |
+#endif | |
+ | |
+#ifndef SA_SHIRQ | |
+#define SA_SHIRQ IRQF_SHARED | |
+#endif | |
int ATI_API_CALL __ke_request_irq(unsigned int irq, | |
void (*ATI_API_CALL handler)(int, void *, void *), | |
EOT | |
fi | |
esac | |
[ "$KV" = "2.6" ] && if [ "$(uname -r|grep -E '2.6.20|2.6.21|2.6.22')" != "" -a -f packages/Fedora/ati-drivers-2.6.20.patch ]; then | |
patch -p0 < packages/Fedora/ati-drivers-2.6.20.patch | |
fi | |
[ "$KV" = "2.6" ] && if [ "$(uname -r|grep -E '2.6.20|2.6.21|2.6.22')" != "" -a -f packages/Fedora/firegl_public.c.patch ]; then | |
patch common/lib/modules/fglrx/build_mod/firegl_public.c packages/Fedora/firegl_public.c.patch | |
fi | |
case $VER in 8.22.5|8.23.7|8.24.8|8.25.18|8.26.18|8.27.10|8.28.8|8.29.6|8.30.3|8.31.5|8.32.5|8.33.6|8.34.8|8.35.5|8.36.5|8.37.6|8.38.6|8.38.7) | |
[ "$KV" = "2.6" ] && if [ "$(uname -r|grep -E '2.6.22')" != "" -a "$(uname -m)" = "x86_64" ]; then | |
patch common/lib/modules/fglrx/build_mod/firegl_public.c <<'EOT' | |
--- common/lib/modules/fglrx/build_mod/firegl_public.c 2007-02-20 13:23:07.000000000 -0500 | |
+++ common/lib/modules/fglrx/build_mod/firegl_public.c 2007-05-15 16:55:34.000000000 -0400 | |
@@ -145,11 +145,11 @@ | |
#endif | |
#ifdef __x86_64__ | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) | |
-#include "linux/ioctl32.h" | |
-#else | |
-#include "asm/ioctl32.h" | |
-#endif | |
+//#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) | |
+//#include "linux/ioctl32.h" | |
+//#else | |
+//#include "asm/ioctl32.h" | |
+//#endif | |
#ifdef __x86_64__ | |
#include "asm/compat.h" | |
EOT | |
fi | |
esac | |
case $VER in | |
8.22.5|8.23.7|8.24.8|8.25.18|8.26.18|8.27.10|8.28.8|8.29.6|8.30.3|8.31.5|8.32.5|8.33.6|8.34.8|8.35.5|8.36.5|8.37.6|8.38.6|8.38.7) ;; | |
8.39.4) [ "$KV" = "2.6" ] && if [ "$(uname -r|grep -E '2.6.23|2.6.24')" != "" ]; then | |
#http://mlau.at/files/fglrx-839-2624rc-fixes.patch | |
patch common/lib/modules/fglrx/build_mod/firegl_public.c <<'EOT' | |
crude patch to get fglrx-8.39 to compile against 2.6.23/2.6.24-rc4/5. | |
Use at your own risk! -- mlau | |
--- firegl_public.c.orig 2007-07-20 22:51:46.000000000 +0200 | |
+++ firegl_public.c 2007-12-11 18:35:16.000000000 +0100 | |
@@ -214,6 +214,56 @@ | |
#define preempt_enable() | |
#endif | |
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22) | |
+#if defined(__i386__) | |
+#define ptep_test_and_clear_dirty(vma, addr, ptep) ({ \ | |
+ int __ret = 0; \ | |
+ if (pte_dirty(*(ptep))) \ | |
+ __ret = test_and_clear_bit(_PAGE_BIT_DIRTY, \ | |
+ &(ptep)->pte_low); \ | |
+ if (__ret) \ | |
+ pte_update((vma)->vm_mm, addr, ptep); \ | |
+ __ret; \ | |
+}) | |
+ | |
+static inline int pte_read(pte_t pte) { return (pte).pte_low & _PAGE_USER; } | |
+static inline int pte_user(pte_t pte) { return (pte).pte_low & _PAGE_USER; } | |
+#ifdef CONFIG_X86_PAE | |
+/* | |
+ * Is the pte executable? | |
+ */ | |
+static inline int pte_x(pte_t pte) | |
+{ | |
+ return !(pte_val(pte) & _PAGE_NX); | |
+} | |
+ | |
+/* | |
+ * All present user-pages with !NX bit are user-executable: | |
+ */ | |
+static inline int pte_exec(pte_t pte) | |
+{ | |
+ return pte_user(pte) && pte_x(pte); | |
+} | |
+#else | |
+static inline int pte_exec(pte_t pte) | |
+{ | |
+ return pte_user(pte); | |
+} | |
+#endif /* PAE */ | |
+ | |
+#elif defined(__x86_64__) | |
+static inline int ptep_test_and_clear_dirty(struct vm_area_struct *vma, | |
+ unsigned long addr, pte_t *ptep) | |
+{ | |
+ if (!pte_dirty(*ptep)) | |
+ return 0; | |
+ return test_and_clear_bit(_PAGE_BIT_DIRTY, &ptep->pte); | |
+} | |
+static inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_USER; } | |
+static inline int pte_exec(pte_t pte) { return !(pte_val(pte) & _PAGE_NX); } | |
+#endif | |
+#endif | |
+ | |
// ============================================================ | |
/* globals */ | |
@@ -1831,7 +1881,7 @@ int ATI_API_CALL __ke_check_pci(int busn | |
{ | |
struct pci_dev* pci_dev; | |
- pci_dev = pci_find_slot(busnum, PCI_DEVFN(devnum, funcnum)); | |
+ pci_dev = pci_get_slot(busnum, PCI_DEVFN(devnum, funcnum)); | |
if (!pci_dev) | |
return 0; | |
@@ -1860,7 +1910,7 @@ int ATI_API_CALL __ke_pci_get_irq(__ke_p | |
__ke_pci_dev_t* ATI_API_CALL __ke_pci_find_device (unsigned int vendor, unsigned int dev, __ke_pci_dev_t* from) | |
{ | |
- return (__ke_pci_dev_t*)pci_find_device( vendor, dev, (struct pci_dev *)(void *)from ); | |
+ return (__ke_pci_dev_t*)pci_get_device( vendor, dev, (struct pci_dev *)(void *)from ); | |
} | |
void* ATI_API_CALL __ke_malloc(__ke_size_t size) | |
@@ -2333,7 +2383,7 @@ void ATI_API_CALL __ke_put_vm_page_table | |
#ifndef ptep_clear_flush_dirty | |
#define ptep_clear_flush_dirty(__vma, __address, __ptep) \ | |
({ \ | |
- int __dirty = ptep_test_and_clear_dirty(__ptep); \ | |
+ int __dirty = ptep_test_and_clear_dirty(__vma, __address, __ptep); \ | |
if (__dirty) \ | |
flush_tlb_page(__vma, __address); \ | |
__dirty; \ | |
@@ -2693,7 +2743,7 @@ int ATI_API_CALL __ke_pci_write_config_d | |
__ke_pci_dev_t* ATI_API_CALL __ke_pci_find_slot(__ke_u32 bus, __ke_u32 slot) | |
{ | |
- return (__ke_pci_dev_t*)pci_find_slot(bus, slot); | |
+ return (__ke_pci_dev_t*)pci_get_slot(bus, slot); | |
} | |
__ke_u8 ATI_API_CALL __ke_pci_get_busnr(__ke_pci_dev_t* pcidev) | |
@@ -2773,6 +2823,10 @@ void ATI_API_CALL __ke_disable_irq(int i | |
disable_irq( irq ); | |
} | |
+#ifndef SA_SHIRQ | |
+#define SA_SHIRQ IRQF_SHARED | |
+#endif | |
+ | |
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,71) | |
int ATI_API_CALL __ke_request_irq(unsigned int irq, | |
void (*ATI_API_CALL handler)(int, void *, void *), | |
@@ -5277,7 +5331,7 @@ unsigned int ATI_API_CALL KAS_Spinlock_R | |
/** \brief Type definition of the structure describing Slab Cache object */ | |
typedef struct tag_kasSlabCache_t | |
{ | |
- kmem_cache_t* cache; /* OS slab cache object */ | |
+ struct kmem_cache *cache; /* OS slab cache object */ | |
spinlock_t lock; /* OS spinlock object protecting the cache */ | |
unsigned int routine_type; /* Type of routine the cache might be accessed from */ | |
char name[14]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ | |
@@ -5323,7 +5377,7 @@ unsigned int ATI_API_CALL KAS_SlabCache_ | |
DBG_TRACE("creating slab object '%s'", slabcache_obj->name); | |
if ((slabcache_obj->cache = | |
- kmem_cache_create(slabcache_obj->name, iEntrySize, 0, 0, NULL, NULL))) | |
+ kmem_cache_create(slabcache_obj->name, iEntrySize, 0, 0, NULL))) | |
{ | |
ret = 1; | |
} | |
EOT | |
fi | |
;; | |
8.40.4|8.41.7|8.42.3) [ "$KV" = "2.6" ] && if [ "$(uname -r|grep -E '2.6.23|2.6.24')" != "" ]; then | |
#http://mlau.at/files/fglrx-842-2623.patch | |
patch common/lib/modules/fglrx/build_mod/firegl_public.c <<'EOT' | |
crude patch to make 8.42 compile against 2.6.23+. | |
The x64 version probably doesn't work. | |
Better get the patch from the ati-drivers sabayon overlay ;-) | |
--- firegl_public.c.orig 2007-10-23 19:31:26.000000000 +0200 | |
+++ firegl_public.c 2007-10-23 19:32:07.000000000 +0200 | |
@@ -217,6 +217,56 @@ | |
#define preempt_enable() | |
#endif | |
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22) | |
+#if defined(__i386__) | |
+#define ptep_test_and_clear_dirty(vma, addr, ptep) ({ \ | |
+ int __ret = 0; \ | |
+ if (pte_dirty(*(ptep))) \ | |
+ __ret = test_and_clear_bit(_PAGE_BIT_DIRTY, \ | |
+ &(ptep)->pte_low); \ | |
+ if (__ret) \ | |
+ pte_update((vma)->vm_mm, addr, ptep); \ | |
+ __ret; \ | |
+}) | |
+ | |
+static inline int pte_read(pte_t pte) { return (pte).pte_low & _PAGE_USER; } | |
+static inline int pte_user(pte_t pte) { return (pte).pte_low & _PAGE_USER; } | |
+#ifdef CONFIG_X86_PAE | |
+/* | |
+ * Is the pte executable? | |
+ */ | |
+static inline int pte_x(pte_t pte) | |
+{ | |
+ return !(pte_val(pte) & _PAGE_NX); | |
+} | |
+ | |
+/* | |
+ * All present user-pages with !NX bit are user-executable: | |
+ */ | |
+static inline int pte_exec(pte_t pte) | |
+{ | |
+ return pte_user(pte) && pte_x(pte); | |
+} | |
+#else | |
+static inline int pte_exec(pte_t pte) | |
+{ | |
+ return pte_user(pte); | |
+} | |
+#endif /* PAE */ | |
+ | |
+#elif defined(__x86_64__) | |
+static inline int ptep_test_and_clear_dirty(struct vm_area_struct *vma, | |
+ unsigned long addr, pte_t *ptep) | |
+{ | |
+ if (!pte_dirty(*ptep)) | |
+ return 0; | |
+ return test_and_clear_bit(_PAGE_BIT_DIRTY, &ptep->pte); | |
+} | |
+static inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_USER; } | |
+static inline int pte_exec(pte_t pte) { return !(pte_val(pte) & _PAGE_NX); } | |
+#endif | |
+#endif | |
+ | |
// ============================================================ | |
/* globals */ | |
@@ -2489,7 +2539,7 @@ void ATI_API_CALL __ke_put_vm_page_table | |
#ifndef ptep_clear_flush_dirty | |
#define ptep_clear_flush_dirty(__vma, __address, __ptep) \ | |
({ \ | |
- int __dirty = ptep_test_and_clear_dirty(__ptep); \ | |
+ int __dirty = ptep_test_and_clear_dirty(__vma, __address, __ptep); \ | |
if (__dirty) \ | |
flush_tlb_page(__vma, __address); \ | |
__dirty; \ | |
@@ -2936,7 +2986,7 @@ int ATI_API_CALL __ke_request_irq(unsign | |
{ | |
return request_irq(irq, | |
(void(*)(int, void *, struct pt_regs *))handler, | |
- SA_SHIRQ, dev_name, dev_id); | |
+ IRQF_SHARED, dev_name, dev_id); | |
} | |
void ATI_API_CALL __ke_free_irq(unsigned int irq, void *dev_id) | |
@@ -2959,7 +3009,7 @@ int ATI_API_CALL __ke_request_irq(unsign | |
irq_handler_func = handler; | |
return request_irq(irq, | |
ke_irq_handler_wrap, | |
- SA_SHIRQ, dev_name, dev_id); | |
+ IRQF_SHARED, dev_name, dev_id); | |
} | |
void ATI_API_CALL __ke_free_irq(unsigned int irq, void *dev_id) | |
@@ -5436,7 +5486,7 @@ unsigned int ATI_API_CALL KAS_Spinlock_R | |
/** \brief Type definition of the structure describing Slab Cache object */ | |
typedef struct tag_kasSlabCache_t | |
{ | |
- kmem_cache_t* cache; /* OS slab cache object */ | |
+ struct kmem_cache *cache; /* OS slab cache object */ | |
spinlock_t lock; /* OS spinlock object protecting the cache */ | |
unsigned int routine_type; /* Type of routine the cache might be accessed from */ | |
char name[14]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ | |
@@ -5482,7 +5532,7 @@ unsigned int ATI_API_CALL KAS_SlabCache_ | |
DBG_TRACE("creating slab object '%s'", slabcache_obj->name); | |
if ((slabcache_obj->cache = | |
- kmem_cache_create(slabcache_obj->name, iEntrySize, 0, 0, NULL, NULL))) | |
+ kmem_cache_create(slabcache_obj->name, iEntrySize, 0, 0, NULL))) | |
{ | |
ret = 1; | |
} | |
EOT | |
fi | |
;; | |
esac | |
[ "$VER" = "8.42.3" ] && patch -p1 <<'EOT' | |
diff -Nru ati-8.42.3.orig/packages/Debian/ati-packager.sh ati-8.42.3/packages/Debian/ati-packager.sh | |
--- ati-8.42.3.orig/packages/Debian/ati-packager.sh 2007-10-22 18:30:02.000000000 +0200 | |
+++ ati-8.42.3/packages/Debian/ati-packager.sh 2007-10-11 23:22:35.000000000 +0200 | |
@@ -95,6 +95,11 @@ | |
cp -f -R ${InstallerRootDir}/arch/${ARCH_DIR}/* ${TmpDrvFilesDir} | |
cp -f -R ${InstallerRootDir}/common/* ${TmpDrvFilesDir} | |
+ if [ "$ARCH" = "amd64" ]; then | |
+ cp -f -R ${InstallerRootDir}/arch/x86/usr/X11R6/lib \ | |
+ ${TmpDrvFilesDir}/usr/X11R6/ | |
+ fi | |
+ | |
# Merge package files from the appropriate directories | |
chmod -R u+w ${AbsDistroDir} | |
cp -f -R ${AbsDistroDir}/dists/${X_NAME} ${TmpDrvFilesDir}/debian | |
diff -Nru ati-8.42.3.orig/packages/Ubuntu/ati-packager.sh ati-8.42.3/packages/Ubuntu/ati-packager.sh | |
--- ati-8.42.3.orig/packages/Ubuntu/ati-packager.sh 2007-10-22 18:30:02.000000000 +0200 | |
+++ ati-8.42.3/packages/Ubuntu/ati-packager.sh 2007-10-11 23:22:35.000000000 +0200 | |
@@ -69,7 +69,7 @@ | |
dapper|6.06) X_DIR=x690; X_NAME=dapper;; | |
edgy|6.10) X_DIR=x710; X_NAME=edgy;; | |
feisty|7.04) X_DIR=x710; X_NAME=feisty;; | |
- gutsy|7.10) X_DIR=x710; X_NAME=gutsy;; | |
+ gutsy|7.10) X_DIR=x710; X_NAME=gutsy;; | |
*) echo "Error: invalid package name passed to --buildpkg" ; exit 1 ;; | |
esac | |
@@ -97,6 +97,11 @@ | |
cp -f -R ${InstallerRootDir}/arch/${ARCH_DIR}/* ${TmpDrvFilesDir} | |
cp -f -R ${InstallerRootDir}/common/* ${TmpDrvFilesDir} | |
+ if [ "$ARCH" = "amd64" ]; then | |
+ cp -f -R ${InstallerRootDir}/arch/x86/usr/X11R6/lib \ | |
+ ${TmpDrvFilesDir}/usr/X11R6/ | |
+ fi | |
+ | |
# Merge package files from the appropriate directories | |
chmod -R u+w ${AbsDistroDir} | |
cp -f -R ${AbsDistroDir}/dists/${X_NAME} ${TmpDrvFilesDir}/debian | |
EOT | |
if [ "$(uname -r|grep -E '2.6.25')" != "" -a "$VER" = "8-5" ]; then | |
# http://sarah-a-happy.livejournal.com/90345.html | |
patch -p0 <<'EOT' | |
--- common/lib/modules/fglrx/build_mod/firegl_public.c.orig 2008-04-06 01:20:21.000000000 -0300 | |
+++ common/lib/modules/fglrx/build_mod/firegl_public.c 2008-04-06 01:17:58.000000000 -0300 | |
@@ -1885,7 +1885,7 @@ | |
*/ | |
KCL_TYPE_Cap ATI_API_CALL KCL_PosixSecurityCapGetEffectiveVector() | |
{ | |
- return cap_t(current->cap_effective); | |
+ return (current->cap_effective).cap[0]; | |
} | |
/** \brief Set vector of effective security caps for the current process | |
@@ -1893,7 +1893,7 @@ | |
*/ | |
void ATI_API_CALL KCL_PosixSecurityCapSetEffectiveVector(KCL_TYPE_Cap cap) | |
{ | |
- cap_t(current->cap_effective) = cap; | |
+ (current->cap_effective).cap[0] = cap; | |
} | |
/** \brief Get number of available RAM pages | |
--- common/lib/modules/fglrx/build_mod/firegl_public.c.orig 2008-04-06 02:10:13.000000000 -0300 | |
+++ common/lib/modules/fglrx/build_mod/firegl_public.c 2008-04-06 02:23:05.000000000 -0300 | |
@@ -120,6 +120,7 @@ | |
#include <asm/cpufeature.h> | |
#ifdef CONFIG_MTRR | |
#include <asm/mtrr.h> | |
+#include <asm/cacheflush.h> | |
#endif | |
#include <asm/delay.h> | |
#include <linux/agp_backend.h> | |
@@ -1158,7 +1159,7 @@ | |
int ATI_API_CALL KCL_SetPageNoCache(void* virt, int pages) | |
{ | |
- return change_page_attr(virt_to_page(virt), pages, PAGE_KERNEL_NOCACHE); | |
+ return set_pages_uc(virt_to_page(virt), pages); | |
} | |
/** /brief Call global kernel task/thread scheduler */ | |
EOT | |
fi | |
if [ "$(uname -r|grep -E '2.6.26')" != "" ] && [ "$VER" = "8-5" -o "$VER" = "8-6" ]; then | |
cd common/lib/modules/fglrx/build_mod | |
# http://launchpadlibrarian.net/15305502/0001-Linux-2.6.25.x-kernels-support.patch | |
patch -p1 <<'EOT' | |
From 0dd050cd65a7dfff6685f1b2066f49e7086a4520 Mon Sep 17 00:00:00 2001 | |
From: =?utf-8?q?=C5=BDilvinas=20Valinskas?= <[email protected]> | |
Date: Fri, 13 Jun 2008 23:55:15 +0300 | |
Subject: [PATCH] Linux 2.6.25.x kernels support. | |
MIME-Version: 1.0 | |
Content-Type: text/plain; charset=utf-8 | |
Content-Transfer-Encoding: 8bit | |
Signed-off-by: Žilvinas Valinskas <[email protected]> | |
--- | |
firegl_public.c | 10 ++++++++-- | |
1 files changed, 8 insertions(+), 2 deletions(-) | |
diff --git a/firegl_public.c b/firegl_public.c | |
index f2bea44..0916436 100644 | |
--- a/firegl_public.c | |
+++ b/firegl_public.c | |
@@ -4956,8 +4956,9 @@ static unsigned long kasSetExecutionLevel(unsigned long level) | |
{ | |
unsigned long orig_level; | |
- orig_level = __get_cpu_var(kasExecutionLevel); | |
+ orig_level = get_cpu_var(kasExecutionLevel); | |
__get_cpu_var(kasExecutionLevel) = level; | |
+ put_cpu_var(kasExecutionLevel); | |
return orig_level; | |
} | |
@@ -4969,7 +4970,12 @@ static unsigned long kasSetExecutionLevel(unsigned long level) | |
*/ | |
static unsigned long kas_GetExecutionLevel(void) | |
{ | |
- return __get_cpu_var(kasExecutionLevel); | |
+ unsigned long orig_level; | |
+ | |
+ orig_level = get_cpu_var(kasExecutionLevel); | |
+ put_cpu_var(kasExecutionLevel); | |
+ | |
+ return orig_level; | |
} | |
/** \brief Type definition for kas_spin_lock() parameter */ | |
-- | |
1.5.6.rc2.45.gdc92c | |
EOT | |
# http://launchpadlibrarian.net/15305506/0002-Trivial-error-and-two-warnings-fixed.patch | |
[ "$VER" = "8-5" ] && patch -p1 <<'EOT' | |
From 681d2406888fb07f584ecb83a921aca4bfd469a8 Mon Sep 17 00:00:00 2001 | |
From: =?utf-8?q?=C5=BDilvinas=20Valinskas?= <[email protected]> | |
Date: Sat, 14 Jun 2008 02:07:38 +0300 | |
Subject: [PATCH] Trivial error and two warnings fixed. | |
MIME-Version: 1.0 | |
Content-Type: text/plain; charset=utf-8 | |
Content-Transfer-Encoding: 8bit | |
Signed-off-by: Žilvinas Valinskas <[email protected]> | |
--- | |
firegl_public.c | 6 +++--- | |
1 files changed, 3 insertions(+), 3 deletions(-) | |
diff --git a/firegl_public.c b/firegl_public.c | |
index 0916436..664b38c 100644 | |
--- a/firegl_public.c | |
+++ b/firegl_public.c | |
@@ -885,7 +885,7 @@ static struct pci_driver fglrx_pci_driver = | |
* \return count -- number of devices found that this kernel module will support | |
* | |
*/ | |
-int count_drm_devices() | |
+int count_drm_devices(void) | |
{ | |
int count = 0; | |
struct pci_dev *pdev = NULL; | |
@@ -1681,7 +1681,7 @@ int ATI_API_CALL KCL_pci_enable_device_bars( __ke_pci_dev_t *dev) | |
{ | |
u16 cmd; | |
- pci_read_config_word(dev, PCI_COMMAND, &cmd); | |
+ pci_read_config_word((void *)dev, PCI_COMMAND, &cmd); | |
if (!(cmd & PCI_COMMAND_IO)) | |
{ | |
@@ -1693,7 +1693,7 @@ int ATI_API_CALL KCL_pci_enable_device_bars( __ke_pci_dev_t *dev) | |
cmd |= PCI_COMMAND_MEMORY; | |
} | |
- pci_write_config_word(dev, PCI_COMMAND, cmd); | |
+ pci_write_config_word((struct pci_dev*)(void *)dev, PCI_COMMAND, cmd); | |
return 0; | |
} | |
-- | |
1.5.6.rc2.45.gdc92c | |
EOT | |
# http://launchpadlibrarian.net/15305508/0003-GCC-complains-return-with-a-value-in-function-ret.patch | |
patch -p1 <<'EOT' | |
From a94e42382fbf70d88d71c473b392a2e0656dcf0c Mon Sep 17 00:00:00 2001 | |
From: =?utf-8?q?=C5=BDilvinas=20Valinskas?= <[email protected]> | |
Date: Sat, 14 Jun 2008 02:10:00 +0300 | |
Subject: [PATCH] GCC complains `return' with a value, in function returning void | |
MIME-Version: 1.0 | |
Content-Type: text/plain; charset=utf-8 | |
Content-Transfer-Encoding: 8bit | |
Signed-off-by: Žilvinas Valinskas <[email protected]> | |
--- | |
firegl_public.c | 2 +- | |
1 files changed, 1 insertions(+), 1 deletions(-) | |
diff --git a/firegl_public.c b/firegl_public.c | |
index 664b38c..d71700d 100644 | |
--- a/firegl_public.c | |
+++ b/firegl_public.c | |
@@ -3190,7 +3190,7 @@ int ATI_API_CALL __ke_register_ioctl32_conversion(unsigned int cmd, int (*handle | |
void ATI_API_CALL __ke_unregister_ioctl32_conversion(unsigned int cmd) | |
{ | |
#ifdef FIREGL_IOCTL_COMPAT | |
- return 0; | |
+ return; | |
#else | |
unregister_ioctl32_conversion(cmd); | |
#endif | |
-- | |
1.5.6.rc2.45.gdc92c | |
EOT | |
# http://launchpadlibrarian.net/15305524/0004-Linux-2.6.26.x-kernels-support.patch | |
[ "$VER" = "8-5" ] && patch -p1 <<'EOT' | |
From d6ef03ff417eb001653c51112c79e709ba8eaec9 Mon Sep 17 00:00:00 2001 | |
From: =?utf-8?q?=C5=BDilvinas=20Valinskas?= <[email protected]> | |
Date: Sat, 14 Jun 2008 03:54:38 +0300 | |
Subject: [PATCH] Linux 2.6.26.x kernels support. | |
MIME-Version: 1.0 | |
Content-Type: text/plain; charset=utf-8 | |
Content-Transfer-Encoding: 8bit | |
o trailing white spaces/tabs removed. | |
o VMA ->nopage() removed, go for ->fault() | |
o compiles with warnings ... | |
o most importantly ... WORKS on 2.6.26-rc6/amd64! | |
Signed-off-by: Žilvinas Valinskas <[email protected]> | |
--- | |
firegl_public.c | 655 ++++++++++++++++++++++++------------------------------- | |
firegl_public.h | 8 +- | |
2 files changed, 288 insertions(+), 375 deletions(-) | |
diff --git a/firegl_public.c b/firegl_public.c | |
index d71700d..3c8e72a 100644 | |
--- a/firegl_public.c | |
+++ b/firegl_public.c | |
@@ -24,13 +24,13 @@ | |
// ============================================================ | |
#include <linux/version.h> | |
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) | |
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) | |
#error Kernel versions older than 2.6.0 are no longer supported by this module. | |
-#endif | |
+#endif | |
#include <linux/autoconf.h> | |
-#if !defined(CONFIG_X86_PC) | |
+#if !defined(CONFIG_X86_PC) | |
#if !defined(CONFIG_X86_64) | |
#if !defined(CONFIG_X86_VOYAGER) | |
#if !defined(CONFIG_X86_NUMAQ) | |
@@ -62,10 +62,10 @@ | |
* distribution would even include such a kernel patch. */ | |
#ifdef CONFIG_MEM_MIRROR | |
/* Prevent asm/mm_track.h from being included in subsequent | |
- * kernel headers as that would redefine CONFIG_MEM_MIRROR. */ | |
+ * kernel headers as that would redefine CONFIG_MEM_MIRROR. */ | |
#ifndef CONFIG_X86_64 | |
#define __I386_MMTRACK_H__ | |
-#define mm_track(ptep) | |
+#define mm_track(ptep) | |
#else | |
#define __X86_64_MMTRACK_H__ | |
#define mm_track_pte(ptep) | |
@@ -93,7 +93,7 @@ | |
#include <linux/kernel.h> | |
#include <linux/fs.h> | |
#include <linux/proc_fs.h> | |
-#include <linux/init.h> | |
+//#include <linux/init.h> | |
#include <linux/file.h> | |
#include <linux/pci.h> | |
#include <linux/wait.h> | |
@@ -151,8 +151,8 @@ | |
#include "linux/freezer.h" | |
#endif | |
-// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h. | |
-#ifndef UTS_RELEASE | |
+// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h. | |
+#ifndef UTS_RELEASE | |
#include <linux/utsrelease.h> | |
#endif | |
@@ -210,7 +210,7 @@ char* firegl = NULL; | |
int __ke_debuglevel = 0; | |
int __ke_moduleflags = 0; | |
-static struct pci_device_id fglrx_pci_table[] = | |
+static struct pci_device_id fglrx_pci_table[] = | |
{ | |
#define FGL_ASIC_ID(x) \ | |
{ \ | |
@@ -278,7 +278,7 @@ const unsigned long __ke_PAE_State = 1; | |
static int firegl_pat_enabled = 0; | |
static unsigned long KCL_pat[2]; | |
-static unsigned long KCL_orig_pat[2]; | |
+static unsigned long KCL_orig_pat[2]; | |
static int ATI_API_CALL KCL_enable_pat(void); | |
static void ATI_API_CALL KCL_disable_pat(void); | |
@@ -305,7 +305,7 @@ long ip_firegl_compat_ioctl(struct file* filp, unsigned int cmd, unsigned long a | |
#endif | |
__ke_ssize_t ip_firegl_read( struct file *filp, | |
- char *buf, | |
+ char *buf, | |
__ke_size_t size, | |
__ke_loff_t *off_ptr) | |
{ | |
@@ -313,7 +313,7 @@ __ke_ssize_t ip_firegl_read( struct file *filp, | |
} | |
__ke_ssize_t ip_firegl_write( struct file *filp, | |
- const char *buf, | |
+ const char *buf, | |
__ke_size_t size, | |
__ke_loff_t *off_ptr) | |
{ | |
@@ -449,34 +449,34 @@ READ_PROC_WRAP(firegl_debug_info) | |
READ_PROC_WRAP(firegl_bios_version) | |
READ_PROC_WRAP(firegl_interrupt_info) | |
-static int | |
+static int | |
firegl_interrupt_open_wrap( | |
- struct inode *inode, | |
- struct file *file) | |
+ struct inode *inode, | |
+ struct file *file) | |
{ | |
return firegl_interrupt_open(inode, file); | |
} | |
-static int | |
+static int | |
firegl_interrupt_release_wrap( | |
- struct inode *inode, | |
- struct file *file) | |
+ struct inode *inode, | |
+ struct file *file) | |
{ | |
return firegl_interrupt_release(inode, file); | |
} | |
-static ssize_t | |
+static ssize_t | |
firegl_interrupt_read_wrap( | |
- struct file *user_file, | |
- char __user *user_buf, | |
- size_t user_buf_size, | |
+ struct file *user_file, | |
+ char __user *user_buf, | |
+ size_t user_buf_size, | |
loff_t *user_file_pos) | |
{ | |
return (ssize_t) firegl_interrupt_read(user_file, user_buf, user_buf_size, user_file_pos); | |
} | |
-static unsigned int | |
-firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt) | |
+static unsigned int | |
+firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt) | |
{ | |
if(firegl_interrupt_poll(user_file, (__ke_poll_table*)pt)) | |
{ | |
@@ -488,11 +488,11 @@ firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt) | |
} | |
} | |
-static ssize_t | |
+static ssize_t | |
firegl_interrupt_write_wrap( | |
- struct file *user_file, | |
- const char __user *user_buf, | |
- size_t user_buf_size, | |
+ struct file *user_file, | |
+ const char __user *user_buf, | |
+ size_t user_buf_size, | |
loff_t *user_file_pos) | |
{ | |
return (ssize_t) firegl_interrupt_write(user_file, user_buf, user_buf_size, user_file_pos); | |
@@ -502,7 +502,7 @@ firegl_interrupt_write_wrap( | |
* \param func function to be wrapped | |
* \return None */ | |
-static void | |
+static void | |
firegl_smp_func_parameter_wrap( | |
void *func) | |
{ | |
@@ -517,7 +517,7 @@ static struct file_operations firegl_interrupt_file_ops = { | |
.write = firegl_interrupt_write_wrap | |
}; | |
-__ke_proc_list_t firegl_proc_list[] = | |
+__ke_proc_list_t firegl_proc_list[] = | |
{ | |
{ "name", drm_name_info_wrap, NULL}, | |
{ "mem", drm_mem_info_wrap, NULL}, | |
@@ -586,11 +586,11 @@ static struct proc_dir_entry *firegl_proc_init( device_t *dev, | |
{ | |
ent->proc_fops = (struct file_operations*)list->fops; | |
} | |
- | |
+ | |
{ | |
ent->data = (dev->pubdev.signature == FGL_DEVICE_SIGNATURE)? firegl_find_device(minor) : (dev); | |
} | |
- | |
+ | |
list++; | |
} | |
@@ -623,7 +623,7 @@ static int firegl_proc_cleanup( int minor, | |
{ | |
remove_proc_entry("dri", NULL); | |
__KE_DEBUG("remove proc dri. \n"); | |
- } | |
+ } | |
return 0; | |
} | |
@@ -661,12 +661,12 @@ static int firegl_stub_getminor(const char *name, struct file_operations *fops, | |
{ | |
int i; | |
int count = 0; | |
- | |
+ | |
__KE_DEBUG("firegl_stub_getminor: name=\"%s\"\n", name); | |
- for( i = 0; i < FIREGL_STUB_MAXCARDS; i++ ) | |
+ for( i = 0; i < FIREGL_STUB_MAXCARDS; i++ ) | |
{ | |
- if( !firegl_stub_list[i].fops ) | |
+ if( !firegl_stub_list[i].fops ) | |
{ | |
firegl_stub_list[i].name = name; | |
firegl_stub_list[i].fops = fops; | |
@@ -693,16 +693,16 @@ static int firegl_stub_putminor(int minor) | |
if (minor < 0 || minor >= FIREGL_STUB_MAXCARDS) | |
{ | |
return -1; | |
- } | |
+ } | |
firegl_proc_cleanup(minor, firegl_stub_root, firegl_stub_list[minor].dev_root, firegl_stub_list[minor].proclist); | |
firegl_stub_list[minor].name = NULL; | |
firegl_stub_list[minor].fops = NULL; | |
firegl_stub_list[minor].proclist = NULL; | |
- if( minor == (firegl_minors-1) ) | |
+ if( minor == (firegl_minors-1) ) | |
{ | |
unregister_chrdev(DRM_MAJOR, "drm"); | |
- } | |
+ } | |
return 0; | |
} | |
@@ -726,7 +726,7 @@ static int __init firegl_stub_register(const char *name, struct file_operations | |
return -1; | |
} else if(err == -EBUSY) { | |
- // the registering of the module's device has failed | |
+ // the registering of the module's device has failed | |
// because there was already some other drm module loaded. | |
__KE_DEBUG("register_chrdev() failed with -EBUSY\n"); | |
return -1; | |
@@ -758,7 +758,7 @@ static int fglrx_pci_probe(struct pci_dev *dev, const struct pci_device_id *id_t | |
/* Starting from 2.6.14, kernel has new struct defined for pm_message_t, | |
we have to handle this case separately. | |
2.6.11/12/13 kernels have pm_message_t defined as int and older kernels | |
- don't have pm_message_t defined. | |
+ don't have pm_message_t defined. | |
*/ | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) | |
static int fglrx_pci_suspend(struct pci_dev *pdev, pm_message_t pm_event) | |
@@ -794,9 +794,9 @@ static int fglrx_pci_suspend(struct pci_dev *pdev, u32 pm_event) | |
if (!ret) | |
{ | |
- | |
- // since privdev->pcidev is acquired in X server, use pdev | |
- // directly here to allow suspend/resume without X server start. | |
+ | |
+ // since privdev->pcidev is acquired in X server, use pdev | |
+ // directly here to allow suspend/resume without X server start. | |
firegl_pci_save_state((__ke_pci_dev_t*)pdev, privdev); | |
pci_disable_device(pdev); | |
PMSG_EVENT(pdev->dev.power.power_state) = state; | |
@@ -848,13 +848,13 @@ static int fglrx_pci_resume(struct pci_dev *pdev) | |
// before pci_set_master! | |
firegl_pci_restore_state((__ke_pci_dev_t*)pdev, privdev); | |
- if (pci_enable_device(pdev)) | |
+ if (pci_enable_device(pdev)) | |
{ | |
__KE_ERROR("Cannot enable PCI device.\n"); | |
- } | |
+ } | |
pci_set_master(pdev); | |
- | |
+ | |
firegl_cail_powerup(privdev); | |
if (PMSG_EVENT(pdev->dev.power.power_state) == PM_EVENT_SUSPEND) | |
@@ -865,7 +865,7 @@ static int fglrx_pci_resume(struct pci_dev *pdev) | |
return 0; | |
} | |
-static struct pci_driver fglrx_pci_driver = | |
+static struct pci_driver fglrx_pci_driver = | |
{ | |
.name = "fglrx_pci", | |
.id_table = fglrx_pci_table, | |
@@ -921,10 +921,10 @@ static int firegl_init_devices(__ke_device_t *pubdev) | |
{ | |
pid = (struct pci_device_id *) &fglrx_pci_table[i]; | |
pdev = NULL; | |
- while (( pdev = pci_get_subsys(pid->vendor, | |
- pid->device, | |
- PCI_ANY_ID, | |
- PCI_ANY_ID, | |
+ while (( pdev = pci_get_subsys(pid->vendor, | |
+ pid->device, | |
+ PCI_ANY_ID, | |
+ PCI_ANY_ID, | |
pdev)) != NULL) | |
{ | |
num_of_devices++; | |
@@ -934,7 +934,7 @@ static int firegl_init_devices(__ke_device_t *pubdev) | |
if (firegl_init_device_heads(num_of_devices)) | |
{ | |
- return -ENOMEM; | |
+ return -ENOMEM; | |
} | |
for (i=0; fglrx_pci_table[i].vendor != 0; i++) | |
@@ -942,15 +942,15 @@ static int firegl_init_devices(__ke_device_t *pubdev) | |
pid = (struct pci_device_id *) &fglrx_pci_table[i]; | |
pdev = NULL; | |
- while (( pdev = pci_get_subsys(pid->vendor, | |
- pid->device, | |
- PCI_ANY_ID, | |
- PCI_ANY_ID, | |
+ while (( pdev = pci_get_subsys(pid->vendor, | |
+ pid->device, | |
+ PCI_ANY_ID, | |
+ PCI_ANY_ID, | |
pdev)) != NULL) | |
{ | |
if ((ret_code = firegl_get_dev(pubdev, pdev))) | |
{ | |
- return ret_code; | |
+ return ret_code; | |
} | |
j++; | |
@@ -983,7 +983,7 @@ static int __init firegl_init_module(void) | |
// init global vars that are in fact constants | |
__ke_HZ = HZ; | |
-#ifdef _KE_SERIAL_DEBUG | |
+#ifdef _KE_SERIAL_DEBUG | |
__ke_SetSerialPort(); | |
#endif | |
@@ -995,11 +995,11 @@ static int __init firegl_init_module(void) | |
return retcode; | |
} | |
-#ifdef FIREGL_CF_SUPPORT | |
+#ifdef FIREGL_CF_SUPPORT | |
adapter_chain_init(); | |
cf_object_init(); | |
-#endif | |
- | |
+#endif | |
+ | |
// init DRM proc list | |
drm_proclist = kmalloc((DRM_PROC_ENTRIES + 1) * sizeof(__ke_proc_list_t), GFP_KERNEL); | |
if ( drm_proclist == NULL ) | |
@@ -1087,7 +1087,7 @@ static int __init firegl_init_module(void) | |
dev->pubdev.date, | |
firegl_minors); | |
- | |
+ | |
#ifdef FIREGL_POWER_MANAGEMENT | |
if (pci_register_driver (&fglrx_pci_driver) < 0) | |
{ | |
@@ -1117,12 +1117,12 @@ static void __exit firegl_cleanup_module(void) | |
{ | |
KCL_disable_pat(); | |
__KE_INFO("Disable PAT\n"); | |
- } | |
+ } | |
#endif // FIREGL_USWC_SUPPORT | |
for (i = 0; i < count; i++) | |
{ | |
- if ( firegl_stub_unregister(i) ) | |
+ if ( firegl_stub_unregister(i) ) | |
{ | |
__KE_ERROR("Cannot unload module on minor: %d\n", i); | |
} | |
@@ -1144,10 +1144,10 @@ static void __exit firegl_cleanup_module(void) | |
dev->pubdev.patchlevel, | |
dev->pubdev.date); | |
-#ifdef FIREGL_CF_SUPPORT | |
+#ifdef FIREGL_CF_SUPPORT | |
cf_object_cleanup(); | |
- adapter_chain_cleanup(); | |
-#endif // FIREGL_CF_SUPPORT | |
+ adapter_chain_cleanup(); | |
+#endif // FIREGL_CF_SUPPORT | |
firegl_private_cleanup (&dev->pubdev); | |
@@ -1225,18 +1225,18 @@ void ATI_API_CALL __ke_add_wait_queue(__ke_wait_queue_head_t* queue_head, __ke_w | |
void ATI_API_CALL __ke_remove_wait_queue(__ke_wait_queue_head_t* queue_head, __ke_wait_queue_t* entry) | |
{ | |
// current->state = TASK_RUNNING; | |
- remove_wait_queue((wait_queue_head_t*)(void *)queue_head, | |
+ remove_wait_queue((wait_queue_head_t*)(void *)queue_head, | |
(wait_queue_t*)(void *)entry); | |
} | |
void ATI_API_CALL __ke_init_waitqueue_head(__ke_wait_queue_head_t* queue_head) | |
{ | |
- init_waitqueue_head((wait_queue_head_t*)(void *)queue_head); | |
+ init_waitqueue_head((wait_queue_head_t*)(void *)queue_head); | |
} | |
void ATI_API_CALL __ke_wait_event_interruptible(__ke_wait_queue_head_t* queue_head, int condition) | |
{ | |
- wait_event_interruptible(*((wait_queue_head_t*)(void *)queue_head), condition); | |
+ wait_event_interruptible(*((wait_queue_head_t*)(void *)queue_head), condition); | |
} | |
void ATI_API_CALL __ke_poll_wait(struct file* filp, __ke_wait_queue_head_t* queue_head, __ke_poll_table* pt) | |
@@ -1247,13 +1247,13 @@ void ATI_API_CALL __ke_poll_wait(struct file* filp, __ke_wait_queue_head_t* queu | |
void ATI_API_CALL *__ke_asyncio_alloc_sema() | |
{ | |
int i; | |
- | |
+ | |
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
{ | |
if(fireglAsyncioSemaphoreUsed[i] != 1) | |
{ | |
fireglAsyncioSemaphoreUsed[i] = 1; | |
- | |
+ | |
return &(fireglAsyncioSemaphore[i]); | |
} | |
} | |
@@ -1263,7 +1263,7 @@ void ATI_API_CALL *__ke_asyncio_alloc_sema() | |
void ATI_API_CALL __ke_asyncio_free_sema(struct semaphore *pSema) | |
{ | |
int i; | |
- | |
+ | |
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
{ | |
if( &(fireglAsyncioSemaphore[i]) == pSema ) | |
@@ -1277,15 +1277,15 @@ void ATI_API_CALL __ke_asyncio_free_sema(struct semaphore *pSema) | |
void ATI_API_CALL __ke_asyncio_init_sema(void) | |
{ | |
int i; | |
- | |
+ | |
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
{ | |
fireglAsyncioSemaphoreUsed[i] = 0; | |
} | |
-} | |
+} | |
-int ATI_API_CALL __ke_fasync_helper( int fd, | |
- struct file *filep, | |
+int ATI_API_CALL __ke_fasync_helper( int fd, | |
+ struct file *filep, | |
int mode, | |
struct fasync_struct **pasync_queue) | |
{ | |
@@ -1352,33 +1352,33 @@ unsigned int ATI_API_CALL KCL_ProcessIsTerminated(unsigned int pid) | |
{ | |
struct task_struct *p; | |
int process_terminated = 1; | |
- | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
+ | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
rcu_read_lock(); | |
-#else | |
+#else | |
read_lock(&tasklist_lock); | |
-#endif | |
- p = find_task_by_pid( pid ); | |
- if (p) | |
+#endif | |
+ p = find_task_by_vpid( pid ); | |
+ if (p) | |
{ | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) | |
- if (p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD) | |
+ if (p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD) | |
#else | |
- if (!(p->flags & PF_EXITING)) | |
+ if (!(p->flags & PF_EXITING)) | |
#endif | |
{ | |
process_terminated = 0; | |
} | |
- } | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
+ } | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
rcu_read_unlock(); | |
-#else | |
+#else | |
read_unlock(&tasklist_lock); | |
-#endif | |
+#endif | |
return process_terminated; | |
} | |
-/** /brief Call global OS kernel task/thread scheduler | |
+/** /brief Call global OS kernel task/thread scheduler | |
* /return Nonzero if a system call was awakened by a signal | |
*/ | |
int ATI_API_CALL KCL_GetSignalStatus(void) | |
@@ -1432,15 +1432,15 @@ void ATI_API_CALL __ke_unblock_all_signals(void) | |
unblock_all_signals(); | |
} | |
-#if defined(__i386__) | |
+#if defined(__i386__) | |
#ifndef __HAVE_ARCH_CMPXCHG | |
-static inline | |
-unsigned long __fgl_cmpxchg(volatile void *ptr, unsigned long old, | |
- unsigned long new, int size) | |
-{ | |
- unsigned long prev; | |
- switch (size) { | |
- case 1: | |
+static inline | |
+unsigned long __fgl_cmpxchg(volatile void *ptr, unsigned long old, | |
+ unsigned long new, int size) | |
+{ | |
+ unsigned long prev; | |
+ switch (size) { | |
+ case 1: | |
__asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2" | |
: "=a"(prev) | |
: "q"(new), "m"(*__xg(ptr)), "0"(old) | |
@@ -1551,7 +1551,7 @@ struct inode* ATI_API_CALL __ke_get_file_inode(struct file* filp) | |
*/ | |
KCL_TYPE_Pid ATI_API_CALL KCL_GetPid(void) | |
{ | |
- return current->pid; | |
+ return current->pid; | |
} | |
/** /brief Return the current Thread Group ID | |
@@ -1559,7 +1559,7 @@ KCL_TYPE_Pid ATI_API_CALL KCL_GetPid(void) | |
*/ | |
KCL_TYPE_Pid ATI_API_CALL KCL_GetTgid(void) | |
{ | |
- return current->tgid; | |
+ return current->tgid; | |
} | |
/** /brief Return the effective user ID | |
@@ -1655,7 +1655,7 @@ static int KCL_MAP_KernelConfigParam[] = | |
1 | |
#else | |
0 | |
-#endif | |
+#endif | |
}; | |
/** /brief Check whether a kernel configuration parameter is defined | |
@@ -1718,13 +1718,13 @@ unsigned long ATI_API_CALL __ke_get_resource_start(__ke_pci_dev_t *dev, unsigned | |
#if defined(__x86_64__) || defined(__ia64__) | |
void* ATI_API_CALL __ke_pci_alloc_consistent(__ke_pci_dev_t* dev, int size, void *dma_handle) | |
{ | |
- return (pci_alloc_consistent( (struct pci_dev*)(void *)dev, size, dma_handle)); | |
+ return (pci_alloc_consistent( (struct pci_dev*)(void *)dev, size, dma_handle)); | |
} | |
void ATI_API_CALL __ke_pci_free_consistent(__ke_pci_dev_t* dev, int size, unsigned long cpu_addr, | |
unsigned int dma_handle) | |
{ | |
- pci_free_consistent( (struct pci_dev*)(void *)dev, size, (void *)cpu_addr, | |
+ pci_free_consistent( (struct pci_dev*)(void *)dev, size, (void *)cpu_addr, | |
(unsigned long)dma_handle); | |
} | |
#endif // __ia64__ | |
@@ -1748,7 +1748,7 @@ static int KCL_MAP_ErrorCode[] = | |
/** \brief This function maps OS independent error conditions to OS defined error codes | |
* \param errcode OS independent error condition code | |
- * \return OS kernel defined error code corresponding to the requested error condition | |
+ * \return OS kernel defined error code corresponding to the requested error condition | |
*/ | |
int ATI_API_CALL KCL_GetErrorCode(KCL_ENUM_ErrorCode errcode) | |
{ | |
@@ -1766,7 +1766,7 @@ int ATI_API_CALL KCL_GetErrorCode(KCL_ENUM_ErrorCode errcode) | |
int ATI_API_CALL firegl_get_user_ptr(u32 *src, void **dst) | |
{ | |
unsigned long temp; | |
- int err = get_user(temp, src); | |
+ int err = get_user(temp, src); | |
*dst = (void*) temp; | |
return err; | |
} | |
@@ -1906,7 +1906,7 @@ void ATI_API_CALL __ke_atomic_set(void* v, int val) | |
int ATI_API_CALL __ke_atomic_dec_and_test(void* v) | |
{ | |
- return atomic_dec_and_test((atomic_t*)v); | |
+ return atomic_dec_and_test((atomic_t*)v); | |
} | |
/*****************************************************************************/ | |
@@ -2006,19 +2006,19 @@ void ATI_API_CALL __ke_print_debug(const char* fmt, ...) | |
#endif | |
#ifdef _KE_SERIAL_DEBUG | |
-// To enable serial port debug message dumping,just define _KE_SERIAL_DEBUG in firegl_public.h file. | |
-// Connect two PC with a null modern serial cable. run Hyper ternimal on the remote machine. | |
-// It's useful to debug resume if network not works properly and serial port is not recovered | |
+// To enable serial port debug message dumping,just define _KE_SERIAL_DEBUG in firegl_public.h file. | |
+// Connect two PC with a null modern serial cable. run Hyper ternimal on the remote machine. | |
+// It's useful to debug resume if network not works properly and serial port is not recovered | |
// properly when fglrx resume hook is called... | |
- | |
- | |
+ | |
+ | |
#define SER_DATA_PORT 0x3f8 | |
#define SER_INT_CTRL_PORT SER_DATA_PORT + 1 | |
#define SER_INT_STAT_PORT SER_DATA_PORT + 2 | |
#define SER_LINE_CTRL_PORT SER_DATA_PORT + 3 | |
#define SER_MODEM_CTRL_PORT SER_DATA_PORT + 4 | |
#define SER_LINE_STAT_PORT SER_DATA_PORT + 5 | |
- | |
+ | |
void ATI_API_CALL __ke_printc(char c) | |
{ | |
while((inb(SER_LINE_STAT_PORT) & 0x20) == 0 ); //wait until Transmitter Holding Register Empty | |
@@ -2028,7 +2028,7 @@ void ATI_API_CALL __ke_printc(char c) | |
void ATI_API_CALL __ke_printstr(const char *str) | |
{ | |
int len = strlen(str); | |
- while(len--)__ke_printc(*str++); | |
+ while(len--)__ke_printc(*str++); | |
} | |
int ATI_API_CALL __ke_SerPrint(const char *format, ...) | |
@@ -2041,26 +2041,26 @@ int ATI_API_CALL __ke_SerPrint(const char *format, ...) | |
vsprintf(buffer, format, ap); | |
va_end(ap); | |
- | |
+ | |
__ke_printstr(buffer); | |
- | |
+ | |
return 0; | |
} | |
void ATI_API_CALL __ke_SetSerialPort() | |
{ | |
DRM_INFO("setup serial port\n"); | |
- outb(0x00, SER_INT_CTRL_PORT); // Turn off interrupts | |
- | |
- outb(0x80, SER_LINE_CTRL_PORT); // SET DLAB ON | |
- outb(0x01, SER_DATA_PORT); // Set Baud rate - Divisor Latch Low Byte | |
- // 0x01 = 115,200 ,0x02 = 57,600, 0x06 = 19,200 BPS, 0x0C = 9,600 BPS | |
- outb(0x00, SER_DATA_PORT + 1); // Set Baud rate - Divisor Latch High Byte | |
- outb(0x03, SER_LINE_CTRL_PORT); // reset DLAB ,8 Bits, No Parity, 1 Stop Bit | |
- outb(0xC7, SER_DATA_PORT + 2); // FIFO Control Register | |
+ outb(0x00, SER_INT_CTRL_PORT); // Turn off interrupts | |
+ | |
+ outb(0x80, SER_LINE_CTRL_PORT); // SET DLAB ON | |
+ outb(0x01, SER_DATA_PORT); // Set Baud rate - Divisor Latch Low Byte | |
+ // 0x01 = 115,200 ,0x02 = 57,600, 0x06 = 19,200 BPS, 0x0C = 9,600 BPS | |
+ outb(0x00, SER_DATA_PORT + 1); // Set Baud rate - Divisor Latch High Byte | |
+ outb(0x03, SER_LINE_CTRL_PORT); // reset DLAB ,8 Bits, No Parity, 1 Stop Bit | |
+ outb(0xC7, SER_DATA_PORT + 2); // FIFO Control Register | |
outb(0x0b, SER_DATA_PORT + 4); // Turn on DTR, RTS, and OUT2 | |
- | |
+ | |
__ke_printstr("serial port 0x3f8 is set ready for message print out \n"); | |
-} | |
+} | |
#endif | |
/** \brief Get number of available RAM pages | |
@@ -2241,7 +2241,7 @@ void *ATI_API_CALL __ke_vmalloc_to_addr(void *vmalloc_addr) | |
struct page *page = NULL; | |
page = vmalloc_to_page(vmalloc_addr); | |
- if(page == NULL) | |
+ if(page == NULL) | |
{ | |
__KE_ERROR("__ke_vmalloc_to_addr: invalid page!"); | |
return NULL; | |
@@ -2283,7 +2283,7 @@ int ATI_API_CALL __ke_do_munmap(unsigned long addr, unsigned long len) | |
retcode = do_munmap(current->mm, | |
addr, | |
len); | |
-#endif | |
+#endif | |
up_write(¤t->mm->mmap_sem); | |
return retcode; | |
} | |
@@ -2327,10 +2327,10 @@ long long ATI_API_CALL __divdi3(long long n, long long base) | |
minus = !minus; | |
} | |
else | |
- { | |
+ { | |
ubase = base; | |
} | |
- | |
+ | |
do_div(un, ubase); | |
return (minus? -un : un); | |
} | |
@@ -2360,7 +2360,7 @@ long long ATI_API_CALL __moddi3(long long n, long long base) | |
else | |
{ | |
ubase = base; | |
- } | |
+ } | |
rem = do_div(un, ubase); | |
return (minus? -rem : rem); | |
@@ -2391,7 +2391,7 @@ void* ATI_API_CALL __ke_vmap(unsigned long *pagelist, unsigned int count) | |
vaddr = (void *) vmap(pages, count); | |
#else | |
#ifdef VM_MAP | |
- vaddr = (void *) vmap(pages, count, VM_MAP, PAGE_KERNEL); | |
+ vaddr = (void *) vmap(pages, count, VM_MAP, PAGE_KERNEL); | |
#else | |
vaddr = (void *) vmap(pages, count, 0, PAGE_KERNEL); | |
#endif | |
@@ -2447,7 +2447,7 @@ void ATI_API_CALL __ke_vunmap(void* addr) | |
} | |
#endif // defined(VM_MAP) || defined(vunmap) | |
-/** \brief Reserve a memory page | |
+/** \brief Reserve a memory page | |
* | |
* \param pt Kernel logical address of the page | |
* | |
@@ -2459,7 +2459,7 @@ void ATI_API_CALL KCL_ReserveMemPage(void* pt) | |
SetPageReserved(virt_to_page((unsigned long)pt)); | |
} | |
-/** \brief Unreserve a memory page | |
+/** \brief Unreserve a memory page | |
* | |
* \param pt Kernel logical address of the page | |
* | |
@@ -2471,7 +2471,7 @@ void ATI_API_CALL KCL_UnreserveMemPage(void* pt) | |
ClearPageReserved(virt_to_page((unsigned long)pt)); | |
} | |
-/** \brief Lock a memory page | |
+/** \brief Lock a memory page | |
* | |
* \param pt Kernel logical address of the page | |
* | |
@@ -2480,14 +2480,14 @@ void ATI_API_CALL KCL_UnreserveMemPage(void* pt) | |
*/ | |
void ATI_API_CALL KCL_LockMemPage(void* pt) | |
{ | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
SetPageReserved(virt_to_page((unsigned long)pt)); | |
#else | |
lock_page(virt_to_page((unsigned long)pt)); | |
#endif | |
} | |
-/** \brief Unlock a memory page | |
+/** \brief Unlock a memory page | |
* | |
* \param pt Kernel logical address of the page | |
* | |
@@ -2496,7 +2496,7 @@ void ATI_API_CALL KCL_LockMemPage(void* pt) | |
*/ | |
void ATI_API_CALL KCL_UnlockMemPage(void* pt) | |
{ | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
ClearPageReserved(virt_to_page((unsigned long)pt)); | |
#else | |
unlock_page(virt_to_page((unsigned long)pt)); | |
@@ -2521,7 +2521,7 @@ void* ATI_API_CALL __ke_get_vmptr( struct _agp_memory* memory ) | |
return memory->vmptr; | |
} | |
#endif | |
- | |
+ | |
void* ATI_API_CALL __ke_ioremap(unsigned long offset, unsigned long size) | |
{ | |
return ioremap(offset, size); | |
@@ -2592,7 +2592,7 @@ void ATI_API_CALL KCL_flush_tlb_onepage(struct vm_area_struct * vma, unsigned lo | |
{ | |
/*Some kernel developer removed the export of symbol "flush_tlb_page" on 2.6.25 x86_64 SMP kernel. | |
Define a simple version here.*/ | |
-#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
+#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
on_each_cpu(KCL_flush_tlb_one, &va, 1, 1); | |
#else | |
flush_tlb_page(vma, va); | |
@@ -2649,9 +2649,9 @@ void ATI_API_CALL __ke_put_vm_page_table(unsigned long page_addr) | |
static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) | |
{ | |
int ret = 0; | |
- | |
+ | |
DBG_ENTER("0x%08X, 0x%08X, 0x%08X->0x%08X", vma, addr, ptep, *ptep); | |
- | |
+ | |
if (pte_dirty(*ptep)) | |
{ | |
#ifdef __x86_64__ | |
@@ -2666,19 +2666,19 @@ static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned lo | |
{ | |
pte_update(vma->vm_mm, addr, ptep); | |
} | |
-#endif | |
+#endif | |
} | |
DBG_TRACE("0x%08X->0x%08X", ptep, *ptep); | |
- | |
+ | |
// Flush Translation Lookaside Buffers | |
if (ret) | |
{ | |
KCL_flush_tlb_onepage(vma,addr); | |
} | |
- | |
+ | |
DBG_LEAVE("%d", ret); | |
- | |
+ | |
return ret; | |
} | |
#endif | |
@@ -2705,7 +2705,7 @@ static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned lo | |
* the virtual address | |
* | |
* \param mm Pointer to the memory descriptor structure | |
- * \param virtual_addr Virtual address | |
+ * \param virtual_addr Virtual address | |
* | |
* \return Old value of the "dirty" flag on success or negative on error | |
* | |
@@ -2961,7 +2961,7 @@ int ATI_API_CALL __ke_config_mtrr(void) | |
return 0; | |
#else | |
return 1; | |
-#endif | |
+#endif | |
#else /* !CONFIG_MTRR */ | |
return 0; | |
#endif /* !CONFIG_MTRR */ | |
@@ -2987,7 +2987,7 @@ int ATI_API_CALL __ke_mtrr_del(int reg, unsigned long base, unsigned long size) | |
int ATI_API_CALL __ke_has_vmap(void) | |
{ | |
-// We disable vmap for 2.4.x kernel to work around the big memory( > 4GB ) issue. | |
+// We disable vmap for 2.4.x kernel to work around the big memory( > 4GB ) issue. | |
#if defined(VM_MAP) || defined(vunmap) | |
return 1; | |
#else | |
@@ -3009,7 +3009,7 @@ int ATI_API_CALL __ke_no_iommu(void) | |
{ | |
return 0; | |
} | |
-#endif | |
+#endif | |
/*****************************************************************************/ | |
@@ -3066,7 +3066,7 @@ unsigned int ATI_API_CALL __ke_pci_get_func(__ke_pci_dev_t* pcidev) | |
{ | |
struct pci_dev* dev = (struct pci_dev*)pcidev; | |
return PCI_FUNC(dev->devfn); | |
-} | |
+} | |
__ke_dma_addr_t ATI_API_CALL __ke_pci_map_single (__ke_pci_dev_t *pdev, void *buffer, __ke_size_t size, int direction) | |
{ | |
@@ -3153,7 +3153,7 @@ static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1) | |
return IRQ_HANDLED; | |
} | |
#endif | |
- | |
+ | |
int ATI_API_CALL __ke_request_irq(unsigned int irq, | |
void (*ATI_API_CALL handler)(int, void *, void *), | |
const char *dev_name, void *dev_id) | |
@@ -3166,7 +3166,7 @@ int ATI_API_CALL __ke_request_irq(unsigned int irq, | |
SA_SHIRQ, | |
#else | |
IRQF_SHARED, | |
-#endif | |
+#endif | |
dev_name, | |
dev_id); | |
} | |
@@ -3203,12 +3203,12 @@ int ATI_API_CALL __ke_agp_memory_get_page_count(struct _agp_memory* agpmem) | |
return (int)(agpmem->page_count); | |
} | |
-void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem, | |
+void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem, | |
unsigned long **memory_ptr) | |
{ | |
__KE_DEBUG("[%s] agpmem=0x%016lx agpmem->memory=0x%016lx [0]=0x%016x", | |
- __FUNCTION__, | |
- (unsigned long)agpmem, | |
+ __FUNCTION__, | |
+ (unsigned long)agpmem, | |
(unsigned long)agpmem->memory, | |
(agpmem->memory)[0]); | |
@@ -3217,18 +3217,9 @@ void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem, | |
/*****************************************************************************/ | |
-#ifndef NOPAGE_SIGBUS | |
-#define NOPAGE_SIGBUS 0 | |
-#endif /* !NOPAGE_SIGBUS */ | |
- | |
typedef struct page mem_map_t; | |
typedef mem_map_t *vm_nopage_ret_t; | |
-static __inline__ vm_nopage_ret_t do_vm_nopage(struct vm_area_struct* vma, | |
- unsigned long address) | |
-{ | |
- return 0; /* Disallow mremap */ | |
-} | |
#ifdef __AGP__BUILTIN__ | |
#ifdef __ia64__ | |
@@ -3253,19 +3244,20 @@ static __inline__ vm_nopage_ret_t do_vm_cant_nopage(struct vm_area_struct* vma, | |
return page; | |
} | |
} | |
- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
+ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
} | |
#endif /* __ia64__ */ | |
#endif /* __AGP__BUILTIN__ */ | |
-static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
- unsigned long address) | |
+static __inline__ int do_vm_shm_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
pgd_t* pgd_p; | |
pmd_t* pmd_p; | |
pte_t pte; | |
+ unsigned long address = (unsigned long)vmf->virtual_address; | |
unsigned long vma_offset; | |
unsigned long pte_linear; | |
mem_map_t* pMmPage; | |
@@ -3294,7 +3286,7 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
(unsigned long)__ke_vm_offset(vma)); | |
if (address > vma->vm_end) | |
- return NOPAGE_SIGBUS; /* address is out of range */ | |
+ return VM_FAULT_SIGBUS; /* address is out of range */ | |
/* Calculate offset into VMA */ | |
vma_offset = address - vma->vm_start; | |
@@ -3306,7 +3298,7 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
pte_linear = firegl_get_addr_from_vm(vma); | |
if (!pte_linear) | |
{ | |
- return NOPAGE_SIGBUS; /* bad address */ | |
+ return VM_FAULT_SIGBUS; /* bad address */ | |
} | |
pte_linear += vma_offset; | |
@@ -3334,7 +3326,9 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
// __KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", | |
// address, page_address(pMmPage)); | |
- return pMmPage; | |
+ vmf->page = pMmPage; | |
+ | |
+ return 0; | |
} | |
/* | |
@@ -3343,8 +3337,10 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
(which is one ore more pages in size) | |
*/ | |
-static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, unsigned long address) | |
+static __inline__ int do_vm_dma_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
+ unsigned long address = (unsigned long) vmf->virtual_address; | |
unsigned long kaddr; | |
mem_map_t* pMmPage; | |
@@ -3360,7 +3356,7 @@ static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, u | |
kaddr = firegl_get_addr_from_vm(vma); | |
if (!kaddr) | |
{ | |
- return NOPAGE_SIGBUS; /* bad address */ | |
+ return VM_FAULT_SIGBUS; /* bad address */ | |
} | |
kaddr += (address - vma->vm_start); | |
@@ -3372,19 +3368,23 @@ static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, u | |
// with drm_alloc_pages, which marks all pages as reserved. Reserved | |
// pages' usage count is not decremented by the kernel during unmap!!! | |
// | |
- // For kernel >= 2.6.15, We should reenable this, because the VM sub-system | |
- // will decrement the pages' usage count even for the pages marked as reserved | |
+ // For kernel >= 2.6.15, We should reenable this, because the VM sub-system | |
+ // will decrement the pages' usage count even for the pages marked as reserved | |
// - MC. | |
get_page(pMmPage); /* inc usage count of page */ | |
#endif | |
__KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", | |
address, page_address(pMmPage)); | |
- return pMmPage; | |
+ vmf->page = pMmPage; | |
+ | |
+ return 0; | |
} | |
-static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma, unsigned long address) | |
+static __inline__ int do_vm_kmap_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
+ unsigned long address = (unsigned long) vmf->virtual_address; | |
unsigned long kaddr; | |
mem_map_t* pMmPage; | |
@@ -3394,13 +3394,14 @@ static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma, | |
if ((pMmPage = (mem_map_t*) firegl_get_pagetable_page_from_vm(vma))) | |
{ | |
get_page(pMmPage); | |
- return pMmPage; | |
+ vmf->page = pMmPage; | |
+ return 0; | |
} | |
kaddr = firegl_get_addr_from_vm(vma); | |
if (!kaddr) | |
{ | |
- return NOPAGE_SIGBUS; /* bad address */ | |
+ return VM_FAULT_SIGBUS; /* bad address */ | |
} | |
kaddr += (address - vma->vm_start); | |
@@ -3413,50 +3414,52 @@ static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma, | |
__KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", address, page_address(pMmPage)); | |
- return pMmPage; | |
+ vmf->page = pMmPage; | |
+ return 0; | |
} | |
-/** | |
+/** | |
** | |
- ** This routine is intented to locate the page table through the | |
+ ** This routine is intented to locate the page table through the | |
** pagelist table created earlier in dev-> pcie | |
**/ | |
-static __inline__ vm_nopage_ret_t do_vm_pcie_nopage(struct vm_area_struct* vma, | |
- unsigned long address) | |
+static __inline__ int do_vm_pcie_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
+ unsigned long address = (unsigned long)vmf->virtual_address; | |
unsigned long vma_offset; | |
- unsigned long i; | |
+ unsigned long i; | |
mem_map_t* pMmPage; | |
struct firegl_pcie_mem* pciemem; | |
unsigned long* pagelist; | |
- | |
+ | |
drm_device_t *dev = (drm_device_t *)firegl_get_dev_from_vm(vma); | |
if (dev == NULL) | |
{ | |
__KE_ERROR("dev is NULL\n"); | |
- return NOPAGE_SIGBUS; | |
+ return VM_FAULT_SIGBUS; | |
} | |
if (address > vma->vm_end) | |
{ | |
__KE_ERROR("address out of range\n"); | |
- return NOPAGE_SIGBUS; /* address is out of range */ | |
+ return VM_FAULT_SIGBUS; /* address is out of range */ | |
} | |
pciemem = firegl_get_pciemem_from_addr ( vma, address); | |
if (pciemem == NULL) | |
{ | |
__KE_ERROR("No pciemem found! \n"); | |
- return NOPAGE_SIGBUS; | |
- } | |
+ return VM_FAULT_SIGBUS; | |
+ } | |
pagelist = firegl_get_pagelist_from_vm(vma); | |
- if (pagelist == NULL) | |
+ if (pagelist == NULL) | |
{ | |
__KE_ERROR("No pagelist! \n"); | |
- return NOPAGE_SIGBUS; | |
+ return VM_FAULT_SIGBUS; | |
} | |
- | |
+ | |
/** Find offset in vma */ | |
vma_offset = address - vma->vm_start; | |
/** Which entry in the pagelist */ | |
@@ -3468,15 +3471,17 @@ static __inline__ vm_nopage_ret_t do_vm_pcie_nopage(struct vm_area_struct* vma, | |
if (page_address(pMmPage) == 0x0) | |
{ | |
__KE_ERROR("Invalid page address\n"); | |
- return NOPAGE_SIGBUS; | |
+ return VM_FAULT_SIGBUS; | |
} | |
- return pMmPage; | |
+ | |
+ vmf->page = pMmPage; | |
+ return 0; | |
} | |
-static __inline__ vm_nopage_ret_t do_vm_gart_nopage(struct vm_area_struct* vma, | |
- unsigned long address) | |
+static __inline__ int do_vm_gart_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- | |
+ unsigned long address = (unsigned long) vmf->virtual_address; | |
unsigned long page_addr; | |
unsigned long offset; | |
struct page *page; | |
@@ -3484,36 +3489,31 @@ static __inline__ vm_nopage_ret_t do_vm_gart_nopage(struct vm_area_struct* vma, | |
if (address > vma->vm_end) | |
{ | |
__KE_ERROR("Invalid virtual address\n"); | |
- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
- } | |
+ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
+ } | |
offset = address - vma->vm_start; | |
-#ifdef FIREGL_CF_SUPPORT | |
+#ifdef FIREGL_CF_SUPPORT | |
page_addr = mc_heap_get_page_addr(vma, offset); | |
#else | |
page_addr = firegl_cmmqs_get_pageaddr_from_vm(vma, offset); | |
-#endif | |
+#endif | |
if( !page_addr) | |
{ | |
__KE_ERROR("Invalid page address\n"); | |
- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
+ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
} | |
page = virt_to_page(page_addr); | |
get_page(page); | |
- return page; | |
+ vmf->page = page; | |
+ return 0; | |
} | |
- | |
- | |
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) | |
- | |
-static vm_nopage_ret_t vm_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
+static int vm_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- if (type) *type = VM_FAULT_MINOR; | |
- return do_vm_nopage(vma, address); | |
+ return VM_FAULT_SIGBUS; | |
} | |
#ifdef __AGP__BUILTIN__ | |
@@ -3545,91 +3545,10 @@ static vm_nopage_ret_t vm_cant_nopage(struct vm_area_struct* vma, | |
(which is one or more pages in size) | |
*/ | |
-static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- if (type) *type = VM_FAULT_MINOR; | |
- return do_vm_shm_nopage(vma, address); | |
-} | |
- | |
-/* | |
- | |
- This routine is intended to remap addresses of a OpenGL context | |
- (which is one ore more pages in size) | |
- | |
-*/ | |
-static vm_nopage_ret_t vm_dma_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- if (type) *type = VM_FAULT_MINOR; | |
- return do_vm_dma_nopage(vma, address); | |
-} | |
- | |
-static vm_nopage_ret_t vm_kmap_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- if (type) *type = VM_FAULT_MINOR; | |
- return do_vm_kmap_nopage(vma, address); | |
-} | |
- | |
-static vm_nopage_ret_t vm_pcie_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- return do_vm_pcie_nopage(vma, address); | |
-} | |
- | |
-static vm_nopage_ret_t vm_gart_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- return do_vm_gart_nopage(vma, address); | |
-} | |
- | |
-#else /* LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,0) */ | |
- | |
-static vm_nopage_ret_t vm_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
-{ | |
- return do_vm_nopage(vma, address); | |
-} | |
- | |
-#ifdef __AGP__BUILTIN__ | |
-#ifdef __ia64__ | |
- | |
- | |
-static vm_nopage_ret_t vm_cant_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
-{ | |
- return do_vm_cant_nopage(vma, address); | |
-} | |
-#endif /* __ia64__ */ | |
-#endif /* __AGP__BUILTIN__ */ | |
- | |
-/* | |
- | |
- This function is called when a page of a mmap()'ed area is not currently | |
- visible in the specified VMA. | |
- Return value is the associated physical address for the requested page. | |
- (If not implemented, then the kernel default routine would allocate a new, | |
- zeroed page for servicing us) | |
- | |
- Possible errors: SIGBUS, OutOfMem | |
- | |
- This routine is intended to remap addresses of SHM SAREA | |
- (which is one or more pages in size) | |
- | |
- */ | |
-static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
+static int vm_shm_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_shm_nopage(vma, address); | |
+ return do_vm_shm_nopage(vma, vmf); | |
} | |
/* | |
@@ -3638,37 +3557,30 @@ static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma, | |
(which is one ore more pages in size) | |
*/ | |
-static vm_nopage_ret_t vm_dma_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
+static int vm_dma_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_dma_nopage(vma, address); | |
+ return do_vm_dma_nopage(vma, vmf); | |
} | |
-static vm_nopage_ret_t vm_kmap_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
+static int vm_kmap_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_kmap_nopage(vma, address); | |
+ return do_vm_kmap_nopage(vma, vmf); | |
} | |
-static vm_nopage_ret_t vm_pcie_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
+static int vm_pcie_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_pcie_nopage(vma, address); | |
+ return do_vm_pcie_nopage(vma, vmf); | |
} | |
-static vm_nopage_ret_t vm_gart_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
+static int vm_gart_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_gart_nopage(vma, address); | |
+ return do_vm_gart_nopage(vma, vmf); | |
} | |
- | |
-#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) */ | |
- | |
void* ATI_API_CALL __ke_vma_file_priv(struct vm_area_struct* vma) | |
{ | |
return vma->vm_file->private_data; | |
@@ -3718,7 +3630,7 @@ char* ATI_API_CALL __ke_vm_page_prot_str(struct vm_area_struct* vma, char* buf) | |
*(buf + i++) = pgprot & _PAGE_DIRTY ? 'd' : '-'; | |
*(buf + i++) = pgprot & _PAGE_PSE ? 'm' : 'k'; | |
*(buf + i++) = pgprot & _PAGE_GLOBAL ? 'g' : 'l'; | |
-#endif /* __i386__ */ | |
+#endif /* __i386__ */ | |
*(buf + i++) = 0; | |
return buf; | |
@@ -3747,9 +3659,9 @@ char *__ke_pte_phys_addr_str(pte_t pte, char *buf, __ke_dma_addr_t* phys_address | |
return buf; | |
} | |
-char* ATI_API_CALL __ke_vm_phys_addr_str(struct vm_area_struct* vma, | |
- char* buf, | |
- unsigned long virtual_addr, | |
+char* ATI_API_CALL __ke_vm_phys_addr_str(struct vm_area_struct* vma, | |
+ char* buf, | |
+ unsigned long virtual_addr, | |
__ke_dma_addr_t* phys_address) | |
{ | |
pgd_t* pgd_p; | |
@@ -3773,7 +3685,7 @@ void ip_drm_vm_close(struct vm_area_struct* vma) | |
static struct vm_operations_struct vm_ops = | |
{ | |
- nopage: vm_nopage, | |
+ fault: vm_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
@@ -3791,42 +3703,42 @@ static struct vm_operations_struct vm_cant_ops = | |
static struct vm_operations_struct vm_shm_ops = | |
{ | |
- nopage: vm_shm_nopage, | |
+ fault: do_vm_shm_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
static struct vm_operations_struct vm_pci_bq_ops = | |
{ | |
- nopage: vm_dma_nopage, | |
+ fault: vm_dma_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
static struct vm_operations_struct vm_ctx_ops = | |
{ | |
- nopage: vm_dma_nopage, | |
+ fault: vm_dma_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
-static struct vm_operations_struct vm_pcie_ops = | |
+static struct vm_operations_struct vm_pcie_ops = | |
{ | |
- nopage: vm_pcie_nopage, | |
+ fault: vm_pcie_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
static struct vm_operations_struct vm_kmap_ops = | |
{ | |
- nopage: vm_kmap_nopage, | |
+ fault: vm_kmap_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
static struct vm_operations_struct vm_gart_ops = | |
{ | |
- nopage: vm_gart_nopage, | |
+ fault: vm_gart_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
@@ -3835,14 +3747,14 @@ static struct vm_operations_struct vm_gart_ops = | |
#ifndef __ia64__ | |
static struct vm_operations_struct vm_agp_bq_ops = | |
{ | |
- nopage: vm_nopage, | |
+ fault: vm_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
-#else | |
+#else | |
static struct vm_operations_struct vm_cant_agp_bq_ops = | |
{ | |
- nopage: vm_cant_nopage, | |
+ fault: vm_cant_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
@@ -3877,19 +3789,19 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
#ifdef __i386__ | |
if (boot_cpu_data.x86 > 3) | |
{ | |
-#ifdef FIREGL_USWC_SUPPORT | |
+#ifdef FIREGL_USWC_SUPPORT | |
if (!firegl_pat_enabled) | |
-#endif | |
+#endif | |
{ | |
pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; | |
pgprot_val(vma->vm_page_prot) &= ~_PAGE_PWT; | |
} | |
-#ifdef FIREGL_USWC_SUPPORT | |
+#ifdef FIREGL_USWC_SUPPORT | |
else | |
{ | |
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
- } | |
-#endif | |
+ } | |
+#endif | |
} | |
#endif /* __i386__ */ | |
#ifdef __ia64__ | |
@@ -3908,7 +3820,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
} | |
break; | |
-#ifdef FIREGL_USWC_SUPPORT | |
+#ifdef FIREGL_USWC_SUPPORT | |
case __KE_ADPT_REG: | |
{ | |
#ifdef __ia64__ | |
@@ -3928,7 +3840,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
} | |
else | |
{ | |
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | |
+ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | |
} | |
} | |
#endif /* __i386__ */ | |
@@ -3947,7 +3859,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
vma->vm_ops = &vm_ops; | |
} | |
break; | |
-#endif | |
+#endif | |
case __KE_SHM: | |
vma->vm_flags |= VM_SHM | VM_RESERVED; /* Don't swap */ | |
@@ -3981,7 +3893,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
#ifdef __AGP__BUILTIN__ | |
case __KE_AGP: | |
- // if(dev->agp->cant_use_aperture == 1) | |
+ // if(dev->agp->cant_use_aperture == 1) | |
#ifdef __ia64__ | |
{ | |
/* | |
@@ -4005,9 +3917,9 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
if( firegl_pat_enabled ) | |
{ | |
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
- } | |
+ } | |
} | |
-#endif | |
+#endif | |
if (REMAP_PAGE_RANGE(vma,offset)) | |
{ | |
@@ -4024,8 +3936,8 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
#endif | |
break; | |
case __KE_AGP_BQS: | |
- // if(dev->agp->cant_use_aperture == 1) | |
-#ifdef __ia64__ | |
+ // if(dev->agp->cant_use_aperture == 1) | |
+#ifdef __ia64__ | |
{ | |
/* | |
* On some systems we can't talk to bus dma address from | |
@@ -4048,9 +3960,9 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
if( firegl_pat_enabled ) | |
{ | |
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
- } | |
+ } | |
} | |
-#endif | |
+#endif | |
if (REMAP_PAGE_RANGE(vma,offset)) | |
{ | |
@@ -4079,15 +3991,15 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
break; | |
case __KE_GART_USWC: | |
-#ifdef FIREGL_USWC_SUPPORT | |
+#ifdef FIREGL_USWC_SUPPORT | |
if (boot_cpu_data.x86 > 3) | |
{ | |
if( firegl_pat_enabled ) | |
{ | |
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
- } | |
+ } | |
} | |
-#endif | |
+#endif | |
// fall through | |
case __KE_GART_CACHEABLE: | |
vma->vm_flags |= VM_RESERVED; | |
@@ -4137,7 +4049,7 @@ extern struct _agp_memory *_X(agp_allocate_memory_phys_list)(size_t, u32, u64 *) | |
#define FIREGL_agp_backend_release _X(agp_backend_release) | |
#define FIREGL_agp_memory _X(agp_memory) | |
-unsigned int __ke_firegl_agpgart_inuse = AGPGART_INUSE_NONE; | |
+unsigned int __ke_firegl_agpgart_inuse = AGPGART_INUSE_NONE; | |
#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE) | |
/*****************************************************************************/ | |
@@ -4252,7 +4164,7 @@ static | |
int ATI_API_CALL __ke_agpgart_available(__ke_pci_dev_t *pcidev, int use_internal) | |
{ | |
drm_agp_module_stub = &drm_agp; | |
- __ke_firegl_agpgart_inuse = KERNEL26_AGPGART_INUSE; | |
+ __ke_firegl_agpgart_inuse = KERNEL26_AGPGART_INUSE; | |
{ | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) | |
firegl_pci_device = (struct pci_dev*)(void*)pcidev; | |
@@ -4305,7 +4217,7 @@ int ATI_API_CALL __ke_agp_available(__ke_pci_dev_t *pcidev, int use_internal) | |
} else { | |
available = __ke_firegl_agpgart_available(); | |
} | |
- | |
+ | |
return available; | |
} | |
@@ -4410,7 +4322,7 @@ void ATI_API_CALL __ke_agp_copy_info(__ke_agp_kern_info_t* info) | |
if (AGP_AVAILABLE(copy_info)) | |
{ | |
- struct agp_kern_info kern; | |
+ struct agp_kern_info kern; | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) | |
if (firegl_agp_bridge == NULL) | |
@@ -4508,7 +4420,7 @@ int ATI_API_CALL __ke_agp_enable(unsigned long mode) | |
int ATI_API_CALL __ke_read_agp_caps_registers(__ke_pci_dev_t* dev, unsigned int *caps) | |
{ | |
- return -EINVAL; | |
+ return -EINVAL; | |
} | |
int ATI_API_CALL __ke_agp_acquire(__ke_pci_dev_t* dev) | |
@@ -4550,9 +4462,9 @@ int ATI_API_CALL __ke_smp_processor_id(void) | |
/** \brief Runs a function on all other CPUs | |
* \param func_to_call function to be called on all other cpus | |
- * \return None | |
+ * \return None | |
*/ | |
-void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) | |
+void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) | |
{ | |
#ifdef CONFIG_SMP | |
smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 0, 1 ); | |
@@ -4659,7 +4571,7 @@ int ATI_API_CALL __ke_has_PSE(void) | |
int ATI_API_CALL KCL_is_pat_enabled(void) | |
{ | |
- return firegl_pat_enabled; | |
+ return firegl_pat_enabled; | |
} | |
static int ATI_API_CALL KCL_has_pat(void) | |
@@ -4675,7 +4587,7 @@ static void KCL_setup_pat(void *info) | |
{ | |
unsigned long cr0=0, cr4=0; | |
unsigned long flags; | |
- | |
+ | |
local_irq_save(flags); | |
cr0 = read_cr0() | 0x40000000; | |
write_cr0(cr0); | |
@@ -4706,7 +4618,7 @@ static void KCL_restore_pat(void *info) | |
{ | |
unsigned long cr0 = 0, cr4 = 0; | |
unsigned long flags; | |
- | |
+ | |
local_irq_save(flags); | |
cr0 = read_cr0() | 0x40000000; | |
write_cr0(cr0); | |
@@ -4718,7 +4630,7 @@ static void KCL_restore_pat(void *info) | |
write_cr4(cr4 & ~X86_CR4_PGE); | |
} | |
__flush_tlb(); | |
- | |
+ | |
wrmsr(MSR_IA32_CR_PAT, KCL_orig_pat[0], KCL_orig_pat[1]); | |
cr0 = read_cr0(); | |
@@ -4741,7 +4653,7 @@ static int ATI_API_CALL KCL_enable_pat(void) | |
__KE_INFO("USWC is disabled in module parameters\n"); | |
return 0; | |
} | |
- | |
+ | |
if (!KCL_has_pat()) | |
{ | |
return 0; | |
@@ -4751,13 +4663,13 @@ static int ATI_API_CALL KCL_enable_pat(void) | |
for ( i = 0; i < 2; i++ ) | |
{ | |
- for (j = 0; j < 4; j ++) | |
+ for (j = 0; j < 4; j ++) | |
{ | |
if (((KCL_orig_pat[i] >> (j * 8)) & 0xFF) == 1) | |
- { | |
+ { | |
__KE_ERROR("Pat entry %d is already configured\n", (i+1)*(j+1)); | |
return 0; | |
- } | |
+ } | |
} | |
} | |
@@ -4829,7 +4741,7 @@ typedef struct tag_kasContext_t | |
} kasContext_t; | |
/** \brief KAS context */ | |
-static kasContext_t kasContext; | |
+static kasContext_t kasContext; | |
/** \brief Kernel support required to enable KAS */ | |
#if defined(cmpxchg) && \ | |
@@ -5137,7 +5049,7 @@ unsigned int ATI_API_CALL KAS_Ih_Execute(KAS_IhRoutine_t ih_routine, | |
DBG_TRACE("Interrupt handler returned 0x%08X", ret); | |
kasSetExecutionLevel(orig_level); | |
- spin_unlock(&kasContext.lock_ih); | |
+ spin_unlock(&kasContext.lock_ih); | |
DBG_LEAVE("%d", ret); | |
return ret; | |
@@ -5412,7 +5324,7 @@ typedef struct tag_kasSlabCache_t | |
#endif | |
spinlock_t lock; /* OS spinlock object protecting the cache */ | |
unsigned int routine_type; /* Type of routine the cache might be accessed from */ | |
- char name[14]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ | |
+ char name[24]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ | |
} kasSlabCache_t; | |
/** \brief Return Slab Cache object size | |
@@ -5450,7 +5362,8 @@ unsigned int ATI_API_CALL KAS_SlabCache_Initialize(void* hSlabCache, | |
slabcache_obj->routine_type = access_type; | |
spin_lock_init(&(slabcache_obj->lock)); | |
- sprintf(slabcache_obj->name, "kas(%08X)", (unsigned int)slabcache_obj); | |
+ snprintf(slabcache_obj->name, sizeof(slabcache_obj->name), | |
+ "kas(%p)", slabcache_obj); | |
DBG_TRACE("creating slab object '%s'", slabcache_obj->name); | |
@@ -6366,7 +6279,7 @@ unsigned int ATI_API_CALL KAS_AtomicAddInt( | |
kas_xadd(puiDestination, iAdd, ret, "l"); | |
- return ret + iAdd; | |
+ return ret + iAdd; | |
#else | |
return 0xDEADC0DE; /* To make compiler happy */ | |
#endif | |
@@ -6449,7 +6362,7 @@ long ATI_API_CALL KAS_ScheduleTimeout(long n_jiffies) | |
#ifdef FIREGL_CF_SUPPORT | |
void *ATI_API_CALL KCL_lock_init() | |
-{ | |
+{ | |
spinlock_t *lock; | |
lock = kmalloc(sizeof(*lock), GFP_KERNEL); | |
@@ -6461,7 +6374,7 @@ void *ATI_API_CALL KCL_lock_init() | |
} | |
void ATI_API_CALL KCL_lock_deinit(void *plock) | |
-{ | |
+{ | |
if (plock == NULL) | |
{ | |
__KE_ERROR("plock is NULL\n"); | |
diff --git a/firegl_public.h b/firegl_public.h | |
index fc49d6e..8cc18ed 100644 | |
--- a/firegl_public.h | |
+++ b/firegl_public.h | |
@@ -78,7 +78,7 @@ do { \ | |
if (!pgd_present(*(pgd_p))) \ | |
{ \ | |
__KE_ERROR("FATAL ERROR: User queue buffer not present! (pgd)\n"); \ | |
- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
/* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
} \ | |
} while(0) | |
@@ -91,7 +91,7 @@ do { \ | |
if (!pud_present(*(pud_p))) \ | |
{ \ | |
__KE_ERROR("FATAL ERROR: User queue buffer not present! (pud)\n"); \ | |
- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
/* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
} \ | |
pmd_p = pmd_offset(pud_p, pte_linear); \ | |
@@ -111,7 +111,7 @@ do { \ | |
if (!pmd_present(*(pmd_p))) \ | |
{ \ | |
__KE_ERROR("FATAL ERROR: User queue buffer not present! (pmd)\n"); \ | |
- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
/* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
} \ | |
} while(0) | |
@@ -157,7 +157,7 @@ do { \ | |
if (!pte_present(pte)) \ | |
{ \ | |
__KE_ERROR("FATAL ERROR: User queue buffer not present! (pte)\n"); \ | |
- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
/* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
} \ | |
} while(0) | |
-- | |
1.5.6.rc2.45.gdc92c | |
EOT | |
# http://launchpadlibrarian.net/15305524/0004-Linux-2.6.26.x-kernels-support.patch | |
[ "$VER" = "8-6" ] && patch -p1 <<'EOT' | |
From d6ef03ff417eb001653c51112c79e709ba8eaec9 Mon Sep 17 00:00:00 2001 | |
From: =?utf-8?q?=C5=BDilvinas=20Valinskas?= <[email protected]> | |
Date: Sat, 14 Jun 2008 03:54:38 +0300 | |
Subject: [PATCH] Linux 2.6.26.x kernels support. | |
MIME-Version: 1.0 | |
Content-Type: text/plain; charset=utf-8 | |
Content-Transfer-Encoding: 8bit | |
o trailing white spaces/tabs removed. | |
o VMA ->nopage() removed, go for ->fault() | |
o compiles with warnings ... | |
o most importantly ... WORKS on 2.6.26-rc6/amd64! | |
Signed-off-by: Žilvinas Valinskas <[email protected]> | |
--- | |
firegl_public.c | 655 ++++++++++++++++++++++++------------------------------- | |
firegl_public.h | 8 +- | |
2 files changed, 288 insertions(+), 375 deletions(-) | |
diff --git a/firegl_public.c b/firegl_public.c | |
index d71700d..3c8e72a 100644 | |
--- a/firegl_public.c | |
+++ b/firegl_public.c | |
@@ -24,13 +24,13 @@ | |
// ============================================================ | |
#include <linux/version.h> | |
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) | |
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) | |
#error Kernel versions older than 2.6.0 are no longer supported by this module. | |
-#endif | |
+#endif | |
#include <linux/autoconf.h> | |
-#if !defined(CONFIG_X86_PC) | |
+#if !defined(CONFIG_X86_PC) | |
#if !defined(CONFIG_X86_64) | |
#if !defined(CONFIG_X86_VOYAGER) | |
#if !defined(CONFIG_X86_NUMAQ) | |
@@ -62,10 +62,10 @@ | |
* distribution would even include such a kernel patch. */ | |
#ifdef CONFIG_MEM_MIRROR | |
/* Prevent asm/mm_track.h from being included in subsequent | |
- * kernel headers as that would redefine CONFIG_MEM_MIRROR. */ | |
+ * kernel headers as that would redefine CONFIG_MEM_MIRROR. */ | |
#ifndef CONFIG_X86_64 | |
#define __I386_MMTRACK_H__ | |
-#define mm_track(ptep) | |
+#define mm_track(ptep) | |
#else | |
#define __X86_64_MMTRACK_H__ | |
#define mm_track_pte(ptep) | |
@@ -93,7 +93,7 @@ | |
#include <linux/kernel.h> | |
#include <linux/fs.h> | |
#include <linux/proc_fs.h> | |
-#include <linux/init.h> | |
+//#include <linux/init.h> | |
#include <linux/file.h> | |
#include <linux/pci.h> | |
#include <linux/wait.h> | |
@@ -151,8 +151,8 @@ | |
#include "linux/freezer.h" | |
#endif | |
-// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h. | |
-#ifndef UTS_RELEASE | |
+// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h. | |
+#ifndef UTS_RELEASE | |
#include <linux/utsrelease.h> | |
#endif | |
@@ -210,7 +210,7 @@ char* firegl = NULL; | |
int __ke_debuglevel = 0; | |
int __ke_moduleflags = 0; | |
-static struct pci_device_id fglrx_pci_table[] = | |
+static struct pci_device_id fglrx_pci_table[] = | |
{ | |
#define FGL_ASIC_ID(x) \ | |
{ \ | |
@@ -278,7 +278,7 @@ const unsigned long __ke_PAE_State = 1; | |
static int firegl_pat_enabled = 0; | |
static unsigned long KCL_pat[2]; | |
-static unsigned long KCL_orig_pat[2]; | |
+static unsigned long KCL_orig_pat[2]; | |
static int ATI_API_CALL KCL_enable_pat(void); | |
static void ATI_API_CALL KCL_disable_pat(void); | |
@@ -305,7 +305,7 @@ long ip_firegl_compat_ioctl(struct file* filp, unsigned int cmd, unsigned long a | |
#endif | |
__ke_ssize_t ip_firegl_read( struct file *filp, | |
- char *buf, | |
+ char *buf, | |
__ke_size_t size, | |
__ke_loff_t *off_ptr) | |
{ | |
@@ -313,7 +313,7 @@ __ke_ssize_t ip_firegl_read( struct file *filp, | |
} | |
__ke_ssize_t ip_firegl_write( struct file *filp, | |
- const char *buf, | |
+ const char *buf, | |
__ke_size_t size, | |
__ke_loff_t *off_ptr) | |
{ | |
@@ -449,34 +449,34 @@ READ_PROC_WRAP(firegl_debug_info) | |
READ_PROC_WRAP(firegl_bios_version) | |
READ_PROC_WRAP(firegl_interrupt_info) | |
-static int | |
+static int | |
firegl_interrupt_open_wrap( | |
- struct inode *inode, | |
- struct file *file) | |
+ struct inode *inode, | |
+ struct file *file) | |
{ | |
return firegl_interrupt_open(inode, file); | |
} | |
-static int | |
+static int | |
firegl_interrupt_release_wrap( | |
- struct inode *inode, | |
- struct file *file) | |
+ struct inode *inode, | |
+ struct file *file) | |
{ | |
return firegl_interrupt_release(inode, file); | |
} | |
-static ssize_t | |
+static ssize_t | |
firegl_interrupt_read_wrap( | |
- struct file *user_file, | |
- char __user *user_buf, | |
- size_t user_buf_size, | |
+ struct file *user_file, | |
+ char __user *user_buf, | |
+ size_t user_buf_size, | |
loff_t *user_file_pos) | |
{ | |
return (ssize_t) firegl_interrupt_read(user_file, user_buf, user_buf_size, user_file_pos); | |
} | |
-static unsigned int | |
-firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt) | |
+static unsigned int | |
+firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt) | |
{ | |
if(firegl_interrupt_poll(user_file, (__ke_poll_table*)pt)) | |
{ | |
@@ -488,11 +488,11 @@ firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt) | |
} | |
} | |
-static ssize_t | |
+static ssize_t | |
firegl_interrupt_write_wrap( | |
- struct file *user_file, | |
- const char __user *user_buf, | |
- size_t user_buf_size, | |
+ struct file *user_file, | |
+ const char __user *user_buf, | |
+ size_t user_buf_size, | |
loff_t *user_file_pos) | |
{ | |
return (ssize_t) firegl_interrupt_write(user_file, user_buf, user_buf_size, user_file_pos); | |
@@ -502,7 +502,7 @@ firegl_interrupt_write_wrap( | |
* \param func function to be wrapped | |
* \return None */ | |
-static void | |
+static void | |
firegl_smp_func_parameter_wrap( | |
void *func) | |
{ | |
@@ -517,7 +517,7 @@ static struct file_operations firegl_interrupt_file_ops = { | |
.write = firegl_interrupt_write_wrap | |
}; | |
-__ke_proc_list_t firegl_proc_list[] = | |
+__ke_proc_list_t firegl_proc_list[] = | |
{ | |
{ "name", drm_name_info_wrap, NULL}, | |
{ "mem", drm_mem_info_wrap, NULL}, | |
@@ -586,11 +586,11 @@ static struct proc_dir_entry *firegl_proc_init( device_t *dev, | |
{ | |
ent->proc_fops = (struct file_operations*)list->fops; | |
} | |
- | |
+ | |
{ | |
ent->data = (dev->pubdev.signature == FGL_DEVICE_SIGNATURE)? firegl_find_device(minor) : (dev); | |
} | |
- | |
+ | |
list++; | |
} | |
@@ -623,7 +623,7 @@ static int firegl_proc_cleanup( int minor, | |
{ | |
remove_proc_entry("dri", NULL); | |
__KE_DEBUG("remove proc dri. \n"); | |
- } | |
+ } | |
return 0; | |
} | |
@@ -661,12 +661,12 @@ static int firegl_stub_getminor(const char *name, struct file_operations *fops, | |
{ | |
int i; | |
int count = 0; | |
- | |
+ | |
__KE_DEBUG("firegl_stub_getminor: name=\"%s\"\n", name); | |
- for( i = 0; i < FIREGL_STUB_MAXCARDS; i++ ) | |
+ for( i = 0; i < FIREGL_STUB_MAXCARDS; i++ ) | |
{ | |
- if( !firegl_stub_list[i].fops ) | |
+ if( !firegl_stub_list[i].fops ) | |
{ | |
firegl_stub_list[i].name = name; | |
firegl_stub_list[i].fops = fops; | |
@@ -693,16 +693,16 @@ static int firegl_stub_putminor(int minor) | |
if (minor < 0 || minor >= FIREGL_STUB_MAXCARDS) | |
{ | |
return -1; | |
- } | |
+ } | |
firegl_proc_cleanup(minor, firegl_stub_root, firegl_stub_list[minor].dev_root, firegl_stub_list[minor].proclist); | |
firegl_stub_list[minor].name = NULL; | |
firegl_stub_list[minor].fops = NULL; | |
firegl_stub_list[minor].proclist = NULL; | |
- if( minor == (firegl_minors-1) ) | |
+ if( minor == (firegl_minors-1) ) | |
{ | |
unregister_chrdev(DRM_MAJOR, "drm"); | |
- } | |
+ } | |
return 0; | |
} | |
@@ -726,7 +726,7 @@ static int __init firegl_stub_register(const char *name, struct file_operations | |
return -1; | |
} else if(err == -EBUSY) { | |
- // the registering of the module's device has failed | |
+ // the registering of the module's device has failed | |
// because there was already some other drm module loaded. | |
__KE_DEBUG("register_chrdev() failed with -EBUSY\n"); | |
return -1; | |
@@ -758,7 +758,7 @@ static int fglrx_pci_probe(struct pci_dev *dev, const struct pci_device_id *id_t | |
/* Starting from 2.6.14, kernel has new struct defined for pm_message_t, | |
we have to handle this case separately. | |
2.6.11/12/13 kernels have pm_message_t defined as int and older kernels | |
- don't have pm_message_t defined. | |
+ don't have pm_message_t defined. | |
*/ | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) | |
static int fglrx_pci_suspend(struct pci_dev *pdev, pm_message_t pm_event) | |
@@ -794,9 +794,9 @@ static int fglrx_pci_suspend(struct pci_dev *pdev, u32 pm_event) | |
if (!ret) | |
{ | |
- | |
- // since privdev->pcidev is acquired in X server, use pdev | |
- // directly here to allow suspend/resume without X server start. | |
+ | |
+ // since privdev->pcidev is acquired in X server, use pdev | |
+ // directly here to allow suspend/resume without X server start. | |
firegl_pci_save_state((__ke_pci_dev_t*)pdev, privdev); | |
pci_disable_device(pdev); | |
PMSG_EVENT(pdev->dev.power.power_state) = state; | |
@@ -848,13 +848,13 @@ static int fglrx_pci_resume(struct pci_dev *pdev) | |
// before pci_set_master! | |
firegl_pci_restore_state((__ke_pci_dev_t*)pdev, privdev); | |
- if (pci_enable_device(pdev)) | |
+ if (pci_enable_device(pdev)) | |
{ | |
__KE_ERROR("Cannot enable PCI device.\n"); | |
- } | |
+ } | |
pci_set_master(pdev); | |
- | |
+ | |
firegl_cail_powerup(privdev); | |
if (PMSG_EVENT(pdev->dev.power.power_state) == PM_EVENT_SUSPEND) | |
@@ -865,7 +865,7 @@ static int fglrx_pci_resume(struct pci_dev *pdev) | |
return 0; | |
} | |
-static struct pci_driver fglrx_pci_driver = | |
+static struct pci_driver fglrx_pci_driver = | |
{ | |
.name = "fglrx_pci", | |
.id_table = fglrx_pci_table, | |
@@ -921,10 +921,10 @@ static int firegl_init_devices(__ke_device_t *pubdev) | |
{ | |
pid = (struct pci_device_id *) &fglrx_pci_table[i]; | |
pdev = NULL; | |
- while (( pdev = pci_get_subsys(pid->vendor, | |
- pid->device, | |
- PCI_ANY_ID, | |
- PCI_ANY_ID, | |
+ while (( pdev = pci_get_subsys(pid->vendor, | |
+ pid->device, | |
+ PCI_ANY_ID, | |
+ PCI_ANY_ID, | |
pdev)) != NULL) | |
{ | |
num_of_devices++; | |
@@ -934,7 +934,7 @@ static int firegl_init_devices(__ke_device_t *pubdev) | |
if (firegl_init_device_heads(num_of_devices)) | |
{ | |
- return -ENOMEM; | |
+ return -ENOMEM; | |
} | |
for (i=0; fglrx_pci_table[i].vendor != 0; i++) | |
@@ -942,15 +942,15 @@ static int firegl_init_devices(__ke_device_t *pubdev) | |
pid = (struct pci_device_id *) &fglrx_pci_table[i]; | |
pdev = NULL; | |
- while (( pdev = pci_get_subsys(pid->vendor, | |
- pid->device, | |
- PCI_ANY_ID, | |
- PCI_ANY_ID, | |
+ while (( pdev = pci_get_subsys(pid->vendor, | |
+ pid->device, | |
+ PCI_ANY_ID, | |
+ PCI_ANY_ID, | |
pdev)) != NULL) | |
{ | |
if ((ret_code = firegl_get_dev(pubdev, pdev))) | |
{ | |
- return ret_code; | |
+ return ret_code; | |
} | |
j++; | |
@@ -983,7 +983,7 @@ static int __init firegl_init_module(void) | |
// init global vars that are in fact constants | |
__ke_HZ = HZ; | |
-#ifdef _KE_SERIAL_DEBUG | |
+#ifdef _KE_SERIAL_DEBUG | |
__ke_SetSerialPort(); | |
#endif | |
@@ -995,11 +995,11 @@ static int __init firegl_init_module(void) | |
return retcode; | |
} | |
-#ifdef FIREGL_CF_SUPPORT | |
+#ifdef FIREGL_CF_SUPPORT | |
adapter_chain_init(); | |
cf_object_init(); | |
-#endif | |
- | |
+#endif | |
+ | |
// init DRM proc list | |
drm_proclist = kmalloc((DRM_PROC_ENTRIES + 1) * sizeof(__ke_proc_list_t), GFP_KERNEL); | |
if ( drm_proclist == NULL ) | |
@@ -1087,7 +1087,7 @@ static int __init firegl_init_module(void) | |
dev->pubdev.date, | |
firegl_minors); | |
- | |
+ | |
#ifdef FIREGL_POWER_MANAGEMENT | |
if (pci_register_driver (&fglrx_pci_driver) < 0) | |
{ | |
@@ -1117,12 +1117,12 @@ static void __exit firegl_cleanup_module(void) | |
{ | |
KCL_disable_pat(); | |
__KE_INFO("Disable PAT\n"); | |
- } | |
+ } | |
#endif // FIREGL_USWC_SUPPORT | |
for (i = 0; i < count; i++) | |
{ | |
- if ( firegl_stub_unregister(i) ) | |
+ if ( firegl_stub_unregister(i) ) | |
{ | |
__KE_ERROR("Cannot unload module on minor: %d\n", i); | |
} | |
@@ -1144,10 +1144,10 @@ static void __exit firegl_cleanup_module(void) | |
dev->pubdev.patchlevel, | |
dev->pubdev.date); | |
-#ifdef FIREGL_CF_SUPPORT | |
+#ifdef FIREGL_CF_SUPPORT | |
cf_object_cleanup(); | |
- adapter_chain_cleanup(); | |
-#endif // FIREGL_CF_SUPPORT | |
+ adapter_chain_cleanup(); | |
+#endif // FIREGL_CF_SUPPORT | |
firegl_private_cleanup (&dev->pubdev); | |
@@ -1225,18 +1225,18 @@ void ATI_API_CALL __ke_add_wait_queue(__ke_wait_queue_head_t* queue_head, __ke_w | |
void ATI_API_CALL __ke_remove_wait_queue(__ke_wait_queue_head_t* queue_head, __ke_wait_queue_t* entry) | |
{ | |
// current->state = TASK_RUNNING; | |
- remove_wait_queue((wait_queue_head_t*)(void *)queue_head, | |
+ remove_wait_queue((wait_queue_head_t*)(void *)queue_head, | |
(wait_queue_t*)(void *)entry); | |
} | |
void ATI_API_CALL __ke_init_waitqueue_head(__ke_wait_queue_head_t* queue_head) | |
{ | |
- init_waitqueue_head((wait_queue_head_t*)(void *)queue_head); | |
+ init_waitqueue_head((wait_queue_head_t*)(void *)queue_head); | |
} | |
void ATI_API_CALL __ke_wait_event_interruptible(__ke_wait_queue_head_t* queue_head, int condition) | |
{ | |
- wait_event_interruptible(*((wait_queue_head_t*)(void *)queue_head), condition); | |
+ wait_event_interruptible(*((wait_queue_head_t*)(void *)queue_head), condition); | |
} | |
void ATI_API_CALL __ke_poll_wait(struct file* filp, __ke_wait_queue_head_t* queue_head, __ke_poll_table* pt) | |
@@ -1247,13 +1247,13 @@ void ATI_API_CALL __ke_poll_wait(struct file* filp, __ke_wait_queue_head_t* queu | |
void ATI_API_CALL *__ke_asyncio_alloc_sema() | |
{ | |
int i; | |
- | |
+ | |
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
{ | |
if(fireglAsyncioSemaphoreUsed[i] != 1) | |
{ | |
fireglAsyncioSemaphoreUsed[i] = 1; | |
- | |
+ | |
return &(fireglAsyncioSemaphore[i]); | |
} | |
} | |
@@ -1263,7 +1263,7 @@ void ATI_API_CALL *__ke_asyncio_alloc_sema() | |
void ATI_API_CALL __ke_asyncio_free_sema(struct semaphore *pSema) | |
{ | |
int i; | |
- | |
+ | |
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
{ | |
if( &(fireglAsyncioSemaphore[i]) == pSema ) | |
@@ -1277,15 +1277,15 @@ void ATI_API_CALL __ke_asyncio_free_sema(struct semaphore *pSema) | |
void ATI_API_CALL __ke_asyncio_init_sema(void) | |
{ | |
int i; | |
- | |
+ | |
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
{ | |
fireglAsyncioSemaphoreUsed[i] = 0; | |
} | |
-} | |
+} | |
-int ATI_API_CALL __ke_fasync_helper( int fd, | |
- struct file *filep, | |
+int ATI_API_CALL __ke_fasync_helper( int fd, | |
+ struct file *filep, | |
int mode, | |
struct fasync_struct **pasync_queue) | |
{ | |
@@ -1352,33 +1352,33 @@ unsigned int ATI_API_CALL KCL_ProcessIsTerminated(unsigned int pid) | |
{ | |
struct task_struct *p; | |
int process_terminated = 1; | |
- | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
+ | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
rcu_read_lock(); | |
-#else | |
+#else | |
read_lock(&tasklist_lock); | |
-#endif | |
- p = find_task_by_pid( pid ); | |
- if (p) | |
+#endif | |
+ p = find_task_by_vpid( pid ); | |
+ if (p) | |
{ | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) | |
- if (p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD) | |
+ if (p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD) | |
#else | |
- if (!(p->flags & PF_EXITING)) | |
+ if (!(p->flags & PF_EXITING)) | |
#endif | |
{ | |
process_terminated = 0; | |
} | |
- } | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
+ } | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
rcu_read_unlock(); | |
-#else | |
+#else | |
read_unlock(&tasklist_lock); | |
-#endif | |
+#endif | |
return process_terminated; | |
} | |
-/** /brief Call global OS kernel task/thread scheduler | |
+/** /brief Call global OS kernel task/thread scheduler | |
* /return Nonzero if a system call was awakened by a signal | |
*/ | |
int ATI_API_CALL KCL_GetSignalStatus(void) | |
@@ -1432,15 +1432,15 @@ void ATI_API_CALL __ke_unblock_all_signals(void) | |
unblock_all_signals(); | |
} | |
-#if defined(__i386__) | |
+#if defined(__i386__) | |
#ifndef __HAVE_ARCH_CMPXCHG | |
-static inline | |
-unsigned long __fgl_cmpxchg(volatile void *ptr, unsigned long old, | |
- unsigned long new, int size) | |
-{ | |
- unsigned long prev; | |
- switch (size) { | |
- case 1: | |
+static inline | |
+unsigned long __fgl_cmpxchg(volatile void *ptr, unsigned long old, | |
+ unsigned long new, int size) | |
+{ | |
+ unsigned long prev; | |
+ switch (size) { | |
+ case 1: | |
__asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2" | |
: "=a"(prev) | |
: "q"(new), "m"(*__xg(ptr)), "0"(old) | |
@@ -1551,7 +1551,7 @@ struct inode* ATI_API_CALL __ke_get_file_inode(struct file* filp) | |
*/ | |
KCL_TYPE_Pid ATI_API_CALL KCL_GetPid(void) | |
{ | |
- return current->pid; | |
+ return current->pid; | |
} | |
/** /brief Return the current Thread Group ID | |
@@ -1559,7 +1559,7 @@ KCL_TYPE_Pid ATI_API_CALL KCL_GetPid(void) | |
*/ | |
KCL_TYPE_Pid ATI_API_CALL KCL_GetTgid(void) | |
{ | |
- return current->tgid; | |
+ return current->tgid; | |
} | |
/** /brief Return the effective user ID | |
@@ -1655,7 +1655,7 @@ static int KCL_MAP_KernelConfigParam[] = | |
1 | |
#else | |
0 | |
-#endif | |
+#endif | |
}; | |
/** /brief Check whether a kernel configuration parameter is defined | |
@@ -1718,13 +1718,13 @@ unsigned long ATI_API_CALL __ke_get_resource_start(__ke_pci_dev_t *dev, unsigned | |
#if defined(__x86_64__) || defined(__ia64__) | |
void* ATI_API_CALL __ke_pci_alloc_consistent(__ke_pci_dev_t* dev, int size, void *dma_handle) | |
{ | |
- return (pci_alloc_consistent( (struct pci_dev*)(void *)dev, size, dma_handle)); | |
+ return (pci_alloc_consistent( (struct pci_dev*)(void *)dev, size, dma_handle)); | |
} | |
void ATI_API_CALL __ke_pci_free_consistent(__ke_pci_dev_t* dev, int size, unsigned long cpu_addr, | |
unsigned int dma_handle) | |
{ | |
- pci_free_consistent( (struct pci_dev*)(void *)dev, size, (void *)cpu_addr, | |
+ pci_free_consistent( (struct pci_dev*)(void *)dev, size, (void *)cpu_addr, | |
(unsigned long)dma_handle); | |
} | |
#endif // __ia64__ | |
@@ -1748,7 +1748,7 @@ static int KCL_MAP_ErrorCode[] = | |
/** \brief This function maps OS independent error conditions to OS defined error codes | |
* \param errcode OS independent error condition code | |
- * \return OS kernel defined error code corresponding to the requested error condition | |
+ * \return OS kernel defined error code corresponding to the requested error condition | |
*/ | |
int ATI_API_CALL KCL_GetErrorCode(KCL_ENUM_ErrorCode errcode) | |
{ | |
@@ -1766,7 +1766,7 @@ int ATI_API_CALL KCL_GetErrorCode(KCL_ENUM_ErrorCode errcode) | |
int ATI_API_CALL firegl_get_user_ptr(u32 *src, void **dst) | |
{ | |
unsigned long temp; | |
- int err = get_user(temp, src); | |
+ int err = get_user(temp, src); | |
*dst = (void*) temp; | |
return err; | |
} | |
@@ -1906,7 +1906,7 @@ void ATI_API_CALL __ke_atomic_set(void* v, int val) | |
int ATI_API_CALL __ke_atomic_dec_and_test(void* v) | |
{ | |
- return atomic_dec_and_test((atomic_t*)v); | |
+ return atomic_dec_and_test((atomic_t*)v); | |
} | |
/*****************************************************************************/ | |
@@ -2006,19 +2006,19 @@ void ATI_API_CALL __ke_print_debug(const char* fmt, ...) | |
#endif | |
#ifdef _KE_SERIAL_DEBUG | |
-// To enable serial port debug message dumping,just define _KE_SERIAL_DEBUG in firegl_public.h file. | |
-// Connect two PC with a null modern serial cable. run Hyper ternimal on the remote machine. | |
-// It's useful to debug resume if network not works properly and serial port is not recovered | |
+// To enable serial port debug message dumping,just define _KE_SERIAL_DEBUG in firegl_public.h file. | |
+// Connect two PC with a null modern serial cable. run Hyper ternimal on the remote machine. | |
+// It's useful to debug resume if network not works properly and serial port is not recovered | |
// properly when fglrx resume hook is called... | |
- | |
- | |
+ | |
+ | |
#define SER_DATA_PORT 0x3f8 | |
#define SER_INT_CTRL_PORT SER_DATA_PORT + 1 | |
#define SER_INT_STAT_PORT SER_DATA_PORT + 2 | |
#define SER_LINE_CTRL_PORT SER_DATA_PORT + 3 | |
#define SER_MODEM_CTRL_PORT SER_DATA_PORT + 4 | |
#define SER_LINE_STAT_PORT SER_DATA_PORT + 5 | |
- | |
+ | |
void ATI_API_CALL __ke_printc(char c) | |
{ | |
while((inb(SER_LINE_STAT_PORT) & 0x20) == 0 ); //wait until Transmitter Holding Register Empty | |
@@ -2028,7 +2028,7 @@ void ATI_API_CALL __ke_printc(char c) | |
void ATI_API_CALL __ke_printstr(const char *str) | |
{ | |
int len = strlen(str); | |
- while(len--)__ke_printc(*str++); | |
+ while(len--)__ke_printc(*str++); | |
} | |
int ATI_API_CALL __ke_SerPrint(const char *format, ...) | |
@@ -2041,26 +2041,26 @@ int ATI_API_CALL __ke_SerPrint(const char *format, ...) | |
vsprintf(buffer, format, ap); | |
va_end(ap); | |
- | |
+ | |
__ke_printstr(buffer); | |
- | |
+ | |
return 0; | |
} | |
void ATI_API_CALL __ke_SetSerialPort() | |
{ | |
DRM_INFO("setup serial port\n"); | |
- outb(0x00, SER_INT_CTRL_PORT); // Turn off interrupts | |
- | |
- outb(0x80, SER_LINE_CTRL_PORT); // SET DLAB ON | |
- outb(0x01, SER_DATA_PORT); // Set Baud rate - Divisor Latch Low Byte | |
- // 0x01 = 115,200 ,0x02 = 57,600, 0x06 = 19,200 BPS, 0x0C = 9,600 BPS | |
- outb(0x00, SER_DATA_PORT + 1); // Set Baud rate - Divisor Latch High Byte | |
- outb(0x03, SER_LINE_CTRL_PORT); // reset DLAB ,8 Bits, No Parity, 1 Stop Bit | |
- outb(0xC7, SER_DATA_PORT + 2); // FIFO Control Register | |
+ outb(0x00, SER_INT_CTRL_PORT); // Turn off interrupts | |
+ | |
+ outb(0x80, SER_LINE_CTRL_PORT); // SET DLAB ON | |
+ outb(0x01, SER_DATA_PORT); // Set Baud rate - Divisor Latch Low Byte | |
+ // 0x01 = 115,200 ,0x02 = 57,600, 0x06 = 19,200 BPS, 0x0C = 9,600 BPS | |
+ outb(0x00, SER_DATA_PORT + 1); // Set Baud rate - Divisor Latch High Byte | |
+ outb(0x03, SER_LINE_CTRL_PORT); // reset DLAB ,8 Bits, No Parity, 1 Stop Bit | |
+ outb(0xC7, SER_DATA_PORT + 2); // FIFO Control Register | |
outb(0x0b, SER_DATA_PORT + 4); // Turn on DTR, RTS, and OUT2 | |
- | |
+ | |
__ke_printstr("serial port 0x3f8 is set ready for message print out \n"); | |
-} | |
+} | |
#endif | |
/** \brief Get number of available RAM pages | |
@@ -2241,7 +2241,7 @@ void *ATI_API_CALL __ke_vmalloc_to_addr(void *vmalloc_addr) | |
struct page *page = NULL; | |
page = vmalloc_to_page(vmalloc_addr); | |
- if(page == NULL) | |
+ if(page == NULL) | |
{ | |
__KE_ERROR("__ke_vmalloc_to_addr: invalid page!"); | |
return NULL; | |
@@ -2283,7 +2283,7 @@ int ATI_API_CALL __ke_do_munmap(unsigned long addr, unsigned long len) | |
retcode = do_munmap(current->mm, | |
addr, | |
len); | |
-#endif | |
+#endif | |
up_write(¤t->mm->mmap_sem); | |
return retcode; | |
} | |
@@ -2327,10 +2327,10 @@ long long ATI_API_CALL __divdi3(long long n, long long base) | |
minus = !minus; | |
} | |
else | |
- { | |
+ { | |
ubase = base; | |
} | |
- | |
+ | |
do_div(un, ubase); | |
return (minus? -un : un); | |
} | |
@@ -2360,7 +2360,7 @@ long long ATI_API_CALL __moddi3(long long n, long long base) | |
else | |
{ | |
ubase = base; | |
- } | |
+ } | |
rem = do_div(un, ubase); | |
return (minus? -rem : rem); | |
@@ -2391,7 +2391,7 @@ void* ATI_API_CALL __ke_vmap(unsigned long *pagelist, unsigned int count) | |
vaddr = (void *) vmap(pages, count); | |
#else | |
#ifdef VM_MAP | |
- vaddr = (void *) vmap(pages, count, VM_MAP, PAGE_KERNEL); | |
+ vaddr = (void *) vmap(pages, count, VM_MAP, PAGE_KERNEL); | |
#else | |
vaddr = (void *) vmap(pages, count, 0, PAGE_KERNEL); | |
#endif | |
@@ -2447,7 +2447,7 @@ void ATI_API_CALL __ke_vunmap(void* addr) | |
} | |
#endif // defined(VM_MAP) || defined(vunmap) | |
-/** \brief Reserve a memory page | |
+/** \brief Reserve a memory page | |
* | |
* \param pt Kernel logical address of the page | |
* | |
@@ -2459,7 +2459,7 @@ void ATI_API_CALL KCL_ReserveMemPage(void* pt) | |
SetPageReserved(virt_to_page((unsigned long)pt)); | |
} | |
-/** \brief Unreserve a memory page | |
+/** \brief Unreserve a memory page | |
* | |
* \param pt Kernel logical address of the page | |
* | |
@@ -2471,7 +2471,7 @@ void ATI_API_CALL KCL_UnreserveMemPage(void* pt) | |
ClearPageReserved(virt_to_page((unsigned long)pt)); | |
} | |
-/** \brief Lock a memory page | |
+/** \brief Lock a memory page | |
* | |
* \param pt Kernel logical address of the page | |
* | |
@@ -2480,14 +2480,14 @@ void ATI_API_CALL KCL_UnreserveMemPage(void* pt) | |
*/ | |
void ATI_API_CALL KCL_LockMemPage(void* pt) | |
{ | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
SetPageReserved(virt_to_page((unsigned long)pt)); | |
#else | |
lock_page(virt_to_page((unsigned long)pt)); | |
#endif | |
} | |
-/** \brief Unlock a memory page | |
+/** \brief Unlock a memory page | |
* | |
* \param pt Kernel logical address of the page | |
* | |
@@ -2496,7 +2496,7 @@ void ATI_API_CALL KCL_LockMemPage(void* pt) | |
*/ | |
void ATI_API_CALL KCL_UnlockMemPage(void* pt) | |
{ | |
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
ClearPageReserved(virt_to_page((unsigned long)pt)); | |
#else | |
unlock_page(virt_to_page((unsigned long)pt)); | |
@@ -2521,7 +2521,7 @@ void* ATI_API_CALL __ke_get_vmptr( struct _agp_memory* memory ) | |
return memory->vmptr; | |
} | |
#endif | |
- | |
+ | |
void* ATI_API_CALL __ke_ioremap(unsigned long offset, unsigned long size) | |
{ | |
return ioremap(offset, size); | |
@@ -2592,7 +2592,7 @@ void ATI_API_CALL KCL_flush_tlb_onepage(struct vm_area_struct * vma, unsigned lo | |
{ | |
/*Some kernel developer removed the export of symbol "flush_tlb_page" on 2.6.25 x86_64 SMP kernel. | |
Define a simple version here.*/ | |
-#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
+#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
on_each_cpu(KCL_flush_tlb_one, &va, 1, 1); | |
#else | |
flush_tlb_page(vma, va); | |
@@ -2649,9 +2649,9 @@ void ATI_API_CALL __ke_put_vm_page_table(unsigned long page_addr) | |
static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) | |
{ | |
int ret = 0; | |
- | |
+ | |
DBG_ENTER("0x%08X, 0x%08X, 0x%08X->0x%08X", vma, addr, ptep, *ptep); | |
- | |
+ | |
if (pte_dirty(*ptep)) | |
{ | |
#ifdef __x86_64__ | |
@@ -2666,19 +2666,19 @@ static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned lo | |
{ | |
pte_update(vma->vm_mm, addr, ptep); | |
} | |
-#endif | |
+#endif | |
} | |
DBG_TRACE("0x%08X->0x%08X", ptep, *ptep); | |
- | |
+ | |
// Flush Translation Lookaside Buffers | |
if (ret) | |
{ | |
KCL_flush_tlb_onepage(vma,addr); | |
} | |
- | |
+ | |
DBG_LEAVE("%d", ret); | |
- | |
+ | |
return ret; | |
} | |
#endif | |
@@ -2705,7 +2705,7 @@ static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned lo | |
* the virtual address | |
* | |
* \param mm Pointer to the memory descriptor structure | |
- * \param virtual_addr Virtual address | |
+ * \param virtual_addr Virtual address | |
* | |
* \return Old value of the "dirty" flag on success or negative on error | |
* | |
@@ -2961,7 +2961,7 @@ int ATI_API_CALL __ke_config_mtrr(void) | |
return 0; | |
#else | |
return 1; | |
-#endif | |
+#endif | |
#else /* !CONFIG_MTRR */ | |
return 0; | |
#endif /* !CONFIG_MTRR */ | |
@@ -2987,7 +2987,7 @@ int ATI_API_CALL __ke_mtrr_del(int reg, unsigned long base, unsigned long size) | |
int ATI_API_CALL __ke_has_vmap(void) | |
{ | |
-// We disable vmap for 2.4.x kernel to work around the big memory( > 4GB ) issue. | |
+// We disable vmap for 2.4.x kernel to work around the big memory( > 4GB ) issue. | |
#if defined(VM_MAP) || defined(vunmap) | |
return 1; | |
#else | |
@@ -3009,7 +3009,7 @@ int ATI_API_CALL __ke_no_iommu(void) | |
{ | |
return 0; | |
} | |
-#endif | |
+#endif | |
/*****************************************************************************/ | |
@@ -3066,7 +3066,7 @@ unsigned int ATI_API_CALL __ke_pci_get_func(__ke_pci_dev_t* pcidev) | |
{ | |
struct pci_dev* dev = (struct pci_dev*)pcidev; | |
return PCI_FUNC(dev->devfn); | |
-} | |
+} | |
__ke_dma_addr_t ATI_API_CALL __ke_pci_map_single (__ke_pci_dev_t *pdev, void *buffer, __ke_size_t size, int direction) | |
{ | |
@@ -3153,7 +3153,7 @@ static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1) | |
return IRQ_HANDLED; | |
} | |
#endif | |
- | |
+ | |
int ATI_API_CALL __ke_request_irq(unsigned int irq, | |
void (*ATI_API_CALL handler)(int, void *, void *), | |
const char *dev_name, void *dev_id) | |
@@ -3166,7 +3166,7 @@ int ATI_API_CALL __ke_request_irq(unsigned int irq, | |
SA_SHIRQ, | |
#else | |
IRQF_SHARED, | |
-#endif | |
+#endif | |
dev_name, | |
dev_id); | |
} | |
@@ -3203,12 +3203,12 @@ int ATI_API_CALL __ke_agp_memory_get_page_count(struct _agp_memory* agpmem) | |
return (int)(agpmem->page_count); | |
} | |
-void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem, | |
+void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem, | |
unsigned long **memory_ptr) | |
{ | |
__KE_DEBUG("[%s] agpmem=0x%016lx agpmem->memory=0x%016lx [0]=0x%016x", | |
- __FUNCTION__, | |
- (unsigned long)agpmem, | |
+ __FUNCTION__, | |
+ (unsigned long)agpmem, | |
(unsigned long)agpmem->memory, | |
(agpmem->memory)[0]); | |
@@ -3217,18 +3217,9 @@ void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem, | |
/*****************************************************************************/ | |
-#ifndef NOPAGE_SIGBUS | |
-#define NOPAGE_SIGBUS 0 | |
-#endif /* !NOPAGE_SIGBUS */ | |
- | |
typedef struct page mem_map_t; | |
typedef mem_map_t *vm_nopage_ret_t; | |
-static __inline__ vm_nopage_ret_t do_vm_nopage(struct vm_area_struct* vma, | |
- unsigned long address) | |
-{ | |
- return 0; /* Disallow mremap */ | |
-} | |
#ifdef __AGP__BUILTIN__ | |
#ifdef __ia64__ | |
@@ -3253,19 +3244,20 @@ static __inline__ vm_nopage_ret_t do_vm_cant_nopage(struct vm_area_struct* vma, | |
return page; | |
} | |
} | |
- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
+ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
} | |
#endif /* __ia64__ */ | |
#endif /* __AGP__BUILTIN__ */ | |
-static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
- unsigned long address) | |
+static __inline__ int do_vm_shm_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
pgd_t* pgd_p; | |
pmd_t* pmd_p; | |
pte_t pte; | |
+ unsigned long address = (unsigned long)vmf->virtual_address; | |
unsigned long vma_offset; | |
unsigned long pte_linear; | |
mem_map_t* pMmPage; | |
@@ -3294,7 +3286,7 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
(unsigned long)__ke_vm_offset(vma)); | |
if (address > vma->vm_end) | |
- return NOPAGE_SIGBUS; /* address is out of range */ | |
+ return VM_FAULT_SIGBUS; /* address is out of range */ | |
/* Calculate offset into VMA */ | |
vma_offset = address - vma->vm_start; | |
@@ -3306,7 +3298,7 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
pte_linear = firegl_get_addr_from_vm(vma); | |
if (!pte_linear) | |
{ | |
- return NOPAGE_SIGBUS; /* bad address */ | |
+ return VM_FAULT_SIGBUS; /* bad address */ | |
} | |
pte_linear += vma_offset; | |
@@ -3334,7 +3326,9 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
// __KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", | |
// address, page_address(pMmPage)); | |
- return pMmPage; | |
+ vmf->page = pMmPage; | |
+ | |
+ return 0; | |
} | |
/* | |
@@ -3343,8 +3337,10 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
(which is one ore more pages in size) | |
*/ | |
-static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, unsigned long address) | |
+static __inline__ int do_vm_dma_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
+ unsigned long address = (unsigned long) vmf->virtual_address; | |
unsigned long kaddr; | |
mem_map_t* pMmPage; | |
@@ -3360,7 +3356,7 @@ static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, u | |
kaddr = firegl_get_addr_from_vm(vma); | |
if (!kaddr) | |
{ | |
- return NOPAGE_SIGBUS; /* bad address */ | |
+ return VM_FAULT_SIGBUS; /* bad address */ | |
} | |
kaddr += (address - vma->vm_start); | |
@@ -3372,19 +3368,23 @@ static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, u | |
// with drm_alloc_pages, which marks all pages as reserved. Reserved | |
// pages' usage count is not decremented by the kernel during unmap!!! | |
// | |
- // For kernel >= 2.6.15, We should reenable this, because the VM sub-system | |
- // will decrement the pages' usage count even for the pages marked as reserved | |
+ // For kernel >= 2.6.15, We should reenable this, because the VM sub-system | |
+ // will decrement the pages' usage count even for the pages marked as reserved | |
// - MC. | |
get_page(pMmPage); /* inc usage count of page */ | |
#endif | |
__KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", | |
address, page_address(pMmPage)); | |
- return pMmPage; | |
+ vmf->page = pMmPage; | |
+ | |
+ return 0; | |
} | |
-static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma, unsigned long address) | |
+static __inline__ int do_vm_kmap_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
+ unsigned long address = (unsigned long) vmf->virtual_address; | |
unsigned long kaddr; | |
mem_map_t* pMmPage; | |
@@ -3394,13 +3394,14 @@ static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma, | |
if ((pMmPage = (mem_map_t*) firegl_get_pagetable_page_from_vm(vma))) | |
{ | |
get_page(pMmPage); | |
- return pMmPage; | |
+ vmf->page = pMmPage; | |
+ return 0; | |
} | |
kaddr = firegl_get_addr_from_vm(vma); | |
if (!kaddr) | |
{ | |
- return NOPAGE_SIGBUS; /* bad address */ | |
+ return VM_FAULT_SIGBUS; /* bad address */ | |
} | |
kaddr += (address - vma->vm_start); | |
@@ -3413,50 +3414,52 @@ static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma, | |
__KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", address, page_address(pMmPage)); | |
- return pMmPage; | |
+ vmf->page = pMmPage; | |
+ return 0; | |
} | |
-/** | |
+/** | |
** | |
- ** This routine is intented to locate the page table through the | |
+ ** This routine is intented to locate the page table through the | |
** pagelist table created earlier in dev-> pcie | |
**/ | |
-static __inline__ vm_nopage_ret_t do_vm_pcie_nopage(struct vm_area_struct* vma, | |
- unsigned long address) | |
+static __inline__ int do_vm_pcie_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
+ unsigned long address = (unsigned long)vmf->virtual_address; | |
unsigned long vma_offset; | |
- unsigned long i; | |
+ unsigned long i; | |
mem_map_t* pMmPage; | |
struct firegl_pcie_mem* pciemem; | |
unsigned long* pagelist; | |
- | |
+ | |
drm_device_t *dev = (drm_device_t *)firegl_get_dev_from_vm(vma); | |
if (dev == NULL) | |
{ | |
__KE_ERROR("dev is NULL\n"); | |
- return NOPAGE_SIGBUS; | |
+ return VM_FAULT_SIGBUS; | |
} | |
if (address > vma->vm_end) | |
{ | |
__KE_ERROR("address out of range\n"); | |
- return NOPAGE_SIGBUS; /* address is out of range */ | |
+ return VM_FAULT_SIGBUS; /* address is out of range */ | |
} | |
pciemem = firegl_get_pciemem_from_addr ( vma, address); | |
if (pciemem == NULL) | |
{ | |
__KE_ERROR("No pciemem found! \n"); | |
- return NOPAGE_SIGBUS; | |
- } | |
+ return VM_FAULT_SIGBUS; | |
+ } | |
pagelist = firegl_get_pagelist_from_vm(vma); | |
- if (pagelist == NULL) | |
+ if (pagelist == NULL) | |
{ | |
__KE_ERROR("No pagelist! \n"); | |
- return NOPAGE_SIGBUS; | |
+ return VM_FAULT_SIGBUS; | |
} | |
- | |
+ | |
/** Find offset in vma */ | |
vma_offset = address - vma->vm_start; | |
/** Which entry in the pagelist */ | |
@@ -3468,15 +3471,17 @@ static __inline__ vm_nopage_ret_t do_vm_pcie_nopage(struct vm_area_struct* vma, | |
if (page_address(pMmPage) == 0x0) | |
{ | |
__KE_ERROR("Invalid page address\n"); | |
- return NOPAGE_SIGBUS; | |
+ return VM_FAULT_SIGBUS; | |
} | |
- return pMmPage; | |
+ | |
+ vmf->page = pMmPage; | |
+ return 0; | |
} | |
-static __inline__ vm_nopage_ret_t do_vm_gart_nopage(struct vm_area_struct* vma, | |
- unsigned long address) | |
+static __inline__ int do_vm_gart_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- | |
+ unsigned long address = (unsigned long) vmf->virtual_address; | |
unsigned long page_addr; | |
unsigned long offset; | |
struct page *page; | |
@@ -3484,36 +3489,31 @@ static __inline__ vm_nopage_ret_t do_vm_gart_nopage(struct vm_area_struct* vma, | |
if (address > vma->vm_end) | |
{ | |
__KE_ERROR("Invalid virtual address\n"); | |
- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
- } | |
+ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
+ } | |
offset = address - vma->vm_start; | |
-#ifdef FIREGL_CF_SUPPORT | |
+#ifdef FIREGL_CF_SUPPORT | |
page_addr = mc_heap_get_page_addr(vma, offset); | |
#else | |
page_addr = firegl_cmmqs_get_pageaddr_from_vm(vma, offset); | |
-#endif | |
+#endif | |
if( !page_addr) | |
{ | |
__KE_ERROR("Invalid page address\n"); | |
- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
+ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
} | |
page = virt_to_page(page_addr); | |
get_page(page); | |
- return page; | |
+ vmf->page = page; | |
+ return 0; | |
} | |
- | |
- | |
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) | |
- | |
-static vm_nopage_ret_t vm_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
+static int vm_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- if (type) *type = VM_FAULT_MINOR; | |
- return do_vm_nopage(vma, address); | |
+ return VM_FAULT_SIGBUS; | |
} | |
#ifdef __AGP__BUILTIN__ | |
@@ -3545,91 +3545,10 @@ static vm_nopage_ret_t vm_cant_nopage(struct vm_area_struct* vma, | |
(which is one or more pages in size) | |
*/ | |
-static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- if (type) *type = VM_FAULT_MINOR; | |
- return do_vm_shm_nopage(vma, address); | |
-} | |
- | |
-/* | |
- | |
- This routine is intended to remap addresses of a OpenGL context | |
- (which is one ore more pages in size) | |
- | |
-*/ | |
-static vm_nopage_ret_t vm_dma_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- if (type) *type = VM_FAULT_MINOR; | |
- return do_vm_dma_nopage(vma, address); | |
-} | |
- | |
-static vm_nopage_ret_t vm_kmap_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- if (type) *type = VM_FAULT_MINOR; | |
- return do_vm_kmap_nopage(vma, address); | |
-} | |
- | |
-static vm_nopage_ret_t vm_pcie_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- return do_vm_pcie_nopage(vma, address); | |
-} | |
- | |
-static vm_nopage_ret_t vm_gart_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
-{ | |
- return do_vm_gart_nopage(vma, address); | |
-} | |
- | |
-#else /* LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,0) */ | |
- | |
-static vm_nopage_ret_t vm_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
-{ | |
- return do_vm_nopage(vma, address); | |
-} | |
- | |
-#ifdef __AGP__BUILTIN__ | |
-#ifdef __ia64__ | |
- | |
- | |
-static vm_nopage_ret_t vm_cant_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
-{ | |
- return do_vm_cant_nopage(vma, address); | |
-} | |
-#endif /* __ia64__ */ | |
-#endif /* __AGP__BUILTIN__ */ | |
- | |
-/* | |
- | |
- This function is called when a page of a mmap()'ed area is not currently | |
- visible in the specified VMA. | |
- Return value is the associated physical address for the requested page. | |
- (If not implemented, then the kernel default routine would allocate a new, | |
- zeroed page for servicing us) | |
- | |
- Possible errors: SIGBUS, OutOfMem | |
- | |
- This routine is intended to remap addresses of SHM SAREA | |
- (which is one or more pages in size) | |
- | |
- */ | |
-static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
+static int vm_shm_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_shm_nopage(vma, address); | |
+ return do_vm_shm_nopage(vma, vmf); | |
} | |
/* | |
@@ -3638,37 +3557,30 @@ static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma, | |
(which is one ore more pages in size) | |
*/ | |
-static vm_nopage_ret_t vm_dma_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
+static int vm_dma_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_dma_nopage(vma, address); | |
+ return do_vm_dma_nopage(vma, vmf); | |
} | |
-static vm_nopage_ret_t vm_kmap_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
+static int vm_kmap_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_kmap_nopage(vma, address); | |
+ return do_vm_kmap_nopage(vma, vmf); | |
} | |
-static vm_nopage_ret_t vm_pcie_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int write_access) | |
+static int vm_pcie_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_pcie_nopage(vma, address); | |
+ return do_vm_pcie_nopage(vma, vmf); | |
} | |
-static vm_nopage_ret_t vm_gart_nopage(struct vm_area_struct* vma, | |
- unsigned long address, | |
- int *type) | |
+static int vm_gart_nopage(struct vm_area_struct* vma, | |
+ struct vm_fault *vmf) | |
{ | |
- return do_vm_gart_nopage(vma, address); | |
+ return do_vm_gart_nopage(vma, vmf); | |
} | |
- | |
-#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) */ | |
- | |
void* ATI_API_CALL __ke_vma_file_priv(struct vm_area_struct* vma) | |
{ | |
return vma->vm_file->private_data; | |
@@ -3718,7 +3630,7 @@ char* ATI_API_CALL __ke_vm_page_prot_str(struct vm_area_struct* vma, char* buf) | |
*(buf + i++) = pgprot & _PAGE_DIRTY ? 'd' : '-'; | |
*(buf + i++) = pgprot & _PAGE_PSE ? 'm' : 'k'; | |
*(buf + i++) = pgprot & _PAGE_GLOBAL ? 'g' : 'l'; | |
-#endif /* __i386__ */ | |
+#endif /* __i386__ */ | |
*(buf + i++) = 0; | |
return buf; | |
@@ -3747,9 +3659,9 @@ char *__ke_pte_phys_addr_str(pte_t pte, char *buf, __ke_dma_addr_t* phys_address | |
return buf; | |
} | |
-char* ATI_API_CALL __ke_vm_phys_addr_str(struct vm_area_struct* vma, | |
- char* buf, | |
- unsigned long virtual_addr, | |
+char* ATI_API_CALL __ke_vm_phys_addr_str(struct vm_area_struct* vma, | |
+ char* buf, | |
+ unsigned long virtual_addr, | |
__ke_dma_addr_t* phys_address) | |
{ | |
pgd_t* pgd_p; | |
@@ -3773,7 +3685,7 @@ void ip_drm_vm_close(struct vm_area_struct* vma) | |
static struct vm_operations_struct vm_ops = | |
{ | |
- nopage: vm_nopage, | |
+ fault: vm_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
@@ -3791,42 +3703,42 @@ static struct vm_operations_struct vm_cant_ops = | |
static struct vm_operations_struct vm_shm_ops = | |
{ | |
- nopage: vm_shm_nopage, | |
+ fault: do_vm_shm_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
static struct vm_operations_struct vm_pci_bq_ops = | |
{ | |
- nopage: vm_dma_nopage, | |
+ fault: vm_dma_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
static struct vm_operations_struct vm_ctx_ops = | |
{ | |
- nopage: vm_dma_nopage, | |
+ fault: vm_dma_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
-static struct vm_operations_struct vm_pcie_ops = | |
+static struct vm_operations_struct vm_pcie_ops = | |
{ | |
- nopage: vm_pcie_nopage, | |
+ fault: vm_pcie_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
static struct vm_operations_struct vm_kmap_ops = | |
{ | |
- nopage: vm_kmap_nopage, | |
+ fault: vm_kmap_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
static struct vm_operations_struct vm_gart_ops = | |
{ | |
- nopage: vm_gart_nopage, | |
+ fault: vm_gart_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
@@ -3835,14 +3747,14 @@ static struct vm_operations_struct vm_gart_ops = | |
#ifndef __ia64__ | |
static struct vm_operations_struct vm_agp_bq_ops = | |
{ | |
- nopage: vm_nopage, | |
+ fault: vm_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
-#else | |
+#else | |
static struct vm_operations_struct vm_cant_agp_bq_ops = | |
{ | |
- nopage: vm_cant_nopage, | |
+ fault: vm_cant_nopage, | |
open: ip_drm_vm_open, | |
close: ip_drm_vm_close, | |
}; | |
@@ -3877,19 +3789,19 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
#ifdef __i386__ | |
if (boot_cpu_data.x86 > 3) | |
{ | |
-#ifdef FIREGL_USWC_SUPPORT | |
+#ifdef FIREGL_USWC_SUPPORT | |
if (!firegl_pat_enabled) | |
-#endif | |
+#endif | |
{ | |
pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; | |
pgprot_val(vma->vm_page_prot) &= ~_PAGE_PWT; | |
} | |
-#ifdef FIREGL_USWC_SUPPORT | |
+#ifdef FIREGL_USWC_SUPPORT | |
else | |
{ | |
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
- } | |
-#endif | |
+ } | |
+#endif | |
} | |
#endif /* __i386__ */ | |
#ifdef __ia64__ | |
@@ -3908,7 +3820,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
} | |
break; | |
-#ifdef FIREGL_USWC_SUPPORT | |
+#ifdef FIREGL_USWC_SUPPORT | |
case __KE_ADPT_REG: | |
{ | |
#ifdef __ia64__ | |
@@ -3928,7 +3840,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
} | |
else | |
{ | |
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | |
+ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | |
} | |
} | |
#endif /* __i386__ */ | |
@@ -3947,7 +3859,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
vma->vm_ops = &vm_ops; | |
} | |
break; | |
-#endif | |
+#endif | |
case __KE_SHM: | |
vma->vm_flags |= VM_SHM | VM_RESERVED; /* Don't swap */ | |
@@ -3981,7 +3893,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
#ifdef __AGP__BUILTIN__ | |
case __KE_AGP: | |
- // if(dev->agp->cant_use_aperture == 1) | |
+ // if(dev->agp->cant_use_aperture == 1) | |
#ifdef __ia64__ | |
{ | |
/* | |
@@ -4005,9 +3917,9 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
if( firegl_pat_enabled ) | |
{ | |
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
- } | |
+ } | |
} | |
-#endif | |
+#endif | |
if (REMAP_PAGE_RANGE(vma,offset)) | |
{ | |
@@ -4024,8 +3936,8 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
#endif | |
break; | |
case __KE_AGP_BQS: | |
- // if(dev->agp->cant_use_aperture == 1) | |
-#ifdef __ia64__ | |
+ // if(dev->agp->cant_use_aperture == 1) | |
+#ifdef __ia64__ | |
{ | |
/* | |
* On some systems we can't talk to bus dma address from | |
@@ -4048,9 +3960,9 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
if( firegl_pat_enabled ) | |
{ | |
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
- } | |
+ } | |
} | |
-#endif | |
+#endif | |
if (REMAP_PAGE_RANGE(vma,offset)) | |
{ | |
@@ -4079,15 +3991,15 @@ int ATI_API_CALL __ke_vm_map(struct file* filp, | |
break; | |
case __KE_GART_USWC: | |
-#ifdef FIREGL_USWC_SUPPORT | |
+#ifdef FIREGL_USWC_SUPPORT | |
if (boot_cpu_data.x86 > 3) | |
{ | |
if( firegl_pat_enabled ) | |
{ | |
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
- } | |
+ } | |
} | |
-#endif | |
+#endif | |
// fall through | |
case __KE_GART_CACHEABLE: | |
vma->vm_flags |= VM_RESERVED; | |
@@ -4137,7 +4049,7 @@ extern struct _agp_memory *_X(agp_allocate_memory_phys_list)(size_t, u32, u64 *) | |
#define FIREGL_agp_backend_release _X(agp_backend_release) | |
#define FIREGL_agp_memory _X(agp_memory) | |
-unsigned int __ke_firegl_agpgart_inuse = AGPGART_INUSE_NONE; | |
+unsigned int __ke_firegl_agpgart_inuse = AGPGART_INUSE_NONE; | |
#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE) | |
/*****************************************************************************/ | |
@@ -4252,7 +4164,7 @@ static | |
int ATI_API_CALL __ke_agpgart_available(__ke_pci_dev_t *pcidev, int use_internal) | |
{ | |
drm_agp_module_stub = &drm_agp; | |
- __ke_firegl_agpgart_inuse = KERNEL26_AGPGART_INUSE; | |
+ __ke_firegl_agpgart_inuse = KERNEL26_AGPGART_INUSE; | |
{ | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) | |
firegl_pci_device = (struct pci_dev*)(void*)pcidev; | |
@@ -4305,7 +4217,7 @@ int ATI_API_CALL __ke_agp_available(__ke_pci_dev_t *pcidev, int use_internal) | |
} else { | |
available = __ke_firegl_agpgart_available(); | |
} | |
- | |
+ | |
return available; | |
} | |
@@ -4410,7 +4322,7 @@ void ATI_API_CALL __ke_agp_copy_info(__ke_agp_kern_info_t* info) | |
if (AGP_AVAILABLE(copy_info)) | |
{ | |
- struct agp_kern_info kern; | |
+ struct agp_kern_info kern; | |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) | |
if (firegl_agp_bridge == NULL) | |
@@ -4508,7 +4420,7 @@ int ATI_API_CALL __ke_agp_enable(unsigned long mode) | |
int ATI_API_CALL __ke_read_agp_caps_registers(__ke_pci_dev_t* dev, unsigned int *caps) | |
{ | |
- return -EINVAL; | |
+ return -EINVAL; | |
} | |
int ATI_API_CALL __ke_agp_acquire(__ke_pci_dev_t* dev) | |
@@ -4550,9 +4462,9 @@ int ATI_API_CALL __ke_smp_processor_id(void) | |
/** \brief Runs a function on all other CPUs | |
* \param func_to_call function to be called on all other cpus | |
- * \return None | |
+ * \return None | |
*/ | |
-void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) | |
+void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) | |
{ | |
#ifdef CONFIG_SMP | |
smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 0, 1 ); | |
@@ -4659,7 +4571,7 @@ int ATI_API_CALL __ke_has_PSE(void) | |
int ATI_API_CALL KCL_is_pat_enabled(void) | |
{ | |
- return firegl_pat_enabled; | |
+ return firegl_pat_enabled; | |
} | |
static int ATI_API_CALL KCL_has_pat(void) | |
@@ -4675,7 +4587,7 @@ static void KCL_setup_pat(void *info) | |
{ | |
unsigned long cr0=0, cr4=0; | |
unsigned long flags; | |
- | |
+ | |
local_irq_save(flags); | |
cr0 = read_cr0() | 0x40000000; | |
write_cr0(cr0); | |
@@ -4706,7 +4618,7 @@ static void KCL_restore_pat(void *info) | |
{ | |
unsigned long cr0 = 0, cr4 = 0; | |
unsigned long flags; | |
- | |
+ | |
local_irq_save(flags); | |
cr0 = read_cr0() | 0x40000000; | |
write_cr0(cr0); | |
@@ -4718,7 +4630,7 @@ static void KCL_restore_pat(void *info) | |
write_cr4(cr4 & ~X86_CR4_PGE); | |
} | |
__flush_tlb(); | |
- | |
+ | |
wrmsr(MSR_IA32_CR_PAT, KCL_orig_pat[0], KCL_orig_pat[1]); | |
cr0 = read_cr0(); | |
@@ -4741,7 +4653,7 @@ static int ATI_API_CALL KCL_enable_pat(void) | |
__KE_INFO("USWC is disabled in module parameters\n"); | |
return 0; | |
} | |
- | |
+ | |
if (!KCL_has_pat()) | |
{ | |
return 0; | |
@@ -4751,13 +4663,13 @@ static int ATI_API_CALL KCL_enable_pat(void) | |
for ( i = 0; i < 2; i++ ) | |
{ | |
- for (j = 0; j < 4; j ++) | |
+ for (j = 0; j < 4; j ++) | |
{ | |
if (((KCL_orig_pat[i] >> (j * 8)) & 0xFF) == 1) | |
- { | |
+ { | |
__KE_ERROR("Pat entry %d is already configured\n", (i+1)*(j+1)); | |
return 0; | |
- } | |
+ } | |
} | |
} | |
@@ -4829,7 +4741,7 @@ typedef struct tag_kasContext_t | |
} kasContext_t; | |
/** \brief KAS context */ | |
-static kasContext_t kasContext; | |
+static kasContext_t kasContext; | |
/** \brief Kernel support required to enable KAS */ | |
#if defined(cmpxchg) && \ | |
@@ -5137,7 +5049,7 @@ unsigned int ATI_API_CALL KAS_Ih_Execute(KAS_IhRoutine_t ih_routine, | |
DBG_TRACE("Interrupt handler returned 0x%08X", ret); | |
kasSetExecutionLevel(orig_level); | |
- spin_unlock(&kasContext.lock_ih); | |
+ spin_unlock(&kasContext.lock_ih); | |
DBG_LEAVE("%d", ret); | |
return ret; | |
@@ -5412,7 +5324,7 @@ typedef struct tag_kasSlabCache_t | |
#endif | |
spinlock_t lock; /* OS spinlock object protecting the cache */ | |
unsigned int routine_type; /* Type of routine the cache might be accessed from */ | |
- char name[14]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ | |
+ char name[24]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ | |
} kasSlabCache_t; | |
/** \brief Return Slab Cache object size | |
@@ -5450,7 +5362,8 @@ unsigned int ATI_API_CALL KAS_SlabCache_Initialize(void* hSlabCache, | |
slabcache_obj->routine_type = access_type; | |
spin_lock_init(&(slabcache_obj->lock)); | |
- sprintf(slabcache_obj->name, "kas(%08lX)",(unsigned long)slabcache_obj); | |
+ snprintf(slabcache_obj->name, sizeof(slabcache_obj->name), | |
+ "kas(%p)", slabcache_obj); | |
DBG_TRACE("creating slab object '%s'", slabcache_obj->name); | |
@@ -6366,7 +6279,7 @@ unsigned int ATI_API_CALL KAS_AtomicAddInt( | |
kas_xadd(puiDestination, iAdd, ret, "l"); | |
- return ret + iAdd; | |
+ return ret + iAdd; | |
#else | |
return 0xDEADC0DE; /* To make compiler happy */ | |
#endif | |
@@ -6449,7 +6362,7 @@ long ATI_API_CALL KAS_ScheduleTimeout(long n_jiffies) | |
#ifdef FIREGL_CF_SUPPORT | |
void *ATI_API_CALL KCL_lock_init() | |
-{ | |
+{ | |
spinlock_t *lock; | |
lock = kmalloc(sizeof(*lock), GFP_KERNEL); | |
@@ -6461,7 +6374,7 @@ void *ATI_API_CALL KCL_lock_init() | |
} | |
void ATI_API_CALL KCL_lock_deinit(void *plock) | |
-{ | |
+{ | |
if (plock == NULL) | |
{ | |
__KE_ERROR("plock is NULL\n"); | |
diff --git a/firegl_public.h b/firegl_public.h | |
index fc49d6e..8cc18ed 100644 | |
--- a/firegl_public.h | |
+++ b/firegl_public.h | |
@@ -78,7 +78,7 @@ do { \ | |
if (!pgd_present(*(pgd_p))) \ | |
{ \ | |
__KE_ERROR("FATAL ERROR: User queue buffer not present! (pgd)\n"); \ | |
- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
/* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
} \ | |
} while(0) | |
@@ -91,7 +91,7 @@ do { \ | |
if (!pud_present(*(pud_p))) \ | |
{ \ | |
__KE_ERROR("FATAL ERROR: User queue buffer not present! (pud)\n"); \ | |
- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
/* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
} \ | |
pmd_p = pmd_offset(pud_p, pte_linear); \ | |
@@ -111,7 +111,7 @@ do { \ | |
if (!pmd_present(*(pmd_p))) \ | |
{ \ | |
__KE_ERROR("FATAL ERROR: User queue buffer not present! (pmd)\n"); \ | |
- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
/* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
} \ | |
} while(0) | |
@@ -157,7 +157,7 @@ do { \ | |
if (!pte_present(pte)) \ | |
{ \ | |
__KE_ERROR("FATAL ERROR: User queue buffer not present! (pte)\n"); \ | |
- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
/* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
} \ | |
} while(0) | |
-- | |
1.5.6.rc2.45.gdc92c | |
EOT | |
cd - | |
fi | |
[ "$VER" = "8-7" ] && patch -p1 <<'EOT' | |
diff -Nru 8-7/packages/Ubuntu/dists/intrepid/dkms.conf.in 8-7.hotfix/packages/Ubuntu/dists/intrepid/dkms.conf.in | |
--- 8-7/packages/Ubuntu/dists/intrepid/dkms.conf.in 2008-07-16 21:10:32.000000000 +0200 | |
+++ 8-7.hotfix/packages/Ubuntu/dists/intrepid/dkms.conf.in 2008-08-18 23:29:24.000000000 +0200 | |
@@ -5,3 +5,9 @@ | |
MAKE[0]="pushd ${dkms_tree}/fglrx/#CVERSION#/build; sh make.sh --nohints --uname_r=$kernelver; popd" | |
DEST_MODULE_LOCATION[0]="/kernel/drivers/char/drm" | |
AUTOINSTALL="yes" | |
+PATCH[0]="2.6.26_support.patch" | |
+PATCH_MATCH[0]="^2.6.2[6-9]" | |
+PATCH[1]="2.6.27_support.patch" | |
+PATCH_MATCH[1]="^2.6.2[7-9]" | |
+PATCH[2]="2.6.27_sysrq_key_disable.patch" | |
+PATCH_MATCH[2]="^2.6.2[7-9]" | |
diff -Nru 8-7/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 8-7.hotfix/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in | |
--- 8-7/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 2008-07-16 21:10:32.000000000 +0200 | |
+++ 8-7.hotfix/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 2008-08-18 23:28:18.000000000 +0200 | |
@@ -9,3 +9,4 @@ | |
debian/replacements/* usr/src/fglrx-#CVERSION# | |
arch/#ARCH#/lib/modules/fglrx/build_mod/lib* usr/src/fglrx-#CVERSION# | |
debian/dkms.conf usr/src/fglrx-#CVERSION# | |
+debian/patches usr/src/fglrx-#CVERSION# | |
diff -Nru 8-7/packages/Ubuntu/dists/intrepid/patches/2.6.26_support.patch 8-7.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.26_support.patch | |
--- 8-7/packages/Ubuntu/dists/intrepid/patches/2.6.26_support.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 8-7.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.26_support.patch 2008-08-18 23:28:18.000000000 +0200 | |
@@ -0,0 +1,1632 @@ | |
+#This patch enables 2.6.26 support until AMD officially supports it. | |
+#It is originally by Zilvina Valinskas <[email protected]> | |
+#and adapted for AMD's 8-6 driver by Mario Limonciello <[email protected]> | |
+ | |
+diff -Nur -x '*.orig' -x '*~' fglrx-installer-8.512/lib/modules/fglrx/build_mod/firegl_public.c fglrx-installer-8.512.new/lib/modules/fglrx/build_mod/firegl_public.c | |
+--- build_mod/firegl_public.c 2008-07-21 14:32:08.000000000 -0400 | |
++++ fglrx-installer-8.512.new/lib/modules/fglrx/build_mod/firegl_public.c 2008-07-21 14:31:48.000000000 -0400 | |
+@@ -24,13 +24,13 @@ | |
+ // ============================================================ | |
+ #include <linux/version.h> | |
+ | |
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) | |
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) | |
+ #error Kernel versions older than 2.6.0 are no longer supported by this module. | |
+-#endif | |
++#endif | |
+ | |
+ #include <linux/autoconf.h> | |
+ | |
+-#if !defined(CONFIG_X86_PC) | |
++#if !defined(CONFIG_X86_PC) | |
+ #if !defined(CONFIG_X86_64) | |
+ #if !defined(CONFIG_X86_VOYAGER) | |
+ #if !defined(CONFIG_X86_NUMAQ) | |
+@@ -62,10 +62,10 @@ | |
+ * distribution would even include such a kernel patch. */ | |
+ #ifdef CONFIG_MEM_MIRROR | |
+ /* Prevent asm/mm_track.h from being included in subsequent | |
+- * kernel headers as that would redefine CONFIG_MEM_MIRROR. */ | |
++ * kernel headers as that would redefine CONFIG_MEM_MIRROR. */ | |
+ #ifndef CONFIG_X86_64 | |
+ #define __I386_MMTRACK_H__ | |
+-#define mm_track(ptep) | |
++#define mm_track(ptep) | |
+ #else | |
+ #define __X86_64_MMTRACK_H__ | |
+ #define mm_track_pte(ptep) | |
+@@ -93,7 +93,7 @@ | |
+ #include <linux/kernel.h> | |
+ #include <linux/fs.h> | |
+ #include <linux/proc_fs.h> | |
+-#include <linux/init.h> | |
++//#include <linux/init.h> | |
+ #include <linux/file.h> | |
+ #include <linux/pci.h> | |
+ #include <linux/wait.h> | |
+@@ -151,8 +151,8 @@ | |
+ #include "linux/freezer.h" | |
+ #endif | |
+ | |
+-// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h. | |
+-#ifndef UTS_RELEASE | |
++// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h. | |
++#ifndef UTS_RELEASE | |
+ #include <linux/utsrelease.h> | |
+ #endif | |
+ | |
+@@ -215,7 +215,7 @@ | |
+ | |
+ static void ATI_API_CALL __ke_printstr(const char *str); | |
+ | |
+-static struct pci_device_id fglrx_pci_table[] = | |
++static struct pci_device_id fglrx_pci_table[] = | |
+ { | |
+ #define FGL_ASIC_ID(x) \ | |
+ { \ | |
+@@ -283,7 +283,7 @@ | |
+ | |
+ static int firegl_pat_enabled = 0; | |
+ static unsigned long KCL_pat[2]; | |
+-static unsigned long KCL_orig_pat[2]; | |
++static unsigned long KCL_orig_pat[2]; | |
+ | |
+ static int ATI_API_CALL KCL_enable_pat(void); | |
+ static void ATI_API_CALL KCL_disable_pat(void); | |
+@@ -322,7 +322,7 @@ | |
+ #endif | |
+ | |
+ __ke_ssize_t ip_firegl_read( struct file *filp, | |
+- char *buf, | |
++ char *buf, | |
+ __ke_size_t size, | |
+ __ke_loff_t *off_ptr) | |
+ { | |
+@@ -334,7 +334,7 @@ | |
+ } | |
+ | |
+ __ke_ssize_t ip_firegl_write( struct file *filp, | |
+- const char *buf, | |
++ const char *buf, | |
+ __ke_size_t size, | |
+ __ke_loff_t *off_ptr) | |
+ { | |
+@@ -477,34 +477,34 @@ | |
+ return firegl_debug_proc_write(file, buffer, count, data); | |
+ } | |
+ | |
+-static int | |
++static int | |
+ firegl_interrupt_open_wrap( | |
+- struct inode *inode, | |
+- struct file *file) | |
++ struct inode *inode, | |
++ struct file *file) | |
+ { | |
+ return firegl_interrupt_open(inode, file); | |
+ } | |
+ | |
+-static int | |
++static int | |
+ firegl_interrupt_release_wrap( | |
+- struct inode *inode, | |
+- struct file *file) | |
++ struct inode *inode, | |
++ struct file *file) | |
+ { | |
+ return firegl_interrupt_release(inode, file); | |
+ } | |
+ | |
+-static ssize_t | |
++static ssize_t | |
+ firegl_interrupt_read_wrap( | |
+- struct file *user_file, | |
+- char __user *user_buf, | |
+- size_t user_buf_size, | |
++ struct file *user_file, | |
++ char __user *user_buf, | |
++ size_t user_buf_size, | |
+ loff_t *user_file_pos) | |
+ { | |
+ return (ssize_t) firegl_interrupt_read(user_file, user_buf, user_buf_size, user_file_pos); | |
+ } | |
+ | |
+-static unsigned int | |
+-firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt) | |
++static unsigned int | |
++firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt) | |
+ { | |
+ if(firegl_interrupt_poll(user_file, (__ke_poll_table*)pt)) | |
+ { | |
+@@ -516,11 +516,11 @@ | |
+ } | |
+ } | |
+ | |
+-static ssize_t | |
++static ssize_t | |
+ firegl_interrupt_write_wrap( | |
+- struct file *user_file, | |
+- const char __user *user_buf, | |
+- size_t user_buf_size, | |
++ struct file *user_file, | |
++ const char __user *user_buf, | |
++ size_t user_buf_size, | |
+ loff_t *user_file_pos) | |
+ { | |
+ return (ssize_t) firegl_interrupt_write(user_file, user_buf, user_buf_size, user_file_pos); | |
+@@ -530,7 +530,7 @@ | |
+ * \param func function to be wrapped | |
+ * \return None */ | |
+ | |
+-static void | |
++static void | |
+ firegl_smp_func_parameter_wrap( | |
+ void *func) | |
+ { | |
+@@ -545,7 +545,7 @@ | |
+ .write = firegl_interrupt_write_wrap | |
+ }; | |
+ | |
+-__ke_proc_list_t firegl_proc_list[] = | |
++__ke_proc_list_t firegl_proc_list[] = | |
+ { | |
+ { "name", drm_name_info_wrap, NULL}, | |
+ { "mem", drm_mem_info_wrap, NULL}, | |
+@@ -613,11 +613,11 @@ | |
+ { | |
+ ent->proc_fops = (struct file_operations*)list->fops; | |
+ } | |
+- | |
++ | |
+ { | |
+ ent->data = (dev->pubdev.signature == FGL_DEVICE_SIGNATURE)? firegl_find_device(minor) : (dev); | |
+ } | |
+- | |
++ | |
+ list++; | |
+ } | |
+ | |
+@@ -663,7 +663,7 @@ | |
+ { | |
+ remove_proc_entry("dri", NULL); | |
+ __KE_DEBUG("remove proc dri. \n"); | |
+- } | |
++ } | |
+ return 0; | |
+ } | |
+ | |
+@@ -701,12 +701,12 @@ | |
+ { | |
+ int i; | |
+ int count = 0; | |
+- | |
++ | |
+ __KE_DEBUG("firegl_stub_getminor: name=\"%s\"\n", name); | |
+ | |
+- for( i = 0; i < FIREGL_STUB_MAXCARDS; i++ ) | |
++ for( i = 0; i < FIREGL_STUB_MAXCARDS; i++ ) | |
+ { | |
+- if( !firegl_stub_list[i].fops ) | |
++ if( !firegl_stub_list[i].fops ) | |
+ { | |
+ firegl_stub_list[i].name = name; | |
+ firegl_stub_list[i].fops = fops; | |
+@@ -733,16 +733,16 @@ | |
+ if (minor < 0 || minor >= FIREGL_STUB_MAXCARDS) | |
+ { | |
+ return -1; | |
+- } | |
++ } | |
+ firegl_proc_cleanup(minor, firegl_stub_root, firegl_stub_list[minor].dev_root, firegl_stub_list[minor].proclist); | |
+ firegl_stub_list[minor].name = NULL; | |
+ firegl_stub_list[minor].fops = NULL; | |
+ firegl_stub_list[minor].proclist = NULL; | |
+ | |
+- if( minor == (firegl_minors-1) ) | |
++ if( minor == (firegl_minors-1) ) | |
+ { | |
+ unregister_chrdev(DRM_MAJOR, "drm"); | |
+- } | |
++ } | |
+ return 0; | |
+ } | |
+ | |
+@@ -766,7 +766,7 @@ | |
+ return -1; | |
+ } else if(err == -EBUSY) { | |
+ | |
+- // the registering of the module's device has failed | |
++ // the registering of the module's device has failed | |
+ // because there was already some other drm module loaded. | |
+ __KE_DEBUG("register_chrdev() failed with -EBUSY\n"); | |
+ return -1; | |
+@@ -798,7 +798,7 @@ | |
+ /* Starting from 2.6.14, kernel has new struct defined for pm_message_t, | |
+ we have to handle this case separately. | |
+ 2.6.11/12/13 kernels have pm_message_t defined as int and older kernels | |
+- don't have pm_message_t defined. | |
++ don't have pm_message_t defined. | |
+ */ | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) | |
+ static int fglrx_pci_suspend(struct pci_dev *pdev, pm_message_t pm_event) | |
+@@ -834,9 +834,9 @@ | |
+ | |
+ if (!ret) | |
+ { | |
+- | |
+- // since privdev->pcidev is acquired in X server, use pdev | |
+- // directly here to allow suspend/resume without X server start. | |
++ | |
++ // since privdev->pcidev is acquired in X server, use pdev | |
++ // directly here to allow suspend/resume without X server start. | |
+ firegl_pci_save_state((__ke_pci_dev_t*)pdev, privdev); | |
+ pci_disable_device(pdev); | |
+ PMSG_EVENT(pdev->dev.power.power_state) = state; | |
+@@ -888,13 +888,13 @@ | |
+ // before pci_set_master! | |
+ firegl_pci_restore_state((__ke_pci_dev_t*)pdev, privdev); | |
+ | |
+- if (pci_enable_device(pdev)) | |
++ if (pci_enable_device(pdev)) | |
+ { | |
+ __KE_ERROR("Cannot enable PCI device.\n"); | |
+- } | |
++ } | |
+ | |
+ pci_set_master(pdev); | |
+- | |
++ | |
+ firegl_cail_powerup(privdev); | |
+ | |
+ if (PMSG_EVENT(pdev->dev.power.power_state) == PM_EVENT_SUSPEND) | |
+@@ -905,7 +905,7 @@ | |
+ return 0; | |
+ } | |
+ | |
+-static struct pci_driver fglrx_pci_driver = | |
++static struct pci_driver fglrx_pci_driver = | |
+ { | |
+ .name = "fglrx_pci", | |
+ .id_table = fglrx_pci_table, | |
+@@ -961,10 +961,10 @@ | |
+ { | |
+ pid = (struct pci_device_id *) &fglrx_pci_table[i]; | |
+ pdev = NULL; | |
+- while (( pdev = pci_get_subsys(pid->vendor, | |
+- pid->device, | |
+- PCI_ANY_ID, | |
+- PCI_ANY_ID, | |
++ while (( pdev = pci_get_subsys(pid->vendor, | |
++ pid->device, | |
++ PCI_ANY_ID, | |
++ PCI_ANY_ID, | |
+ pdev)) != NULL) | |
+ { | |
+ num_of_devices++; | |
+@@ -974,7 +974,7 @@ | |
+ | |
+ if (firegl_init_device_heads(num_of_devices)) | |
+ { | |
+- return -ENOMEM; | |
++ return -ENOMEM; | |
+ } | |
+ | |
+ for (i=0; fglrx_pci_table[i].vendor != 0; i++) | |
+@@ -982,15 +982,15 @@ | |
+ pid = (struct pci_device_id *) &fglrx_pci_table[i]; | |
+ | |
+ pdev = NULL; | |
+- while (( pdev = pci_get_subsys(pid->vendor, | |
+- pid->device, | |
+- PCI_ANY_ID, | |
+- PCI_ANY_ID, | |
++ while (( pdev = pci_get_subsys(pid->vendor, | |
++ pid->device, | |
++ PCI_ANY_ID, | |
++ PCI_ANY_ID, | |
+ pdev)) != NULL) | |
+ { | |
+ if ((ret_code = firegl_get_dev(pubdev, pdev))) | |
+ { | |
+- return ret_code; | |
++ return ret_code; | |
+ } | |
+ | |
+ j++; | |
+@@ -1023,7 +1023,7 @@ | |
+ // init global vars that are in fact constants | |
+ __ke_HZ = HZ; | |
+ | |
+-#ifdef _KE_SERIAL_DEBUG | |
++#ifdef _KE_SERIAL_DEBUG | |
+ __ke_SetSerialPort(); | |
+ #endif | |
+ | |
+@@ -1035,11 +1035,11 @@ | |
+ return retcode; | |
+ } | |
+ | |
+-#ifdef FIREGL_CF_SUPPORT | |
++#ifdef FIREGL_CF_SUPPORT | |
+ adapter_chain_init(); | |
+ cf_object_init(); | |
+-#endif | |
+- | |
++#endif | |
++ | |
+ // init DRM proc list | |
+ drm_proclist = kmalloc((DRM_PROC_ENTRIES + 1) * sizeof(__ke_proc_list_t), GFP_KERNEL); | |
+ if ( drm_proclist == NULL ) | |
+@@ -1127,7 +1127,7 @@ | |
+ dev->pubdev.date, | |
+ firegl_minors); | |
+ | |
+- | |
++ | |
+ #ifdef FIREGL_POWER_MANAGEMENT | |
+ if (pci_register_driver (&fglrx_pci_driver) < 0) | |
+ { | |
+@@ -1157,12 +1157,12 @@ | |
+ { | |
+ KCL_disable_pat(); | |
+ __KE_INFO("Disable PAT\n"); | |
+- } | |
++ } | |
+ #endif // FIREGL_USWC_SUPPORT | |
+ | |
+ for (i = 0; i < count; i++) | |
+ { | |
+- if ( firegl_stub_unregister(i) ) | |
++ if ( firegl_stub_unregister(i) ) | |
+ { | |
+ __KE_ERROR("Cannot unload module on minor: %d\n", i); | |
+ } | |
+@@ -1184,10 +1184,10 @@ | |
+ dev->pubdev.patchlevel, | |
+ dev->pubdev.date); | |
+ | |
+-#ifdef FIREGL_CF_SUPPORT | |
++#ifdef FIREGL_CF_SUPPORT | |
+ cf_object_cleanup(); | |
+- adapter_chain_cleanup(); | |
+-#endif // FIREGL_CF_SUPPORT | |
++ adapter_chain_cleanup(); | |
++#endif // FIREGL_CF_SUPPORT | |
+ | |
+ firegl_private_cleanup (&dev->pubdev); | |
+ | |
+@@ -1265,18 +1265,18 @@ | |
+ void ATI_API_CALL __ke_remove_wait_queue(__ke_wait_queue_head_t* queue_head, __ke_wait_queue_t* entry) | |
+ { | |
+ // current->state = TASK_RUNNING; | |
+- remove_wait_queue((wait_queue_head_t*)(void *)queue_head, | |
++ remove_wait_queue((wait_queue_head_t*)(void *)queue_head, | |
+ (wait_queue_t*)(void *)entry); | |
+ } | |
+ | |
+ void ATI_API_CALL __ke_init_waitqueue_head(__ke_wait_queue_head_t* queue_head) | |
+ { | |
+- init_waitqueue_head((wait_queue_head_t*)(void *)queue_head); | |
++ init_waitqueue_head((wait_queue_head_t*)(void *)queue_head); | |
+ } | |
+ | |
+ void ATI_API_CALL __ke_wait_event_interruptible(__ke_wait_queue_head_t* queue_head, int condition) | |
+ { | |
+- wait_event_interruptible(*((wait_queue_head_t*)(void *)queue_head), condition); | |
++ wait_event_interruptible(*((wait_queue_head_t*)(void *)queue_head), condition); | |
+ } | |
+ | |
+ void ATI_API_CALL __ke_poll_wait(struct file* filp, __ke_wait_queue_head_t* queue_head, __ke_poll_table* pt) | |
+@@ -1287,13 +1287,13 @@ | |
+ void ATI_API_CALL *__ke_asyncio_alloc_sema() | |
+ { | |
+ int i; | |
+- | |
++ | |
+ for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
+ { | |
+ if(fireglAsyncioSemaphoreUsed[i] != 1) | |
+ { | |
+ fireglAsyncioSemaphoreUsed[i] = 1; | |
+- | |
++ | |
+ return &(fireglAsyncioSemaphore[i]); | |
+ } | |
+ } | |
+@@ -1303,7 +1303,7 @@ | |
+ void ATI_API_CALL __ke_asyncio_free_sema(struct semaphore *pSema) | |
+ { | |
+ int i; | |
+- | |
++ | |
+ for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
+ { | |
+ if( &(fireglAsyncioSemaphore[i]) == pSema ) | |
+@@ -1317,15 +1317,15 @@ | |
+ void ATI_API_CALL __ke_asyncio_init_sema(void) | |
+ { | |
+ int i; | |
+- | |
++ | |
+ for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++) | |
+ { | |
+ fireglAsyncioSemaphoreUsed[i] = 0; | |
+ } | |
+-} | |
++} | |
+ | |
+-int ATI_API_CALL __ke_fasync_helper( int fd, | |
+- struct file *filep, | |
++int ATI_API_CALL __ke_fasync_helper( int fd, | |
++ struct file *filep, | |
+ int mode, | |
+ struct fasync_struct **pasync_queue) | |
+ { | |
+@@ -1403,33 +1403,33 @@ | |
+ { | |
+ struct task_struct *p; | |
+ int process_terminated = 1; | |
+- | |
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++ | |
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
+ rcu_read_lock(); | |
+-#else | |
++#else | |
+ read_lock(&tasklist_lock); | |
+-#endif | |
+- p = find_task_by_pid( pid ); | |
+- if (p) | |
++#endif | |
++ p = find_task_by_vpid( pid ); | |
++ if (p) | |
+ { | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) | |
+- if (p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD) | |
++ if (p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD) | |
+ #else | |
+- if (!(p->flags & PF_EXITING)) | |
++ if (!(p->flags & PF_EXITING)) | |
+ #endif | |
+ { | |
+ process_terminated = 0; | |
+ } | |
+- } | |
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++ } | |
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
+ rcu_read_unlock(); | |
+-#else | |
++#else | |
+ read_unlock(&tasklist_lock); | |
+-#endif | |
++#endif | |
+ return process_terminated; | |
+ } | |
+ | |
+-/** /brief Call global OS kernel task/thread scheduler | |
++/** /brief Call global OS kernel task/thread scheduler | |
+ * /return Nonzero if a system call was awakened by a signal | |
+ */ | |
+ int ATI_API_CALL KCL_GetSignalStatus(void) | |
+@@ -1483,15 +1483,15 @@ | |
+ unblock_all_signals(); | |
+ } | |
+ | |
+-#if defined(__i386__) | |
++#if defined(__i386__) | |
+ #ifndef __HAVE_ARCH_CMPXCHG | |
+-static inline | |
+-unsigned long __fgl_cmpxchg(volatile void *ptr, unsigned long old, | |
+- unsigned long new, int size) | |
+-{ | |
+- unsigned long prev; | |
+- switch (size) { | |
+- case 1: | |
++static inline | |
++unsigned long __fgl_cmpxchg(volatile void *ptr, unsigned long old, | |
++ unsigned long new, int size) | |
++{ | |
++ unsigned long prev; | |
++ switch (size) { | |
++ case 1: | |
+ __asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2" | |
+ : "=a"(prev) | |
+ : "q"(new), "m"(*__xg(ptr)), "0"(old) | |
+@@ -1602,7 +1602,7 @@ | |
+ */ | |
+ KCL_TYPE_Pid ATI_API_CALL KCL_GetPid(void) | |
+ { | |
+- return current->pid; | |
++ return current->pid; | |
+ } | |
+ | |
+ /** /brief Return the current Thread Group ID | |
+@@ -1610,7 +1610,7 @@ | |
+ */ | |
+ KCL_TYPE_Pid ATI_API_CALL KCL_GetTgid(void) | |
+ { | |
+- return current->tgid; | |
++ return current->tgid; | |
+ } | |
+ | |
+ /** /brief Return the effective user ID | |
+@@ -1706,7 +1706,7 @@ | |
+ 1 | |
+ #else | |
+ 0 | |
+-#endif | |
++#endif | |
+ }; | |
+ | |
+ /** /brief Check whether a kernel configuration parameter is defined | |
+@@ -1792,13 +1792,13 @@ | |
+ #if defined(__x86_64__) || defined(__ia64__) | |
+ void* ATI_API_CALL __ke_pci_alloc_consistent(__ke_pci_dev_t* dev, int size, void *dma_handle) | |
+ { | |
+- return (pci_alloc_consistent( (struct pci_dev*)(void *)dev, size, dma_handle)); | |
++ return (pci_alloc_consistent( (struct pci_dev*)(void *)dev, size, dma_handle)); | |
+ } | |
+ | |
+ void ATI_API_CALL __ke_pci_free_consistent(__ke_pci_dev_t* dev, int size, unsigned long cpu_addr, | |
+ unsigned int dma_handle) | |
+ { | |
+- pci_free_consistent( (struct pci_dev*)(void *)dev, size, (void *)cpu_addr, | |
++ pci_free_consistent( (struct pci_dev*)(void *)dev, size, (void *)cpu_addr, | |
+ (unsigned long)dma_handle); | |
+ } | |
+ #endif // __ia64__ | |
+@@ -1822,7 +1822,7 @@ | |
+ | |
+ /** \brief This function maps OS independent error conditions to OS defined error codes | |
+ * \param errcode OS independent error condition code | |
+- * \return OS kernel defined error code corresponding to the requested error condition | |
++ * \return OS kernel defined error code corresponding to the requested error condition | |
+ */ | |
+ int ATI_API_CALL KCL_GetErrorCode(KCL_ENUM_ErrorCode errcode) | |
+ { | |
+@@ -1840,7 +1840,7 @@ | |
+ int ATI_API_CALL firegl_get_user_ptr(u32 *src, void **dst) | |
+ { | |
+ unsigned long temp; | |
+- int err = get_user(temp, src); | |
++ int err = get_user(temp, src); | |
+ *dst = (void*) temp; | |
+ return err; | |
+ } | |
+@@ -2019,7 +2019,7 @@ | |
+ */ | |
+ int ATI_API_CALL KCL_AtomicDecAndTest(KCL_TYPE_Atomic* v) | |
+ { | |
+- return atomic_dec_and_test((atomic_t*)v); | |
++ return atomic_dec_and_test((atomic_t*)v); | |
+ } | |
+ | |
+ /*****************************************************************************/ | |
+@@ -2394,7 +2394,7 @@ | |
+ struct page *page = NULL; | |
+ | |
+ page = vmalloc_to_page(vmalloc_addr); | |
+- if(page == NULL) | |
++ if(page == NULL) | |
+ { | |
+ __KE_ERROR("__ke_vmalloc_to_addr: invalid page!"); | |
+ return NULL; | |
+@@ -2436,7 +2436,7 @@ | |
+ retcode = do_munmap(current->mm, | |
+ addr, | |
+ len); | |
+-#endif | |
++#endif | |
+ up_write(¤t->mm->mmap_sem); | |
+ return retcode; | |
+ } | |
+@@ -2480,10 +2480,10 @@ | |
+ minus = !minus; | |
+ } | |
+ else | |
+- { | |
++ { | |
+ ubase = base; | |
+ } | |
+- | |
++ | |
+ do_div(un, ubase); | |
+ return (minus? -un : un); | |
+ } | |
+@@ -2513,7 +2513,7 @@ | |
+ else | |
+ { | |
+ ubase = base; | |
+- } | |
++ } | |
+ | |
+ rem = do_div(un, ubase); | |
+ return (minus? -rem : rem); | |
+@@ -2544,7 +2544,7 @@ | |
+ vaddr = (void *) vmap(pages, count); | |
+ #else | |
+ #ifdef VM_MAP | |
+- vaddr = (void *) vmap(pages, count, VM_MAP, PAGE_KERNEL); | |
++ vaddr = (void *) vmap(pages, count, VM_MAP, PAGE_KERNEL); | |
+ #else | |
+ vaddr = (void *) vmap(pages, count, 0, PAGE_KERNEL); | |
+ #endif | |
+@@ -2600,7 +2600,7 @@ | |
+ } | |
+ #endif // defined(VM_MAP) || defined(vunmap) | |
+ | |
+-/** \brief Reserve a memory page | |
++/** \brief Reserve a memory page | |
+ * | |
+ * \param pt Kernel logical address of the page | |
+ * | |
+@@ -2612,7 +2612,7 @@ | |
+ SetPageReserved(virt_to_page((unsigned long)pt)); | |
+ } | |
+ | |
+-/** \brief Unreserve a memory page | |
++/** \brief Unreserve a memory page | |
+ * | |
+ * \param pt Kernel logical address of the page | |
+ * | |
+@@ -2624,7 +2624,7 @@ | |
+ ClearPageReserved(virt_to_page((unsigned long)pt)); | |
+ } | |
+ | |
+-/** \brief Lock a memory page | |
++/** \brief Lock a memory page | |
+ * | |
+ * \param pt Kernel logical address of the page | |
+ * | |
+@@ -2633,14 +2633,14 @@ | |
+ */ | |
+ void ATI_API_CALL KCL_LockMemPage(void* pt) | |
+ { | |
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
+ SetPageReserved(virt_to_page((unsigned long)pt)); | |
+ #else | |
+ lock_page(virt_to_page((unsigned long)pt)); | |
+ #endif | |
+ } | |
+ | |
+-/** \brief Unlock a memory page | |
++/** \brief Unlock a memory page | |
+ * | |
+ * \param pt Kernel logical address of the page | |
+ * | |
+@@ -2649,7 +2649,7 @@ | |
+ */ | |
+ void ATI_API_CALL KCL_UnlockMemPage(void* pt) | |
+ { | |
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15) | |
+ ClearPageReserved(virt_to_page((unsigned long)pt)); | |
+ #else | |
+ unlock_page(virt_to_page((unsigned long)pt)); | |
+@@ -2674,7 +2674,7 @@ | |
+ return memory->vmptr; | |
+ } | |
+ #endif | |
+- | |
++ | |
+ void* ATI_API_CALL __ke_ioremap(unsigned long offset, unsigned long size) | |
+ { | |
+ return ioremap(offset, size); | |
+@@ -2724,7 +2724,7 @@ | |
+ { | |
+ /*Some kernel developer removed the export of symbol "flush_tlb_page" on 2.6.25 x86_64 SMP kernel. | |
+ Define a simple version here.*/ | |
+-#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
++#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
+ on_each_cpu(KCL_flush_tlb_one, &va, 1, 1); | |
+ #else | |
+ flush_tlb_page(vma, va); | |
+@@ -2884,9 +2884,9 @@ | |
+ static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) | |
+ { | |
+ int ret = 0; | |
+- | |
++ | |
+ DBG_ENTER("0x%08X, 0x%08X, 0x%08X->0x%08X", vma, addr, ptep, *ptep); | |
+- | |
++ | |
+ if (pte_dirty(*ptep)) | |
+ { | |
+ #ifdef __x86_64__ | |
+@@ -2901,19 +2901,19 @@ | |
+ { | |
+ pte_update(vma->vm_mm, addr, ptep); | |
+ } | |
+-#endif | |
++#endif | |
+ } | |
+ | |
+ DBG_TRACE("0x%08X->0x%08X", ptep, *ptep); | |
+- | |
++ | |
+ // Flush Translation Lookaside Buffers | |
+ if (ret) | |
+ { | |
+ KCL_flush_tlb_onepage(vma,addr); | |
+ } | |
+- | |
++ | |
+ DBG_LEAVE("%d", ret); | |
+- | |
++ | |
+ return ret; | |
+ } | |
+ #endif | |
+@@ -3279,7 +3279,7 @@ | |
+ return 0; | |
+ #else | |
+ return 1; | |
+-#endif | |
++#endif | |
+ #else /* !CONFIG_MTRR */ | |
+ return 0; | |
+ #endif /* !CONFIG_MTRR */ | |
+@@ -3305,7 +3305,7 @@ | |
+ | |
+ int ATI_API_CALL __ke_has_vmap(void) | |
+ { | |
+-// We disable vmap for 2.4.x kernel to work around the big memory( > 4GB ) issue. | |
++// We disable vmap for 2.4.x kernel to work around the big memory( > 4GB ) issue. | |
+ #if defined(VM_MAP) || defined(vunmap) | |
+ return 1; | |
+ #else | |
+@@ -3372,7 +3372,7 @@ | |
+ { | |
+ struct pci_dev* dev = (struct pci_dev*)pcidev; | |
+ return PCI_FUNC(dev->devfn); | |
+-} | |
++} | |
+ | |
+ __ke_dma_addr_t ATI_API_CALL __ke_pci_map_single (__ke_pci_dev_t *pdev, void *buffer, __ke_size_t size, int direction) | |
+ { | |
+@@ -3525,12 +3525,12 @@ | |
+ return (int)(agpmem->page_count); | |
+ } | |
+ | |
+-void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem, | |
++void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem, | |
+ unsigned long **memory_ptr) | |
+ { | |
+ __KE_DEBUG("[%s] agpmem=0x%016lx agpmem->memory=0x%016lx [0]=0x%016x", | |
+- __FUNCTION__, | |
+- (unsigned long)agpmem, | |
++ __FUNCTION__, | |
++ (unsigned long)agpmem, | |
+ (unsigned long)agpmem->memory, | |
+ (agpmem->memory)[0]); | |
+ | |
+@@ -3539,18 +3539,9 @@ | |
+ | |
+ /*****************************************************************************/ | |
+ | |
+-#ifndef NOPAGE_SIGBUS | |
+-#define NOPAGE_SIGBUS 0 | |
+-#endif /* !NOPAGE_SIGBUS */ | |
+- | |
+ typedef struct page mem_map_t; | |
+ typedef mem_map_t *vm_nopage_ret_t; | |
+ | |
+-static __inline__ vm_nopage_ret_t do_vm_nopage(struct vm_area_struct* vma, | |
+- unsigned long address) | |
+-{ | |
+- return 0; /* Disallow mremap */ | |
+-} | |
+ | |
+ #ifdef __AGP__BUILTIN__ | |
+ #ifdef __ia64__ | |
+@@ -3575,19 +3566,20 @@ | |
+ return page; | |
+ } | |
+ } | |
+- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
++ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
+ } | |
+ | |
+ #endif /* __ia64__ */ | |
+ #endif /* __AGP__BUILTIN__ */ | |
+ | |
+ | |
+-static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma, | |
+- unsigned long address) | |
++static __inline__ int do_vm_shm_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf) | |
+ { | |
+ pgd_t* pgd_p; | |
+ pmd_t* pmd_p; | |
+ pte_t pte; | |
++ unsigned long address = (unsigned long)vmf->virtual_address; | |
+ unsigned long vma_offset; | |
+ unsigned long pte_linear; | |
+ mem_map_t* pMmPage; | |
+@@ -3616,7 +3608,7 @@ | |
+ (unsigned long)__ke_vm_offset(vma)); | |
+ | |
+ if (address > vma->vm_end) | |
+- return NOPAGE_SIGBUS; /* address is out of range */ | |
++ return VM_FAULT_SIGBUS; /* address is out of range */ | |
+ | |
+ /* Calculate offset into VMA */ | |
+ vma_offset = address - vma->vm_start; | |
+@@ -3628,7 +3620,7 @@ | |
+ pte_linear = firegl_get_addr_from_vm(vma); | |
+ if (!pte_linear) | |
+ { | |
+- return NOPAGE_SIGBUS; /* bad address */ | |
++ return VM_FAULT_SIGBUS; /* bad address */ | |
+ } | |
+ pte_linear += vma_offset; | |
+ | |
+@@ -3656,7 +3648,9 @@ | |
+ | |
+ // __KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", | |
+ // address, page_address(pMmPage)); | |
+- return pMmPage; | |
++ vmf->page = pMmPage; | |
++ | |
++ return 0; | |
+ } | |
+ | |
+ /* | |
+@@ -3665,8 +3659,10 @@ | |
+ (which is one ore more pages in size) | |
+ | |
+ */ | |
+-static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, unsigned long address) | |
++static __inline__ int do_vm_dma_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf) | |
+ { | |
++ unsigned long address = (unsigned long) vmf->virtual_address; | |
+ unsigned long kaddr; | |
+ mem_map_t* pMmPage; | |
+ | |
+@@ -3682,7 +3678,7 @@ | |
+ kaddr = firegl_get_addr_from_vm(vma); | |
+ if (!kaddr) | |
+ { | |
+- return NOPAGE_SIGBUS; /* bad address */ | |
++ return VM_FAULT_SIGBUS; /* bad address */ | |
+ } | |
+ kaddr += (address - vma->vm_start); | |
+ | |
+@@ -3694,19 +3690,23 @@ | |
+ // with drm_alloc_pages, which marks all pages as reserved. Reserved | |
+ // pages' usage count is not decremented by the kernel during unmap!!! | |
+ // | |
+- // For kernel >= 2.6.15, We should reenable this, because the VM sub-system | |
+- // will decrement the pages' usage count even for the pages marked as reserved | |
++ // For kernel >= 2.6.15, We should reenable this, because the VM sub-system | |
++ // will decrement the pages' usage count even for the pages marked as reserved | |
+ // - MC. | |
+ get_page(pMmPage); /* inc usage count of page */ | |
+ #endif | |
+ | |
+ __KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", | |
+ address, page_address(pMmPage)); | |
+- return pMmPage; | |
++ vmf->page = pMmPage; | |
++ | |
++ return 0; | |
+ } | |
+ | |
+-static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma, unsigned long address) | |
++static __inline__ int do_vm_kmap_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf) | |
+ { | |
++ unsigned long address = (unsigned long) vmf->virtual_address; | |
+ unsigned long kaddr; | |
+ mem_map_t* pMmPage; | |
+ | |
+@@ -3716,13 +3716,14 @@ | |
+ if ((pMmPage = (mem_map_t*) firegl_get_pagetable_page_from_vm(vma))) | |
+ { | |
+ get_page(pMmPage); | |
+- return pMmPage; | |
++ vmf->page = pMmPage; | |
++ return 0; | |
+ } | |
+ | |
+ kaddr = firegl_get_addr_from_vm(vma); | |
+ if (!kaddr) | |
+ { | |
+- return NOPAGE_SIGBUS; /* bad address */ | |
++ return VM_FAULT_SIGBUS; /* bad address */ | |
+ } | |
+ kaddr += (address - vma->vm_start); | |
+ | |
+@@ -3735,50 +3736,52 @@ | |
+ | |
+ __KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", address, page_address(pMmPage)); | |
+ | |
+- return pMmPage; | |
++ vmf->page = pMmPage; | |
++ return 0; | |
+ } | |
+ | |
+-/** | |
++/** | |
+ ** | |
+- ** This routine is intented to locate the page table through the | |
++ ** This routine is intented to locate the page table through the | |
+ ** pagelist table created earlier in dev-> pcie | |
+ **/ | |
+-static __inline__ vm_nopage_ret_t do_vm_pcie_nopage(struct vm_area_struct* vma, | |
+- unsigned long address) | |
++static __inline__ int do_vm_pcie_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf) | |
+ { | |
+ | |
++ unsigned long address = (unsigned long)vmf->virtual_address; | |
+ unsigned long vma_offset; | |
+- unsigned long i; | |
++ unsigned long i; | |
+ mem_map_t* pMmPage; | |
+ struct firegl_pcie_mem* pciemem; | |
+ unsigned long* pagelist; | |
+- | |
++ | |
+ drm_device_t *dev = (drm_device_t *)firegl_get_dev_from_vm(vma); | |
+ if (dev == NULL) | |
+ { | |
+ __KE_ERROR("dev is NULL\n"); | |
+- return NOPAGE_SIGBUS; | |
++ return VM_FAULT_SIGBUS; | |
+ } | |
+ | |
+ if (address > vma->vm_end) | |
+ { | |
+ __KE_ERROR("address out of range\n"); | |
+- return NOPAGE_SIGBUS; /* address is out of range */ | |
++ return VM_FAULT_SIGBUS; /* address is out of range */ | |
+ } | |
+ pciemem = firegl_get_pciemem_from_addr ( vma, address); | |
+ if (pciemem == NULL) | |
+ { | |
+ __KE_ERROR("No pciemem found! \n"); | |
+- return NOPAGE_SIGBUS; | |
+- } | |
++ return VM_FAULT_SIGBUS; | |
++ } | |
+ pagelist = firegl_get_pagelist_from_vm(vma); | |
+ | |
+- if (pagelist == NULL) | |
++ if (pagelist == NULL) | |
+ { | |
+ __KE_ERROR("No pagelist! \n"); | |
+- return NOPAGE_SIGBUS; | |
++ return VM_FAULT_SIGBUS; | |
+ } | |
+- | |
++ | |
+ /** Find offset in vma */ | |
+ vma_offset = address - vma->vm_start; | |
+ /** Which entry in the pagelist */ | |
+@@ -3790,15 +3793,17 @@ | |
+ if (page_address(pMmPage) == 0x0) | |
+ { | |
+ __KE_ERROR("Invalid page address\n"); | |
+- return NOPAGE_SIGBUS; | |
++ return VM_FAULT_SIGBUS; | |
+ } | |
+- return pMmPage; | |
++ | |
++ vmf->page = pMmPage; | |
++ return 0; | |
+ } | |
+ | |
+-static __inline__ vm_nopage_ret_t do_vm_gart_nopage(struct vm_area_struct* vma, | |
+- unsigned long address) | |
++static __inline__ int do_vm_gart_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf) | |
+ { | |
+- | |
++ unsigned long address = (unsigned long) vmf->virtual_address; | |
+ unsigned long page_addr; | |
+ unsigned long offset; | |
+ struct page *page; | |
+@@ -3806,36 +3811,31 @@ | |
+ if (address > vma->vm_end) | |
+ { | |
+ __KE_ERROR("Invalid virtual address\n"); | |
+- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
+- } | |
++ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
++ } | |
+ | |
+ offset = address - vma->vm_start; | |
+-#ifdef FIREGL_CF_SUPPORT | |
++#ifdef FIREGL_CF_SUPPORT | |
+ page_addr = mc_heap_get_page_addr(vma, offset); | |
+ #else | |
+ page_addr = firegl_cmmqs_get_pageaddr_from_vm(vma, offset); | |
+-#endif | |
++#endif | |
+ if( !page_addr) | |
+ { | |
+ __KE_ERROR("Invalid page address\n"); | |
+- return NOPAGE_SIGBUS; /* Disallow mremap */ | |
++ return VM_FAULT_SIGBUS; /* Disallow mremap */ | |
+ } | |
+ page = virt_to_page(page_addr); | |
+ get_page(page); | |
+ | |
+- return page; | |
++ vmf->page = page; | |
++ return 0; | |
+ } | |
+ | |
+- | |
+- | |
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) | |
+- | |
+-static vm_nopage_ret_t vm_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int *type) | |
++static int vm_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf, int type) | |
+ { | |
+- if (type) *type = VM_FAULT_MINOR; | |
+- return do_vm_nopage(vma, address); | |
++ return VM_FAULT_SIGBUS; | |
+ } | |
+ | |
+ #ifdef __AGP__BUILTIN__ | |
+@@ -3867,12 +3867,10 @@ | |
+ (which is one or more pages in size) | |
+ | |
+ */ | |
+-static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int *type) | |
++static int vm_shm_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf, int type) | |
+ { | |
+- if (type) *type = VM_FAULT_MINOR; | |
+- return do_vm_shm_nopage(vma, address); | |
++ return do_vm_shm_nopage(vma, vmf); | |
+ } | |
+ | |
+ /* | |
+@@ -3881,115 +3879,29 @@ | |
+ (which is one ore more pages in size) | |
+ | |
+ */ | |
+-static vm_nopage_ret_t vm_dma_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int *type) | |
++static int vm_dma_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf, int type) | |
+ { | |
+- if (type) *type = VM_FAULT_MINOR; | |
+- return do_vm_dma_nopage(vma, address); | |
+-} | |
+- | |
+-static vm_nopage_ret_t vm_kmap_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int *type) | |
+-{ | |
+- if (type) *type = VM_FAULT_MINOR; | |
+- return do_vm_kmap_nopage(vma, address); | |
+-} | |
+- | |
+-static vm_nopage_ret_t vm_pcie_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int *type) | |
+-{ | |
+- return do_vm_pcie_nopage(vma, address); | |
++ return do_vm_dma_nopage(vma, vmf); | |
+ } | |
+ | |
+-static vm_nopage_ret_t vm_gart_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int *type) | |
++static int vm_kmap_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf, int type) | |
+ { | |
+- return do_vm_gart_nopage(vma, address); | |
++ return do_vm_kmap_nopage(vma, vmf); | |
+ } | |
+ | |
+-#else /* LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,0) */ | |
+- | |
+-static vm_nopage_ret_t vm_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int write_access) | |
++static int vm_pcie_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf, int type) | |
+ { | |
+- return do_vm_nopage(vma, address); | |
++ return do_vm_pcie_nopage(vma, vmf); | |
+ } | |
+ | |
+-#ifdef __AGP__BUILTIN__ | |
+-#ifdef __ia64__ | |
+- | |
+- | |
+-static vm_nopage_ret_t vm_cant_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int write_access) | |
++static int vm_gart_nopage(struct vm_area_struct* vma, | |
++ struct vm_fault *vmf, int type) | |
+ { | |
+- return do_vm_cant_nopage(vma, address); | |
++ return do_vm_gart_nopage(vma, vmf); | |
+ } | |
+-#endif /* __ia64__ */ | |
+-#endif /* __AGP__BUILTIN__ */ | |
+- | |
+-/* | |
+- | |
+- This function is called when a page of a mmap()'ed area is not currently | |
+- visible in the specified VMA. | |
+- Return value is the associated physical address for the requested page. | |
+- (If not implemented, then the kernel default routine would allocate a new, | |
+- zeroed page for servicing us) | |
+- | |
+- Possible errors: SIGBUS, OutOfMem | |
+- | |
+- This routine is intended to remap addresses of SHM SAREA | |
+- (which is one or more pages in size) | |
+- | |
+- */ | |
+-static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int write_access) | |
+-{ | |
+- return do_vm_shm_nopage(vma, address); | |
+-} | |
+- | |
+-/* | |
+- | |
+- This routine is intended to remap addresses of a OpenGL context | |
+- (which is one ore more pages in size) | |
+- | |
+-*/ | |
+-static vm_nopage_ret_t vm_dma_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int write_access) | |
+-{ | |
+- return do_vm_dma_nopage(vma, address); | |
+-} | |
+- | |
+-static vm_nopage_ret_t vm_kmap_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int write_access) | |
+-{ | |
+- return do_vm_kmap_nopage(vma, address); | |
+-} | |
+- | |
+-static vm_nopage_ret_t vm_pcie_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int write_access) | |
+-{ | |
+- return do_vm_pcie_nopage(vma, address); | |
+-} | |
+- | |
+-static vm_nopage_ret_t vm_gart_nopage(struct vm_area_struct* vma, | |
+- unsigned long address, | |
+- int *type) | |
+-{ | |
+- return do_vm_gart_nopage(vma, address); | |
+-} | |
+- | |
+- | |
+-#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) */ | |
+ | |
+ void* ATI_API_CALL __ke_vma_file_priv(struct vm_area_struct* vma) | |
+ { | |
+@@ -4040,7 +3952,7 @@ | |
+ *(buf + i++) = pgprot & _PAGE_DIRTY ? 'd' : '-'; | |
+ *(buf + i++) = pgprot & _PAGE_PSE ? 'm' : 'k'; | |
+ *(buf + i++) = pgprot & _PAGE_GLOBAL ? 'g' : 'l'; | |
+-#endif /* __i386__ */ | |
++#endif /* __i386__ */ | |
+ *(buf + i++) = 0; | |
+ | |
+ return buf; | |
+@@ -4069,9 +3981,9 @@ | |
+ return buf; | |
+ } | |
+ | |
+-char* ATI_API_CALL __ke_vm_phys_addr_str(struct vm_area_struct* vma, | |
+- char* buf, | |
+- unsigned long virtual_addr, | |
++char* ATI_API_CALL __ke_vm_phys_addr_str(struct vm_area_struct* vma, | |
++ char* buf, | |
++ unsigned long virtual_addr, | |
+ __ke_dma_addr_t* phys_address) | |
+ { | |
+ pgd_t* pgd_p; | |
+@@ -4174,7 +4086,7 @@ | |
+ | |
+ static struct vm_operations_struct vm_ops = | |
+ { | |
+- nopage: ip_vm_nopage, | |
++ fault: ip_vm_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+@@ -4183,7 +4095,7 @@ | |
+ #ifdef __ia64__ | |
+ static struct vm_operations_struct vm_cant_ops = | |
+ { | |
+- nopage: ip_vm_cant_nopage, | |
++ fault: ip_vm_cant_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+@@ -4192,42 +4104,42 @@ | |
+ | |
+ static struct vm_operations_struct vm_shm_ops = | |
+ { | |
+- nopage: ip_vm_shm_nopage, | |
++ fault: ip_vm_shm_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+ | |
+ static struct vm_operations_struct vm_pci_bq_ops = | |
+ { | |
+- nopage: ip_vm_dma_nopage, | |
++ fault: ip_vm_dma_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+ | |
+ static struct vm_operations_struct vm_ctx_ops = | |
+ { | |
+- nopage: ip_vm_dma_nopage, | |
++ fault: ip_vm_dma_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+ | |
+ static struct vm_operations_struct vm_pcie_ops = | |
+ { | |
+- nopage: ip_vm_pcie_nopage, | |
++ fault: ip_vm_pcie_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+ | |
+ static struct vm_operations_struct vm_kmap_ops = | |
+ { | |
+- nopage: ip_vm_kmap_nopage, | |
++ fault: ip_vm_kmap_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+ | |
+ static struct vm_operations_struct vm_gart_ops = | |
+ { | |
+- nopage: ip_vm_gart_nopage, | |
++ fault: ip_vm_gart_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+@@ -4236,14 +4148,14 @@ | |
+ #ifndef __ia64__ | |
+ static struct vm_operations_struct vm_agp_bq_ops = | |
+ { | |
+- nopage: ip_vm_nopage, | |
++ fault: ip_vm_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+ #else | |
+ static struct vm_operations_struct vm_cant_agp_bq_ops = | |
+ { | |
+- nopage: ip_vm_cant_nopage, | |
++ fault: ip_vm_cant_nopage, | |
+ open: ip_drm_vm_open, | |
+ close: ip_drm_vm_close, | |
+ }; | |
+@@ -4298,7 +4210,7 @@ | |
+ vma->vm_ops = &vm_ops; | |
+ break; | |
+ | |
+-#ifdef FIREGL_USWC_SUPPORT | |
++#ifdef FIREGL_USWC_SUPPORT | |
+ case __KE_ADPT_REG: | |
+ { | |
+ #ifdef __ia64__ | |
+@@ -4318,7 +4230,7 @@ | |
+ } | |
+ else | |
+ { | |
+- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | |
++ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | |
+ } | |
+ } | |
+ #endif /* __i386__ */ | |
+@@ -4337,7 +4249,7 @@ | |
+ vma->vm_ops = &vm_ops; | |
+ } | |
+ break; | |
+-#endif | |
++#endif | |
+ | |
+ case __KE_SHM: | |
+ vma->vm_flags |= VM_SHM | VM_RESERVED; /* Don't swap */ | |
+@@ -4371,7 +4283,7 @@ | |
+ | |
+ #ifdef __AGP__BUILTIN__ | |
+ case __KE_AGP: | |
+- // if(dev->agp->cant_use_aperture == 1) | |
++ // if(dev->agp->cant_use_aperture == 1) | |
+ #ifdef __ia64__ | |
+ { | |
+ /* | |
+@@ -4395,9 +4307,9 @@ | |
+ if( firegl_pat_enabled ) | |
+ { | |
+ vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
+- } | |
++ } | |
+ } | |
+-#endif | |
++#endif | |
+ | |
+ if (REMAP_PAGE_RANGE(vma,offset)) | |
+ { | |
+@@ -4414,8 +4326,8 @@ | |
+ #endif | |
+ break; | |
+ case __KE_AGP_BQS: | |
+- // if(dev->agp->cant_use_aperture == 1) | |
+-#ifdef __ia64__ | |
++ // if(dev->agp->cant_use_aperture == 1) | |
++#ifdef __ia64__ | |
+ { | |
+ /* | |
+ * On some systems we can't talk to bus dma address from | |
+@@ -4438,9 +4350,9 @@ | |
+ if( firegl_pat_enabled ) | |
+ { | |
+ vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
+- } | |
++ } | |
+ } | |
+-#endif | |
++#endif | |
+ | |
+ if (REMAP_PAGE_RANGE(vma,offset)) | |
+ { | |
+@@ -4469,15 +4381,15 @@ | |
+ break; | |
+ | |
+ case __KE_GART_USWC: | |
+-#ifdef FIREGL_USWC_SUPPORT | |
++#ifdef FIREGL_USWC_SUPPORT | |
+ if (boot_cpu_data.x86 > 3) | |
+ { | |
+ if( firegl_pat_enabled ) | |
+ { | |
+ vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); | |
+- } | |
++ } | |
+ } | |
+-#endif | |
++#endif | |
+ // fall through | |
+ case __KE_GART_CACHEABLE: | |
+ vma->vm_flags |= VM_RESERVED; | |
+@@ -4527,7 +4439,7 @@ | |
+ #define FIREGL_agp_backend_release _X(agp_backend_release) | |
+ #define FIREGL_agp_memory _X(agp_memory) | |
+ | |
+-unsigned int __ke_firegl_agpgart_inuse = AGPGART_INUSE_NONE; | |
++unsigned int __ke_firegl_agpgart_inuse = AGPGART_INUSE_NONE; | |
+ | |
+ #if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE) | |
+ /*****************************************************************************/ | |
+@@ -4642,7 +4554,7 @@ | |
+ int ATI_API_CALL __ke_agpgart_available(__ke_pci_dev_t *pcidev) | |
+ { | |
+ drm_agp_module_stub = &drm_agp; | |
+- __ke_firegl_agpgart_inuse = KERNEL26_AGPGART_INUSE; | |
++ __ke_firegl_agpgart_inuse = KERNEL26_AGPGART_INUSE; | |
+ { | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) | |
+ firegl_pci_device = (struct pci_dev*)(void*)pcidev; | |
+@@ -4778,7 +4690,7 @@ | |
+ | |
+ if (AGP_AVAILABLE(copy_info)) | |
+ { | |
+- struct agp_kern_info kern; | |
++ struct agp_kern_info kern; | |
+ | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12) | |
+ if (firegl_agp_bridge == NULL) | |
+@@ -4876,7 +4788,7 @@ | |
+ | |
+ int ATI_API_CALL __ke_read_agp_caps_registers(__ke_pci_dev_t* dev, unsigned int *caps) | |
+ { | |
+- return -EINVAL; | |
++ return -EINVAL; | |
+ } | |
+ | |
+ int ATI_API_CALL __ke_agp_acquire(__ke_pci_dev_t* dev) | |
+@@ -4913,9 +4825,9 @@ | |
+ | |
+ /** \brief Runs a function on all other CPUs | |
+ * \param func_to_call function to be called on all other cpus | |
+- * \return None | |
++ * \return None | |
+ */ | |
+-void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) | |
++void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) | |
+ { | |
+ #ifdef CONFIG_SMP | |
+ smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 0, 1 ); | |
+@@ -4926,7 +4838,7 @@ | |
+ | |
+ int ATI_API_CALL KCL_is_pat_enabled(void) | |
+ { | |
+- return firegl_pat_enabled; | |
++ return firegl_pat_enabled; | |
+ } | |
+ | |
+ static int ATI_API_CALL KCL_has_pat(void) | |
+@@ -4942,7 +4854,7 @@ | |
+ { | |
+ unsigned long cr0=0, cr4=0; | |
+ unsigned long flags; | |
+- | |
++ | |
+ local_irq_save(flags); | |
+ cr0 = read_cr0() | 0x40000000; | |
+ write_cr0(cr0); | |
+@@ -4973,7 +4885,7 @@ | |
+ { | |
+ unsigned long cr0 = 0, cr4 = 0; | |
+ unsigned long flags; | |
+- | |
++ | |
+ local_irq_save(flags); | |
+ cr0 = read_cr0() | 0x40000000; | |
+ write_cr0(cr0); | |
+@@ -4985,7 +4897,7 @@ | |
+ write_cr4(cr4 & ~X86_CR4_PGE); | |
+ } | |
+ __flush_tlb(); | |
+- | |
++ | |
+ wrmsr(MSR_IA32_CR_PAT, KCL_orig_pat[0], KCL_orig_pat[1]); | |
+ | |
+ cr0 = read_cr0(); | |
+@@ -5008,7 +4920,7 @@ | |
+ __KE_INFO("USWC is disabled in module parameters\n"); | |
+ return 0; | |
+ } | |
+- | |
++ | |
+ if (!KCL_has_pat()) | |
+ { | |
+ return 0; | |
+@@ -5018,13 +4930,13 @@ | |
+ | |
+ for ( i = 0; i < 2; i++ ) | |
+ { | |
+- for (j = 0; j < 4; j ++) | |
++ for (j = 0; j < 4; j ++) | |
+ { | |
+ if (((KCL_orig_pat[i] >> (j * 8)) & 0xFF) == 1) | |
+- { | |
++ { | |
+ __KE_ERROR("Pat entry %d is already configured\n", (i+1)*(j+1)); | |
+ return 0; | |
+- } | |
++ } | |
+ } | |
+ } | |
+ | |
+@@ -5096,7 +5008,7 @@ | |
+ } kasContext_t; | |
+ | |
+ /** \brief KAS context */ | |
+-static kasContext_t kasContext; | |
++static kasContext_t kasContext; | |
+ | |
+ /** \brief Kernel support required to enable KAS */ | |
+ #if defined(cmpxchg) && \ | |
+@@ -5398,7 +5310,7 @@ | |
+ DBG_TRACE("Interrupt handler returned 0x%08X", ret); | |
+ | |
+ kasSetExecutionLevel(orig_level); | |
+- spin_unlock(&kasContext.lock_ih); | |
++ spin_unlock(&kasContext.lock_ih); | |
+ | |
+ DBG_LEAVE("%d", ret); | |
+ return ret; | |
+@@ -5673,7 +5585,7 @@ | |
+ #endif | |
+ spinlock_t lock; /* OS spinlock object protecting the cache */ | |
+ unsigned int routine_type; /* Type of routine the cache might be accessed from */ | |
+- char name[14]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ | |
++ char name[24]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ | |
+ } kasSlabCache_t; | |
+ | |
+ /** \brief Return Slab Cache object size | |
+@@ -5711,7 +5623,8 @@ | |
+ | |
+ slabcache_obj->routine_type = access_type; | |
+ spin_lock_init(&(slabcache_obj->lock)); | |
+- sprintf(slabcache_obj->name, "kas(%08lX)",(unsigned long)slabcache_obj); | |
++ snprintf(slabcache_obj->name, sizeof(slabcache_obj->name), | |
++ "kas(%p)", slabcache_obj); | |
+ | |
+ DBG_TRACE("creating slab object '%s'", slabcache_obj->name); | |
+ | |
+@@ -6627,7 +6540,7 @@ | |
+ | |
+ kas_xadd(puiDestination, iAdd, ret, "l"); | |
+ | |
+- return ret + iAdd; | |
++ return ret + iAdd; | |
+ #else | |
+ return 0xDEADC0DE; /* To make compiler happy */ | |
+ #endif | |
+@@ -6710,7 +6623,7 @@ | |
+ #ifdef FIREGL_CF_SUPPORT | |
+ | |
+ void *ATI_API_CALL KCL_lock_init() | |
+-{ | |
++{ | |
+ spinlock_t *lock; | |
+ | |
+ lock = kmalloc(sizeof(*lock), GFP_KERNEL); | |
+@@ -6722,7 +6635,7 @@ | |
+ } | |
+ | |
+ void ATI_API_CALL KCL_lock_deinit(void *plock) | |
+-{ | |
++{ | |
+ if (plock == NULL) | |
+ { | |
+ __KE_ERROR("plock is NULL\n"); | |
+diff -Nur -x '*.orig' -x '*~' fglrx-installer-8.512/lib/modules/fglrx/build_mod/firegl_public.h fglrx-installer-8.512.new/lib/modules/fglrx/build_mod/firegl_public.h | |
+--- build_mod/firegl_public.h 2008-07-21 14:32:08.000000000 -0400 | |
++++ fglrx-installer-8.512.new/lib/modules/fglrx/build_mod/firegl_public.h 2008-07-21 14:32:14.000000000 -0400 | |
+@@ -78,7 +78,7 @@ | |
+ if (!pgd_present(*(pgd_p))) \ | |
+ { \ | |
+ __KE_ERROR("FATAL ERROR: User queue buffer not present! (pgd)\n"); \ | |
+- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
++ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ /* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
+ } \ | |
+ } while(0) | |
+@@ -91,7 +91,7 @@ | |
+ if (!pud_present(*(pud_p))) \ | |
+ { \ | |
+ __KE_ERROR("FATAL ERROR: User queue buffer not present! (pud)\n"); \ | |
+- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
++ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ /* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
+ } \ | |
+ pmd_p = pmd_offset(pud_p, pte_linear); \ | |
+@@ -111,7 +111,7 @@ | |
+ if (!pmd_present(*(pmd_p))) \ | |
+ { \ | |
+ __KE_ERROR("FATAL ERROR: User queue buffer not present! (pmd)\n"); \ | |
+- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
++ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ /* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
+ } \ | |
+ } while(0) | |
+@@ -157,7 +157,7 @@ | |
+ if (!pte_present(pte)) \ | |
+ { \ | |
+ __KE_ERROR("FATAL ERROR: User queue buffer not present! (pte)\n"); \ | |
+- return (unsigned long)NOPAGE_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
++ return VM_FAULT_SIGBUS; /* Something bad happened; generate SIGBUS */ \ | |
+ /* alternatively we could generate a NOPAGE_OOM "out of memory" */ \ | |
+ } \ | |
+ } while(0) | |
diff -Nru 8-7/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 8-7.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch | |
--- 8-7/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 8-7.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 2008-08-18 23:28:18.000000000 +0200 | |
@@ -0,0 +1,53 @@ | |
+diff -Nru fglrx-8.512/firegl_public.c fix/fglrx-8.512/firegl_public.c | |
+--- fglrx-8.512/firegl_public.c 2008-07-21 21:17:45.000000000 +0200 | |
++++ fix/fglrx-8.512/firegl_public.c 2008-08-10 12:16:29.000000000 +0200 | |
+@@ -3235,7 +3235,7 @@ | |
+ { | |
+ #ifdef __SMP__ | |
+ /* write back invalidate all other CPUs (exported by kernel) */ | |
+- if (smp_call_function(deferred_flush, NULL, 1, 0) != 0) | |
++ if (smp_call_function(deferred_flush, NULL, 0) != 0) | |
+ panic("timed out waiting for the other CPUs!\n"); | |
+ | |
+ /* invalidate this CPU */ | |
+@@ -4918,7 +4918,7 @@ | |
+ void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) | |
+ { | |
+ #ifdef CONFIG_SMP | |
+- smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 0, 1 ); | |
++ smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 1); | |
+ #endif | |
+ } | |
+ | |
+@@ -5029,7 +5029,7 @@ | |
+ } | |
+ | |
+ #ifdef CONFIG_SMP | |
+- if (smp_call_function(KCL_setup_pat, NULL, 0, 1) != 0) | |
++ if (smp_call_function(KCL_setup_pat, NULL, 1) != 0) | |
+ return 0; | |
+ #endif | |
+ KCL_setup_pat(NULL); | |
+@@ -5047,7 +5047,7 @@ | |
+ } | |
+ | |
+ #ifdef CONFIG_SMP | |
+- if (smp_call_function(KCL_restore_pat, NULL, 0, 1) != 0) | |
++ if (smp_call_function(KCL_restore_pat, NULL, 1) != 0) | |
+ return; | |
+ #endif | |
+ KCL_restore_pat(NULL); | |
+diff -Nru fglrx-8.512/Makefile fix/fglrx-8.512/Makefile | |
+--- fglrx-8.512/Makefile 2008-07-21 21:17:45.000000000 +0200 | |
++++ fix/fglrx-8.512/Makefile 2008-08-10 12:29:20.000000000 +0200 | |
+@@ -21,6 +21,10 @@ | |
+ -DFGL_LINUX253P1_VMA_API \ | |
+ -DPAGE_ATTR_FIX=$(PAGE_ATTR_FIX) \ | |
+ | |
++PV_CPU := $(shell grep "D pv_cpu_ops" /boot/System.map-$(shell uname -r) | colrm 9) | |
++PV_LOCK := $(shell grep "D pv_lock_ops" /boot/System.map-$(shell uname -r) | colrm 9) | |
++EXTRA_LDFLAGS := --defsym pv_cpu_ops=0x$(PV_CPU) --defsym pv_lock_ops=0x$(PV_LOCK) | |
++ | |
+ ifeq ($(KERNELRELEASE),) | |
+ # on first call from remote location we get into this path | |
+ # whilst on second call all is managed by the embedding kernel makefile | |
diff -Nru 8-7/packages/Ubuntu/dists/intrepid/patches/2.6.27_sysrq_key_disable.patch 8-7.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_sysrq_key_disable.patch | |
--- 8-7/packages/Ubuntu/dists/intrepid/patches/2.6.27_sysrq_key_disable.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 8-7.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_sysrq_key_disable.patch 2008-08-18 23:03:43.000000000 +0200 | |
@@ -0,0 +1,31 @@ | |
+diff -Nru fglrx-8.512.orig/firegl_public.c fglrx-8.512/firegl_public.c | |
+--- fglrx-8.512.orig/firegl_public.c 2008-08-18 23:01:41.000000000 +0200 | |
++++ fglrx-8.512/firegl_public.c 2008-08-18 22:54:48.000000000 +0200 | |
+@@ -6774,11 +6774,11 @@ | |
+ { | |
+ if(enable) | |
+ { | |
+- register_sysrq_key('g', &sysrq_fgldbg_op); | |
++ //register_sysrq_key('g', &sysrq_fgldbg_op); | |
+ } | |
+ else | |
+ { | |
+- unregister_sysrq_key('g', &sysrq_fgldbg_op); | |
++ //unregister_sysrq_key('g', &sysrq_fgldbg_op); | |
+ } | |
+ return 0; | |
+ } | |
+@@ -6800,11 +6800,11 @@ | |
+ { | |
+ if(enable) | |
+ { | |
+- register_sysrq_key('l', &sysrq_fgldump_op); | |
++ //register_sysrq_key('l', &sysrq_fgldump_op); | |
+ } | |
+ else | |
+ { | |
+- unregister_sysrq_key('l', &sysrq_fgldump_op); | |
++ //unregister_sysrq_key('l', &sysrq_fgldump_op); | |
+ } | |
+ return 0; | |
+ } | |
EOT | |
[ "$VER" = "8-8" ] && patch -p1 <<'EOT' | |
diff -Nru 8-8/packages/Ubuntu/dists/intrepid/dkms.conf.in 8-8.hotfix/packages/Ubuntu/dists/intrepid/dkms.conf.in | |
--- 8-8/packages/Ubuntu/dists/intrepid/dkms.conf.in 2008-08-18 13:45:43.000000000 +0200 | |
+++ 8-8.hotfix/packages/Ubuntu/dists/intrepid/dkms.conf.in 2008-08-23 13:35:46.000000000 +0200 | |
@@ -5,3 +5,7 @@ | |
MAKE[0]="pushd ${dkms_tree}/fglrx/#CVERSION#/build; sh make.sh --nohints --uname_r=$kernelver; popd" | |
DEST_MODULE_LOCATION[0]="/kernel/drivers/char/drm" | |
AUTOINSTALL="yes" | |
+PATCH[0]="2.6.27_support.patch" | |
+PATCH_MATCH[0]="^2.6.2[7-9]" | |
+PATCH[1]="2.6.27_sysrq_key_disable.patch" | |
+PATCH_MATCH[1]="^2.6.2[7-9]" | |
diff -Nru 8-8/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 8-8.hotfix/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in | |
--- 8-8/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 2008-08-18 13:45:43.000000000 +0200 | |
+++ 8-8.hotfix/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 2008-08-23 12:09:29.000000000 +0200 | |
@@ -9,3 +9,4 @@ | |
debian/replacements/* usr/src/fglrx-#CVERSION# | |
arch/#ARCH#/lib/modules/fglrx/build_mod/lib* usr/src/fglrx-#CVERSION# | |
debian/dkms.conf usr/src/fglrx-#CVERSION# | |
+debian/patches usr/src/fglrx-#CVERSION# | |
diff -Nru 8-8/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 8-8.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch | |
--- 8-8/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 8-8.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 2008-08-23 12:25:53.000000000 +0200 | |
@@ -0,0 +1,53 @@ | |
+diff -Nru fglrx-8.522/firegl_public.c fglrx-8.522.fix/firegl_public.c | |
+--- fglrx-8.522/firegl_public.c 2008-08-20 18:29:50.000000000 +0200 | |
++++ fglrx-8.522.fix/firegl_public.c 2008-08-23 12:24:54.000000000 +0200 | |
+@@ -3077,7 +3077,7 @@ | |
+ { | |
+ #ifdef __SMP__ | |
+ /* write back invalidate all other CPUs (exported by kernel) */ | |
+- if (smp_call_function(deferred_flush, NULL, 1, 0) != 0) | |
++ if (smp_call_function(deferred_flush, NULL, 0) != 0) | |
+ panic("timed out waiting for the other CPUs!\n"); | |
+ | |
+ /* invalidate this CPU */ | |
+@@ -4796,7 +4796,7 @@ | |
+ void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call) | |
+ { | |
+ #ifdef CONFIG_SMP | |
+- smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 0, 1 ); | |
++ smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 1); | |
+ #endif | |
+ } | |
+ | |
+@@ -4910,7 +4910,7 @@ | |
+ } | |
+ | |
+ #ifdef CONFIG_SMP | |
+- if (smp_call_function(KCL_setup_pat, NULL, 0, 1) != 0) | |
++ if (smp_call_function(KCL_setup_pat, NULL, 1) != 0) | |
+ return 0; | |
+ #endif | |
+ KCL_setup_pat(NULL); | |
+@@ -4929,7 +4929,7 @@ | |
+ } | |
+ | |
+ #ifdef CONFIG_SMP | |
+- if (smp_call_function(KCL_restore_pat, NULL, 0, 1) != 0) | |
++ if (smp_call_function(KCL_restore_pat, NULL, 1) != 0) | |
+ return; | |
+ #endif | |
+ KCL_restore_pat(NULL); | |
+diff -Nru fglrx-8.522/Makefile fglrx-8.522.fix/Makefile | |
+--- fglrx-8.522/Makefile 2008-08-20 18:29:50.000000000 +0200 | |
++++ fglrx-8.522.fix/Makefile 2008-08-23 12:20:30.000000000 +0200 | |
+@@ -21,6 +21,10 @@ | |
+ -DFGL_LINUX253P1_VMA_API \ | |
+ -DPAGE_ATTR_FIX=$(PAGE_ATTR_FIX) \ | |
+ | |
++PV_CPU := $(shell grep "D pv_cpu_ops" /boot/System.map-$(shell uname -r) | colrm 9) | |
++PV_LOCK := $(shell grep "D pv_lock_ops" /boot/System.map-$(shell uname -r) | colrm 9) | |
++EXTRA_LDFLAGS := --defsym pv_cpu_ops=0x$(PV_CPU) --defsym pv_lock_ops=0x$(PV_LOCK) | |
++ | |
+ ifeq ($(KERNELRELEASE),) | |
+ # on first call from remote location we get into this path | |
+ # whilst on second call all is managed by the embedding kernel makefile | |
diff -Nru 8-8/packages/Ubuntu/dists/intrepid/patches/2.6.27_sysrq_key_disable.patch 8-8.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_sysrq_key_disable.patch | |
--- 8-8/packages/Ubuntu/dists/intrepid/patches/2.6.27_sysrq_key_disable.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 8-8.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_sysrq_key_disable.patch 2008-08-23 12:09:29.000000000 +0200 | |
@@ -0,0 +1,31 @@ | |
+diff -Nru fglrx-8.512.orig/firegl_public.c fglrx-8.512/firegl_public.c | |
+--- fglrx-8.512.orig/firegl_public.c 2008-08-18 23:01:41.000000000 +0200 | |
++++ fglrx-8.512/firegl_public.c 2008-08-18 22:54:48.000000000 +0200 | |
+@@ -6774,11 +6774,11 @@ | |
+ { | |
+ if(enable) | |
+ { | |
+- register_sysrq_key('g', &sysrq_fgldbg_op); | |
++ //register_sysrq_key('g', &sysrq_fgldbg_op); | |
+ } | |
+ else | |
+ { | |
+- unregister_sysrq_key('g', &sysrq_fgldbg_op); | |
++ //unregister_sysrq_key('g', &sysrq_fgldbg_op); | |
+ } | |
+ return 0; | |
+ } | |
+@@ -6800,11 +6800,11 @@ | |
+ { | |
+ if(enable) | |
+ { | |
+- register_sysrq_key('l', &sysrq_fgldump_op); | |
++ //register_sysrq_key('l', &sysrq_fgldump_op); | |
+ } | |
+ else | |
+ { | |
+- unregister_sysrq_key('l', &sysrq_fgldump_op); | |
++ //unregister_sysrq_key('l', &sysrq_fgldump_op); | |
+ } | |
+ return 0; | |
+ } | |
diff -Nru 8-8/packages/Ubuntu/dists/intrepid/rules 8-8.hotfix/packages/Ubuntu/dists/intrepid/rules | |
--- 8-8/packages/Ubuntu/dists/intrepid/rules 2008-08-18 13:45:43.000000000 +0200 | |
+++ 8-8.hotfix/packages/Ubuntu/dists/intrepid/rules 2008-08-23 13:45:01.000000000 +0200 | |
@@ -13,7 +13,7 @@ | |
#Kernel patches for newer development release kernel | |
#In case these break stuff, don't apply to stable | |
ifeq ($(DISTRO),intrepid) | |
- include /usr/share/cdbs/1/rules/simple-patchsys.mk | |
+# include /usr/share/cdbs/1/rules/simple-patchsys.mk | |
endif | |
#Directory naming schemes | |
EOT | |
[ "$VER" = "8-9" -o "$VER" = "8-10" ] && patch -p1 <<'EOT' | |
diff -Nru 8-9/packages/Ubuntu/dists/intrepid/dkms.conf.in 8-9.hotfix/packages/Ubuntu/dists/intrepid/dkms.conf.in | |
--- 8-9/packages/Ubuntu/dists/intrepid/dkms.conf.in 2008-09-17 22:01:09.000000000 +0200 | |
+++ 8-9.hotfix/packages/Ubuntu/dists/intrepid/dkms.conf.in 2008-09-22 19:14:24.000000000 +0200 | |
@@ -5,3 +5,5 @@ | |
MAKE[0]="pushd ${dkms_tree}/fglrx/#CVERSION#/build; sh make.sh --nohints --uname_r=$kernelver; popd" | |
DEST_MODULE_LOCATION[0]="/kernel/drivers/char/drm" | |
AUTOINSTALL="yes" | |
+PATCH[0]="2.6.27_support.patch" | |
+PATCH_MATCH[0]="^2.6.2[7-9]" | |
diff -Nru 8-9/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 8-9.hotfix/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in | |
--- 8-9/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 2008-09-17 22:01:09.000000000 +0200 | |
+++ 8-9.hotfix/packages/Ubuntu/dists/intrepid/fglrx-kernel-source.install.in 2008-09-22 19:14:24.000000000 +0200 | |
@@ -9,3 +9,4 @@ | |
debian/replacements/* usr/src/fglrx-#CVERSION# | |
arch/#ARCH#/lib/modules/fglrx/build_mod/lib* usr/src/fglrx-#CVERSION# | |
debian/dkms.conf usr/src/fglrx-#CVERSION# | |
+debian/patches usr/src/fglrx-#CVERSION# | |
diff -Nru 8-9/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 8-9.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch | |
--- 8-9/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 8-9.hotfix/packages/Ubuntu/dists/intrepid/patches/2.6.27_support.patch 2008-09-22 19:08:48.000000000 +0200 | |
@@ -0,0 +1,98 @@ | |
+diff -Nru fglrx-8.532.orig/firegl_public.c fglrx-8.532/firegl_public.c | |
+--- fglrx-8.532.orig/firegl_public.c 2008-09-22 18:58:41.000000000 +0200 | |
++++ fglrx-8.532/firegl_public.c 2008-09-22 19:08:15.000000000 +0200 | |
+@@ -199,6 +199,12 @@ | |
+ #define preempt_enable() | |
+ #endif | |
+ | |
++/* Since 2.6.27 smp_call_function doesn't have a nonatomic/retry argument */ | |
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) | |
++#define SMP_CALL_FUNCTION(func, info, retry, wait) smp_call_function(func, info, wait) | |
++#else | |
++#define SMP_CALL_FUNCTION(func, info, retry, wait) smp_call_function(func, info, retry, wait) | |
++#endif | |
+ // ============================================================ | |
+ /* globals */ | |
+ | |
+@@ -250,7 +256,7 @@ | |
+ const char BUILD_KERNEL_HAS_MODVERSIONS_CLEARED; | |
+ #endif | |
+ | |
+-#ifdef __SMP__ | |
++#ifdef CONFIG_SMP | |
+ const unsigned long __ke_SMP_State = 1; | |
+ const char BUILD_KERNEL_HAS_SMP_SET; | |
+ #else | |
+@@ -2516,8 +2522,8 @@ | |
+ { | |
+ /*Some kernel developer removed the export of symbol "flush_tlb_page" on 2.6.25 x86_64 SMP kernel. | |
+ Define a simple version here.*/ | |
+-#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
+- on_each_cpu(KCL_flush_tlb_one, &va, 1, 1); | |
++#if defined(__x86_64__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
++ on_each_cpu(KCL_flush_tlb_one, &va, 1); | |
+ #else | |
+ flush_tlb_page(vma, va); | |
+ #endif | |
+@@ -2902,7 +2908,7 @@ | |
+ | |
+ /*****************************************************************************/ | |
+ | |
+-#ifdef __SMP__ | |
++#ifdef CONFIG_SMP | |
+ static atomic_t cpus_waiting; | |
+ | |
+ static void deferred_flush(void* contextp) | |
+@@ -2918,13 +2924,13 @@ | |
+ while (atomic_read(&cpus_waiting) > 0) | |
+ barrier(); | |
+ } | |
+-#endif /* __SMP__ */ | |
++#endif /* CONFIG_SMP */ | |
+ | |
+ int ATI_API_CALL __ke_flush_cache(void) | |
+ { | |
+-#ifdef __SMP__ | |
++#ifdef CONFIG_SMP | |
+ /* write back invalidate all other CPUs (exported by kernel) */ | |
+- if (smp_call_function(deferred_flush, NULL, 1, 0) != 0) | |
++ if (SMP_CALL_FUNCTION(deferred_flush, NULL, 1, 0) != 0) | |
+ panic("timed out waiting for the other CPUs!\n"); | |
+ | |
+ /* invalidate this CPU */ | |
+@@ -2938,7 +2944,7 @@ | |
+ | |
+ while (atomic_read(&cpus_waiting) > 0) | |
+ barrier(); | |
+-#else /* !__SMP__ */ | |
++#else /* !CONFIG_SMP */ | |
+ #if defined(__i386__) || defined(__x86_64__) | |
+ asm volatile ("wbinvd":::"memory"); | |
+ #elif defined(__alpha__) || defined(__sparc__) | |
+@@ -2946,7 +2952,7 @@ | |
+ #else | |
+ #error "Please define flush_cache for your architecture." | |
+ #endif | |
+-#endif /* !__SMP__ */ | |
++#endif /* !CONFIG_SMP */ | |
+ | |
+ //for kernel 2.6.25, tlb_flush has been included when calling set_pages_*. | |
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25) | |
+@@ -4654,7 +4660,7 @@ | |
+ } | |
+ | |
+ #ifdef CONFIG_SMP | |
+- if (smp_call_function(KCL_setup_pat, NULL, 0, 1) != 0) | |
++ if (SMP_CALL_FUNCTION(KCL_setup_pat, NULL, 0, 1) != 0) | |
+ return 0; | |
+ #endif | |
+ KCL_setup_pat(NULL); | |
+@@ -4673,7 +4679,7 @@ | |
+ } | |
+ | |
+ #ifdef CONFIG_SMP | |
+- if (smp_call_function(KCL_restore_pat, NULL, 0, 1) != 0) | |
++ if (SMP_CALL_FUNCTION(KCL_restore_pat, NULL, 0, 1) != 0) | |
+ return; | |
+ #endif | |
+ KCL_restore_pat(NULL); | |
diff -Nru 8-9/packages/Ubuntu/dists/intrepid/rules 8-9.hotfix/packages/Ubuntu/dists/intrepid/rules | |
--- 8-9/packages/Ubuntu/dists/intrepid/rules 2008-09-17 22:01:09.000000000 +0200 | |
+++ 8-9.hotfix/packages/Ubuntu/dists/intrepid/rules 2008-09-22 19:14:24.000000000 +0200 | |
@@ -13,7 +13,7 @@ | |
#Kernel patches for newer development release kernel | |
#In case these break stuff, don't apply to stable | |
ifeq ($(DISTRO),intrepid) | |
- include /usr/share/cdbs/1/rules/simple-patchsys.mk | |
+# include /usr/share/cdbs/1/rules/simple-patchsys.mk | |
endif | |
#Directory naming schemes | |
EOT | |
[ "$VER" = "8-11" ] && patch -p1 <<'EOT' | |
diff -Nru 8-11.orig/packages/Ubuntu/ati-packager.sh 8-11/packages/Ubuntu/ati-packager.sh | |
--- 8-11.orig/packages/Ubuntu/ati-packager.sh 2008-11-11 17:18:16.000000000 +0100 | |
+++ 8-11/packages/Ubuntu/ati-packager.sh 2008-11-24 06:09:43.000000000 +0100 | |
@@ -209,7 +209,7 @@ | |
case ${X_NAME} in | |
gutsy|7.10) X_DIR=x710; X_NAME=gutsy;; | |
hardy|8.04) X_DIR=x710; X_NAME=hardy;; | |
- intrepid|8.10) X_DIR=x710; X_NAME=intrepid;; | |
+ intrepid|8.10) X_DIR=x740; X_NAME=intrepid;; | |
source) X_DIR=x710; X_NAME=intrepid;; | |
*) | |
#Automatically detect | |
diff -Nru 8-11.orig/packages/Ubuntu/dists/hardy/replacements/Makefile 8-11/packages/Ubuntu/dists/hardy/replacements/Makefile | |
--- 8-11.orig/packages/Ubuntu/dists/hardy/replacements/Makefile 2008-11-11 17:18:16.000000000 +0100 | |
+++ 8-11/packages/Ubuntu/dists/hardy/replacements/Makefile 2008-11-24 05:12:12.000000000 +0100 | |
@@ -1,17 +1,63 @@ | |
+# Copyright (c) 2008 Advanced Micro Devices. All Rights Reserved. | |
+# | |
+# Redistribution and use in source and binary forms, with or without | |
+# modification, are permitted provided that the following conditions are met: | |
+# | |
+# 1. Redistributions of source code must retain the above copyright notice, | |
+# this list of conditions and the following disclaimer. | |
+# | |
+# 2. Redistributions in binary form must reproduce the above copyright | |
+# notice, this list of conditions and the following disclaimer in the | |
+# documentation and/or other materials provided with the distribution. | |
+# | |
+# 3. The name of the author may not be used to endorse or promote products | |
+# derived from this software without specific prior written permission. | |
+# | |
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED | |
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO | |
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |
+# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
+ | |
GCC_VER_MAJ = $(shell $(CC) --version | head -n 1 | sed -e 's/[^0-9. ]//g;s/^ *//;s/^\(.\)\..*$$/\1/') | |
LIBIP_PREFIX ?= .. | |
obj-m += fglrx.o | |
fglrx-libs += libfglrx_ip.a.GCC$(GCC_VER_MAJ) | |
-fglrx-c-objs += firegl_public.o | |
+ | |
+fglrx-c-objs += firegl_public.o \ | |
+ kcl_acpi.o \ | |
+ kcl_agp.o \ | |
+ kcl_debug.o \ | |
+ kcl_ioctl.o \ | |
+ kcl_io.o \ | |
+ kcl_pci.o \ | |
+ kcl_str.o \ | |
+ kcl_wait.o | |
+ | |
fglrx-objs += $(fglrx-c-objs) $(fglrx-libs) | |
-fglrx-hdrs += firegl_public.h fglrxko_pci_ids.h | |
-drm-hdrs += drm.h drmP.h drm_os_linux.h drm_proc.h drm_compat.h | |
-ifeq ($(PAGE_ATTR_FIX),) | |
-PAGE_ATTR_FIX =1 | |
-endif | |
+fglrx-hdrs += firegl_public.h \ | |
+ fglrxko_pci_ids.h \ | |
+ kcl_acpi.h \ | |
+ kcl_agp.h \ | |
+ kcl_config.h \ | |
+ kcl_debug.h \ | |
+ kcl_io.h \ | |
+ kcl_ioctl.h \ | |
+ kcl_osconfig.h \ | |
+ kcl_pci.h \ | |
+ kcl_str.h \ | |
+ kcl_type.h \ | |
+ kcl_wait.h | |
+ | |
+drm-hdrs += drm.h drmP.h drm_os_linux.h drm_proc.h drm_compat.h | |
EXTRA_CFLAGS += \ | |
-I$(PWD) \ | |
@@ -29,11 +75,7 @@ | |
KVER = $(shell uname -r) | |
endif | |
-ifeq (1,1) | |
KDIR = /lib/modules/$(KVER)/build | |
-else | |
-KDIR = /usr/src/linux-$(KVER) | |
-endif | |
PWD = $(shell pwd) | |
fglrx-cfiles = ${fglrx-c-objs:.o=.c} | |
@@ -55,7 +97,7 @@ | |
# distclean:: clean | |
clean:: | |
- rm -f *.c *.h *.o *.ko *.GCC* .??* | |
+ rm -rf *.c *.h *.o *.ko *.GCC* .??* *.symvers | |
endif | |
diff -Nru 8-11.orig/packages/Ubuntu/dists/intrepid/replacements/Makefile 8-11/packages/Ubuntu/dists/intrepid/replacements/Makefile | |
--- 8-11.orig/packages/Ubuntu/dists/intrepid/replacements/Makefile 2008-11-11 17:18:16.000000000 +0100 | |
+++ 8-11/packages/Ubuntu/dists/intrepid/replacements/Makefile 2008-11-24 05:12:12.000000000 +0100 | |
@@ -1,17 +1,63 @@ | |
+# Copyright (c) 2008 Advanced Micro Devices. All Rights Reserved. | |
+# | |
+# Redistribution and use in source and binary forms, with or without | |
+# modification, are permitted provided that the following conditions are met: | |
+# | |
+# 1. Redistributions of source code must retain the above copyright notice, | |
+# this list of conditions and the following disclaimer. | |
+# | |
+# 2. Redistributions in binary form must reproduce the above copyright | |
+# notice, this list of conditions and the following disclaimer in the | |
+# documentation and/or other materials provided with the distribution. | |
+# | |
+# 3. The name of the author may not be used to endorse or promote products | |
+# derived from this software without specific prior written permission. | |
+# | |
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED | |
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO | |
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |
+# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
+ | |
GCC_VER_MAJ = $(shell $(CC) --version | head -n 1 | sed -e 's/[^0-9. ]//g;s/^ *//;s/^\(.\)\..*$$/\1/') | |
LIBIP_PREFIX ?= .. | |
obj-m += fglrx.o | |
fglrx-libs += libfglrx_ip.a.GCC$(GCC_VER_MAJ) | |
-fglrx-c-objs += firegl_public.o | |
+ | |
+fglrx-c-objs += firegl_public.o \ | |
+ kcl_acpi.o \ | |
+ kcl_agp.o \ | |
+ kcl_debug.o \ | |
+ kcl_ioctl.o \ | |
+ kcl_io.o \ | |
+ kcl_pci.o \ | |
+ kcl_str.o \ | |
+ kcl_wait.o | |
+ | |
fglrx-objs += $(fglrx-c-objs) $(fglrx-libs) | |
-fglrx-hdrs += firegl_public.h fglrxko_pci_ids.h | |
-drm-hdrs += drm.h drmP.h drm_os_linux.h drm_proc.h drm_compat.h | |
-ifeq ($(PAGE_ATTR_FIX),) | |
-PAGE_ATTR_FIX =1 | |
-endif | |
+fglrx-hdrs += firegl_public.h \ | |
+ fglrxko_pci_ids.h \ | |
+ kcl_acpi.h \ | |
+ kcl_agp.h \ | |
+ kcl_config.h \ | |
+ kcl_debug.h \ | |
+ kcl_io.h \ | |
+ kcl_ioctl.h \ | |
+ kcl_osconfig.h \ | |
+ kcl_pci.h \ | |
+ kcl_str.h \ | |
+ kcl_type.h \ | |
+ kcl_wait.h | |
+ | |
+drm-hdrs += drm.h drmP.h drm_os_linux.h drm_proc.h drm_compat.h | |
EXTRA_CFLAGS += \ | |
-I$(PWD) \ | |
@@ -29,11 +75,7 @@ | |
KVER = $(shell uname -r) | |
endif | |
-ifeq (1,1) | |
KDIR = /lib/modules/$(KVER)/build | |
-else | |
-KDIR = /usr/src/linux-$(KVER) | |
-endif | |
PWD = $(shell pwd) | |
fglrx-cfiles = ${fglrx-c-objs:.o=.c} | |
@@ -55,7 +97,7 @@ | |
# distclean:: clean | |
clean:: | |
- rm -f *.c *.h *.o *.ko *.GCC* .??* | |
+ rm -rf *.c *.h *.o *.ko *.GCC* .??* *.symvers | |
endif | |
diff -Nru 8-11.orig/packages/Ubuntu/dists/intrepid/rules 8-11/packages/Ubuntu/dists/intrepid/rules | |
--- 8-11.orig/packages/Ubuntu/dists/intrepid/rules 2008-11-11 17:18:16.000000000 +0100 | |
+++ 8-11/packages/Ubuntu/dists/intrepid/rules 2008-11-24 06:03:48.000000000 +0100 | |
@@ -23,11 +23,11 @@ | |
ifeq ($(DEB_BUILD_ARCH),amd64) | |
LIBDIR=lib64 | |
ARCH=x86_64 | |
- XARCH=x710_64a | |
+ XARCH=x740_64a | |
else | |
LIBDIR=lib | |
ARCH=x86 | |
- XARCH=x710 | |
+ XARCH=x740 | |
endif | |
# Package names | |
diff -Nru 8-11.orig/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.postrm 8-11/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.postrm | |
--- 8-11.orig/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.postrm 2008-11-11 17:18:16.000000000 +0100 | |
+++ 8-11/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.postrm 2008-11-24 05:49:34.000000000 +0100 | |
@@ -23,6 +23,7 @@ | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libGL.so.1.2.xlibmesa /usr/lib/libGL.so.1.2 > /dev/null | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib32/fglrx/libGL.so.1.2.xlibmesa /usr/lib32/libGL.so.1.2 > /dev/null | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libdri.so.xlibmesa /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
+ dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libglx.so.xlibmesa /usr/lib/xorg/modules/extensions/libglx.so > /dev/null | |
;; | |
upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) | |
diff -Nru 8-11.orig/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.preinst 8-11/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.preinst | |
--- 8-11.orig/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.preinst 2008-11-11 17:18:16.000000000 +0100 | |
+++ 8-11/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.preinst 2008-11-24 05:50:45.000000000 +0100 | |
@@ -68,6 +68,7 @@ | |
fi | |
dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libGL.so.1.2.xlibmesa /usr/lib/libGL.so.1.2 > /dev/null | |
dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libdri.so.xlibmesa /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
+ dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libglx.so.xlibmesa /usr/lib/xorg/modules/extensions/libglx.so > /dev/null | |
if [ -n "$HAS_LIB32" ]; then | |
if [ ! -d /usr/lib32/fglrx ]; then | |
EOT | |
[ "$VER" = "8-12" ] && sed -i 's/\.so*/./' packages/Ubuntu/dists/*/libamdxvba1.install.in | |
case $VER in 9-3) patch -p1 << 'EOT' | |
diff -Nru 9-3.orig/packages/Ubuntu/dists/hardy/dkms/patches/2.6.29_support.patch 9-3/packages/Ubuntu/dists/hardy/dkms/patches/2.6.29_support.patch | |
--- 9-3.orig/packages/Ubuntu/dists/hardy/dkms/patches/2.6.29_support.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 9-3/packages/Ubuntu/dists/hardy/dkms/patches/2.6.29_support.patch 2009-10-20 13:13:06.433473909 +0200 | |
@@ -0,0 +1,96 @@ | |
+diff -Nru fglrx-8.593.orig/firegl_public.c fglrx-8.593/firegl_public.c | |
+--- fglrx-8.593.orig/firegl_public.c 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/firegl_public.c 2009-10-20 12:55:58.364468070 +0200 | |
+@@ -1402,7 +1402,11 @@ | |
+ */ | |
+ KCL_TYPE_Uid ATI_API_CALL KCL_GetEffectiveUid(void) | |
+ { | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++ return current->cred->euid; | |
++#else | |
+ return current->euid; | |
++#endif | |
+ } | |
+ | |
+ /** /brief Delay execution for the specified number of microseconds | |
+@@ -1774,15 +1778,30 @@ | |
+ */ | |
+ void ATI_API_CALL KCL_PosixSecurityCapSetIPCLock(unsigned int lock) | |
+ { | |
++ | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++ struct cred *new = prepare_creds(); | |
++ if (!new) { | |
++ printk(KERN_ERR "fglrx: could not allocate memory\n"); | |
++ return; | |
++ } | |
++#else | |
++#define new current | |
++#endif | |
+ if (lock == 0 ) | |
+ { | |
+- cap_lower(current->cap_effective, CAP_IPC_LOCK); | |
++ cap_lower(new->cap_effective, CAP_IPC_LOCK); | |
+ } | |
+ else | |
+ { | |
+- cap_raise(current->cap_effective, CAP_IPC_LOCK); | |
++ cap_raise(new->cap_effective, CAP_IPC_LOCK); | |
+ } | |
+- return; | |
++ | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++ commit_creds(new); | |
++#else | |
++#undef new | |
++#endif | |
+ } | |
+ | |
+ /** \brief Get number of available RAM pages | |
+diff -Nru fglrx-8.593.orig/firegl_public.h fglrx-8.593/firegl_public.h | |
+--- fglrx-8.593.orig/firegl_public.h 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/firegl_public.h 2009-10-20 12:55:58.364468070 +0200 | |
+@@ -18,6 +18,7 @@ | |
+ #define _FIREGL_PUBLIC_H_ | |
+ | |
+ #include <stdarg.h> | |
++#include <asm/pgtable.h> | |
+ #include "kcl_pci.h" | |
+ #include "kcl_io.h" | |
+ | |
+@@ -591,6 +592,11 @@ | |
+ #define cpu_has_pge test_bit(X86_FEATURE_PGE, &boot_cpu_data.x86_capability) | |
+ #endif | |
+ | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++#undef pgprot_writecombine | |
++#undef pgprot_noncached | |
++#endif | |
++ | |
+ #ifndef pgprot_writecombine | |
+ #define pgprot_writecombine(prot) __pgprot((pgprot_val(prot) & ~(_PAGE_PCD)) | _PAGE_PWT) | |
+ #endif | |
+@@ -599,6 +605,7 @@ | |
+ #define pgprot_noncached(prot) __pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT) | |
+ #endif | |
+ | |
++ | |
+ #endif //FIREGL_USWC_SUPPORT | |
+ | |
+ | |
+diff -Nru fglrx-8.593.orig/kcl_acpi.c fglrx-8.593/kcl_acpi.c | |
+--- fglrx-8.593.orig/kcl_acpi.c 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/kcl_acpi.c 2009-10-20 12:57:47.369195556 +0200 | |
+@@ -18,6 +18,12 @@ | |
+ #include <linux/autoconf.h> | |
+ #include <linux/acpi.h> | |
+ | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++#include <../drivers/acpi/acpica/acconfig.h> | |
++#include <../drivers/acpi/acpica/aclocal.h> | |
++#include <../drivers/acpi/acpica/acobject.h> | |
++#endif | |
++ | |
+ #include "kcl_config.h" | |
+ #include "kcl_type.h" | |
+ #include "kcl_acpi.h" | |
diff -Nru 9-3.orig/packages/Ubuntu/dists/hardy/dkms/patches/2.6.30_support.patch 9-3/packages/Ubuntu/dists/hardy/dkms/patches/2.6.30_support.patch | |
--- 9-3.orig/packages/Ubuntu/dists/hardy/dkms/patches/2.6.30_support.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 9-3/packages/Ubuntu/dists/hardy/dkms/patches/2.6.30_support.patch 2009-10-20 13:13:13.576486505 +0200 | |
@@ -0,0 +1,89 @@ | |
+diff -Nru fglrx-8.593.orig/drm_os_linux.h fglrx-8.593/drm_os_linux.h | |
+--- fglrx-8.593.orig/drm_os_linux.h 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/drm_os_linux.h 2009-10-20 13:08:26.689014147 +0200 | |
+@@ -42,10 +42,12 @@ | |
+ #define DRM_IRQ_ARGS int irq, void *arg, struct pt_regs *regs | |
+ /** backwards compatibility with old irq return values */ | |
+ #ifndef IRQ_HANDLED | |
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) | |
+ typedef void irqreturn_t; | |
+ #define IRQ_HANDLED /* nothing */ | |
+ #define IRQ_NONE /* nothing */ | |
+ #endif | |
++#endif | |
+ | |
+ /** AGP types */ | |
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,70) | |
+diff -Nru fglrx-8.593.orig/firegl_public.c fglrx-8.593/firegl_public.c | |
+--- fglrx-8.593.orig/firegl_public.c 2009-10-20 13:07:27.880473391 +0200 | |
++++ fglrx-8.593/firegl_public.c 2009-10-20 13:09:42.392475262 +0200 | |
+@@ -31,6 +31,7 @@ | |
+ #include <linux/autoconf.h> | |
+ | |
+ #if !defined(CONFIG_X86_PC) | |
++#if !defined(CONFIG_X86_XEN) | |
+ #if !defined(CONFIG_X86_64) | |
+ #if !defined(CONFIG_X86_VOYAGER) | |
+ #if !defined(CONFIG_X86_NUMAQ) | |
+@@ -38,6 +39,7 @@ | |
+ #if !defined(CONFIG_X86_BIGSMP) | |
+ #if !defined(CONFIG_X86_VISWS) | |
+ #if !defined(CONFIG_X86_GENERICARCH) | |
++#if !defined(CONFIG_X86_32) | |
+ #error unknown or undefined architecture configured | |
+ #endif | |
+ #endif | |
+@@ -47,6 +49,8 @@ | |
+ #endif | |
+ #endif | |
+ #endif | |
++#endif | |
++#endif | |
+ | |
+ /* The dirty-page-tracking patch included in NLD 9 SMP kernels defines | |
+ * a static inline function that uses a GPL-only symbol in a header | |
+@@ -1239,7 +1243,11 @@ | |
+ int process_terminated = 1; | |
+ | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++#if !defined(CONFIG_PREEMPT_RT) | |
+ rcu_read_lock(); | |
++#else | |
++ preempt_disable(); | |
++#endif | |
+ #else | |
+ read_lock(&tasklist_lock); | |
+ #endif | |
+@@ -1260,7 +1268,11 @@ | |
+ } | |
+ } | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++#if !defined(CONFIG_PREEMPT_RT) | |
+ rcu_read_unlock(); | |
++#else | |
++ preempt_disable(); | |
++#endif | |
+ #else | |
+ read_unlock(&tasklist_lock); | |
+ #endif | |
+@@ -2275,7 +2287,7 @@ | |
+ * kernel < 2.6.27, on_each_cpu has 4 parameters. | |
+ * kernel >= 2.6.27, on_each_cpu has 3 parameters (removed the "retry" parameter) | |
+ */ | |
+-#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
++#if defined(CONFIG_SMP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
+ # if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) | |
+ on_each_cpu(KCL_flush_tlb_one, &va, 1, 1); | |
+ # else | |
+diff -Nru fglrx-8.593.orig/kcl_pci.c fglrx-8.593/kcl_pci.c | |
+--- fglrx-8.593.orig/kcl_pci.c 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/kcl_pci.c 2009-10-20 13:08:26.689014147 +0200 | |
+@@ -310,3 +310,8 @@ | |
+ } | |
+ #endif //__x86_64__ | |
+ | |
++#undef pci_enable_msi | |
++int pci_enable_msi(struct pci_dev *pdev) | |
++{ | |
++return pci_enable_msi_block(pdev, 1); | |
++} | |
diff -Nru 9-3.orig/packages/Ubuntu/dists/hardy/dkms.conf.in 9-3/packages/Ubuntu/dists/hardy/dkms.conf.in | |
--- 9-3.orig/packages/Ubuntu/dists/hardy/dkms.conf.in 2009-03-18 16:07:25.000000000 +0100 | |
+++ 9-3/packages/Ubuntu/dists/hardy/dkms.conf.in 2009-10-20 12:18:44.822305379 +0200 | |
@@ -7,3 +7,7 @@ | |
AUTOINSTALL="yes" | |
PATCH[0]="fglrx-rt-compat.patch" | |
PATCH_MATCH[0]="rt" | |
+PATCH[1]="2.6.29_support.patch" | |
+PATCH_MATCH[1]="2.6.(29|3[0-9])" | |
+PATCH[2]="2.6.30_support.patch" | |
+PATCH_MATCH[2]="2.6.3[0-9]" | |
diff -Nru 9-3.orig/packages/Ubuntu/dists/intrepid/dkms/patches/2.6.29_support.patch 9-3/packages/Ubuntu/dists/intrepid/dkms/patches/2.6.29_support.patch | |
--- 9-3.orig/packages/Ubuntu/dists/intrepid/dkms/patches/2.6.29_support.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 9-3/packages/Ubuntu/dists/intrepid/dkms/patches/2.6.29_support.patch 2009-10-20 13:13:28.037469742 +0200 | |
@@ -0,0 +1,96 @@ | |
+diff -Nru fglrx-8.593.orig/firegl_public.c fglrx-8.593/firegl_public.c | |
+--- fglrx-8.593.orig/firegl_public.c 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/firegl_public.c 2009-10-20 12:55:58.364468070 +0200 | |
+@@ -1402,7 +1402,11 @@ | |
+ */ | |
+ KCL_TYPE_Uid ATI_API_CALL KCL_GetEffectiveUid(void) | |
+ { | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++ return current->cred->euid; | |
++#else | |
+ return current->euid; | |
++#endif | |
+ } | |
+ | |
+ /** /brief Delay execution for the specified number of microseconds | |
+@@ -1774,15 +1778,30 @@ | |
+ */ | |
+ void ATI_API_CALL KCL_PosixSecurityCapSetIPCLock(unsigned int lock) | |
+ { | |
++ | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++ struct cred *new = prepare_creds(); | |
++ if (!new) { | |
++ printk(KERN_ERR "fglrx: could not allocate memory\n"); | |
++ return; | |
++ } | |
++#else | |
++#define new current | |
++#endif | |
+ if (lock == 0 ) | |
+ { | |
+- cap_lower(current->cap_effective, CAP_IPC_LOCK); | |
++ cap_lower(new->cap_effective, CAP_IPC_LOCK); | |
+ } | |
+ else | |
+ { | |
+- cap_raise(current->cap_effective, CAP_IPC_LOCK); | |
++ cap_raise(new->cap_effective, CAP_IPC_LOCK); | |
+ } | |
+- return; | |
++ | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++ commit_creds(new); | |
++#else | |
++#undef new | |
++#endif | |
+ } | |
+ | |
+ /** \brief Get number of available RAM pages | |
+diff -Nru fglrx-8.593.orig/firegl_public.h fglrx-8.593/firegl_public.h | |
+--- fglrx-8.593.orig/firegl_public.h 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/firegl_public.h 2009-10-20 12:55:58.364468070 +0200 | |
+@@ -18,6 +18,7 @@ | |
+ #define _FIREGL_PUBLIC_H_ | |
+ | |
+ #include <stdarg.h> | |
++#include <asm/pgtable.h> | |
+ #include "kcl_pci.h" | |
+ #include "kcl_io.h" | |
+ | |
+@@ -591,6 +592,11 @@ | |
+ #define cpu_has_pge test_bit(X86_FEATURE_PGE, &boot_cpu_data.x86_capability) | |
+ #endif | |
+ | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++#undef pgprot_writecombine | |
++#undef pgprot_noncached | |
++#endif | |
++ | |
+ #ifndef pgprot_writecombine | |
+ #define pgprot_writecombine(prot) __pgprot((pgprot_val(prot) & ~(_PAGE_PCD)) | _PAGE_PWT) | |
+ #endif | |
+@@ -599,6 +605,7 @@ | |
+ #define pgprot_noncached(prot) __pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT) | |
+ #endif | |
+ | |
++ | |
+ #endif //FIREGL_USWC_SUPPORT | |
+ | |
+ | |
+diff -Nru fglrx-8.593.orig/kcl_acpi.c fglrx-8.593/kcl_acpi.c | |
+--- fglrx-8.593.orig/kcl_acpi.c 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/kcl_acpi.c 2009-10-20 12:57:47.369195556 +0200 | |
+@@ -18,6 +18,12 @@ | |
+ #include <linux/autoconf.h> | |
+ #include <linux/acpi.h> | |
+ | |
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28) | |
++#include <../drivers/acpi/acpica/acconfig.h> | |
++#include <../drivers/acpi/acpica/aclocal.h> | |
++#include <../drivers/acpi/acpica/acobject.h> | |
++#endif | |
++ | |
+ #include "kcl_config.h" | |
+ #include "kcl_type.h" | |
+ #include "kcl_acpi.h" | |
diff -Nru 9-3.orig/packages/Ubuntu/dists/intrepid/dkms/patches/2.6.30_support.patch 9-3/packages/Ubuntu/dists/intrepid/dkms/patches/2.6.30_support.patch | |
--- 9-3.orig/packages/Ubuntu/dists/intrepid/dkms/patches/2.6.30_support.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 9-3/packages/Ubuntu/dists/intrepid/dkms/patches/2.6.30_support.patch 2009-10-20 13:13:21.492468210 +0200 | |
@@ -0,0 +1,89 @@ | |
+diff -Nru fglrx-8.593.orig/drm_os_linux.h fglrx-8.593/drm_os_linux.h | |
+--- fglrx-8.593.orig/drm_os_linux.h 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/drm_os_linux.h 2009-10-20 13:08:26.689014147 +0200 | |
+@@ -42,10 +42,12 @@ | |
+ #define DRM_IRQ_ARGS int irq, void *arg, struct pt_regs *regs | |
+ /** backwards compatibility with old irq return values */ | |
+ #ifndef IRQ_HANDLED | |
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) | |
+ typedef void irqreturn_t; | |
+ #define IRQ_HANDLED /* nothing */ | |
+ #define IRQ_NONE /* nothing */ | |
+ #endif | |
++#endif | |
+ | |
+ /** AGP types */ | |
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,70) | |
+diff -Nru fglrx-8.593.orig/firegl_public.c fglrx-8.593/firegl_public.c | |
+--- fglrx-8.593.orig/firegl_public.c 2009-10-20 13:07:27.880473391 +0200 | |
++++ fglrx-8.593/firegl_public.c 2009-10-20 13:09:42.392475262 +0200 | |
+@@ -31,6 +31,7 @@ | |
+ #include <linux/autoconf.h> | |
+ | |
+ #if !defined(CONFIG_X86_PC) | |
++#if !defined(CONFIG_X86_XEN) | |
+ #if !defined(CONFIG_X86_64) | |
+ #if !defined(CONFIG_X86_VOYAGER) | |
+ #if !defined(CONFIG_X86_NUMAQ) | |
+@@ -38,6 +39,7 @@ | |
+ #if !defined(CONFIG_X86_BIGSMP) | |
+ #if !defined(CONFIG_X86_VISWS) | |
+ #if !defined(CONFIG_X86_GENERICARCH) | |
++#if !defined(CONFIG_X86_32) | |
+ #error unknown or undefined architecture configured | |
+ #endif | |
+ #endif | |
+@@ -47,6 +49,8 @@ | |
+ #endif | |
+ #endif | |
+ #endif | |
++#endif | |
++#endif | |
+ | |
+ /* The dirty-page-tracking patch included in NLD 9 SMP kernels defines | |
+ * a static inline function that uses a GPL-only symbol in a header | |
+@@ -1239,7 +1243,11 @@ | |
+ int process_terminated = 1; | |
+ | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++#if !defined(CONFIG_PREEMPT_RT) | |
+ rcu_read_lock(); | |
++#else | |
++ preempt_disable(); | |
++#endif | |
+ #else | |
+ read_lock(&tasklist_lock); | |
+ #endif | |
+@@ -1260,7 +1268,11 @@ | |
+ } | |
+ } | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++#if !defined(CONFIG_PREEMPT_RT) | |
+ rcu_read_unlock(); | |
++#else | |
++ preempt_disable(); | |
++#endif | |
+ #else | |
+ read_unlock(&tasklist_lock); | |
+ #endif | |
+@@ -2275,7 +2287,7 @@ | |
+ * kernel < 2.6.27, on_each_cpu has 4 parameters. | |
+ * kernel >= 2.6.27, on_each_cpu has 3 parameters (removed the "retry" parameter) | |
+ */ | |
+-#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
++#if defined(CONFIG_SMP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) | |
+ # if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)) | |
+ on_each_cpu(KCL_flush_tlb_one, &va, 1, 1); | |
+ # else | |
+diff -Nru fglrx-8.593.orig/kcl_pci.c fglrx-8.593/kcl_pci.c | |
+--- fglrx-8.593.orig/kcl_pci.c 2009-10-20 12:23:28.000000000 +0200 | |
++++ fglrx-8.593/kcl_pci.c 2009-10-20 13:08:26.689014147 +0200 | |
+@@ -310,3 +310,8 @@ | |
+ } | |
+ #endif //__x86_64__ | |
+ | |
++#undef pci_enable_msi | |
++int pci_enable_msi(struct pci_dev *pdev) | |
++{ | |
++return pci_enable_msi_block(pdev, 1); | |
++} | |
diff -Nru 9-3.orig/packages/Ubuntu/dists/intrepid/dkms.conf.in 9-3/packages/Ubuntu/dists/intrepid/dkms.conf.in | |
--- 9-3.orig/packages/Ubuntu/dists/intrepid/dkms.conf.in 2009-03-18 16:07:25.000000000 +0100 | |
+++ 9-3/packages/Ubuntu/dists/intrepid/dkms.conf.in 2009-10-20 12:18:54.350294972 +0200 | |
@@ -7,3 +7,7 @@ | |
AUTOINSTALL="yes" | |
PATCH[0]="fglrx-rt-compat.patch" | |
PATCH_MATCH[0]="rt" | |
+PATCH[1]="2.6.29_support.patch" | |
+PATCH_MATCH[1]="2.6.(29|3[0-9])" | |
+PATCH[2]="2.6.30_support.patch" | |
+PATCH_MATCH[2]="2.6.3[0-9]" | |
EOT | |
;; | |
esac | |
case $VER in 9-12|8.682.2) patch -p1 << 'EOT' | |
diff -Nru 9-12.orig/packages/Ubuntu/dists/hardy/rules 9-12/packages/Ubuntu/dists/hardy/rules | |
--- 9-12.orig/packages/Ubuntu/dists/hardy/rules 2009-12-02 18:32:39.000000000 +0100 | |
+++ 9-12/packages/Ubuntu/dists/hardy/rules 2009-12-07 02:48:19.000000000 +0100 | |
@@ -121,7 +121,12 @@ | |
dh_install -p$(PKG_driver) "arch/x86/usr/lib/*" "usr/lib32" | |
dh_installdirs -p$(PKG_driver) "usr/lib32/fglrx" | |
+ | |
+ #they don't provide the symlink for us (starting at 8.699) | |
+ dh_link -p$(PKG_driver) usr/lib32/libatiuki.so.1.0 usr/lib32/libatiuki.so.1 | |
endif | |
+ #they don't provide the symlink for us (starting at 8.699) | |
+ dh_link -p$(PKG_driver) usr/lib/libatiuki.so.1.0 usr/lib/libatiuki.so.1 | |
dh_installdocs -p$(PKG_driver) usr/share/doc/fglrx/* --exclude ATI_LICENSE.TXT | |
dh_installinit -p$(PKG_driver) --name="atieventsd" --no-start --update-rcd-params="defaults 31" | |
diff -Nru 9-12.orig/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.install.in 9-12/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.install.in | |
--- 9-12.orig/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.install.in 2009-12-02 18:32:39.000000000 +0100 | |
+++ 9-12/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.install.in 2009-12-07 02:48:19.000000000 +0100 | |
@@ -26,3 +26,6 @@ | |
#CAL stuff | |
arch/#ARCH#/usr/#LIBDIR#/* usr/lib | |
+ | |
+#Install QT4 libraries that weren't around for 9.04 and earlier | |
+arch/#ARCH#/usr/share/ati/#LIBDIR# usr/share/ati | |
diff -Nru 9-12.orig/packages/Ubuntu/dists/intrepid/rules 9-12/packages/Ubuntu/dists/intrepid/rules | |
--- 9-12.orig/packages/Ubuntu/dists/intrepid/rules 2009-12-02 18:32:39.000000000 +0100 | |
+++ 9-12/packages/Ubuntu/dists/intrepid/rules 2009-12-07 02:48:19.000000000 +0100 | |
@@ -121,7 +121,12 @@ | |
dh_install -p$(PKG_driver) "arch/x86/usr/lib/*" "usr/lib32" | |
dh_installdirs -p$(PKG_driver) "usr/lib32/fglrx" | |
+ | |
+ #they don't provide the symlink for us (starting at 8.699) | |
+ dh_link -p$(PKG_driver) usr/lib32/libatiuki.so.1.0 usr/lib32/libatiuki.so.1 | |
endif | |
+ #they don't provide the symlink for us (starting at 8.699) | |
+ dh_link -p$(PKG_driver) usr/lib/libatiuki.so.1.0 usr/lib/libatiuki.so.1 | |
dh_installdocs -p$(PKG_driver) usr/share/doc/fglrx/* --exclude ATI_LICENSE.TXT | |
dh_installinit -p$(PKG_driver) --name="atieventsd" --no-start --update-rcd-params="defaults 31" | |
diff -Nru 9-12.orig/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.install.in 9-12/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.install.in | |
--- 9-12.orig/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.install.in 2009-12-02 18:32:39.000000000 +0100 | |
+++ 9-12/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.install.in 2009-12-07 02:48:19.000000000 +0100 | |
@@ -26,3 +26,6 @@ | |
#CAL stuff | |
arch/#ARCH#/usr/#LIBDIR#/* usr/lib | |
+ | |
+#Install QT4 libraries that weren't around for 9.04 and earlier | |
+arch/#ARCH#/usr/share/ati/#LIBDIR# usr/share/ati | |
EOT | |
;; | |
esac | |
case $VER in 10-1) patch -p1 << 'EOT' | |
diff -Nru 10-1/packages/Ubuntu/ati-packager.sh 10-1.fix/packages/Ubuntu/ati-packager.sh | |
--- 10-1/packages/Ubuntu/ati-packager.sh 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/ati-packager.sh 2010-01-28 01:59:52.000000000 +0100 | |
@@ -62,7 +62,7 @@ | |
release=$1 | |
#if we don't know what we're working with, assume it's supported by the source target | |
- if [ ! -d packages/Ubuntu/dists/$release/control ]; then | |
+ if [ ! -d packages/Ubuntu/dists/$release ]; then | |
release="source" | |
fi | |
@@ -322,9 +322,9 @@ | |
lsb() | |
{ | |
lsb_launcher=`which lsb_release 2>/dev/null` | |
- if [ ! -z "$lsb_launcher" ]; then | |
+ if [ ! -z "$lsb_launcher" ] && [ `lsb_release -i -s` = "Ubuntu" ]; then | |
echo `lsb_release -s -c` | |
- else | |
+ elif [ -f /etc/lsb-release ] && [ `grep ID /etc/lsb-release | awk -F"=" '{ print $2 }'` = "Ubuntu" ]; then | |
echo `grep CODENAME /etc/lsb-release | awk -F"=" '{ print $2 }'` | |
fi | |
} | |
diff -Nru 10-1/packages/Ubuntu/dists/hardy/control 10-1.fix/packages/Ubuntu/dists/hardy/control | |
--- 10-1/packages/Ubuntu/dists/hardy/control 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/hardy/control 2010-01-28 01:59:52.000000000 +0100 | |
@@ -15,9 +15,7 @@ | |
fakeroot, | |
libdrm2, | |
libgl1-mesa-glx, | |
- libxinerama1, | |
- libqtgui4, | |
- execstack | |
+ libxinerama1 | |
Standards-Version: 3.8.0 | |
Homepage: http://ati.amd.com/support/driver.html | |
diff -Nru 10-1/packages/Ubuntu/dists/hardy/dkms/patches/fglrx-rt-compat.patch 10-1.fix/packages/Ubuntu/dists/hardy/dkms/patches/fglrx-rt-compat.patch | |
--- 10-1/packages/Ubuntu/dists/hardy/dkms/patches/fglrx-rt-compat.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/hardy/dkms/patches/fglrx-rt-compat.patch 2009-12-02 08:54:53.000000000 +0100 | |
@@ -0,0 +1,26 @@ | |
+--- a/firegl_public.c | |
++++ b/firegl_public.c | |
+@@ -1352,7 +1352,11 @@ | |
+ int process_terminated = 1; | |
+ | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++#if !defined(CONFIG_PREEMPT_RT) | |
+ rcu_read_lock(); | |
++#else | |
++ preempt_disable(); | |
++#endif | |
+ #else | |
+ read_lock(&tasklist_lock); | |
+ #endif | |
+@@ -1373,7 +1377,11 @@ | |
+ } | |
+ } | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++#if !defined(CONFIG_PREEMPT_RT) | |
+ rcu_read_unlock(); | |
++#else | |
++ preempt_enable(); | |
++#endif | |
+ #else | |
+ read_unlock(&tasklist_lock); | |
+ #endif | |
diff -Nru 10-1/packages/Ubuntu/dists/hardy/dkms.conf.in 10-1.fix/packages/Ubuntu/dists/hardy/dkms.conf.in | |
--- 10-1/packages/Ubuntu/dists/hardy/dkms.conf.in 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/hardy/dkms.conf.in 2010-01-28 01:59:52.000000000 +0100 | |
@@ -6,6 +6,6 @@ | |
DEST_MODULE_LOCATION[0]="/kernel/drivers/char/drm" | |
AUTOINSTALL="yes" | |
PATCH[0]="rt_preempt_28.patch" | |
-PATCH_MATCH[0]="2.6.28" | |
+PATCH_MATCH[0]="^2.6.28\-[0-9]*\-rt$" | |
PATCH[1]="rt_preempt_31.patch" | |
-PATCH_MATCH[1]="2.6.31" | |
+PATCH_MATCH[1]="^2.6.31\-[0-9]*\-rt$" | |
diff -Nru 10-1/packages/Ubuntu/dists/hardy/rules 10-1.fix/packages/Ubuntu/dists/hardy/rules | |
--- 10-1/packages/Ubuntu/dists/hardy/rules 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/hardy/rules 2010-01-28 01:59:52.000000000 +0100 | |
@@ -121,22 +121,12 @@ | |
dh_install -p$(PKG_driver) "arch/x86/usr/lib/*" "usr/lib32" | |
dh_installdirs -p$(PKG_driver) "usr/lib32/fglrx" | |
- for i in \ | |
- debian/$(PKG_driver)/$(DRIDIR32)/dri/fglrx_dri.so \ | |
- debian/$(PKG_driver)/usr/lib32/libGL.so.* \ | |
- ; do execstack -q $$i; execstack -c $$i; done | |
+ #they don't provide the symlink for us (starting at 8.699) | |
+ dh_link -p$(PKG_driver) usr/lib32/libatiuki.so.1.0 usr/lib32/libatiuki.so.1 | |
endif | |
+ #they don't provide the symlink for us (starting at 8.699) | |
+ dh_link -p$(PKG_driver) usr/lib/libatiuki.so.1.0 usr/lib/libatiuki.so.1 | |
dh_installdocs -p$(PKG_driver) usr/share/doc/fglrx/* --exclude ATI_LICENSE.TXT | |
dh_installinit -p$(PKG_driver) --name="atieventsd" --no-start --update-rcd-params="defaults 31" | |
- | |
- for i in \ | |
- debian/$(PKG_driver)/usr/bin/atiode \ | |
- debian/$(PKG_driver)/usr/sbin/amdnotifyui \ | |
- debian/$(PKG_driver)/usr/lib/dri/fglrx_dri.so \ | |
- debian/$(PKG_driver)/usr/lib/libGL.so.* \ | |
- ; do execstack -q $$i; execstack -c $$i; done | |
- | |
-binary-install/$(PKG_control):: | |
- execstack -c debian/$(PKG_control)/usr/bin/amdcccle | |
diff -Nru 10-1/packages/Ubuntu/dists/hardy/xorg-driver-fglrx-dev.install.in 10-1.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx-dev.install.in | |
--- 10-1/packages/Ubuntu/dists/hardy/xorg-driver-fglrx-dev.install.in 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx-dev.install.in 2010-01-28 01:59:52.000000000 +0100 | |
@@ -1,7 +1,7 @@ | |
-debian/overrides/xorg-driver-fglrx-dev usr/share/lintian/overrides | |
+debian/overrides/xorg-driver-fglrx-dev usr/share/lintian/overrides | |
-usr/include/* usr/include | |
-usr/X11R6/include/* usr/include | |
+usr/include/* usr/include | |
+usr/X11R6/include/* usr/include | |
#XARCH#/usr/X11R6/#LIBDIR#/modules/*.a usr/lib | |
-arch/#ARCH#/usr/X11R6/#LIBDIR#/*.a usr/lib | |
+arch/#ARCH#/usr/X11R6/#LIBDIR#/*.a usr/lib | |
diff -Nru 10-1/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.install.in 10-1.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.install.in | |
--- 10-1/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.install.in 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.install.in 2010-01-28 01:59:52.000000000 +0100 | |
@@ -26,3 +26,6 @@ | |
#CAL stuff | |
arch/#ARCH#/usr/#LIBDIR#/* usr/lib | |
+ | |
+#Install QT4 libraries that weren't around for 9.04 and earlier | |
+arch/#ARCH#/usr/share/ati/#LIBDIR# usr/share/ati | |
diff -Nru 10-1/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.postrm 10-1.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.postrm | |
--- 10-1/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.postrm 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.postrm 2010-01-28 01:59:52.000000000 +0100 | |
@@ -22,10 +22,9 @@ | |
remove|purge) | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libGL.so.1.2.xlibmesa /usr/lib/libGL.so.1.2 > /dev/null | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib32/fglrx/libGL.so.1.2.xlibmesa /usr/lib32/libGL.so.1.2 > /dev/null | |
- dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libdri.so.xlibmesa /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libglx.so.xlibmesa /usr/lib/xorg/modules/extensions/libglx.so > /dev/null | |
;; | |
- | |
+ | |
upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) | |
;; | |
diff -Nru 10-1/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.preinst 10-1.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.preinst | |
--- 10-1/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.preinst 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.preinst 2010-01-28 01:59:52.000000000 +0100 | |
@@ -71,6 +71,12 @@ | |
/usr/X11R6/lib32/libGL.so.1.2 ; do \ | |
dpkg-divert --remove --package $PKGNAME $i > /dev/null; \ | |
done | |
+ | |
+ #before 8.699 we had to divert libdri | |
+ dpkg-divert --remove --rename --package $PKGNAME \ | |
+ --divert /usr/lib/fglrx/libdri.so.xlibmesa \ | |
+ /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
+ | |
} | |
case "$1" in | |
@@ -84,7 +90,6 @@ | |
mkdir -p /usr/lib/fglrx | |
fi | |
dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libGL.so.1.2.xlibmesa /usr/lib/libGL.so.1.2 > /dev/null | |
- dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libdri.so.xlibmesa /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libglx.so.xlibmesa /usr/lib/xorg/modules/extensions/libglx.so > /dev/null | |
if [ -n "$HAS_LIB32" ]; then | |
@@ -105,6 +110,10 @@ | |
mv_conffile "/etc/ati/logo_mask.xbm.example" | |
mv_conffile "/etc/ati/signature" | |
mv_conffile "/etc/ati/logo.xbm.example" | |
+ | |
+ ## Just in case they installed without debs before, finish a proper uninstall routine ## | |
+ ## This will error out on any failure (which should be cleaned up anyway before installing debs) ## | |
+ [ -x /usr/share/ati/fglrx-uninstall.sh ] && /usr/share/ati/fglrx-uninstall.sh | |
;; | |
abort-upgrade) | |
diff -Nru 10-1/packages/Ubuntu/dists/intrepid/control 10-1.fix/packages/Ubuntu/dists/intrepid/control | |
--- 10-1/packages/Ubuntu/dists/intrepid/control 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/intrepid/control 2010-01-28 01:59:52.000000000 +0100 | |
@@ -15,9 +15,7 @@ | |
fakeroot, | |
libdrm2, | |
libgl1-mesa-glx, | |
- libxinerama1, | |
- libqtgui4, | |
- execstack | |
+ libxinerama1 | |
Standards-Version: 3.8.0 | |
Homepage: http://ati.amd.com/support/driver.html | |
diff -Nru 10-1/packages/Ubuntu/dists/intrepid/dkms/patches/fglrx-rt-compat.patch 10-1.fix/packages/Ubuntu/dists/intrepid/dkms/patches/fglrx-rt-compat.patch | |
--- 10-1/packages/Ubuntu/dists/intrepid/dkms/patches/fglrx-rt-compat.patch 1970-01-01 01:00:00.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/intrepid/dkms/patches/fglrx-rt-compat.patch 2009-12-02 08:54:53.000000000 +0100 | |
@@ -0,0 +1,26 @@ | |
+--- a/firegl_public.c | |
++++ b/firegl_public.c | |
+@@ -1352,7 +1352,11 @@ | |
+ int process_terminated = 1; | |
+ | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++#if !defined(CONFIG_PREEMPT_RT) | |
+ rcu_read_lock(); | |
++#else | |
++ preempt_disable(); | |
++#endif | |
+ #else | |
+ read_lock(&tasklist_lock); | |
+ #endif | |
+@@ -1373,7 +1377,11 @@ | |
+ } | |
+ } | |
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) | |
++#if !defined(CONFIG_PREEMPT_RT) | |
+ rcu_read_unlock(); | |
++#else | |
++ preempt_enable(); | |
++#endif | |
+ #else | |
+ read_unlock(&tasklist_lock); | |
+ #endif | |
diff -Nru 10-1/packages/Ubuntu/dists/intrepid/dkms.conf.in 10-1.fix/packages/Ubuntu/dists/intrepid/dkms.conf.in | |
--- 10-1/packages/Ubuntu/dists/intrepid/dkms.conf.in 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/intrepid/dkms.conf.in 2010-01-28 01:59:52.000000000 +0100 | |
@@ -6,6 +6,6 @@ | |
DEST_MODULE_LOCATION[0]="/kernel/drivers/char/drm" | |
AUTOINSTALL="yes" | |
PATCH[0]="rt_preempt_28.patch" | |
-PATCH_MATCH[0]="2.6.28" | |
+PATCH_MATCH[0]="^2.6.28\-[0-9]*\-rt$" | |
PATCH[1]="rt_preempt_31.patch" | |
-PATCH_MATCH[1]="2.6.31" | |
+PATCH_MATCH[1]="^2.6.31\-[0-9]*\-rt$" | |
diff -Nru 10-1/packages/Ubuntu/dists/intrepid/rules 10-1.fix/packages/Ubuntu/dists/intrepid/rules | |
--- 10-1/packages/Ubuntu/dists/intrepid/rules 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/intrepid/rules 2010-01-28 01:59:52.000000000 +0100 | |
@@ -121,22 +121,12 @@ | |
dh_install -p$(PKG_driver) "arch/x86/usr/lib/*" "usr/lib32" | |
dh_installdirs -p$(PKG_driver) "usr/lib32/fglrx" | |
- for i in \ | |
- debian/$(PKG_driver)/$(DRIDIR32)/dri/fglrx_dri.so \ | |
- debian/$(PKG_driver)/usr/lib32/libGL.so.* \ | |
- ; do execstack -q $$i; execstack -c $$i; done | |
+ #they don't provide the symlink for us (starting at 8.699) | |
+ dh_link -p$(PKG_driver) usr/lib32/libatiuki.so.1.0 usr/lib32/libatiuki.so.1 | |
endif | |
+ #they don't provide the symlink for us (starting at 8.699) | |
+ dh_link -p$(PKG_driver) usr/lib/libatiuki.so.1.0 usr/lib/libatiuki.so.1 | |
dh_installdocs -p$(PKG_driver) usr/share/doc/fglrx/* --exclude ATI_LICENSE.TXT | |
dh_installinit -p$(PKG_driver) --name="atieventsd" --no-start --update-rcd-params="defaults 31" | |
- | |
- for i in \ | |
- debian/$(PKG_driver)/usr/bin/atiode \ | |
- debian/$(PKG_driver)/usr/sbin/amdnotifyui \ | |
- debian/$(PKG_driver)/usr/lib/dri/fglrx_dri.so \ | |
- debian/$(PKG_driver)/usr/lib/libGL.so.* \ | |
- ; do execstack -q $$i; execstack -c $$i; done | |
- | |
-binary-install/$(PKG_control):: | |
- execstack -c debian/$(PKG_control)/usr/bin/amdcccle | |
diff -Nru 10-1/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx-dev.install.in 10-1.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx-dev.install.in | |
--- 10-1/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx-dev.install.in 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx-dev.install.in 2010-01-28 01:59:52.000000000 +0100 | |
@@ -1,7 +1,7 @@ | |
-debian/overrides/xorg-driver-fglrx-dev usr/share/lintian/overrides | |
+debian/overrides/xorg-driver-fglrx-dev usr/share/lintian/overrides | |
-usr/include/* usr/include | |
-usr/X11R6/include/* usr/include | |
+usr/include/* usr/include | |
+usr/X11R6/include/* usr/include | |
#XARCH#/usr/X11R6/#LIBDIR#/modules/*.a usr/lib | |
-arch/#ARCH#/usr/X11R6/#LIBDIR#/*.a usr/lib | |
+arch/#ARCH#/usr/X11R6/#LIBDIR#/*.a usr/lib | |
diff -Nru 10-1/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.install.in 10-1.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.install.in | |
--- 10-1/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.install.in 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.install.in 2010-01-28 01:59:52.000000000 +0100 | |
@@ -26,3 +26,6 @@ | |
#CAL stuff | |
arch/#ARCH#/usr/#LIBDIR#/* usr/lib | |
+ | |
+#Install QT4 libraries that weren't around for 9.04 and earlier | |
+arch/#ARCH#/usr/share/ati/#LIBDIR# usr/share/ati | |
diff -Nru 10-1/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.postrm 10-1.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.postrm | |
--- 10-1/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.postrm 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.postrm 2010-01-28 01:59:52.000000000 +0100 | |
@@ -22,10 +22,9 @@ | |
remove|purge) | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libGL.so.1.2.xlibmesa /usr/lib/libGL.so.1.2 > /dev/null | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib32/fglrx/libGL.so.1.2.xlibmesa /usr/lib32/libGL.so.1.2 > /dev/null | |
- dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libdri.so.xlibmesa /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
dpkg-divert --remove --rename --package $PKGNAME --divert /usr/lib/fglrx/libglx.so.xlibmesa /usr/lib/xorg/modules/extensions/libglx.so > /dev/null | |
;; | |
- | |
+ | |
upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) | |
;; | |
diff -Nru 10-1/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.preinst 10-1.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.preinst | |
--- 10-1/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.preinst 2010-01-15 00:42:21.000000000 +0100 | |
+++ 10-1.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.preinst 2010-01-28 01:59:52.000000000 +0100 | |
@@ -71,6 +71,12 @@ | |
/usr/X11R6/lib32/libGL.so.1.2 ; do \ | |
dpkg-divert --remove --package $PKGNAME $i > /dev/null; \ | |
done | |
+ | |
+ #before 8.699 we had to divert libdri | |
+ dpkg-divert --remove --rename --package $PKGNAME \ | |
+ --divert /usr/lib/fglrx/libdri.so.xlibmesa \ | |
+ /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
+ | |
} | |
case "$1" in | |
@@ -84,7 +90,6 @@ | |
mkdir -p /usr/lib/fglrx | |
fi | |
dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libGL.so.1.2.xlibmesa /usr/lib/libGL.so.1.2 > /dev/null | |
- dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libdri.so.xlibmesa /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
dpkg-divert --add --rename --package $PKGNAME --divert /usr/lib/fglrx/libglx.so.xlibmesa /usr/lib/xorg/modules/extensions/libglx.so > /dev/null | |
if [ -n "$HAS_LIB32" ]; then | |
@@ -105,6 +110,10 @@ | |
mv_conffile "/etc/ati/logo_mask.xbm.example" | |
mv_conffile "/etc/ati/signature" | |
mv_conffile "/etc/ati/logo.xbm.example" | |
+ | |
+ ## Just in case they installed without debs before, finish a proper uninstall routine ## | |
+ ## This will error out on any failure (which should be cleaned up anyway before installing debs) ## | |
+ [ -x /usr/share/ati/fglrx-uninstall.sh ] && /usr/share/ati/fglrx-uninstall.sh | |
;; | |
abort-upgrade) | |
EOT | |
;; | |
esac | |
# http://aur.archlinux.org/packages/catalyst-test/catalyst-test/fglrx-2.6.33.patch | |
case $VER in 10-1|10-2|10-3|10-4|*) grep -q generated/autoconf.h common/lib/modules/fglrx/build_mod/firegl_public.c || patch -p1 << 'EOT' | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/drmP.h | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/drmP.h | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/drmP.h 2010-01-28 19:57:07.562644291 +0200 | |
@@ -42,7 +42,12 @@ | |
* can build the DRM (part of PI DRI). 4/21/2000 S + B */ | |
#include <asm/current.h> | |
#endif /* __alpha__ */ | |
+#include <linux/version.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
#include <linux/module.h> | |
#include <linux/kernel.h> | |
#include <linux/miscdevice.h> | |
@@ -51,7 +56,6 @@ | |
#include <linux/init.h> | |
#include <linux/file.h> | |
#include <linux/pci.h> | |
-#include <linux/version.h> | |
#include <linux/sched.h> | |
#include <linux/smp_lock.h> /* For (un)lock_kernel */ | |
#include <linux/mm.h> | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c 2010-01-29 14:21:58.687999115 +0200 | |
@@ -28,7 +28,11 @@ | |
#error Kernel versions older than 2.6.0 are no longer supported by this module. | |
#endif | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
#if !defined(CONFIG_X86) | |
#if !defined(CONFIG_X86_PC) | |
@@ -163,8 +167,12 @@ | |
// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h. | |
#ifndef UTS_RELEASE | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/utsrelease.h> | |
+#else | |
#include <linux/utsrelease.h> | |
#endif | |
+#endif | |
#if defined(__i386__) | |
#ifndef do_div | |
@@ -1472,7 +1472,16 @@ | |
#ifndef __HAVE_ARCH_CMPXCHG | |
return __fgl_cmpxchg(ptr,old,new,size); | |
#else | |
- return __cmpxchg(ptr,old,new,size); | |
+ switch (size) { | |
+ case 1: { volatile u8 *_ptr = ptr; return cmpxchg(_ptr, old, new); } | |
+ case 2: { volatile u16 *_ptr = ptr; return cmpxchg(_ptr, old, new); } | |
+ case 4: { volatile u32 *_ptr = ptr; return cmpxchg(_ptr, old, new); } | |
+#ifdef __x86_64__ | |
+ case 8: { volatile u64 *_ptr = ptr; return cmpxchg(_ptr, old, new); } | |
+#endif | |
+ default: | |
+ return old; | |
+ } | |
#endif | |
} | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c 2010-01-28 19:57:17.897225045 +0200 | |
@@ -15,7 +15,11 @@ | |
****************************************************************************/ | |
#include <linux/version.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
#include <linux/acpi.h> | |
#include "kcl_config.h" | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c 2010-01-28 19:57:26.104892082 +0200 | |
@@ -31,7 +31,11 @@ | |
*/ | |
#include <linux/version.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
#include <linux/pci.h> | |
#include <linux/agp_backend.h> | |
#include <linux/string.h> | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c 2010-01-28 19:57:34.337558105 +0200 | |
@@ -37,7 +37,11 @@ | |
*/ | |
#include <linux/version.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
#include <linux/poll.h> | |
#include <linux/signal.h> | |
#include <asm/io.h> | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h 2010-01-28 19:57:43.599182385 +0200 | |
@@ -20,7 +20,11 @@ | |
#define KCL_OSCONFIG_H | |
#include <linux/version.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
// Choose modern way to call 32-on-64 IOCTLs if configured in the kernel | |
#if defined(CONFIG_COMPAT) && LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9) | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c 2010-01-28 19:57:51.295870149 +0200 | |
@@ -31,7 +31,11 @@ | |
*/ | |
#include <linux/version.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
#include <linux/pci.h> | |
#include "kcl_config.h" | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c 2010-01-28 19:57:59.728528058 +0200 | |
@@ -30,7 +30,12 @@ | |
* | |
*/ | |
+#include <linux/version.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
#include <linux/string.h> | |
#include <linux/module.h> | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c 2010-01-28 19:58:08.936154527 +0200 | |
@@ -31,7 +31,11 @@ | |
*/ | |
#include <linux/version.h> | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) | |
+#include <generated/autoconf.h> | |
+#else | |
#include <linux/autoconf.h> | |
+#endif | |
#include <linux/wait.h> | |
#include <linux/highmem.h> | |
#include <linux/sched.h> | |
Index: ati10.1/common/lib/modules/fglrx/build_mod/make.sh | |
=================================================================== | |
--- ati10.1/common/lib/modules/fglrx/build_mod/make.sh | |
+++ ati10.1/common/lib/modules/fglrx/build_mod/make.sh 2010-01-28 19:55:10.849378991 +0200 | |
@@ -218,8 +218,15 @@ | |
# UTS-define is in external version-*.h files, i.e. linux-2.2.14-5.0-RedHat does this flaw | |
kernel_release=`cat $linuxincludes/linux/version-*.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2` | |
else | |
- # For 2.6.18 or higher, UTS-define is defined in utsrelease.h. | |
- kernel_release=`cat $linuxincludes/linux/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2` | |
+ UTS_REL_COUNT=`cat $linuxincludes/generated/utsrelease.h 2>/dev/null | grep UTS_RELEASE -c` | |
+ | |
+ if [ $UTS_REL_COUNT -gt 0 ]; then | |
+ # 2.6.33+ | |
+ kernel_release=`cat $linuxincludes/generated/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2` | |
+ else | |
+ # For 2.6.18 to 2.6.32, UTS-define is defined in utsrelease.h. | |
+ kernel_release=`cat $linuxincludes/linux/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2` | |
+ fi | |
fi | |
fi | |
fi | |
@@ -302,7 +309,8 @@ | |
# 3 | |
# linux/autoconf.h may contain this: #define CONFIG_SMP 1 | |
-src_file=$linuxincludes/linux/autoconf.h | |
+src_file=$linuxincludes/generated/autoconf.h | |
+[ -e $src_file ] || src_file=$linuxincludes/linux/autoconf.h | |
if [ ! -e $src_file ]; then | |
echo "Warning:" >> $logfile | |
@@ -355,7 +363,8 @@ | |
MODVERSIONS=0 | |
# linux/autoconf.h may contain this: #define CONFIG_MODVERSIONS 1 | |
-src_file=$linuxincludes/linux/autoconf.h | |
+src_file=$linuxincludes/generated/autoconf.h | |
+[ -e $src_file ] || src_file=$linuxincludes/linux/autoconf.h | |
if [ ! -e $src_file ]; | |
then | |
echo "Warning:" >> $logfile | |
EOT | |
;; | |
esac | |
# http://aur.archlinux.org/packages/catalyst-test/catalyst-test/fglrx-2.6.34-rc4.patch | |
case $VER in 10-1|10-2|10-3|10-4|*) grep -q linux/slab.h common/lib/modules/fglrx/build_mod/kcl_wait.c || patch -p1 << 'EOT' | |
--- ati10.4/common/lib/modules/fglrx/build_mod/kcl_wait2.c 2010-04-13 20:02:46.494496561 +0200 | |
+++ ati10.4/common/lib/modules/fglrx/build_mod/kcl_wait.c 2010-04-13 19:52:00.054563389 +0200 | |
@@ -39,6 +39,7 @@ | |
#include <linux/wait.h> | |
#include <linux/highmem.h> | |
#include <linux/sched.h> | |
+#include <linux/slab.h> | |
#include "kcl_config.h" | |
#include "kcl_wait.h" | |
EOT | |
;; | |
esac | |
case $VER in 10-4) patch -p1 << 'EOT' | |
diff -Nru 10-4/packages/Ubuntu/dists/hardy/fglrx-amdcccle.install.in 10-4.fix/packages/Ubuntu/dists/hardy/fglrx-amdcccle.install.in | |
--- 10-4/packages/Ubuntu/dists/hardy/fglrx-amdcccle.install.in 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/hardy/fglrx-amdcccle.install.in 2010-04-29 02:22:00.000000000 +0200 | |
@@ -2,5 +2,5 @@ | |
usr/share/icons/*.xpm usr/share/pixmaps | |
usr/share/ati usr/share | |
usr/share/applications usr/share | |
-usr/X11R6/bin/* #DRIDIR#/bin | |
+usr/X11R6/bin/* usr/bin | |
arch/#ARCH#/usr/X11R6/bin/amdcccle usr/bin | |
diff -Nru 10-4/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.dirs 10-4.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.dirs | |
--- 10-4/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.dirs 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/hardy/xorg-driver-fglrx.dirs 2010-04-29 02:22:00.000000000 +0200 | |
@@ -1,2 +1,4 @@ | |
usr/lib/fglrx | |
usr/share/fglrx | |
+lib/fglrx | |
+usr/lib/fglrx/etc/ati | |
diff -Nru 10-4/packages/Ubuntu/dists/intrepid/fglrx-amdcccle.install.in 10-4.fix/packages/Ubuntu/dists/intrepid/fglrx-amdcccle.install.in | |
--- 10-4/packages/Ubuntu/dists/intrepid/fglrx-amdcccle.install.in 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/intrepid/fglrx-amdcccle.install.in 2010-04-29 02:22:00.000000000 +0200 | |
@@ -2,5 +2,5 @@ | |
usr/share/icons/*.xpm usr/share/pixmaps | |
usr/share/ati usr/share | |
usr/share/applications usr/share | |
-usr/X11R6/bin/* #DRIDIR#/bin | |
+usr/X11R6/bin/* usr/bin | |
arch/#ARCH#/usr/X11R6/bin/amdcccle usr/bin | |
diff -Nru 10-4/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.dirs 10-4.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.dirs | |
--- 10-4/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.dirs 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/intrepid/xorg-driver-fglrx.dirs 2010-04-29 02:22:00.000000000 +0200 | |
@@ -1,2 +1,4 @@ | |
usr/lib/fglrx | |
usr/share/fglrx | |
+lib/fglrx | |
+usr/lib/fglrx/etc/ati | |
diff -Nru 10-4/packages/Ubuntu/dists/lucid/clean 10-4.fix/packages/Ubuntu/dists/lucid/clean | |
--- 10-4/packages/Ubuntu/dists/lucid/clean 1970-01-01 01:00:00.000000000 +0100 | |
+++ 10-4.fix/packages/Ubuntu/dists/lucid/clean 2010-04-29 02:22:00.000000000 +0200 | |
@@ -0,0 +1,7 @@ | |
+debian/10fglrx | |
+debian/dkms.conf | |
+debian/fglrx.install | |
+debian/fglrx-dev.install | |
+debian/fglrx-amdcccle.install | |
+debian/overrides/fglrx | |
+debian/modaliases/fglrx-modules.alias.override | |
diff -Nru 10-4/packages/Ubuntu/dists/lucid/control 10-4.fix/packages/Ubuntu/dists/lucid/control | |
--- 10-4/packages/Ubuntu/dists/lucid/control 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/lucid/control 2010-04-29 02:22:00.000000000 +0200 | |
@@ -1,7 +1,7 @@ | |
Source: fglrx-installer | |
Section: restricted/misc | |
Priority: extra | |
-Maintainer: Mario Limonciello <[email protected]> | |
+Maintainer: Ubuntu Core Developers <[email protected]> | |
Uploaders: Mario Limonciello <[email protected]>, Alberto Milone <[email protected]> | |
Build-Depends: debhelper (>= 7), | |
libxext6, | |
diff -Nru 10-4/packages/Ubuntu/dists/lucid/fglrx.dirs 10-4.fix/packages/Ubuntu/dists/lucid/fglrx.dirs | |
--- 10-4/packages/Ubuntu/dists/lucid/fglrx.dirs 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/lucid/fglrx.dirs 2010-04-29 02:22:00.000000000 +0200 | |
@@ -1,2 +1,4 @@ | |
usr/lib/fglrx | |
usr/share/fglrx | |
+lib/fglrx | |
+usr/lib/fglrx/etc/ati | |
diff -Nru 10-4/packages/Ubuntu/dists/lucid/fglrx.install.in 10-4.fix/packages/Ubuntu/dists/lucid/fglrx.install.in | |
--- 10-4/packages/Ubuntu/dists/lucid/fglrx.install.in 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/lucid/fglrx.install.in 2010-04-29 02:22:00.000000000 +0200 | |
@@ -14,9 +14,9 @@ | |
debian/overrides/fglrx usr/share/lintian/overrides | |
debian/acpi/fglrx-*-aticonfig etc/acpi/events | |
debian/acpi/fglrx-powermode.sh etc/acpi | |
-debian/10fglrx etc/X11/Xsession.d | |
-etc/ati etc | |
-debian/replacements/authatieventsd.sh etc/ati | |
+debian/10fglrx #DRIDIR# | |
+etc/ati/* #DRIDIR#/etc/ati | |
+debian/replacements/authatieventsd.sh #DRIDIR#/etc/ati | |
#binaries | |
arch/#ARCH#/usr/sbin/* #DRIDIR#/bin | |
diff -Nru 10-4/packages/Ubuntu/dists/lucid/fglrx.postinst 10-4.fix/packages/Ubuntu/dists/lucid/fglrx.postinst | |
--- 10-4/packages/Ubuntu/dists/lucid/fglrx.postinst 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/lucid/fglrx.postinst 2010-04-29 02:22:00.000000000 +0200 | |
@@ -108,7 +108,10 @@ | |
--slave /usr/bin/atieventsd atieventsd /usr/lib/fglrx/bin/atieventsd \ | |
--slave /usr/lib/xorg/modules/drivers/fglrx_drv.so fglrx_drv /usr/lib/fglrx/xorg/modules/drivers/fglrx_drv.so \ | |
--slave /usr/lib/dri/fglrx_dri.so fglrx_dri /usr/lib/fglrx/dri/fglrx_dri.so \ | |
- --slave /etc/modprobe.d/fglrx.conf fglrx_modconf /usr/lib/fglrx/modprobe.conf \ | |
+ --slave /usr/lib/libAMDXvBA.cap libAMDXvBA_cap /usr/lib/fglrx/libAMDXvBA.cap \ | |
+ --slave /etc/modprobe.d/fglrx.conf fglrx_modconf /lib/fglrx/modprobe.conf \ | |
+ --slave /etc/X11/Xsession.d/10fglrx 10fglrx /usr/lib/fglrx/10fglrx \ | |
+ --slave /etc/ati ati_conf /usr/lib/fglrx/etc/ati \ | |
--slave /usr/lib/xorg/extra-modules xorg_extra_modules /usr/lib/fglrx/xorg \ | |
# ldconfig needs to be run immediately as we're changing /etc/ld.so.conf.d/ with | |
# alternatives. | |
@@ -126,7 +129,8 @@ | |
update-initramfs -u | |
if [ -n "$NEWEST_KERNEL" ] && [ ${CURRENT_KERNEL} != ${NEWEST_KERNEL} ]; then | |
- update-initramfs -u -k $CURRENT_KERNEL | |
+ # This can fail when dealing with a chroot see LP: #556653 | |
+ update-initramfs -u -k $CURRENT_KERNEL || true | |
fi | |
fi | |
diff -Nru 10-4/packages/Ubuntu/dists/lucid/fglrx.preinst 10-4.fix/packages/Ubuntu/dists/lucid/fglrx.preinst | |
--- 10-4/packages/Ubuntu/dists/lucid/fglrx.preinst 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/lucid/fglrx.preinst 2010-04-29 02:22:00.000000000 +0200 | |
@@ -14,39 +14,23 @@ | |
# For details see /usr/share/doc/packaging-manual/ | |
PKGNAME=fglrx | |
+OLDPKGNAME=xorg-driver-fglrx | |
if [ `dpkg --print-architecture` = "amd64" ]; then | |
HAS_LIB32="yes" | |
fi | |
-# Snippet from http://www.dpkg.org/dpkg/ConffileHandling | |
-mv_conffile() { | |
- CONFFILE="$1" | |
- | |
- if [ -e "$CONFFILE" ]; then | |
- md5sum="`md5sum \"$CONFFILE\" | sed -e \"s/ .*//\"`" | |
- old_md5sum="`sed -n -e \"/^Conffiles:/,/^[^ ]/{\\\\' $CONFFILE'{s/.* //;p}}\" /var/lib/dpkg/status`" | |
- if [ "$md5sum" != "$old_md5sum" ]; then | |
- echo "Conffile $CONFFILE has been modified by you." | |
- echo "AMD graphics driver requires $CONFFILE to be updated when driver is updated." | |
- echo "Saving as $CONFFILE.dpkg-bak ..." | |
- mv -f "$CONFFILE" "$CONFFILE".dpkg-bak | |
- fi | |
- fi | |
-} | |
- | |
- | |
fix_diversions() | |
{ | |
# Remove very old style diversions | |
if [ -d /usr/share/fglrx/diversions ]; then | |
if [ -n "$HAS_LIB32" ]; then | |
- dpkg-divert --remove --package $PKGNAME \ | |
+ dpkg-divert --remove --package $OLDPKGNAME \ | |
--divert /usr/share/fglrx/diversions/libGL.so.1.2_32bit \ | |
--rename /usr/lib32/libGL.so.1.2 | |
fi | |
- dpkg-divert --remove --package $PKGNAME \ | |
+ dpkg-divert --remove --package $OLDPKGNAME \ | |
--divert /usr/share/fglrx/diversions/libGL.so.1.2 \ | |
--rename /usr/lib/libGL.so.1.2 | |
@@ -69,13 +53,17 @@ | |
/usr/X11R6/lib/libGL.so.1.2 \ | |
/usr/X11R6/lib32/libGL.so.1 \ | |
/usr/X11R6/lib32/libGL.so.1.2 ; do \ | |
- dpkg-divert --remove --package $PKGNAME $i > /dev/null; \ | |
+ dpkg-divert --remove --package $OLDPKGNAME $i > /dev/null; \ | |
done | |
#before 8.699 we had to divert libdri | |
- dpkg-divert --remove --rename --package $PKGNAME \ | |
- --divert /usr/lib/fglrx/libdri.so.xlibmesa \ | |
+ if dpkg-divert --list $OLDPKGNAME | \ | |
+ grep /usr/lib/xorg/modules/extensions/libdri.so > /dev/null ; then | |
+ rm -f /usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
+ dpkg-divert --remove --rename --package $OLDPKGNAME \ | |
+ --divert /usr/lib/fglrx/libdri.so.xlibmesa \ | |
/usr/lib/xorg/modules/extensions/libdri.so > /dev/null | |
+ fi | |
} | |
@@ -85,21 +73,20 @@ | |
### remove old fglrx diversions ### | |
fix_diversions | |
- ### Remove user changes to "conffiles"" ### | |
- ### These files are stored in /etc but shouldn't be treated ### | |
- ### as conf files because updated drivers may stop working ### | |
- ### if they are modified. ### | |
- mv_conffile "/etc/ati/amdpcsdb.default" | |
- mv_conffile "/etc/ati/atiogl.xml" | |
- mv_conffile "/etc/ati/authatieventsd.sh" | |
- mv_conffile "/etc/ati/control" | |
- mv_conffile "/etc/ati/logo_mask.xbm.example" | |
- mv_conffile "/etc/ati/signature" | |
- mv_conffile "/etc/ati/logo.xbm.example" | |
+ # Remove the file if it's not a symlink (see LP: #552903) | |
+ if [ ! -L /etc/X11/Xsession.d/10fglrx ]; then | |
+ rm -f /etc/X11/Xsession.d/10fglrx | |
+ fi | |
## Just in case they installed without debs before, finish a proper uninstall routine ## | |
## This will error out on any failure (which should be cleaned up anyway before installing debs) ## | |
[ -x /usr/share/ati/fglrx-uninstall.sh ] && /usr/share/ati/fglrx-uninstall.sh | |
+ | |
+ # Remove the directory if it's not a symlink (as it should be | |
+ # a slave link now) | |
+ if [ ! -L /etc/ati ]; then | |
+ rm -Rf /etc/ati | |
+ fi | |
;; | |
abort-upgrade) | |
diff -Nru 10-4/packages/Ubuntu/dists/lucid/modaliases/fglrx_supported 10-4.fix/packages/Ubuntu/dists/lucid/modaliases/fglrx_supported | |
--- 10-4/packages/Ubuntu/dists/lucid/modaliases/fglrx_supported 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/lucid/modaliases/fglrx_supported 2010-04-29 02:22:00.000000000 +0200 | |
@@ -12,5 +12,5 @@ | |
echo "# Listing generated by fglrx_supported. Do not edit manually." | |
grep "0x" "$filename" | \ | |
- sed -n 's/FGL_ASIC_ID(0x\([0-9A-F]\{4\}\)),$/alias pci:v00001002d0000\1sv*sd*bc03sc*i* fglrx xorg-driver-fglrx/p' | \ | |
+ sed -n 's/FGL_ASIC_ID(0x\([0-9A-F]\{4\}\)),$/alias pci:v00001002d0000\1sv*sd*bc03sc*i* fglrx fglrx/p' | \ | |
sort | uniq | sed -e 's/^[ \t]*//' | |
diff -Nru 10-4/packages/Ubuntu/dists/lucid/rules 10-4.fix/packages/Ubuntu/dists/lucid/rules | |
--- 10-4/packages/Ubuntu/dists/lucid/rules 2010-04-15 18:44:17.000000000 +0200 | |
+++ 10-4.fix/packages/Ubuntu/dists/lucid/rules 2010-04-29 02:22:00.000000000 +0200 | |
@@ -21,7 +21,14 @@ | |
ARCH := x86 | |
XARCH := x750 | |
-ifeq ($(DEB_BUILD_ARCH),amd64) | |
+# This is a hack to make sure that | |
+# the blacklist file is available | |
+# early in the boot process when | |
+# /usr is on a separate partition. | |
+# See LP: #538071. | |
+PKG_LIBDIR := lib/fglrx | |
+ | |
+ifeq ($(DEB_HOST_ARCH),amd64) | |
LIBDIR := lib64 | |
ARCH := x86_64 | |
XARCH := $(XARCH)_64a | |
@@ -30,13 +37,6 @@ | |
# DEB_DH_SHLIBDEPS_ARGS_ALL="-Xlib32" | |
clean: | |
- rm -f debian/{10fglrx, \ | |
- dkms.conf, \ | |
- $(PKG_driver).install, \ | |
- $(PKG_driver_dev).install, \ | |
- $(PKG_control).install, \ | |
- overrides/$(PKG_driver), \ | |
- modaliases/fglrx-modules.alias.override} | |
dh clean | |
@@ -83,9 +83,9 @@ | |
dh build | |
-binary: | |
+binary-arch: | |
#Steps that we can't easily represent in debhelper files or .in files yet | |
-ifeq ($(DEB_BUILD_ARCH),amd64) | |
+ifeq ($(DEB_HOST_ARCH),amd64) | |
dh_install -p$(PKG_driver) "arch/x86/usr/X11R6/lib/libAMD*.so*" "$(DRIDIR32)" | |
dh_install -p$(PKG_driver) "arch/x86/usr/X11R6/lib/*.so*" "$(DRIDIR32)" | |
dh_installdirs -p$(PKG_driver) "$(DRIDIR32)" | |
@@ -99,6 +99,8 @@ | |
#they don't provide the symlink for us (starting at 8.699) | |
dh_link -p$(PKG_driver) $(DRIDIR32)/libatiuki.so.1.0 $(DRIDIR32)/libatiuki.so.1 | |
+else | |
+ dh_installdirs -p$(PKG_driver) | |
endif | |
dh_installdocs -p$(PKG_driver) usr/share/doc/fglrx/* --exclude ATI_LICENSE.TXT | |
dh_installinit -p$(PKG_driver) --name="atieventsd" --no-start --update-rcd-params="defaults 31" | |
@@ -119,21 +121,24 @@ | |
-type f | xargs chmod a+x | |
# Blacklist any other driver that udev may want to load instead of fglrx | |
- printf "blacklist radeon\n" > $(CURDIR)/debian/$(PKG_driver)/$(DRIDIR)/modprobe.conf | |
+ printf "blacklist radeon\n" > $(CURDIR)/debian/$(PKG_driver)/$(PKG_LIBDIR)/modprobe.conf | |
#ld.so.conf | |
echo "/$(DRIDIR)" > "$(CURDIR)/debian/$(PKG_driver)/$(DRIDIR)/ld.so.conf" | |
-ifeq ($(DEB_BUILD_ARCH),amd64) | |
+ifeq ($(DEB_HOST_ARCH),amd64) | |
echo "/$(DRIDIR32)" >> "$(CURDIR)/debian/$(PKG_driver)/$(DRIDIR)/ld.so.conf" | |
endif | |
#Run the normal stuff | |
- dh binary | |
+ dh binary-arch | |
+binary: binary-arch binary-indep ; | |
+ #Run the normal stuff | |
+ dh binary | |
override_dh_shlibdeps: | |
-ifeq ($(DEB_BUILD_ARCH),amd64) | |
+ifeq ($(DEB_HOST_ARCH),amd64) | |
dh_shlibdeps -l$(CURDIR)/debian/fglrx/usr/lib/fglrx:$(CURDIR)/debian/fglrx/usr/lib32/fglrx -Xlib32 | |
else | |
dh_shlibdeps -l$(CURDIR)/debian/fglrx/usr/lib/fglrx | |
EOT | |
;; | |
esac | |
# http://launchpadlibrarian.net/56199871/compat_alloc_cve-2010-3081.patch | |
case $VER in 10-9|*) grep -q COMPAT_ALLOC_USER_SPACE common/lib/modules/fglrx/build_mod/kcl_ioctl.c || patch -p1 << 'EOT' | |
diff -Nru 10-9.orig/common/lib/modules/fglrx/build_mod/2.6.x/Makefile 10-9/common/lib/modules/fglrx/build_mod/2.6.x/Makefile | |
--- 10-9.orig/common/lib/modules/fglrx/build_mod/2.6.x/Makefile 2010-09-01 16:05:31.000000000 +0200 | |
+++ 10-9/common/lib/modules/fglrx/build_mod/2.6.x/Makefile 2010-09-22 09:23:56.363622996 +0200 | |
@@ -67,6 +67,11 @@ | |
-DFGL_LINUX253P1_VMA_API \ | |
-DPAGE_ATTR_FIX=$(PAGE_ATTR_FIX) \ | |
+ | |
+ifeq ($(ARCH_COMPAT_ALLOC_USER_SPACE), 1) | |
+ EXTRA_CFLAGS +=-DARCH_COMPAT_ALLOC_USER_SPACE | |
+endif | |
+ | |
ifeq ($(KERNELRELEASE),) | |
# on first call from remote location we get into this path | |
# whilst on second call all is managed by the embedding kernel makefile | |
diff -Nru 10-9.orig/common/lib/modules/fglrx/build_mod/kcl_ioctl.c 10-9/common/lib/modules/fglrx/build_mod/kcl_ioctl.c | |
--- 10-9.orig/common/lib/modules/fglrx/build_mod/kcl_ioctl.c 2010-09-01 16:05:31.000000000 +0200 | |
+++ 10-9/common/lib/modules/fglrx/build_mod/kcl_ioctl.c 2010-09-22 09:23:56.363622996 +0200 | |
@@ -193,7 +193,22 @@ | |
*/ | |
void* ATI_API_CALL KCL_IOCTL_AllocUserSpace32(long size) | |
{ | |
- return compat_alloc_user_space(size); | |
+ void __user *ptr; | |
+ | |
+ /* If len occupies more than half of the entire compat space... */ | |
+ if (unlikely(((unsigned long) size) > (((compat_uptr_t)~0) >> 1))) | |
+ return NULL; | |
+ | |
+#ifdef ARCH_COMPAT_ALLOC_USER_SPACE | |
+ ptr = arch_compat_alloc_user_space(size); | |
+#else | |
+ ptr = compat_alloc_user_space(size); | |
+#endif | |
+ | |
+ if (unlikely(!access_ok(VERIFY_WRITE, ptr, size))) | |
+ return NULL; | |
+ | |
+ return ptr; | |
} | |
#endif // __x86_64__ | |
diff -Nru 10-9.orig/common/lib/modules/fglrx/build_mod/make.sh 10-9/common/lib/modules/fglrx/build_mod/make.sh | |
--- 10-9.orig/common/lib/modules/fglrx/build_mod/make.sh 2010-09-01 16:05:31.000000000 +0200 | |
+++ 10-9/common/lib/modules/fglrx/build_mod/make.sh 2010-09-22 09:23:56.363622996 +0200 | |
@@ -391,6 +391,26 @@ | |
fi | |
# ============================================================== | |
+# resolve if we have compat_alloc_user_space is in linux/compat.h | |
+ | |
+ARCH_COMPAT_ALLOC_USER_SPACE=0 | |
+ | |
+src_file=$linuxincludes/linux/compat.h | |
+if [ ! -e $src_file ]; | |
+then | |
+ echo "Warning:" >> $logfile | |
+ echo "kernel includes at $linuxincludes not found or incomplete" >> $logfile | |
+ echo "file: $src_file" >> $logfile | |
+ echo "" >> $logfile | |
+else | |
+ if grep -q compat_alloc_user_space $src_file; | |
+ then | |
+ ARCH_COMPAT_ALLOC_USER_SPACE=1 | |
+ echo "file $src_file says: ARCH_COMPAT_ALLOC_USER_SPACE=$ARCH_COMPAT_ALLOC_USER_SPACE" >> $logfile | |
+ fi | |
+fi | |
+ | |
+# ============================================================== | |
# break down OsRelease string into its components | |
major=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\1"/p` | |
@@ -429,6 +449,7 @@ | |
MODFLAGS="-DMODULE -DATI -DFGL -DPAGE_ATTR_FIX=$PAGE_ATTR_FIX $def_smp $def_modversions" \ | |
KVER=${uname_r} \ | |
PAGE_ATTR_FIX=$PAGE_ATTR_FIX \ | |
+ ARCH_COMPAT_ALLOC_USER_SPACE=$ARCH_COMPAT_ALLOC_USER_SPACE \ | |
> tlog 2>&1 | |
res=$? | |
EOT | |
;; | |
esac | |
# http://www.phoronix.com/forums/showpost.php?p=143495&postcount=4 | |
#case $VER in 10-9|*) grep -q unlocked_ioctl.*ip_firegl_ioctl common/lib/modules/fglrx/build_mod/firegl_public.c || patch -p1 << 'EOT' | |
case $VER in 10-9|*) grep -q HAVE_UNLOCKED_IOCTL common/lib/modules/fglrx/build_mod/firegl_public.c || patch -p1 << 'EOT' | |
diff -Nru 10-9.orig/common/lib/modules/fglrx/build_mod/firegl_public.c 10-9/common/lib/modules/fglrx/build_mod/firegl_public.c | |
--- 10-9.orig/common/lib/modules/fglrx/build_mod/firegl_public.c 2010-09-01 16:05:31.000000000 +0200 | |
+++ 10-9/common/lib/modules/fglrx/build_mod/firegl_public.c 2010-09-22 19:01:49.316024000 +0200 | |
@@ -320,7 +320,11 @@ | |
return firegl_release((KCL_IO_FILE_Handle)filp); | |
} | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) | |
+int ip_firegl_ioctl(struct file* filp, unsigned int cmd, unsigned long arg) | |
+#else | |
int ip_firegl_ioctl(struct inode* inode, struct file* filp, unsigned int cmd, unsigned long arg) | |
+#endif | |
{ | |
return firegl_ioctl((KCL_IO_FILE_Handle)filp, cmd, arg); | |
} | |
@@ -407,7 +411,11 @@ | |
#endif | |
open: ip_firegl_open, | |
release: ip_firegl_release, | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) | |
+ unlocked_ioctl: ip_firegl_ioctl, | |
+#else | |
ioctl: ip_firegl_ioctl, | |
+#endif | |
mmap: ip_firegl_mmap, | |
write: ip_firegl_write, | |
EOT | |
;; | |
esac | |
case $VER in 10-10|*) grep -q CFLAGS_MODULE common/lib/modules/fglrx/build_mod/make.sh || patch -p1 << 'EOT' | |
From b9f7a8dc0769bddfb2dff47a0903b51471ebf4ef Mon Sep 17 00:00:00 2001 | |
From: Alberto Milone <[email protected]> | |
Date: Fri, 24 Sep 2010 18:02:42 +0200 | |
Subject: [PATCH 2/2] Use CFLAGS_MODULE together with MODFLAGS in make.sh | |
CFLAGS_MODULE was introduced in 2.6.36 kernels while MODFLAGS was | |
dropped (commit 6588169d516560f68672e2928680b71c647b7806) therefore | |
by trying to use both modules we preserve compatibility with older | |
kernels and fix build issues with new kernels. | |
Signed-off-by: Alberto Milone <[email protected]> | |
[Adapted for Mandriva build / tmb] | |
Signed-off-by: Thomas Backlund <[email protected]> | |
[[email protected]: adapted for upstream changes] | |
Signed-off-by: Anssi Hannula <[email protected]> | |
--- | |
--- fglrx-8.771.orig/common/lib/modules/fglrx/build_mod/make.sh 2010-10-02 20:10:04.000000000 +0300 | |
+++ fglrx-8.771/common/lib/modules/fglrx/build_mod/make.sh 2010-10-02 20:20:07.462928823 +0300 | |
@@ -473,9 +473,12 @@ make clean | |
echo 'This is a dummy file created to suppress this warning: could not find /lib/modules/fglrx/build_mod/2.6.x/.libfglrx_ip.a.GCC4.cmd for /lib/modules/fglrx/build_mod/2.6.x/libfglrx_ip.a.GCC4' > .lib${MODULE}_ip.a.GCC${GCC_MAJOR}.cmd | |
+ MODFLAGS="-DMODULE -DATI -DFGL -DPAGE_ATTR_FIX=$PAGE_ATTR_FIX -DCOMPAT_ALLOC_USER_SPACE=$COMPAT_ALLOC_USER_SPACE $def_smp $def_modversions" | |
+ | |
make CC=${CC} \ | |
LIBIP_PREFIX=$(echo "$LIBIP_PREFIX" | sed -e 's|^\([^/]\)|../\1|') \ | |
- MODFLAGS="-DMODULE -DATI -DFGL -DPAGE_ATTR_FIX=$PAGE_ATTR_FIX -DCOMPAT_ALLOC_USER_SPACE=$COMPAT_ALLOC_USER_SPACE $def_smp $def_modversions" \ | |
+ MODFLAGS="$MODFLAGS" \ | |
+ CFLAGS_MODULE="$MODFLAGS" \ | |
KVER=${uname_r} \ | |
KDIR=${kernel_dir} \ | |
PAGE_ATTR_FIX=$PAGE_ATTR_FIX \ | |
EOT | |
;; | |
esac | |
# http://www.cosmicencounter.net/mirror/patch/sema_init.patch | |
case $VER in 10-10|*) grep -q init_MUTEX common/lib/modules/fglrx/build_mod/firegl_public.c && patch -p1 << 'EOT' | |
diff -Nru 10-10.orig/common/lib/modules/fglrx/build_mod/firegl_public.c 10-10/common/lib/modules/fglrx/build_mod/firegl_public.c | |
--- 10-10.orig/common/lib/modules/fglrx/build_mod/firegl_public.c 2010-10-19 23:41:18.000000000 +0200 | |
+++ 10-10/common/lib/modules/fglrx/build_mod/firegl_public.c 2010-11-23 12:01:53.578404281 +0100 | |
@@ -5094,7 +5094,7 @@ | |
unsigned int ATI_API_CALL KAS_Mutex_Initialize(void* hMutex) | |
{ | |
kasMutex_t* mutex_obj = (kasMutex_t*)hMutex; | |
- init_MUTEX(&(mutex_obj->mutex)); | |
+ sema_init(&(mutex_obj->mutex),1); | |
return 1; | |
} | |
EOT | |
;; | |
esac | |
# http://aur.archlinux.org/packages/catalyst/catalyst/2.6.38_console.patch | |
case $VER in 11-2|*) grep -q console_lock common/lib/modules/fglrx/build_mod/firegl_public.c||patch -p1 << 'EOT' | |
--- cat11.1/common/lib/modules/fglrx/build_mod/firegl_public.c 2011-01-17 15:59:26.000000000 +0100 | |
+++ cat11.1/common/lib/modules/fglrx/build_mod/firegl_public.c 2011-02-01 18:39:08.902218444 +0100 | |
@@ -848,7 +848,12 @@ | |
* happen much less frequent then without this workaround. | |
*/ | |
if (state == PM_EVENT_SUSPEND) | |
- acquire_console_sem(); | |
+ | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) | |
+ console_lock(); | |
+#else | |
+ acquire_console_sem(); | |
+#endif | |
if (firegl_cail_powerdown(privdev, state)) | |
ret = -EIO; | |
@@ -870,8 +875,13 @@ | |
} | |
if (state == PM_EVENT_SUSPEND) | |
- release_console_sem(); | |
- | |
+ | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) | |
+ console_unlock(); | |
+#else | |
+ release_console_sem(); | |
+#endif | |
+ | |
KCL_DEBUG_TRACEOUT(FN_FIREGL_ACPI, ret, NULL); | |
return ret; | |
@@ -894,7 +904,12 @@ | |
if (PMSG_EVENT(pdev->dev.power.power_state) == 0) return 0; | |
if (PMSG_EVENT(pdev->dev.power.power_state) == PM_EVENT_SUSPEND) | |
- acquire_console_sem(); | |
+ | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) | |
+ console_lock(); | |
+#else | |
+ acquire_console_sem(); | |
+#endif | |
#ifdef FIREGL_USWC_SUPPORT | |
// Restore the PAT after resuming from S3 or S4. | |
@@ -919,7 +934,12 @@ | |
firegl_cail_powerup(privdev); | |
if (PMSG_EVENT(pdev->dev.power.power_state) == PM_EVENT_SUSPEND) | |
- release_console_sem(); | |
+ | |
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) | |
+ console_unlock(); | |
+#else | |
+ release_console_sem(); | |
+#endif | |
PMSG_EVENT(pdev->dev.power.power_state) = 0; | |
KCL_DEBUG_TRACEOUT(FN_FIREGL_ACPI, 0, NULL); | |
EOT | |
;; | |
esac | |
# http://www.mindwerks.net/wp-content/uploads/2011/03/no_bkl.patch | |
case $VER in 11-3|*) grep -q lock_kernel common/lib/modules/fglrx/build_mod/firegl_public.c&&patch -p1 << 'EOT' | |
--- cat11.2/common/lib/modules/fglrx/build_mod/firegl_public.c 2011-02-02 19:39:49.000000000 +0100 | |
+++ cat11.2/common/lib/modules/fglrx/build_mod/firegl_public.c 2011-02-17 14:45:38.197914622 +0100 | |
@@ -1894,13 +1894,17 @@ | |
/** \brief Grab global kernel lock */ | |
void ATI_API_CALL KCL_GlobalKernelLock(void) | |
{ | |
+#ifdef CONFIG_LOCK_KERNEL || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) | |
lock_kernel(); | |
+#endif | |
} | |
/** \brief Release global kernel lock */ | |
void ATI_API_CALL KCL_GlobalKernelUnlock(void) | |
{ | |
+#ifdef CONFIG_LOCK_KERNEL || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) | |
unlock_kernel(); | |
+#endif | |
} | |
/*****************************************************************************/ | |
EOT | |
;; | |
esac | |
# http://www.mindwerks.net/wp-content/uploads/2011/03/2.6.39_bkl.patch | |
case $VER in 11-3|*) grep -q smp_lock.h common/lib/modules/fglrx/build_mod/drmP.h&&patch -p1 << 'EOT' | |
diff -uNr cat11.3/common/lib/modules/fglrx/build_mod/drmP.h build_mod2/drmP.h | |
--- cat11.3/common/lib/modules/fglrx/build_mod/drmP.h 2011-03-24 17:00:28.000000000 +0100 | |
+++ cat11.3/common/lib/modules/fglrx/build_mod2/drmP.h 2011-03-30 04:23:15.000000000 +0200 | |
@@ -57,7 +57,9 @@ | |
#include <linux/pci.h> | |
#include <linux/version.h> | |
#include <linux/sched.h> | |
+#ifdef CONFIG_LOCK_KERNEL || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) | |
#include <linux/smp_lock.h> /* For (un)lock_kernel */ | |
+#endif | |
#include <linux/mm.h> | |
#include <linux/pagemap.h> | |
#if defined(__alpha__) || defined(__powerpc__) | |
EOT | |
;; | |
esac | |
case $VER in 11-3|*) grep -q smp_lock.h common/lib/modules/fglrx/build_mod/firegl_public.c&&patch -p1 << 'EOT' | |
diff -uNr cat11.3/common/lib/modules/fglrx/build_mod/firegl_public.c build_mod2/firegl_public.c | |
--- cat11.3/common/lib/modules/fglrx/build_mod/firegl_public.c 2011-03-24 17:00:28.000000000 +0100 | |
+++ cat11.3/common/lib/modules/fglrx/build_mod2/firegl_public.c 2011-03-30 04:32:59.773179890 +0200 | |
@@ -114,7 +114,9 @@ | |
#include <linux/pci.h> | |
#include <linux/wait.h> | |
#include <linux/miscdevice.h> | |
+#ifdef CONFIG_LOCK_KERNEL || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) | |
#include <linux/smp_lock.h> | |
+#endif | |
// newer SuSE kernels need this | |
#include <linux/highmem.h> | |
@@ -1042,9 +1041,11 @@ | |
dev->pubdev.signature = FGL_DEVICE_SIGNATURE; | |
+#ifdef CONFIG_LOCK_KERNEL || LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38) | |
for (i = 0; i < __KE_MAX_SPINLOCKS; i++) | |
dev->spinlock[i] = SPIN_LOCK_UNLOCKED; | |
+#endif | |
for (i=0; i < __KE_MAX_SEMAPHORES; i++) | |
sema_init(&dev->struct_sem[i], 1); | |
EOT | |
;; | |
esac | |
# http://phoronix.com/forums/showthread.php?68922-Patch-to-compile-fgrlx-module-on-Linux-3-3-rc4-with-x86-32-bit-arch | |
case $VER in 12-2|*) grep -q __thread_has_fpu common/lib/modules/fglrx/build_mod/firegl_public.c||grep -q __save_init_fpu common/lib/modules/fglrx/build_mod/firegl_public.c&&patch -p1 << 'EOT' | |
fixed fgrlx compilation error on 32-bit x86 arch with kernel 3.3-rc4 due to commit: | |
https://github.com/torvalds/linux/commit/f94edacf998516ac9d849f7bc6949a703977a7f3 | |
later modified (in 3.3-rc5) by commit: | |
https://github.com/torvalds/linux/commit/7e16838d94b566a17b65231073d179bc04d590c8#diff-1 | |
and finally backported to kernel 3.2.8. | |
Signed-off-by: Gianluca Gennari <[email protected]> | |
--- | |
common/lib/modules/fglrx/build_mod/firegl_public.c | 6 ++++++ | |
1 files changed, 6 insertions(+), 0 deletions(-) | |
diff --git a/common/lib/modules/fglrx/build_mod/firegl_public.c b/common/lib/modules/fglrx/build_mod/firegl_public.c | |
index a56fff1..4ccf22d 100755 | |
--- a/common/lib/modules/fglrx/build_mod/firegl_public.c | |
+++ b/common/lib/modules/fglrx/build_mod/firegl_public.c | |
@@ -5799,10 +5799,16 @@ void ATI_API_CALL KCL_fpu_begin(void) | |
#ifdef CONFIG_X86_64 | |
kernel_fpu_begin(); | |
#else | |
+#ifndef TS_USEDFPU | |
+ preempt_disable(); | |
+ if (__thread_has_fpu(current)) | |
+ __save_init_fpu(current); | |
+#else | |
struct thread_info *cur_task = current_thread_info(); | |
preempt_disable(); | |
if (cur_task->status & TS_USEDFPU) | |
__save_init_fpu(cur_task->task); | |
+#endif | |
else | |
clts(); | |
#endif | |
-- | |
1.7.5.4 | |
EOT | |
;; | |
esac | |
if X -version 2>&1|grep -q -e "X Window System Version 7.1" -e "X Window System Version 7.2" -e "X Window System Version 1.3" -e "X Server 1.4" && [ "$VER" = "8.27.10" ]; then | |
perl -pi -e 's#(dapper|6.06\) X_DIR=)x690(; X_NAME=dapper;;)#${1}x710${2}#' packages/Ubuntu/ati-packager.sh | |
[ -d x710/usr/X11R6/bin ] || cp -r x690/usr/X11R6/bin/ x710/usr/X11R6/ | |
fi | |
# Ubuntu Edgy fix | |
[ "$(readlink /bin/sh)" = "dash" ] && sed -i 's/==/=/;s/pushd/cd/;s/popd//;s/echo\s\+-e/printf "%b\n"/' packages/Ubuntu/ati-packager.sh | |
# Ubuntu Karmic fix | |
[ -f /usr/lib/libstdc++.so.5 ] || ( [ "$DISTRIB_ID" = "Ubuntu" ] && sed -i 's/libstdc++5, //' packages/Ubuntu/dists/$DISTRIB_CODENAME/control ) | |
# Kernel 2.6.19 fix | |
case $VER in | |
8.22.5|8.23.7|8.24.8|8.25.18|8.26.18|8.27.10|8.28.8|8.29.6|8.30.3|8.31.5|8.32.5) | |
if [ ! -f /lib/modules/$(uname -r)/build/include/linux/config.h -a -f /lib/modules/$(uname -r)/build/include/linux/autoconf.h ]; then | |
sed -i s/config.h/autoconf.h/ common/lib/modules/fglrx/build_mod/firegl_public.c \ | |
common/lib/modules/fglrx/build_mod/drm.h \ | |
common/lib/modules/fglrx/build_mod/drmP.h | |
fi ;; | |
esac | |
# Kernel 2.6.32 fix | |
grep -q signal.h common/lib/modules/fglrx/build_mod/kcl_io.c || perl -pi -e 's|(#include <linux/poll.h>\n)|\1#include <linux/signal.h>\n|' common/lib/modules/fglrx/build_mod/kcl_io.c | |
# 9.12 hotfix | |
[ "$VER" = "8.682.2" ] && sed -i s/{PADDED_DRV_RELEASE}/{DRV_RELEASE}/ packages/Ubuntu/ati-packager.sh | |
# 10.3 OGL4 Preview | |
if [ "$VER" = "8.712.3.1" ]; then | |
sed -i s/{PADDED_DRV_RELEASE}/{DRV_RELEASE}/ packages/Ubuntu/ati-packager.sh | |
perl -pi -e 's|(usr/lib/libatiuki.so.1)$|\1\n\tdh_link -p\$\(PKG_driver\) usr/lib/libfglrx_gamma.so.1.0 usr/lib/libfglrx_gamma.so.1|' packages/Ubuntu/dists/$DISTRIB_CODENAME/rules | |
fi | |
# Empty signature hotfix | |
[ "$(cat common/etc/ati/signature 2>/dev/null)" = UNSIGNED ] && echo -n d164ca3e4bda6f7683e01cdf18df15c3:e94afc067af75f4fb2d12eeb79f225fae351fa0608f72e22cac029ed28ed21f7:b45dfe5f2db95f40b4817ae82db921a5b356ae0f79bf0a14b4d97aed2aea73a2b457ff0f2dbb5f40b3d87ae82aba27f1b205a90e79e30a12b1d879bb2aee73f4 > common/etc/ati/signature | |
[ "$PATCH" = "1" ] && case $VER in | |
8.28.8) | |
# only 2d working | |
sed -i 's/\xe8\x10\xc8\xfe\xff\x85\xc0\x7f\x31/\xe8\x10\xc8\xfe\xff\x85\xc0\x90\x90/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\xe8\xa2\xec\xfe\xff\x85\xc0\x7f\x23/\xe8\xa2\xec\xfe\xff\x85\xc0\x90\x90/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
;; | |
8.29.6) | |
# only 2d working | |
sed -i 's/\xe8\x20\xff\xfd\xff\x85\xc0\x7f\x31/\xe8\x20\xff\xfd\xff\x85\xc0\x90\x90/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\xe8\xb2\xe9\xfd\xff\x85\xc0\x7f\x23/\xe8\xb2\xe9\xfd\xff\x85\xc0\x90\x90/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
;; | |
8.32.5) | |
# only 2d working | |
sed -i 's/\xe8\x28\x01\xfe\xff\x85\xc0\x7f\x31/\xe8\x28\x01\xfe\xff\x85\xc0\x90\x90/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\xe8\x22\xe3\xfd\xff\x85\xc0\x7f\x23/\xe8\x22\xe3\xfd\xff\x85\xc0\x90\x90/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
;; | |
8.33.6) | |
sed -i 's/\xe8\x28\xff\xfd\xff\x85\xc0\x7f\x31/\xe8\x28\xff\xfd\xff\x85\xc0\x90\x90/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\xe8\x8a\xe1\xfd\xff\x85\xc0\x7f\x23/\xe8\x8a\xe1\xfd\xff\x85\xc0\x90\x90/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
sed -i 's/\x0f\x88\x6c\x09\x00\x00/\x90\xe9\x6c\x09\x00\x00/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\x0f\x88\x3f\x08\x00\x00/\x90\xe9\x3f\x08\x00\x00/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
;; | |
8.34.8) | |
sed -i 's/\xe8\xe0\xf9\xfd\xff\x85\xc0\x7f\x31/\xe8\xe0\xf9\xfd\xff\x85\xc0\x90\x90/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\xe8\xa2\xdc\xfd\xff\x85\xc0\x7f\x23/\xe8\xa2\xdc\xfd\xff\x85\xc0\x90\x90/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
sed -i 's/\x0f\x88\x3c\x09\x00\x00/\x90\xe9\x3c\x09\x00\x00/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\x0f\x88\x3b\x08\x00\x00/\x90\xe9\x3b\x08\x00\x00/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
;; | |
8.35.5) | |
sed -i 's/\xe8\xb4\xf4\xfd\xff\x85\xc0\x7f\x31/\xe8\xb4\xf4\xfd\xff\x85\xc0\x90\x90/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\xe8\x4a\xd9\xfd\xff\x85\xc0\x7f\x23/\xe8\x4a\xd9\xfd\xff\x85\xc0\x90\x90/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
sed -i 's/\x0f\x88\x3c\x09\x00\x00/\x90\xe9\x3c\x09\x00\x00/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\x0f\x88\x3b\x08\x00\x00/\x90\xe9\x3b\x08\x00\x00/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
;; | |
8.36.5) | |
sed -i 's/\xe8\xec\x4f\xfe\xff\x85\xc0\x7f\x31/\xe8\xec\x4f\xfe\xff\x85\xc0\x90\x90/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\xe8\xaa\x72\xfe\xff\x85\xc0\x7f\x23/\xe8\xaa\x72\xfe\xff\x85\xc0\x90\x90/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
sed -i 's/\x0f\x88\x3c\x09\x00\x00/\x90\xe9\x3c\x09\x00\x00/' x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
sed -i 's/\x0f\x88\x3b\x08\x00\x00/\x90\xe9\x3b\x08\x00\x00/' x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
;; | |
8.39.4|8.40.4) | |
DRIVER=x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so | |
for x in $(objdump -d $DRIVER|awk '/call/&&/Logo/{print "\\x"$2"\\x"$3"\\x"$4"\\x"$5"\\x"$6}'); do | |
sed -i "s/$x/\x90\x90\x90\x90\x90/g" $DRIVER | |
done | |
DRIVER=x710_64a/usr/X11R6/lib64/modules/drivers/fglrx_drv.so | |
for x in $(objdump -d $DRIVER|awk '/call/&&/Logo/{print "\\x"$2"\\x"$3"\\x"$4"\\x"$5"\\x"$6}'); do | |
sed -i "s/$x/\x90\x90\x90\x90\x90/g" $DRIVER | |
done | |
;; | |
esac | |
# install on sid even when xorg-server-core conflicts with fglrx-driver | |
if [ "$DISTRIB_ID" = "Ubuntu" ]; then | |
grep -A 14 "Package: xserver-xorg-core" /var/lib/dpkg/status|grep -q "^Conflicts:.*fglrx-driver.*" && perl -pi -e 's/Provides: fglrx-driver\n//' packages/Ubuntu/dists/$DISTRIB_CODENAME/control.template | |
fi | |
# X Server 1.4 hack | |
if X -version 2>&1|grep -q -e "X Server 1.4"; then | |
export XVERSION=1.4 | |
export XTYPE=X.Org | |
fi | |
perl -pi -e 's|^#(\s*dh_install.*modules/dri.*)|\1|' packages/Debian/dists/*/rules packages/Ubuntu/dists/*/rules 2>/dev/null | |
#perl -pi -e 's/(LD_PRELOAD= dh_shlibdeps).*/\1||true/' packages/Debian/dists/*/rules packages/Ubuntu/dists/*/rules 2>/dev/null | |
# disabled for 10-4 lucid | |
#perl -pi -e 's/(dh_shlibdeps).*/\1||true/' packages/Debian/dists/*/rules packages/Ubuntu/dists/*/rules 2>/dev/null | |
if [ "$UPDATE" = "1" ]; then | |
wget -qO- "http://phorogit.com/index.php?p=fglrx-packaging.git&dl=targz"|tar zxv | |
#wget -qO fglrx-packaging.zip "http://www.phorogit.com/index.php?p=fglrx-packaging.git&dl=zip" | |
#unzip fglrx-packaging.zip | |
#rm -f fglrx-packaging.zip | |
if [ -d fglrx-packaging ]; then | |
rm -rf packages | |
#mv -v fglrx-packaging packages | |
cp -rL fglrx-packaging packages | |
rm -rf fglrx-packaging | |
[ -d arch/x86/usr/lib ] || sed -i 's|^\(arch/#ARCH#/usr/#LIBDIR#\)|#\1|' packages/Ubuntu/dists/source/xorg-driver-fglrx.install.in | |
chmod +x packages/Ubuntu/ati-packager.sh | |
fi | |
fi | |
perl -pi -e 's/(missing_dependencies=).*/\1/' packages/Ubuntu/ati-packager.sh 2>/dev/null | |
perl -pi -e 's/linux-libc-dev/libc6-dev/' packages/Ubuntu/dists/*/control 2>/dev/null | |
# gamma hack | |
#if ! [ -f common/usr/X11R6/include/X11/extensions/fglrx_gamma.h ]; then | |
# hack_em=$(grep gamma -Rs packages/Ubuntu/*|grep package-name-doesnt-match-sonames|cut -f1 -d:) | |
# [ "$hack_em" ] && perl -pi -e "s/libfglrx-gamma1 //" $hack_em | |
# hack_em=$(grep gamma -lRs packages/Ubuntu/*) | |
# [ "$hack_em" ] && perl -pi -e "s/.*gamma.*\n//" $hack_em | |
# perl -pi -e 's|.*usr/X11R6/include.*\n||' packages/Ubuntu/dists/*/xorg-driver-fglrx-dev.install.in packages/Ubuntu/dists/*/fglrx-dev.install.in | |
#fi | |
# esut hack | |
if ! [ -f xpic/usr/X11R6/lib/modules/esut.a ]; then | |
perl -pi -e 's!#XARCH#/usr/X11R6/#LIBDIR#/modules/\*\.a.*\n!!' packages/Ubuntu/dists/*/xorg-driver-fglrx-dev.install.in packages/Ubuntu/dists/*/fglrx-dev.install.in | |
fi | |
if [ "$FORCE_XARCH" ]; then | |
sed -i "s/^\(XARCH.*:=\).*/\1 $FORCE_XARCH/;s/x690/$FORCE_XARCH/" packages/$DISTRIB_ID/dists/$DISTRIB_CODENAME/rules | |
sed -i "s/x690/$FORCE_XARCH/;s/x740/$FORCE_XARCH/" packages/$DISTRIB_ID/ati-packager.sh | |
touch ${FORCE_XARCH}/usr/X11R6/lib/modules/esut.a ${FORCE_XARCH}_64a/usr/X11R6/lib64/modules/esut.a | |
fi | |
[ "$FIREGL" = "1" ] && case $VER in | |
8-11) | |
patch -p1 <<'EOT' | |
diff -Nru 8-11.orig/common/lib/modules/fglrx/build_mod/firegl_public.c 8-11/common/lib/modules/fglrx/build_mod/firegl_public.c | |
--- 8-11.orig/common/lib/modules/fglrx/build_mod/firegl_public.c 2008-11-11 17:18:15.000000000 +0100 | |
+++ 8-11/common/lib/modules/fglrx/build_mod/firegl_public.c 2008-11-29 18:56:37.000000000 +0100 | |
@@ -294,7 +294,10 @@ | |
int ip_firegl_ioctl(struct inode* inode, struct file* filp, unsigned int cmd, unsigned long arg) | |
{ | |
- return firegl_ioctl((KCL_IO_FILE_Handle)filp, cmd, arg); | |
+ int ret; | |
+ ret = firegl_ioctl((KCL_IO_FILE_Handle)filp, cmd, arg); | |
+ if( cmd == 0x80146454 ) (*(char*)arg) = (*(char*)arg) | 0x10; | |
+ return ret; | |
} | |
int ip_firegl_mmap(struct file* filp, struct vm_area_struct* vma) | |
@@ -312,6 +315,7 @@ | |
long ret; | |
KCL_DEBUG_TRACE(FN_FIREGL_COMPAT_IOCTL, cmd, NULL); | |
ret = firegl_compat_ioctl((KCL_IO_FILE_Handle)filp, cmd, arg); | |
+ if( cmd == 0x80146454 ) (*(char*)arg) = (*(char*)arg) | 0x10; | |
KCL_DEBUG_TRACE(FN_FIREGL_COMPAT_IOCTL, ret, NULL); | |
return ret; | |
} | |
EOT | |
;; | |
8-12|*) | |
patch -p1 <<'EOT' | |
diff -Nru 8-12.orig/common/lib/modules/fglrx/build_mod/firegl_public.c 8-12/common/lib/modules/fglrx/build_mod/firegl_public.c | |
--- 8-12.orig/common/lib/modules/fglrx/build_mod/firegl_public.c 2008-12-04 23:56:18.000000000 +0100 | |
+++ 8-12/common/lib/modules/fglrx/build_mod/firegl_public.c 2008-12-11 07:05:12.000000000 +0100 | |
@@ -298,7 +298,10 @@ | |
int ip_firegl_ioctl(struct inode* inode, struct file* filp, unsigned int cmd, unsigned long arg) | |
{ | |
- return firegl_ioctl((KCL_IO_FILE_Handle)filp, cmd, arg); | |
+ int ret; | |
+ ret = firegl_ioctl((KCL_IO_FILE_Handle)filp, cmd, arg); | |
+ if( cmd == 0x80146454 ) (*(char*)arg) = (*(char*)arg) | 0x10; | |
+ return ret; | |
} | |
int ip_firegl_mmap(struct file* filp, struct vm_area_struct* vma) | |
@@ -316,6 +319,7 @@ | |
long ret; | |
KCL_DEBUG_TRACEIN(FN_FIREGL_COMPAT_IOCTL, cmd, NULL); | |
ret = firegl_compat_ioctl((KCL_IO_FILE_Handle)filp, cmd, arg); | |
+ if( cmd == 0x80146454 ) (*(char*)arg) = (*(char*)arg) | 0x10; | |
KCL_DEBUG_TRACEOUT(FN_FIREGL_COMPAT_IOCTL, ret, NULL); | |
return ret; | |
} | |
EOT | |
;; | |
*) echo Warning: No patch available for $VER >&2 | |
;; | |
esac | |
[ "$SHELL" = "1" ] && bash | |
LC_ALL= LC_CTYPE= LC_MESSAGES= LANG= bash ati-installer.sh $VER --buildpkg $DISTRIB_ID/$DISTRIB_CODENAME | |
cd .. | |
rm -rf fglrx-install | |
rm -f /lib/modules/$(uname -r)/kernel/drivers/char/drm/fglrx.*o | |
rm -f /lib/modules/$(uname -r)/misc/fglrx.*o | |
rm -f /lib/modules/$(uname -r)/volatile/fglrx.*o | |
rm -f /lib/modules/$(uname -r)/updates/dkms/fglrx.*o | |
rm -f fglrx-installer_$VER-1_$ARCH.changes | |
rm -rf /usr/src/modules/fglrx | |
rm -rf /etc/ati | |
OLD_FGLRX=$(dpkg -l|cut -f3 -d' '|grep -e fglrx -e libamdxvba) | |
[ -n "$OLD_FGLRX" ] && dpkg --purge $OLD_FGLRX | |
OLD_FGLRX=$(dpkg -l|cut -f3 -d' '|grep -e fglrx -e libamdxvba) | |
# use hack only if needed to fix packageing error | |
if [ -n "$OLD_FGLRX" ]; then | |
rm -f /usr/lib/fglrx/libGL.so.1.xlibmesa | |
dpkg --purge $OLD_FGLRX | |
fi | |
rm -rf /var/lib/dkms/fglrx | |
if [ -d /usr/lib/opengl ]; then | |
rm -rf /usr/lib/opengl | |
ldconfig | |
fi | |
CC=gcc-$(perl -pe '($_)=/gcc.[Vv]ersion\s(4\.\d|3\.\d|2\.\d+)/;' /proc/version) | |
if [ -e /usr/bin/$CC ]; then | |
CC=/usr/bin/$CC | |
else | |
unset CC | |
fi | |
# ati version hack | |
NEW_VER=$(strings "$DRIVER"|awk -F'"' '/^label/{print $2}'|cut -f2 -d-) | |
[ -n "$NEW_VER" ] && VER=$NEW_VER | |
# ERROR: printf wants now , instead of . ??? | |
#[ -n "$NEW_VER" ] && VER=`printf '%5.3f' "$NEW_VER" 2>/dev/null` | |
case $VER in | |
7-11) VER=8.433;; | |
8.88.8) VER=8.880;; | |
8.93.10) VER=8.930;; | |
esac | |
# bad hack | |
[ -n "$CC" ] && mount --bind $CC /usr/bin/gcc | |
# unfreeze | |
FROZEN=0 | |
[ -f /etc/frozen-rc.d ] && FROZEN=1 | |
[ -x /usr/sbin/unfreeze-rc.d ] && /usr/sbin/unfreeze-rc.d | |
if [ "$DISTRIB_ID" = "Ubuntu" ]; then | |
if [ "$DKMS" = "0" ]; then | |
dpkg --force-overwrite -i xorg-driver-fglrx_$VER*-*1_$ARCH.deb | |
ls fglrx-control_$VER*-*1_$ARCH.deb >/dev/null 2>&1 && dpkg -i fglrx-control_$VER*-*1_$ARCH.deb | |
ls fglrx-amdcccle_$VER*-*1_$ARCH.deb >/dev/null 2>&1 && dpkg -i fglrx-amdcccle_$VER*-*1_$ARCH.deb | |
dpkg -i fglrx-kernel-source_$VER*-*1_$ARCH.deb | |
CC=$CC m-a build fglrx-kernel-source | |
m-a install fglrx-kernel-source | |
elif ls fglrx_$VER*-*1_$ARCH.deb fglrx-amdcccle_$VER*-*1_$ARCH.deb>/dev/null 2>&1; then | |
dpkg -i fglrx_$VER*-*1_$ARCH.deb fglrx-amdcccle_$VER*-*1_$ARCH.deb | |
else | |
ls fglrx-kernel-source_$VER*-*1_$ARCH.deb >/dev/null 2>&1 && dpkg -i fglrx-kernel-source_$VER*-*1_$ARCH.deb | |
ls xorg-driver-fglrx_$VER*-*1_$ARCH.deb >/dev/null 2>&1 && dpkg --force-overwrite -i xorg-driver-fglrx_$VER*-*1_$ARCH.deb | |
ls fglrx-control_$VER*-*1_$ARCH.deb >/dev/null 2>&1 && dpkg -i fglrx-control_$VER*-*1_$ARCH.deb | |
#ls fglrx_$VER*-*1_$ARCH.deb >/dev/null 2>&1 && dpkg -i fglrx_$VER*-*1_$ARCH.deb | |
ls fglrx-amdcccle_$VER*-*1_$ARCH.deb >/dev/null 2>&1 && dpkg -i fglrx-amdcccle_$VER*-*1_$ARCH.deb | |
ls libamdxvba*_$VER*-*1_$ARCH.deb >/dev/null 2>&1 && dpkg -i libamdxvba*_$VER*-*1_$ARCH.deb | |
fi | |
else | |
dpkg -i fglrx-driver_$VER*-1_$ARCH.deb | |
ls fglrx-control*_$VER*-1_$ARCH.deb >/dev/null 2>&1 && dpkg -i fglrx-control*_$VER*-1_$ARCH.deb | |
ls fglrx-amdcccle_$VER*-1_$ARCH.deb >/dev/null 2>&1 && dpkg -i fglrx-amdcccle_$VER*-1_$ARCH.deb | |
dpkg -i fglrx-kernel-src_$VER*-1_$ARCH.deb | |
CC=$CC m-a build fglrx-kernel-src | |
m-a install fglrx-kernel-src | |
fi | |
if [ -x /etc/init.d/atieventsd ]; then | |
update-rc.d -f atieventsd remove >/dev/null 2>&1 | |
update-rc.d atieventsd start 20 2 3 4 5 . stop 01 0 1 6 . >/dev/null | |
fi | |
# restore freeze state | |
[ "$FROZEN" = "1" -a -x /usr/sbin/freeze-rc.d ] && /usr/sbin/freeze-rc.d | |
depmod -a | |
# initrd hotfix | |
update-initramfs -ut | |
# bad hack off | |
[ -n "$CC" ] && umount $CC | |
rm -rf /usr/src/modules/fglrx | |
rm -rf fglrx-install | |
rm -f /tmp/fglrx* /tmp/xorg-driver-fglrx* xorg-driver-fglrx* | |
rm -rf $(ls -d fglrx* libamdxvba* 2>/dev/null|grep -v fglrx-$VER) | |
if [ "$DKMS" = "0" ]; then | |
dpkg --purge fglrx-kernel-src fglrx-kernel-source >/dev/null 2>&1 | |
rm -rf fglrx-$VER | |
fi | |
if ! [ "$NO_X_KILL" = "1" ]; then | |
[ -x /etc/init.d/atieventsd ] && /etc/init.d/atieventsd stop | |
if [ "$INSTALLED" = "yes" ]; then | |
DM=$(cat /etc/X11/default-display-manager 2>/dev/null) | |
DM=$(basename $DM 2>/dev/null) | |
[ "$DM" = "kdm" -a -x /etc/init.d/kdm-kde4 ] && DM=kdm-kde4 | |
[ "$DM" = "kdm" -a -x /etc/init.d/kdm-trinity ] && DM=kdm-trinity | |
if [ -z "$DM" ]; then | |
if [ -x /etc/init.d/kdm ]; then | |
/etc/init.d/kdm stop | |
killall kdm >/dev/null 2>&1 | |
elif [ -x /etc/init.d/gdm ]; then | |
/etc/init.d/gdm stop | |
killall gdm >/dev/null 2>&1 | |
elif [ -x /etc/init.d/xdm ]; then | |
/etc/init.d/xdm stop | |
killall xdm >/dev/null 2>&1 | |
fi | |
else | |
if [ -x /etc/init.d/$DM ]; then | |
/etc/init.d/$DM stop | |
killall $DM >/dev/null 2>&1 | |
fi | |
fi | |
# use 5 s delay for upstart | |
[ -x /sbin/initctl ] && sleep 5 | |
killall -9 Xgl >/dev/null 2>&1 | |
killall -9 Xorg >/dev/null 2>&1 | |
fi | |
fi | |
# this hack would allow to unload radeon (with kms) but kills the vt | |
#lsmod|grep -q radeon && for x in $(ls /sys/class/vtconsole/*/bind 2>/dev/null); do echo 0 > $x; done | |
rmmod radeon ttm drm_kms_helper drm >/dev/null 2>&1 | |
rmmod fglrx >/dev/null 2>&1 | |
#rmmod agpgart >/dev/null 2>&1 | |
perl -pi -e 's/^[\s]*radeon/#radeon/' /etc/modules | |
perl -pi -e 's/^[\s]*fglrx/#fglrx/' /etc/modules | |
[ "$X_CONF_CREATE" = "1" ] && aticonfig --initial --nobackup | |
if [ ! -e /etc/X11/$X_CONF ]; then | |
echo 'Warning: aticonfig did not create /etc/X11/'$X_CONF' ("unsupported" card by driver), writing basic one!' >&2 | |
printf 'Section "Device"\n Identifier "Device0"\n Driver "fglrx"\nEndSection\n' > /etc/X11/$X_CONF | |
fi | |
if ! [ -e /etc/X11/$X_CONF.1st ]; then | |
cp /etc/X11/$X_CONF /etc/X11/$X_CONF.1st | |
fi | |
#fglrxconfig | |
[ "$X_CONF_CREATE" = "1" ] || perl -p -e 's/^[\s]*Load\s*"GLcore"/#\tLoad "GLcore"/; | |
s/^[\s]*#*[\s]*Load\s*"dri"/\tLoad "dri"/; | |
s/^[\s]*#*[\s]*Load\s*"glx"/\tLoad "glx"/; | |
s/^[\s]*#*[\s]*Option\s*"Composite".*/#\tOption\t"Composite"\t"1"/; | |
s/^[\s]*Driver\s*"radeon"/\tDriver "fglrx"/g; | |
s/^[\s]*Driver\s*"radeonhd"/\tDriver "fglrx"/g; | |
s/^[\s]*Driver\s*"fbdev"/\tDriver "fglrx"/g; | |
s/^[\s]*Driver\s*"vesa"/\tDriver "fglrx"/g; | |
s/^[\s]*Driver\s*"ati"/\tDriver "fglrx"/g; | |
s/DefaultColorDepth.*/DefaultColorDepth 24/; | |
s/DefaultDepth.*/DefaultDepth 24/; | |
s/^[\s]*Option\s*"sw_cursor"/\t#Option "sw_cursor"/; | |
s/^([\s]*Load\s*"extmod")/#\1\n\tSubSection "extmod"\n\t Option "omit xfree86-dga"\n\tEndSubSection/; | |
s/^.*UseInternalAGPGART.*\n?//g; | |
s/^.*VideoOverlay.*\n?//g; | |
s/^.*OpenGLOverlay.*\n?//g; | |
s/^.*MonitorLayout.*\n?//g; | |
s/^([\s]*Driver\s*"fglrx")/\1\n\tOption "UseInternalAGPGART" "yes"\n\t#Option "VideoOverlay" "on"\n\t#Option "OpenGLOverlay" "off"\n\tOption "MonitorLayout" "AUTO, AUTO"/g' \ | |
< /etc/X11/$X_CONF.1st > /etc/X11/$X_CONF | |
# BusID hack for 10-6 | |
[ "$X_CONF_CREATE" = "1" ] || perl -pi -e 's/^.*BusID.*\n?//g;s/^([\s]*Driver\s*"fglrx")/\1\n\tBusID "PCI:'`lspci -n|awk '$2 =/300:/{print $1}'|sed 's/\./:/;s/0\([0-9]\)/\1/g'|head -1`'"/' /etc/X11/$X_CONF | |
lsmod|grep -q agpgart && perl -pi -e 's/^([\s]*Option\s*"UseInternalAGPGART").*/\1 "no"/g' /etc/X11/$X_CONF | |
[ "$CPU" = "x86_64" ] && perl -pi -e 's/^([\s]*Option\s*"UseInternalAGPGART").*/\1 "no"/g' /etc/X11/$X_CONF | |
[ "$LAPTOP" ] && perl -pi -e 's/^([\s]*Option\s*"MonitorLayout").*/\1 "LVDS, AUTO"/g' /etc/X11/$X_CONF | |
case $VER in 8.16.20|8.18.6|8.18.8|8.19.10|8.20.8|8.21.7|8.30.3|8.31.5|8.33.6|8.34.8|8.35.5|8.36.5|8.37.6|8.38.6|8.38.7|8.39.4|8.40.4|8.41.7|8.42.3|8.433|8.443.1|8.452.1|8.455.2|8.471|8.476|8.493|8.493.1|8.501) RMML=1 ;; esac | |
[ "$RMML" = "1" ] && perl -pi -e 's/^.*Mode.ine.*\n?//g' /etc/X11/$X_CONF | |
[ "$AUTO_RES" = "1" ] && perl -pi -e 's/(Modes).*/\1/' /etc/X11/$X_CONF | |
[ "$AUTO_SYNC" = "1" ] && perl -pi -e 's/(\s*)(HorizSync|VertRefresh)/\1##\2/' /etc/X11/$X_CONF | |
# Ubuntu Edgy workaround (Composite 1 is default there!) | |
if which Xorg >/dev/null && [ -f /etc/X11/$X_CONF ]; then | |
if ! grep -q Extensions /etc/X11/$X_CONF; then | |
printf "%b\n" '\nSection "Extensions"' >> /etc/X11/$X_CONF | |
printf "%b\n" '\tOption\t"Composite"\t"1"' >> /etc/X11/$X_CONF | |
printf "%b\n" '#\tOption\t"RENDER"\t"1"' >> /etc/X11/$X_CONF | |
echo 'EndSection' >> /etc/X11/$X_CONF | |
fi | |
case $VER in 8.22.5|8.23.7|8.24.8|8.25.18|8.26.18|8.27.10|8.28.8|8.29.6|8.30.3|8.31.5|8.32.5|8.33.6|8.34.8|8.35.5|8.36.5|8.37.6|8.38.6|8.38.7|8.39.4|8.40.4|8.41.7) | |
perl -pi -e 's/^[\s]*#*[\s]*Option\s*"Composite".*/\tOption\t"Composite"\t"0"/' /etc/X11/$X_CONF | |
# fully disable AIGLX seems to help sometimes | |
perl -pi -e 's/^[\s]*#*[\s]*Option\s*"AIGLX".*//;s/(^[\s]*Section\s*"ServerLayout".*)/\1\n\tOption\t"AIGLX"\t"0"/' /etc/X11/$X_CONF | |
;; | |
*) | |
perl -pi -e 's/^[\s]*#*[\s]*Option\s*"Composite".*/\tOption\t"Composite"\t"1"/' /etc/X11/$X_CONF | |
perl -pi -e 's/^[\s]*#*[\s]*Option\s*"AIGLX".*//' /etc/X11/$X_CONF | |
;; | |
esac | |
# disable composite if -c option used | |
if [ "$COMPOSITE" = "0" ]; then | |
perl -pi -e 's/^[\s]*#*[\s]*Option\s*"Composite".*/\tOption\t"Composite"\t"0"/' /etc/X11/$X_CONF | |
perl -pi -e 's/^[\s]*#*[\s]*Option\s*"AIGLX".*//;s/(^[\s]*Section\s*"ServerLayout".*)/\1\n\tOption\t"AIGLX"\t"0"/' /etc/X11/$X_CONF | |
fi | |
fi | |
# added for 3.14.6 and above | |
if ! grep -q "/dev/shm tmpfs" /proc/mounts; then | |
perl -pi -e 's|\n?$|\n|' /etc/fstab | |
perl -pi -e 's|.*tmpfs.*[\n]*||' /etc/fstab | |
echo tmpfs /dev/shm tmpfs defaults 0 0 >> /etc/fstab | |
mount /dev/shm | |
fi | |
sync | |
# X Server 1.4 workaround | |
case $VER in | |
8.41.7|8.40.4|8.39.4|8.38.7|8.38.6|8.37.6|8.36.5|8.35.5|8.34.8|8.33.6|8.32.5|8.31.5|8.30.3|8.29.6|8.28.8|8.27.10|8.26.18|8.25.18|8.24.8|8.23.7|8.22.5) | |
if X -version 2>&1|grep -q -e "X Server 1.4"; then | |
DDM=$(cat /etc/X11/default-display-manager 2>/dev/null|sed 's|.*/||') | |
if [ -z "$DDM" ]; then | |
for DDM in kdm gdm xdm; do | |
[ -x /etc/init.d/$DDM ] && break | |
done | |
fi | |
case $DDM in | |
gdm) | |
if ! grep -q [[]server-Standard[]] /etc/gdm/gdm.conf; then | |
echo Warning: Using X Server 1.4 GDM workaround ! >&2 | |
echo [server-Standard] >> /etc/gdm/gdm.conf | |
echo command=/usr/bin/X -audit 0 -ignoreABI >> /etc/gdm/gdm.conf | |
fi | |
;; | |
kdm) | |
for k in 3 4; do | |
if [ -f /etc/kde$k/kdm/kdmrc ] && ! grep -qe -ignoreABI /etc/kde$k/kdm/kdmrc; then | |
echo "Warning: Using X Server 1.4 KDM (KDE$k) workaround !" >&2 | |
sed -i 's|^\(\s*ServerCmd=.*\)|\1 -ignoreABI|' /etc/kde$k/kdm/kdmrc | |
fi | |
done | |
;; | |
xdm) | |
if ! grep -qe -ignoreABI /etc/X11/xdm/Xservers; then | |
echo Warning: Using X Server 1.4 XDM workaround ! >&2 | |
sed -i 's|^\(\s*:.*\)|\1 -ignoreABI|' /etc/X11/xdm/Xservers | |
fi | |
;; | |
esac | |
fi | |
;; | |
esac | |
[ -x /etc/init.d/xsession ] && rm -f $(modinfo -F filename radeon) | |
if ! [ "$NO_X_KILL" = "1" ]; then | |
if [ "$INSTALLED" = "yes" ]; then | |
killall -9 Xorg >/dev/null 2>&1 | |
if [ -z "$DM" ]; then | |
if [ -x /etc/init.d/kdm ]; then | |
/etc/init.d/kdm start | |
elif [ -x /etc/init.d/gdm ]; then | |
/etc/init.d/gdm start | |
elif [ -x /etc/init.d/xdm ]; then | |
/etc/init.d/xdm start | |
fi | |
else | |
[ -x /etc/init.d/$DM ] && /etc/init.d/$DM start | |
fi | |
else | |
if [ -x /etc/init.d/xsession ]; then | |
nohup sh -c "/etc/init.d/xsession stop; sleep 5; rmmod radeon ttm drm_kms_helper drm fglrx 2>/dev/null; /etc/init.d/xsession start" | |
else | |
nohup sh -c "/etc/init.d/kdm stop; sleep 5; rmmod radeon ttm drm_kms_helper drm fglrx 2>/dev/null; /etc/init.d/kdm start" | |
fi | |
fi | |
fi | |
# check for kms usage - time to reboot | |
lsmod|grep -q drm_kms_helper && echo Hint: radeon kms driver is active, reboot to enable fglrx! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment